diff options
| author | Ginger Bill <bill@gingerbill.org> | 2017-08-27 14:42:19 +0100 |
|---|---|---|
| committer | Ginger Bill <bill@gingerbill.org> | 2017-08-27 14:42:19 +0100 |
| commit | 6707c8750e951ed6533ab3d4240314cf0bba7147 (patch) | |
| tree | 81c3da56ac6f26fd5e51beb8e0433a5c0fbf563f /src/ptr_set.cpp | |
| parent | e5502c13eef07b3cef9947c47b133555e33b8d85 (diff) | |
Import cycle checking
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; } |