aboutsummaryrefslogtreecommitdiff
path: root/src/ptr_set.cpp
diff options
context:
space:
mode:
authorGinger Bill <bill@gingerbill.org>2017-08-27 14:42:19 +0100
committerGinger Bill <bill@gingerbill.org>2017-08-27 14:42:19 +0100
commit6707c8750e951ed6533ab3d4240314cf0bba7147 (patch)
tree81c3da56ac6f26fd5e51beb8e0433a5c0fbf563f /src/ptr_set.cpp
parente5502c13eef07b3cef9947c47b133555e33b8d85 (diff)
Import cycle checking
Diffstat (limited to 'src/ptr_set.cpp')
-rw-r--r--src/ptr_set.cpp9
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;
}