diff options
author | Rémi Verschelde <rverschelde@gmail.com> | 2024-08-16 10:34:22 +0200 |
---|---|---|
committer | Rémi Verschelde <rverschelde@gmail.com> | 2024-08-16 10:34:22 +0200 |
commit | 91bf99216843a11b1dd3f2dedcd2bef39e93e7e8 (patch) | |
tree | c4a5151f48f61ae9faaa25c01028f06ddaf381a2 /core/templates | |
parent | e52cf866611afd8a8d66ec1ba8866efd26813bbf (diff) | |
parent | c1afe7dcdf98ff4f34a91e2290e86630df60c0dd (diff) | |
download | redot-engine-91bf99216843a11b1dd3f2dedcd2bef39e93e7e8.tar.gz |
Merge pull request #94353 from aaronp64/cowdata_insert
Improve `CowData::insert` performance
Diffstat (limited to 'core/templates')
-rw-r--r-- | core/templates/cowdata.h | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/core/templates/cowdata.h b/core/templates/cowdata.h index f22ae1f1d3..6f818956ea 100644 --- a/core/templates/cowdata.h +++ b/core/templates/cowdata.h @@ -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; } |