diff options
| author | gingerBill <gingerBill@users.noreply.github.com> | 2025-09-10 20:11:36 +0100 |
|---|---|---|
| committer | gingerBill <gingerBill@users.noreply.github.com> | 2025-09-10 20:11:36 +0100 |
| commit | bc36ea41706f9773b031e161cbb6ece6da3d4250 (patch) | |
| tree | b4331eaaf744a7f2fa72d7aaab28bb6d004006c6 /src/ptr_set.cpp | |
| parent | 228ddd69034d7711a6c21b129eaac1b05d71b4ff (diff) | |
Use macro instead of a C++ iterator - for speed
C++ iterators are bad.
Diffstat (limited to 'src/ptr_set.cpp')
| -rw-r--r-- | src/ptr_set.cpp | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/src/ptr_set.cpp b/src/ptr_set.cpp index 512a157d0..5b1d2cc19 100644 --- a/src/ptr_set.cpp +++ b/src/ptr_set.cpp @@ -16,6 +16,8 @@ template <typename T> gb_internal bool ptr_set_exists (PtrSet<T> *s, T ptr); template <typename T> gb_internal void ptr_set_remove (PtrSet<T> *s, T ptr); template <typename T> gb_internal void ptr_set_clear (PtrSet<T> *s); +#define FOR_PTR_SET(element, set_) for (auto *it = &(set_).keys[0], element = it ? *it : nullptr; (set_).keys != nullptr && it < &(set_).keys[(set_).capacity]; it++) if (element = *it, (*it != nullptr && *it != cast(void *)~(uintptr)(0ull))) + gb_internal gbAllocator ptr_set_allocator(void) { return heap_allocator(); } @@ -83,7 +85,7 @@ gb_internal gb_inline void ptr_set_grow(PtrSet<T> *old_set) { PtrSet<T> new_set = {}; ptr_set_init(&new_set, gb_max(old_set->capacity<<1, 16)); - for (T ptr : *old_set) { + FOR_PTR_SET(ptr, *old_set) { bool was_new = ptr_set_update(&new_set, ptr); GB_ASSERT(!was_new); } @@ -195,7 +197,7 @@ gb_internal gb_inline void ptr_set_clear(PtrSet<T> *s) { gb_zero_size(s->keys, s->capacity*gb_size_of(T)); } -template <typename T> +/*template <typename T> struct PtrSetIterator { PtrSet<T> *set; usize index; @@ -239,7 +241,6 @@ gb_internal PtrSetIterator<T> begin(PtrSet<T> &set) noexcept { template <typename T> gb_internal PtrSetIterator<T> end(PtrSet<T> &set) noexcept { return PtrSetIterator<T>{&set, set.capacity}; -} +}*/ -#define FOR_PTR_SET(index_, set_) for (usize index_ = 0; index_ < (set_).capacity; index_++) if ((set_).keys[index_] != nullptr && (set_).keys[index_] != cast(void *)~(uintptr)(0ull))
\ No newline at end of file |