From dbaf8f3e7a9a911b98bf00e64f3fa54d545887bc Mon Sep 17 00:00:00 2001 From: A Thousand Ships <96648715+AThousandShips@users.noreply.github.com> Date: Sun, 26 Jan 2025 15:36:14 +0100 Subject: [PATCH] [Core] Fix performance issues in some `CowData` methods These relied on `get` which does a bounds check each time on debug builds --- core/templates/cowdata.h | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/core/templates/cowdata.h b/core/templates/cowdata.h index d53548dd85..ac651a695a 100644 --- a/core/templates/cowdata.h +++ b/core/templates/cowdata.h @@ -436,20 +436,19 @@ Error CowData::_realloc(Size p_alloc_size) { template typename CowData::Size CowData::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 @@ -464,7 +463,7 @@ typename CowData::Size CowData::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::Size CowData::rfind(const T &p_val, Size p_from) const { template typename CowData::Size CowData::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++; } }