From 52af03a5a651f728db3706c7bc2f16bd6e7797dc Mon Sep 17 00:00:00 2001 From: Max Kellermann <mk@cm4all.com> Date: Thu, 1 Dec 2022 18:51:55 +0100 Subject: [PATCH] util/IntrusiveHashSet: implement remove_and_dispose_if() with constant_time_size --- src/util/IntrusiveHashSet.hxx | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/util/IntrusiveHashSet.hxx b/src/util/IntrusiveHashSet.hxx index a5bf5926d..d524bddd9 100644 --- a/src/util/IntrusiveHashSet.hxx +++ b/src/util/IntrusiveHashSet.hxx @@ -202,19 +202,15 @@ public: void remove_and_dispose_if(Predicate<const_reference> auto pred, Disposer<value_type> auto disposer) noexcept { - static_assert(!constant_time_size, "Not yet implemented"); - for (auto &bucket : table) - bucket.remove_and_dispose_if(pred, disposer); + counter -= bucket.remove_and_dispose_if(pred, disposer); } constexpr void remove_and_dispose_if(const auto &key, Predicate<const_reference> auto pred, Disposer<value_type> auto disposer) noexcept { - static_assert(!constant_time_size, "Not yet implemented"); - auto &bucket = GetBucket(key); - bucket.remove_and_dispose_if([this, &key, &pred](const auto &item){ + counter -= bucket.remove_and_dispose_if([this, &key, &pred](const auto &item){ return equal(key, item) && pred(item); }, disposer); }