From 0010e882a771fc834ea7902786f4b26e8860915c Mon Sep 17 00:00:00 2001 From: gingerBill Date: Fri, 5 Nov 2021 12:11:50 +0000 Subject: [PATCH] Make PtrSet match Map --- src/ptr_set.cpp | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/src/ptr_set.cpp b/src/ptr_set.cpp index 96372fa86..9a9f6d252 100644 --- a/src/ptr_set.cpp +++ b/src/ptr_set.cpp @@ -17,7 +17,7 @@ struct PtrSetEntry { template struct PtrSet { - Array hashes; + Slice hashes; Array> entries; }; @@ -36,7 +36,7 @@ template void ptr_set_init(PtrSet *s, gbAllocator a, isize capacity) { capacity = next_pow2_isize(gb_max(16, capacity)); - array_init(&s->hashes, a, capacity); + slice_init(&s->hashes, a, capacity); array_init(&s->entries, a, 0, capacity); for (isize i = 0; i < capacity; i++) { s->hashes.data[i] = PTR_SET_SENTINEL; @@ -45,7 +45,7 @@ void ptr_set_init(PtrSet *s, gbAllocator a, isize capacity) { template void ptr_set_destroy(PtrSet *s) { - array_free(&s->hashes); + slice_free(&s->hashes, s->entries.allocator); array_free(&s->entries); } @@ -93,12 +93,14 @@ template void ptr_set_rehash(PtrSet *s, isize new_count) { isize i, j; PtrSet ns = {}; - ptr_set_init(&ns, s->hashes.allocator); - array_resize(&ns.hashes, new_count); - array_reserve(&ns.entries, s->entries.count); + new_count = next_pow2_isize(new_count); + ns.hashes = s->hashes; + ns.entries.allocator = s->entries.allocator; + slice_resize(&ns.hashes, s->entries.allocator, new_count); for (i = 0; i < new_count; i++) { ns.hashes.data[i] = PTR_SET_SENTINEL; } + array_reserve(&ns.entries, ARRAY_GROW_FORMULA(s->entries.count)); for (i = 0; i < s->entries.count; i++) { PtrSetEntry *e = &s->entries.data[i]; PtrSetFindResult fr; @@ -117,7 +119,7 @@ void ptr_set_rehash(PtrSet *s, isize new_count) { ptr_set_grow(&ns); } } - ptr_set_destroy(s); + array_free(&s->entries); *s = ns; } @@ -208,6 +210,8 @@ void ptr_set_remove(PtrSet *s, T ptr) { template gb_inline void ptr_set_clear(PtrSet *s) { - array_clear(&s->hashes); array_clear(&s->entries); + for (isize i = 0; i < s->hashes.count; i++) { + s->hashes.data[i] = PTR_SET_SENTINEL; + } }