Merge pull request #94353 from aaronp64/cowdata_insert

Improve `CowData::insert` performance
This commit is contained in:
Rémi Verschelde 2024-08-16 10:34:22 +02:00
commit 91bf992168
No known key found for this signature in database
GPG Key ID: C3336907360768E1
1 changed files with 8 additions and 5 deletions

View File

@ -222,12 +222,15 @@ public:
}
Error insert(Size p_pos, const T &p_val) {
ERR_FAIL_INDEX_V(p_pos, size() + 1, ERR_INVALID_PARAMETER);
resize(size() + 1);
for (Size i = (size() - 1); i > p_pos; i--) {
set(i, get(i - 1));
Size new_size = size() + 1;
ERR_FAIL_INDEX_V(p_pos, new_size, ERR_INVALID_PARAMETER);
Error err = resize(new_size);
ERR_FAIL_COND_V(err, err);
T *p = ptrw();
for (Size i = new_size - 1; i > p_pos; i--) {
p[i] = p[i - 1];
}
set(p_pos, p_val);
p[p_pos] = p_val;
return OK;
}