From 376e5ef9125fcc7c17c2b96f14cb4b64b28e191a Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Wed, 5 Jan 2022 16:53:24 +0100 Subject: AK: Add HashMap::remove_all_matching(predicate) This removes all matching entries from a hash map in a single pass. --- AK/HashMap.h | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) (limited to 'AK') diff --git a/AK/HashMap.h b/AK/HashMap.h index 33251fde72..8a7d2f3160 100644 --- a/AK/HashMap.h +++ b/AK/HashMap.h @@ -74,6 +74,17 @@ public: return false; } + template + void remove_all_matching(TUnaryPredicate predicate) + { + for (auto it = begin(); it != end();) { + if (predicate(it->key, it->value)) + it = remove(it); + else + ++it; + } + } + using HashTableType = HashTable; using IteratorType = typename HashTableType::Iterator; using ConstIteratorType = typename HashTableType::ConstIterator; @@ -180,9 +191,9 @@ public: return find(value) != end(); } - void remove(IteratorType it) + IteratorType remove(IteratorType it) { - m_table.remove(it); + return m_table.remove(it); } V& ensure(const K& key) -- cgit v1.2.3