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);
 	}