Merge pull request #102059 from AThousandShips/fix_cowdata_performance

[4.4] [Core] Fix performance issues in some `CowData` methods
This commit is contained in:
Rémi Verschelde
2025-04-09 13:49:11 +02:00
committed by GitHub

View File

@ -436,20 +436,19 @@ Error CowData<T>::_realloc(Size p_alloc_size) {
template <typename T>
typename CowData<T>::Size CowData<T>::find(const T &p_val, Size p_from) const {
Size ret = -1;
if (p_from < 0 || size() == 0) {
return ret;
if (p_from < 0) {
return -1;
}
for (Size i = p_from; i < size(); i++) {
if (get(i) == p_val) {
ret = i;
break;
const Size s = size();
for (Size i = p_from; i < s; i++) {
if (_ptr[i] == p_val) {
return i;
}
}
return ret;
return -1;
}
template <typename T>
@ -464,7 +463,7 @@ typename CowData<T>::Size CowData<T>::rfind(const T &p_val, Size p_from) const {
}
for (Size i = p_from; i >= 0; i--) {
if (get(i) == p_val) {
if (_ptr[i] == p_val) {
return i;
}
}
@ -474,8 +473,9 @@ typename CowData<T>::Size CowData<T>::rfind(const T &p_val, Size p_from) const {
template <typename T>
typename CowData<T>::Size CowData<T>::count(const T &p_val) const {
Size amount = 0;
for (Size i = 0; i < size(); i++) {
if (get(i) == p_val) {
const Size s = size();
for (Size i = 0; i < s; i++) {
if (_ptr[i] == p_val) {
amount++;
}
}