From bf7203b3c82c414be5a2fe8afe355f89004377b6 Mon Sep 17 00:00:00 2001 From: Brian McKinnon Date: Sat, 2 May 2020 20:45:46 -0500 Subject: [PATCH] Renamed the thread-safe "contains" to if_contains. Add tests to parallel_flat_hash_map_mutex_test --- parallel_hashmap/phmap.h | 15 ++++++--------- tests/parallel_flat_hash_map_mutex_test.cc | 2 +- tests/parallel_flat_hash_map_test.cc | 1 - tests/parallel_hash_map_test.cc | 6 ++++-- tests/parallel_node_hash_map_test.cc | 1 - 5 files changed, 11 insertions(+), 14 deletions(-) diff --git a/parallel_hashmap/phmap.h b/parallel_hashmap/phmap.h index 406697a..b89393e 100644 --- a/parallel_hashmap/phmap.h +++ b/parallel_hashmap/phmap.h @@ -3393,15 +3393,11 @@ public: return Policy::value(&*it); } - template - bool contains(const key_arg& key) const { - return Base::contains(key); - } - template - bool contains(const key_arg& key, V& v) const { + std::enable_if_t::value, + bool> if_contains(const key_arg& key, V& v) const { typename Lockable::SharedLock m; - auto it = const_cast(this)->find(key, Base::hash(key), m); + auto it = const_cast(this)->find(key, this->hash(key), m); if (it == this->end()) return false; v = Policy::value(&*it); @@ -3409,9 +3405,10 @@ public: } template - bool if_contains(const key_arg& key, F&& f) const { + std::enable_if_t::value && std::is_invocable::value, + bool> if_contains(const key_arg& key, F&& f) const { typename Lockable::SharedLock m; - auto it = const_cast(this)->find(key, Base::hash(key), m); + auto it = const_cast(this)->find(key, this->hash(key), m); if (it == this->end()) return false; std::forward(f)(Policy::value(&*it)); diff --git a/tests/parallel_flat_hash_map_mutex_test.cc b/tests/parallel_flat_hash_map_mutex_test.cc index 9c20932..73dbf7b 100644 --- a/tests/parallel_flat_hash_map_mutex_test.cc +++ b/tests/parallel_flat_hash_map_mutex_test.cc @@ -9,4 +9,4 @@ #define THIS_EXTRA_TPL_PARAMS , 4, boost::upgrade_mutex #endif -#include "flat_hash_map_test.cc" +#include "parallel_hash_map_test.cc" diff --git a/tests/parallel_flat_hash_map_test.cc b/tests/parallel_flat_hash_map_test.cc index 500bc3c..a1a8149 100644 --- a/tests/parallel_flat_hash_map_test.cc +++ b/tests/parallel_flat_hash_map_test.cc @@ -1,5 +1,4 @@ #define THIS_HASH_MAP parallel_flat_hash_map #define THIS_TEST_NAME ParallelFlatHashMap -#include "flat_hash_map_test.cc" #include "parallel_hash_map_test.cc" diff --git a/tests/parallel_hash_map_test.cc b/tests/parallel_hash_map_test.cc index b729118..61de5d3 100644 --- a/tests/parallel_hash_map_test.cc +++ b/tests/parallel_hash_map_test.cc @@ -3,6 +3,8 @@ #define THIS_TEST_NAME ParallelFlatHashMap #endif +#include "flat_hash_map_test.cc" + namespace phmap { namespace container_internal { namespace { @@ -12,10 +14,10 @@ TEST(THIS_TEST_NAME, ThreadSafeContains) { // Test that the nodes have the proper API. ThisMap m = { {1, 7}, {2, 9} }; auto val = 0; - EXPECT_TRUE(m.contains(1, val)); + EXPECT_TRUE(m.if_contains(1, val)); EXPECT_EQ(val, 7); - EXPECT_FALSE(m.contains(3, val)); + EXPECT_FALSE(m.if_contains(3, val)); #if __cplusplus > 199711L auto func = [&val](int& v) { val = v; }; diff --git a/tests/parallel_node_hash_map_test.cc b/tests/parallel_node_hash_map_test.cc index ea51222..f589d69 100644 --- a/tests/parallel_node_hash_map_test.cc +++ b/tests/parallel_node_hash_map_test.cc @@ -1,5 +1,4 @@ #define THIS_HASH_MAP parallel_node_hash_map #define THIS_TEST_NAME ParallelNodeHashMap -#include "flat_hash_map_test.cc" #include "parallel_hash_map_test.cc"