From 5f21ebf42e670470b315a992b8a60f7c2e2bbbeb Mon Sep 17 00:00:00 2001 From: Steven Le Rouzic Date: Tue, 14 Jan 2025 22:50:34 +0100 Subject: Add remove element to hash_set --- asl/hash_set.hpp | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) (limited to 'asl/hash_set.hpp') diff --git a/asl/hash_set.hpp b/asl/hash_set.hpp index 22e47e0..fa95a96 100644 --- a/asl/hash_set.hpp +++ b/asl/hash_set.hpp @@ -114,6 +114,8 @@ class hash_set isize_t find_slot(const T& value) const { + if (m_size <= 0) { return -1; }; + ASL_ASSERT(is_pow2(m_capacity)); const isize_t capacity_mask = m_capacity - 1; @@ -246,9 +248,22 @@ public: bool contains(const T& value) const { - if (m_size == 0) { return false; } return find_slot(value) >= 0; } + + // @Todo Remove with something comparable, but not equal? How to hash? + // @Todo Same with contains + bool remove(const T& value) + { + isize_t slot = find_slot(value); + if (slot < 0) { return false; } + + m_values[slot].destroy_unsafe(); // NOLINT(*-pointer-arithmetic) + m_tags[slot] = kTombstone; // NOLINT(*-pointer-arithmetic) + m_size -= 1; + + return true; + } }; } // namespace asl -- cgit