[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:
@ -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++;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user