瀏覽代碼

Merge pull request #94353 from aaronp64/cowdata_insert

Improve `CowData::insert` performance
Rémi Verschelde 1 年之前
父節點
當前提交
91bf992168
共有 1 個文件被更改,包括 8 次插入5 次删除
  1. 8 5
      core/templates/cowdata.h

+ 8 - 5
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;
 	}