diff options
author | kleonc <9283098+kleonc@users.noreply.github.com> | 2022-08-08 20:54:17 +0200 |
---|---|---|
committer | kleonc <9283098+kleonc@users.noreply.github.com> | 2023-05-08 15:22:58 +0200 |
commit | 0b944e1a68e60f4847f0614ac48ef27f21567fb2 (patch) | |
tree | ec3136e26b34176e0d5e16366fb88132ee087538 | |
parent | 491a437df51192f76ac19cee1ba2001365697cc4 (diff) | |
download | redot-engine-0b944e1a68e60f4847f0614ac48ef27f21567fb2.tar.gz |
Make `LocalVector` respect its `tight` template parameter
-rw-r--r-- | core/templates/local_vector.h | 15 |
1 files changed, 3 insertions, 12 deletions
diff --git a/core/templates/local_vector.h b/core/templates/local_vector.h index 5311a94987..22db3a5744 100644 --- a/core/templates/local_vector.h +++ b/core/templates/local_vector.h @@ -59,11 +59,7 @@ public: _FORCE_INLINE_ void push_back(T p_elem) { if (unlikely(count == capacity)) { - if (capacity == 0) { - capacity = 1; - } else { - capacity <<= 1; - } + capacity = tight ? (capacity + 1) : MAX((U)1, capacity << 1); data = (T *)memrealloc(data, capacity * sizeof(T)); CRASH_COND_MSG(!data, "Out of memory"); } @@ -87,7 +83,7 @@ public: } /// Removes the item copying the last value into the position of the one to - /// remove. It's generally faster than `remove`. + /// remove. It's generally faster than `remove_at`. void remove_at_unordered(U p_index) { ERR_FAIL_INDEX(p_index, count); count--; @@ -143,12 +139,7 @@ public: count = p_size; } else if (p_size > count) { if (unlikely(p_size > capacity)) { - if (capacity == 0) { - capacity = 1; - } - while (capacity < p_size) { - capacity <<= 1; - } + capacity = tight ? p_size : nearest_power_of_2_templated(p_size); data = (T *)memrealloc(data, capacity * sizeof(T)); CRASH_COND_MSG(!data, "Out of memory"); } |