diff options
Diffstat (limited to 'src/ptr_set.cpp')
| -rw-r--r-- | src/ptr_set.cpp | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/src/ptr_set.cpp b/src/ptr_set.cpp index 1eecee33e..7f1c12c17 100644 --- a/src/ptr_set.cpp +++ b/src/ptr_set.cpp @@ -19,7 +19,7 @@ struct PtrSet { template <typename T> void ptr_set_init (PtrSet<T> *s, gbAllocator a, isize capacity = 16); template <typename T> void ptr_set_destroy (PtrSet<T> *s); -template <typename T> void ptr_set_add (PtrSet<T> *s, T ptr); +template <typename T> bool ptr_set_add (PtrSet<T> *s, T ptr); template <typename T> bool ptr_set_exists (PtrSet<T> *s, T ptr); template <typename T> void ptr_set_remove (PtrSet<T> *s, T ptr); template <typename T> void ptr_set_clear (PtrSet<T> *s); @@ -134,8 +134,10 @@ gb_inline bool ptr_set_exists(PtrSet<T> *s, T ptr) { return index >= 0; } +// Returns true if it already exists template <typename T> -void ptr_set_add(PtrSet<T> *s, T ptr) { +bool ptr_set_add(PtrSet<T> *s, T ptr) { + bool exists = false; isize index; PtrSetFindResult fr; if (s->hashes.count == 0) { @@ -144,6 +146,7 @@ void ptr_set_add(PtrSet<T> *s, T ptr) { fr = ptr_set__find(s, ptr); if (fr.entry_index >= 0) { index = fr.entry_index; + exists = true; } else { index = ptr_set__add_entry(s, ptr); if (fr.entry_prev >= 0) { @@ -155,6 +158,8 @@ void ptr_set_add(PtrSet<T> *s, T ptr) { if (ptr_set__full(s)) { ptr_set_grow(s); } + + return exists; } |