Browse Source

Merge pull request #93276 from mashumafi/avoid-vec-copy

Avoid unnecessary copy-on-write Vector/Array
Rémi Verschelde 3 months ago
parent
commit
2b037e8989
2 changed files with 4 additions and 3 deletions
  1. 3 2
      core/templates/vector.h
  2. 1 1
      core/variant/array.cpp

+ 3 - 2
core/templates/vector.h

@@ -315,8 +315,8 @@ public:
 
 template <typename T>
 void Vector<T>::reverse() {
+	T *p = ptrw();
 	for (Size i = 0; i < size() / 2; i++) {
-		T *p = ptrw();
 		SWAP(p[i], p[size() - i - 1]);
 	}
 }
@@ -329,8 +329,9 @@ void Vector<T>::append_array(Vector<T> p_other) {
 	}
 	const Size bs = size();
 	resize(bs + ds);
+	T *p = ptrw();
 	for (Size i = 0; i < ds; ++i) {
-		ptrw()[bs + i] = p_other[i];
+		p[bs + i] = p_other[i];
 	}
 }
 

+ 1 - 1
core/variant/array.cpp

@@ -738,7 +738,7 @@ int Array::bsearch(const Variant &p_value, bool p_before) const {
 	Variant value = p_value;
 	ERR_FAIL_COND_V(!_p->typed.validate(value, "binary search"), -1);
 	SearchArray<Variant, _ArrayVariantSort> avs;
-	return avs.bisect(_p->array.ptrw(), _p->array.size(), value, p_before);
+	return avs.bisect(_p->array.ptr(), _p->array.size(), value, p_before);
 }
 
 int Array::bsearch_custom(const Variant &p_value, const Callable &p_callable, bool p_before) const {