[Core] Fix performance issues in some CowData methods

These relied on `get` which does a bounds check each time on debug
builds
This commit is contained in:
A Thousand Ships
2025-01-26 15:36:14 +01:00
parent daa4b058ee
commit dbaf8f3e7a

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