From 749a283bf3e8a154ab468c737c3006535fc20073 Mon Sep 17 00:00:00 2001 From: Brian McKinnon Date: Thu, 19 Oct 2023 13:26:47 -0500 Subject: [PATCH] Optimization for parallel hash map erase_if function. Deals only with inner set iterators to avoid overhead of using parallel map iterators. Silence a constexpr warning in allocator test --- parallel_hashmap/phmap.h | 11 +++++++---- tests/raw_hash_set_allocator_test.cc | 2 +- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/parallel_hashmap/phmap.h b/parallel_hashmap/phmap.h index 2f49ec3..611704f 100644 --- a/parallel_hashmap/phmap.h +++ b/parallel_hashmap/phmap.h @@ -3301,12 +3301,15 @@ public: #if __cplusplus >= 201703L static_assert(std::is_invocable::value); #endif - L m; - auto it = this->template find(key, this->hash(key), m); - if (it == this->end()) return false; + auto hashval = this->hash(key); + Inner& inner = sets_[subidx(hashval)]; + auto& set = inner.set_; + L m(inner); + auto it = set.find(key, hashval); + if (it == set.end()) return false; if (std::forward(f)(const_cast(*it))) { - this->erase(it); + set._erase(it); return true; } return false; diff --git a/tests/raw_hash_set_allocator_test.cc b/tests/raw_hash_set_allocator_test.cc index 5930377..b61303e 100644 --- a/tests/raw_hash_set_allocator_test.cc +++ b/tests/raw_hash_set_allocator_test.cc @@ -67,7 +67,7 @@ class CheckedAlloc { std::integral_constant; CheckedAlloc select_on_container_copy_construction() const { - if (Spec & kPropagateOnCopy) return *this; + PHMAP_IF_CONSTEXPR (Spec & kPropagateOnCopy) return *this; return {}; }