Incorporated MultiLevelHashMap<RCU> into map MT-test
authorkhizmax <libcds.dev@gmail.com>
Thu, 8 Oct 2015 20:39:08 +0000 (23:39 +0300)
committerkhizmax <libcds.dev@gmail.com>
Thu, 8 Oct 2015 20:39:08 +0000 (23:39 +0300)
Adapted Map_DelOdd MT-test for MultiLevelHashMap

20 files changed:
projects/Win/vc12/unit-map-delodd.vcxproj
projects/Win/vc14/unit-map-delodd.vcxproj
projects/source.unit.map.mk
tests/data/test-debug.conf
tests/data/test-express.conf
tests/data/test.conf
tests/unit/map2/CMakeLists.txt
tests/unit/map2/map_defs.h
tests/unit/map2/map_delodd.cpp
tests/unit/map2/map_delodd.h
tests/unit/map2/map_delodd_multilevelhashmap.cpp [new file with mode: 0644]
tests/unit/map2/map_type_bronson_avltree.h
tests/unit/map2/map_type_cuckoo.h
tests/unit/map2/map_type_ellen_bintree.h
tests/unit/map2/map_type_michael.h
tests/unit/map2/map_type_multilevel_hashmap.h
tests/unit/map2/map_type_skip_list.h
tests/unit/map2/map_type_split_list.h
tests/unit/map2/std_hash_map.h
tests/unit/map2/std_map.h

index 4ceb02afce897ce749c487b8a6da9c149a8661d1..abce74e3ff0bcde4af32329aebe86886ade54fa6 100644 (file)
@@ -56,6 +56,7 @@
     <ClCompile Include="..\..\..\tests\unit\map2\map_delodd_michael.cpp">\r
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">false</ExcludedFromBuild>\r
     </ClCompile>\r
+    <ClCompile Include="..\..\..\tests\unit\map2\map_delodd_multilevelhashmap.cpp" />\r
     <ClCompile Include="..\..\..\tests\unit\map2\map_delodd_skip.cpp">\r
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">false</ExcludedFromBuild>\r
     </ClCompile>\r
index a0ced1064cbbd41438dddc0f1d2d327b8a769449..0f2ebc7bc7276dd4b973aae84280d4a6c6656cf5 100644 (file)
@@ -64,6 +64,7 @@
     <ClCompile Include="..\..\..\tests\unit\map2\map_delodd_michael.cpp">\r
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">false</ExcludedFromBuild>\r
     </ClCompile>\r
+    <ClCompile Include="..\..\..\tests\unit\map2\map_delodd_multilevelhashmap.cpp" />\r
     <ClCompile Include="..\..\..\tests\unit\map2\map_delodd_skip.cpp">\r
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">false</ExcludedFromBuild>\r
     </ClCompile>\r
index 5a212d4e42b14bd2f2c70f2ea1c12fc84a300bdf..8367de57dcdc160bc6d49199a716f4828c7dd9c5 100644 (file)
@@ -88,9 +88,10 @@ CDSUNIT_MAP_SOURCES := \
     tests/unit/map2/map_insdelfind_striped.cpp \
     tests/unit/map2/map_insdelfind_std.cpp \
     tests/unit/map2/map_delodd.cpp \
-    tests/unit/map2/map_delodd_michael.cpp \
     tests/unit/map2/map_delodd_bronsonavltree.cpp \
+    tests/unit/map2/map_delodd_cuckoo.cpp \
     tests/unit/map2/map_delodd_ellentree.cpp \
-    tests/unit/map2/map_delodd_split.cpp \
+    tests/unit/map2/map_delodd_michael.cpp \
+    tests/unit/map2/map_delodd_multilevelhashmap.cpp \
     tests/unit/map2/map_delodd_skip.cpp \
-    tests/unit/map2/map_delodd_cuckoo.cpp \
+    tests/unit/map2/map_delodd_split.cpp \
index 85f686561b4badd607678a5e93685c7352ef3a9a..f7b05d65cf6c3d18de9b886dfed1f2d7bab22ea6 100644 (file)
@@ -271,3 +271,6 @@ CuckooInitialSize=256
 CuckooProbesetSize=8\r
 # 0 - use default\r
 CuckooProbesetThreshold=0 \r
+# *** MultiLevelHashMap properties\r
+MultiLevelMapHeadBits=8\r
+MultiLevelMapArrayBits=4\r
index 349ff184aa29c83bdbb42e07f5e83643036dc83e..3fd1f3cd765faf47f2daf01d11faf37c9d24a36f 100644 (file)
@@ -269,3 +269,6 @@ CuckooInitialSize=1024
 CuckooProbesetSize=16\r
 # 0 - use default\r
 CuckooProbesetThreshold=0 \r
+# *** MultiLevelHashMap properties\r
+MultiLevelMapHeadBits=8\r
+MultiLevelMapArrayBits=4\r
index 5dcb208664532cd91710130beaec4f9ca82158e9..257a7def606753bd60d3f4d1f7ca94d640fa391a 100644 (file)
@@ -265,3 +265,6 @@ CuckooInitialSize=1024
 CuckooProbesetSize=16\r
 # 0 - use default\r
 CuckooProbesetThreshold=0 \r
+# *** MultiLevelHashMap properties\r
+MultiLevelMapHeadBits=10\r
+MultiLevelMapArrayBits=4\r
index 319c86ab1f95d4c83d93ed23c488527e9eaaeff5..454721ae7afe13ae667a1ce1a2d84f0602cd044d 100644 (file)
@@ -89,12 +89,13 @@ set(CDSUNIT_MAP_SOURCES
     map_insdelfind_striped.cpp
     map_insdelfind_std.cpp
     map_delodd.cpp
-    map_delodd_michael.cpp
     map_delodd_bronsonavltree.cpp
+    map_delodd_cuckoo.cpp
     map_delodd_ellentree.cpp
+    map_delodd_michael.cpp
+    map_delodd_multilevelhashmap.cpp
     map_delodd_split.cpp
     map_delodd_skip.cpp
-    map_delodd_cuckoo.cpp
 )
 
 add_executable(${PACKAGE_NAME} ${CDSUNIT_MAP_SOURCES} $<TARGET_OBJECTS:${TEST_COMMON}>)
index 64eb8603bc948bda2de131b0dd38c3581739af91..1d30ad29c8527fbd1e5b4b970dac4b9119c65f6b 100644 (file)
 // MultiLevelHashMap
 
 #undef CDSUNIT_DECLARE_MultiLevelHashMap64
+#undef CDSUNIT_DECLARE_MultiLevelHashMap64_RCU_Signal
+
 #if CDS_BUILD_BITS == 64
+#   ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+#       define CDSUNIT_DECLARE_MultiLevelHashMap64_RCU_Signal \
+            TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_shb_city64) \
+            TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_shb_city64_stat) \
+            TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_sht_city64) \
+            TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_sht_city64_stat) \
+            TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_shb_city128) \
+            TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_shb_city128_stat) \
+            TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_sht_city128) \
+            TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_sht_city128_stat) \
+
+#   else
+#       define CDSUNIT_DECLARE_MultiLevelHashMap64_RCU_Signal
+#   endif
+
 #   define CDSUNIT_DECLARE_MultiLevelHashMap64  \
         TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_hp_city64) \
         TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_hp_city64_stat) \
         TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_dhp_city64) \
         TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_dhp_city64_stat) \
+        TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_gpi_city64) \
+        TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_gpi_city64_stat) \
+        TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_gpb_city64) \
+        TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_gpb_city64_stat) \
+        TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_gpt_city64) \
+        TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_gpt_city64_stat) \
         TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_hp_city128) \
         TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_hp_city128_stat) \
         TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_dhp_city128) \
-        TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_dhp_city128_stat)
+        TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_dhp_city128_stat) \
+        TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_gpi_city128) \
+        TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_gpi_city128_stat) \
+        TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_gpb_city128) \
+        TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_gpb_city128_stat) \
+        TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_gpt_city128) \
+        TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_gpt_city128_stat) \
+        CDSUNIT_DECLARE_MultiLevelHashMap64_RCU_Signal
+
 #else
 #   define CDSUNIT_DECLARE_MultiLevelHashMap64
 #endif
 
 #undef CDSUNIT_DECLARE_MultiLevelHashMap
-#define CDSUNIT_DECLARE_MultiLevelHashMap  \
+#undef CDSUNIT_DECLARE_MultiLevelHashMap_hash
+#undef CDSUNIT_DECLARE_MultiLevelHashMap_hash_RCU_Signal
+#undef CDSUNIT_DECLARE_MultiLevelHashMap_stdhash
+#undef CDSUNIT_DECLARE_MultiLevelHashMap_stdhash_RCU_Signal
+
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+#   define CDSUNIT_DECLARE_MultiLevelHashMap_stdhash_RCU_Signal \
+    TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_shb_stdhash) \
+    TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_shb_stdhash_stat) \
+    TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_sht_stdhash) \
+    TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_sht_stdhash_stat) \
+
+#   define CDSUNIT_DECLARE_MultiLevelHashMap_hash_RCU_Signal \
+    TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_shb_md5) \
+    TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_shb_md5_stat) \
+    TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_sht_md5) \
+    TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_sht_md5_stat) \
+    TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_shb_sha256) \
+    TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_shb_sha256_stat) \
+    TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_sht_sha256) \
+    TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_sht_sha256_stat) \
+
+#else
+#   define CDSUNIT_DECLARE_MultiLevelHashMap_stdhash_RCU_Signal
+#   define CDSUNIT_DECLARE_MultiLevelHashMap_hash_RCU_Signal
+#endif
+
+#define CDSUNIT_DECLARE_MultiLevelHashMap_stdhash  \
     TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_hp_stdhash) \
     TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_hp_stdhash_stat) \
     TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_dhp_stdhash) \
     TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_dhp_stdhash_stat) \
+    TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_gpi_stdhash) \
+    TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_gpi_stdhash_stat) \
+    TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_gpb_stdhash) \
+    TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_gpb_stdhash_stat) \
+    TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_gpt_stdhash) \
+    TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_gpt_stdhash_stat) \
+    CDSUNIT_DECLARE_MultiLevelHashMap_stdhash_RCU_Signal
+
+#define CDSUNIT_DECLARE_MultiLevelHashMap_hash  \
     TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_hp_md5) \
     TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_hp_md5_stat) \
     TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_dhp_md5) \
     TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_dhp_md5_stat) \
+    TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_gpi_md5) \
+    TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_gpi_md5_stat) \
+    TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_gpb_md5) \
+    TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_gpb_md5_stat) \
+    TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_gpt_md5) \
+    TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_gpt_md5_stat) \
     TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_hp_sha256) \
     TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_hp_sha256_stat) \
     TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_dhp_sha256) \
     TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_dhp_sha256_stat) \
-    CDSUNIT_DECLARE_MultiLevelHashMap64
+    TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_gpi_sha256) \
+    TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_gpi_sha256_stat) \
+    TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_gpb_sha256) \
+    TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_gpb_sha256_stat) \
+    TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_gpt_sha256) \
+    TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_gpt_sha256_stat) \
+    CDSUNIT_DECLARE_MultiLevelHashMap_hash_RCU_Signal \
+    CDSUNIT_DECLARE_MultiLevelHashMap64 \
+
+#define CDSUNIT_DECLARE_MultiLevelHashMap  \
+    CDSUNIT_DECLARE_MultiLevelHashMap_stdhash \
+    CDSUNIT_DECLARE_MultiLevelHashMap_hash \
 
 
 #undef CDSUNIT_TEST_MultiLevelHashMap64
+#undef CDSUNIT_TEST_MultiLevelHashMap64_RCU_Signal
 #if CDS_BUILD_BITS == 64
+#   ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+#       define CDSUNIT_TEST_MultiLevelHashMap64_RCU_Signal \
+            CPPUNIT_TEST(MultiLevelHashMap_rcu_shb_city64) \
+            CPPUNIT_TEST(MultiLevelHashMap_rcu_shb_city64_stat) \
+            CPPUNIT_TEST(MultiLevelHashMap_rcu_sht_city64) \
+            CPPUNIT_TEST(MultiLevelHashMap_rcu_sht_city64_stat) \
+            CPPUNIT_TEST(MultiLevelHashMap_rcu_shb_city128) \
+            CPPUNIT_TEST(MultiLevelHashMap_rcu_shb_city128_stat) \
+            CPPUNIT_TEST(MultiLevelHashMap_rcu_sht_city128) \
+            CPPUNIT_TEST(MultiLevelHashMap_rcu_sht_city128_stat) \
+
+#   else
+#       define CDSUNIT_TEST_MultiLevelHashMap64_RCU_Signal
+#   endif
+
 #   define CDSUNIT_TEST_MultiLevelHashMap64  \
         CPPUNIT_TEST(MultiLevelHashMap_hp_city64) \
         CPPUNIT_TEST(MultiLevelHashMap_hp_city64_stat) \
         CPPUNIT_TEST(MultiLevelHashMap_dhp_city64) \
         CPPUNIT_TEST(MultiLevelHashMap_dhp_city64_stat) \
+        CPPUNIT_TEST(MultiLevelHashMap_rcu_gpi_city64) \
+        CPPUNIT_TEST(MultiLevelHashMap_rcu_gpi_city64_stat) \
+        CPPUNIT_TEST(MultiLevelHashMap_rcu_gpb_city64) \
+        CPPUNIT_TEST(MultiLevelHashMap_rcu_gpb_city64_stat) \
+        CPPUNIT_TEST(MultiLevelHashMap_rcu_gpt_city64) \
+        CPPUNIT_TEST(MultiLevelHashMap_rcu_gpt_city64_stat) \
         CPPUNIT_TEST(MultiLevelHashMap_hp_city128) \
         CPPUNIT_TEST(MultiLevelHashMap_hp_city128_stat) \
         CPPUNIT_TEST(MultiLevelHashMap_dhp_city128) \
-        CPPUNIT_TEST(MultiLevelHashMap_dhp_city128_stat)
+        CPPUNIT_TEST(MultiLevelHashMap_dhp_city128_stat) \
+        CPPUNIT_TEST(MultiLevelHashMap_rcu_gpi_city128) \
+        CPPUNIT_TEST(MultiLevelHashMap_rcu_gpi_city128_stat) \
+        CPPUNIT_TEST(MultiLevelHashMap_rcu_gpb_city128) \
+        CPPUNIT_TEST(MultiLevelHashMap_rcu_gpb_city128_stat) \
+        CPPUNIT_TEST(MultiLevelHashMap_rcu_gpt_city128) \
+        CPPUNIT_TEST(MultiLevelHashMap_rcu_gpt_city128_stat) \
+        CDSUNIT_TEST_MultiLevelHashMap64_RCU_Signal
+
 #else
 #   define CDSUNIT_TEST_MultiLevelHashMap64
 #endif
 
-#undef CDSUNIT_TEST_MultiLevelHashMap
-#define CDSUNIT_TEST_MultiLevelHashMap  \
+#undef CDSUNIT_TEST_MultiLevelHashMap_hash
+#undef CDSUNIT_TEST_MultiLevelHashMap_hash_RCU_Signal
+#undef CDSUNIT_TEST_MultiLevelHashMap_stdhash
+#undef CDSUNIT_TEST_MultiLevelHashMap_stdhash_RCU_Signal
+
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+#   define CDSUNIT_TEST_MultiLevelHashMap_stdhash_RCU_Signal \
+        CPPUNIT_TEST(MultiLevelHashMap_rcu_shb_stdhash) \
+        CPPUNIT_TEST(MultiLevelHashMap_rcu_shb_stdhash_stat) \
+        CPPUNIT_TEST(MultiLevelHashMap_rcu_sht_stdhash) \
+        CPPUNIT_TEST(MultiLevelHashMap_rcu_sht_stdhash_stat) \
+
+#   define CDSUNIT_TEST_MultiLevelHashMap_hash_RCU_Signal \
+        CPPUNIT_TEST(MultiLevelHashMap_rcu_shb_md5) \
+        CPPUNIT_TEST(MultiLevelHashMap_rcu_shb_md5_stat) \
+        CPPUNIT_TEST(MultiLevelHashMap_rcu_sht_md5) \
+        CPPUNIT_TEST(MultiLevelHashMap_rcu_sht_md5_stat) \
+        CPPUNIT_TEST(MultiLevelHashMap_rcu_shb_sha256) \
+        CPPUNIT_TEST(MultiLevelHashMap_rcu_shb_sha256_stat) \
+        CPPUNIT_TEST(MultiLevelHashMap_rcu_sht_sha256) \
+        CPPUNIT_TEST(MultiLevelHashMap_rcu_sht_sha256_stat) \
+
+#else
+#   define CDSUNIT_TEST_MultiLevelHashMap_hash_RCU_Signal
+#   define CDSUNIT_TEST_MultiLevelHashMap_stdhash_RCU_Signal
+#endif
+
+#define CDSUNIT_TEST_MultiLevelHashMap_stdhash  \
     CPPUNIT_TEST(MultiLevelHashMap_hp_stdhash) \
     CPPUNIT_TEST(MultiLevelHashMap_hp_stdhash_stat) \
     CPPUNIT_TEST(MultiLevelHashMap_dhp_stdhash) \
     CPPUNIT_TEST(MultiLevelHashMap_dhp_stdhash_stat) \
+    CPPUNIT_TEST(MultiLevelHashMap_rcu_gpi_stdhash) \
+    CPPUNIT_TEST(MultiLevelHashMap_rcu_gpi_stdhash_stat) \
+    CPPUNIT_TEST(MultiLevelHashMap_rcu_gpb_stdhash) \
+    CPPUNIT_TEST(MultiLevelHashMap_rcu_gpb_stdhash_stat) \
+    CPPUNIT_TEST(MultiLevelHashMap_rcu_gpt_stdhash) \
+    CPPUNIT_TEST(MultiLevelHashMap_rcu_gpt_stdhash_stat) \
+    CDSUNIT_TEST_MultiLevelHashMap_stdhash_RCU_Signal
+
+#define CDSUNIT_TEST_MultiLevelHashMap_hash  \
     CPPUNIT_TEST(MultiLevelHashMap_hp_md5) \
     CPPUNIT_TEST(MultiLevelHashMap_hp_md5_stat) \
     CPPUNIT_TEST(MultiLevelHashMap_dhp_md5) \
     CPPUNIT_TEST(MultiLevelHashMap_dhp_md5_stat) \
+    CPPUNIT_TEST(MultiLevelHashMap_rcu_gpi_md5) \
+    CPPUNIT_TEST(MultiLevelHashMap_rcu_gpi_md5_stat) \
+    CPPUNIT_TEST(MultiLevelHashMap_rcu_gpb_md5) \
+    CPPUNIT_TEST(MultiLevelHashMap_rcu_gpb_md5_stat) \
+    CPPUNIT_TEST(MultiLevelHashMap_rcu_gpt_md5) \
+    CPPUNIT_TEST(MultiLevelHashMap_rcu_gpt_md5_stat) \
     CPPUNIT_TEST(MultiLevelHashMap_hp_sha256) \
     CPPUNIT_TEST(MultiLevelHashMap_hp_sha256_stat) \
     CPPUNIT_TEST(MultiLevelHashMap_dhp_sha256) \
     CPPUNIT_TEST(MultiLevelHashMap_dhp_sha256_stat) \
-    CDSUNIT_TEST_MultiLevelHashMap64
+    CPPUNIT_TEST(MultiLevelHashMap_rcu_gpi_sha256) \
+    CPPUNIT_TEST(MultiLevelHashMap_rcu_gpi_sha256_stat) \
+    CPPUNIT_TEST(MultiLevelHashMap_rcu_gpb_sha256) \
+    CPPUNIT_TEST(MultiLevelHashMap_rcu_gpb_sha256_stat) \
+    CPPUNIT_TEST(MultiLevelHashMap_rcu_gpt_sha256) \
+    CPPUNIT_TEST(MultiLevelHashMap_rcu_gpt_sha256_stat) \
+    CDSUNIT_TEST_MultiLevelHashMap_hash_RCU_Signal \
+    CDSUNIT_TEST_MultiLevelHashMap64 \
 
+#define CDSUNIT_TEST_MultiLevelHashMap  \
+    CDSUNIT_TEST_MultiLevelHashMap_stdhash \
+    CDSUNIT_TEST_MultiLevelHashMap_hash \
index 3284565fd1185dc3df75d6b8d2911269a5f77dc1..69b78ab5d4db85d9f465cda8776eeebeb74d3234 100644 (file)
@@ -17,6 +17,8 @@ namespace map2 {
         c_nCuckooProbesetSize = cfg.getSizeT("CuckooProbesetSize", c_nCuckooProbesetSize );
         c_nCuckooProbesetThreshold = cfg.getSizeT("CuckooProbesetThreshold", c_nCuckooProbesetThreshold );
 
+        c_nMultiLevelMap_HeadBits = cfg.getSizeT("MultiLevelMapHeadBits", c_nMultiLevelMap_HeadBits);
+        c_nMultiLevelMap_ArrayBits = cfg.getSizeT("MultiLevelMapArrayBits", c_nMultiLevelMap_ArrayBits);
 
         if ( c_nInsThreadCount == 0 )
             c_nInsThreadCount = cds::OS::topology::processor_count();
index 01f3af6f74d1a8015124999754e2f7e772381769..e7167db2607dae4c82bd402b0a89e9d0e7ca78b2 100644 (file)
@@ -120,10 +120,14 @@ namespace map2 {
         size_t  c_nExtractThreadCount = 4;  // extract thread count
         size_t  c_nMapSize = 1000000;       // max map size
         size_t  c_nMaxLoadFactor = 8;       // maximum load factor
+
         size_t  c_nCuckooInitialSize = 1024;// initial size for CuckooMap
         size_t  c_nCuckooProbesetSize = 16; // CuckooMap probeset size (only for list-based probeset)
         size_t  c_nCuckooProbesetThreshold = 0; // CUckooMap probeset threshold (0 - use default)
 
+        size_t c_nMultiLevelMap_HeadBits = 10;
+        size_t c_nMultiLevelMap_ArrayBits = 4;
+
         bool    c_bPrintGCState = true;
 
         size_t  c_nLoadFactor;  // current load factor
@@ -276,6 +280,23 @@ namespace map2 {
             virtual void init() { cds::threading::Manager::attachThread()   ; }
             virtual void fini() { cds::threading::Manager::detachThread()   ; }
 
+            template <bool>
+            struct eraser {
+                static bool erase(Map& map, size_t key, size_t /*insThread*/)
+                {
+                    return map.erase_with(key, key_less());
+                }
+            };
+
+            template <>
+            struct eraser<true>
+            {
+                static bool erase(Map& map, size_t key, size_t insThread)
+                {
+                    return map.erase(key_type(key, insThread));
+                }
+            };
+
             virtual void test()
             {
                 Map& rMap = m_Map;
@@ -291,10 +312,20 @@ namespace map2 {
                         for ( size_t k = 0; k < nInsThreadCount; ++k ) {
                             for ( size_t i = 0; i < arrData.size(); ++i ) {
                                 if ( arrData[i] & 1 ) {
-                                    if ( rMap.erase_with( arrData[i], key_less() ))
-                                        ++m_nDeleteSuccess;
-                                    else
-                                        ++m_nDeleteFailed;
+                                    if ( Map::c_bEraseExactKey ) {
+                                        for (size_t key = 0; key < nInsThreadCount; ++key) {
+                                            if ( eraser<Map::c_bEraseExactKey>::erase( rMap, arrData[i], key ))
+                                                ++m_nDeleteSuccess;
+                                            else
+                                                ++m_nDeleteFailed;
+                                        }
+                                    }
+                                    else {
+                                        if ( eraser<Map::c_bEraseExactKey>::erase(rMap, arrData[i], 0) )
+                                            ++m_nDeleteSuccess;
+                                        else
+                                            ++m_nDeleteFailed;
+                                    }
                                 }
                             }
                             if ( getTest().m_nInsThreadCount.load( atomics::memory_order_acquire ) == 0 )
@@ -305,10 +336,20 @@ namespace map2 {
                         for ( size_t k = 0; k < nInsThreadCount; ++k ) {
                             for ( size_t i = arrData.size() - 1; i > 0; --i ) {
                                 if ( arrData[i] & 1 ) {
-                                    if ( rMap.erase_with( arrData[i], key_less() ))
-                                        ++m_nDeleteSuccess;
-                                    else
-                                        ++m_nDeleteFailed;
+                                    if ( Map::c_bEraseExactKey ) {
+                                        for (size_t key = 0; key < nInsThreadCount; ++key) {
+                                            if (eraser<Map::c_bEraseExactKey>::erase(rMap, arrData[i], key))
+                                                ++m_nDeleteSuccess;
+                                            else
+                                                ++m_nDeleteFailed;
+                                        }
+                                    }
+                                    else {
+                                        if (eraser<Map::c_bEraseExactKey>::erase(rMap, arrData[i], 0))
+                                            ++m_nDeleteSuccess;
+                                        else
+                                            ++m_nDeleteFailed;
+                                    }
                                 }
                             }
                             if ( getTest().m_nInsThreadCount.load( atomics::memory_order_acquire ) == 0 )
@@ -351,6 +392,23 @@ namespace map2 {
             virtual void init() { cds::threading::Manager::attachThread()   ; }
             virtual void fini() { cds::threading::Manager::detachThread()   ; }
 
+            template <bool>
+            struct extractor {
+                static typename Map::guarded_ptr extract(Map& map, size_t key, size_t /*insThread*/)
+                {
+                    return map.extract_with(key, key_less());
+                }
+            };
+
+            template <>
+            struct extractor<true>
+            {
+                static typename Map::guarded_ptr extract(Map& map, size_t key, size_t insThread)
+                {
+                    return map.extract(key_type(key, insThread));
+                }
+            };
+
             virtual void test()
             {
                 Map& rMap = m_Map;
@@ -367,7 +425,7 @@ namespace map2 {
                         for ( size_t k = 0; k < nInsThreadCount; ++k ) {
                             for ( size_t i = 0; i < arrData.size(); ++i ) {
                                 if ( arrData[i] & 1 ) {
-                                    gp = rMap.extract_with( arrData[i], key_less());
+                                    gp = extractor< Map::c_bEraseExactKey >::extract( rMap, arrData[i], k );
                                     if ( gp )
                                         ++m_nDeleteSuccess;
                                     else
@@ -383,7 +441,7 @@ namespace map2 {
                         for ( size_t k = 0; k < nInsThreadCount; ++k ) {
                             for ( size_t i = arrData.size() - 1; i > 0; --i ) {
                                 if ( arrData[i] & 1 ) {
-                                    gp = rMap.extract_with( arrData[i], key_less());
+                                    gp = extractor< Map::c_bEraseExactKey >::extract( rMap, arrData[i], k);
                                     if ( gp )
                                         ++m_nDeleteSuccess;
                                     else
@@ -430,6 +488,23 @@ namespace map2 {
             virtual void init() { cds::threading::Manager::attachThread()   ; }
             virtual void fini() { cds::threading::Manager::detachThread()   ; }
 
+            template <bool>
+            struct extractor {
+                static typename Map::exempt_ptr extract( Map& map, size_t key, size_t /*insThread*/ )
+                {
+                    return map.extract_with( key, key_less());
+                }
+            };
+
+            template <>
+            struct extractor<true>
+            {
+                static typename Map::exempt_ptr extract(Map& map, size_t key, size_t insThread)
+                {
+                    return map.extract( key_type(key, insThread));
+                }
+            };
+
             virtual void test()
             {
                 Map& rMap = m_Map;
@@ -448,7 +523,7 @@ namespace map2 {
                                 if ( Map::c_bExtractLockExternal ) {
                                     {
                                         typename Map::rcu_lock l;
-                                        xp = rMap.extract_with( arrData[i], key_less() );
+                                        xp = extractor<Map::c_bEraseExactKey>::extract( rMap, arrData[i], k );
                                         if ( xp )
                                             ++m_nDeleteSuccess;
                                         else
@@ -456,7 +531,7 @@ namespace map2 {
                                     }
                                 }
                                 else {
-                                    xp = rMap.extract_with( arrData[i], key_less() );
+                                    xp = extractor<Map::c_bEraseExactKey>::extract( rMap, arrData[i], k);
                                     if ( xp )
                                         ++m_nDeleteSuccess;
                                     else
@@ -476,7 +551,7 @@ namespace map2 {
                                 if ( Map::c_bExtractLockExternal ) {
                                     {
                                         typename Map::rcu_lock l;
-                                        xp = rMap.extract_with( arrData[i], key_less() );
+                                        xp = extractor<Map::c_bEraseExactKey>::extract(rMap, arrData[i], k);
                                         if ( xp )
                                             ++m_nDeleteSuccess;
                                         else
@@ -484,7 +559,7 @@ namespace map2 {
                                     }
                                 }
                                 else {
-                                    xp = rMap.extract_with( arrData[i], key_less() );
+                                    xp = extractor<Map::c_bEraseExactKey>::extract(rMap, arrData[i], k);
                                     if ( xp )
                                         ++m_nDeleteSuccess;
                                     else
@@ -698,20 +773,17 @@ namespace map2 {
         CDSUNIT_DECLARE_SkipListMap
         CDSUNIT_DECLARE_EllenBinTreeMap
         CDSUNIT_DECLARE_BronsonAVLTreeMap
+        CDSUNIT_DECLARE_MultiLevelHashMap64
         CDSUNIT_DECLARE_CuckooMap
 
-        // This test is not suitable for MultiLevelHashMap
-        //CDSUNIT_DECLARE_MultiLevelHashMap
-
         CPPUNIT_TEST_SUITE(Map_DelOdd)
             CDSUNIT_TEST_MichaelMap
             CDSUNIT_TEST_SplitList
             CDSUNIT_TEST_SkipListMap
             CDSUNIT_TEST_EllenBinTreeMap
             CDSUNIT_TEST_BronsonAVLTreeMap
+            CDSUNIT_TEST_MultiLevelHashMap64
             CDSUNIT_TEST_CuckooMap
-
-            //CDSUNIT_TEST_MultiLevelHashMap // the test is not suitable
         CPPUNIT_TEST_SUITE_END();
 
         // Not implemented yet
diff --git a/tests/unit/map2/map_delodd_multilevelhashmap.cpp b/tests/unit/map2/map_delodd_multilevelhashmap.cpp
new file mode 100644 (file)
index 0000000..384ea26
--- /dev/null
@@ -0,0 +1,12 @@
+//$$CDS-header$$
+
+#include "map2/map_delodd.h"
+#include "map2/map_type_multilevel_hashmap.h"
+
+#undef TEST_CASE
+#define TEST_CASE(TAG, X)  void Map_DelOdd::X() { run_test<typename map_type< TAG, key_type, value_type>::X>(); }
+#include "map2/map_defs.h"
+
+namespace map2 {
+    CDSUNIT_DECLARE_MultiLevelHashMap64
+} // namespace map2
index 2fee7d8a38d4bf52840182f02b2e04516264dbcf..77ee8734a8c4b037364eba5bdf84a8fec553f4d0 100644 (file)
@@ -27,6 +27,7 @@ namespace map2 {
         // for testing
         static CDS_CONSTEXPR bool const c_bExtractSupported = true;
         static CDS_CONSTEXPR bool const c_bLoadFactorDepended = false;
+        static CDS_CONSTEXPR bool const c_bEraseExactKey = false;
     };
 
     struct tag_BronsonAVLTreeMap;
index c99d8676f97e5f81b75f702577262aec43be47d6..312c64f940507afd8163bae78a4e19bb53f12de1 100644 (file)
@@ -34,6 +34,7 @@ namespace map2 {
         // for testing
         static CDS_CONSTEXPR bool const c_bExtractSupported = false;
         static CDS_CONSTEXPR bool const c_bLoadFactorDepended = false;
+        static CDS_CONSTEXPR bool const c_bEraseExactKey = false;
     };
 
     struct tag_CuckooMap;
index bc29546e8a4c64cb8ecee02641a2d3197da3be34..894ae38a575a64e9bf9642786d3be9b9674c8a4c 100644 (file)
@@ -27,6 +27,7 @@ namespace map2 {
         // for testing
         static CDS_CONSTEXPR bool const c_bExtractSupported = true;
         static CDS_CONSTEXPR bool const c_bLoadFactorDepended = false;
+        static CDS_CONSTEXPR bool const c_bEraseExactKey = false;
     };
 
     struct tag_EllenBinTreeMap;
index 76d8fcda5504e07f1fb886c3ba3fe83b9766d93d..ea4b74dd1141b9590c7bf36d1ec72d8d3ca774e5 100644 (file)
@@ -25,6 +25,7 @@ namespace map2 {
         // for testing
         static CDS_CONSTEXPR bool const c_bExtractSupported = true;
         static CDS_CONSTEXPR bool const c_bLoadFactorDepended = true;
+        static CDS_CONSTEXPR bool const c_bEraseExactKey = false;
     };
 
     struct tag_MichaelHashMap;
index 71d6091b59bd2e314f7a0a050f9722dbae170ecb..c2705a64960d458855c176f6fed680ee4eb2ea07 100644 (file)
@@ -7,6 +7,7 @@
 
 #include <cds/container/multilevel_hashmap_hp.h>
 #include <cds/container/multilevel_hashmap_dhp.h>
+#include <cds/container/multilevel_hashmap_rcu.h>
 
 #include "print_multilevel_hashset_stat.h"
 #include "hashing/hash_func.h"
@@ -26,6 +27,7 @@ namespace map2 {
         // for testing
         static CDS_CONSTEXPR bool const c_bExtractSupported = true;
         static CDS_CONSTEXPR bool const c_bLoadFactorDepended = false;
+        static CDS_CONSTEXPR bool const c_bEraseExactKey = true;
     };
 
     struct tag_MultiLevelHashMap;
@@ -39,6 +41,13 @@ namespace map2 {
 
         typedef MultiLevelHashMap< cds::gc::HP,  Key, Value >    MultiLevelHashMap_hp_stdhash;
         typedef MultiLevelHashMap< cds::gc::DHP, Key, Value >    MultiLevelHashMap_dhp_stdhash;
+        typedef MultiLevelHashMap< rcu_gpi, Key, Value >    MultiLevelHashMap_rcu_gpi_stdhash;
+        typedef MultiLevelHashMap< rcu_gpb, Key, Value >    MultiLevelHashMap_rcu_gpb_stdhash;
+        typedef MultiLevelHashMap< rcu_gpt, Key, Value >    MultiLevelHashMap_rcu_gpt_stdhash;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef MultiLevelHashMap< rcu_shb, Key, Value >    MultiLevelHashMap_rcu_shb_stdhash;
+        typedef MultiLevelHashMap< rcu_sht, Key, Value >    MultiLevelHashMap_rcu_sht_stdhash;
+#endif
 
         struct traits_MultiLevelHashMap_stat: public cc::multilevel_hashmap::make_traits<
                 co::stat< cc::multilevel_hashmap::stat<>>
@@ -47,6 +56,13 @@ namespace map2 {
 
         typedef MultiLevelHashMap< cds::gc::HP,  Key, Value, traits_MultiLevelHashMap_stat >    MultiLevelHashMap_hp_stdhash_stat;
         typedef MultiLevelHashMap< cds::gc::DHP, Key, Value, traits_MultiLevelHashMap_stat >    MultiLevelHashMap_dhp_stdhash_stat;
+        typedef MultiLevelHashMap< rcu_gpi, Key, Value, traits_MultiLevelHashMap_stat >    MultiLevelHashMap_rcu_gpi_stdhash_stat;
+        typedef MultiLevelHashMap< rcu_gpb, Key, Value, traits_MultiLevelHashMap_stat >    MultiLevelHashMap_rcu_gpb_stdhash_stat;
+        typedef MultiLevelHashMap< rcu_gpt, Key, Value, traits_MultiLevelHashMap_stat >    MultiLevelHashMap_rcu_gpt_stdhash_stat;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef MultiLevelHashMap< rcu_shb, Key, Value, traits_MultiLevelHashMap_stat >    MultiLevelHashMap_rcu_shb_stdhash_stat;
+        typedef MultiLevelHashMap< rcu_sht, Key, Value, traits_MultiLevelHashMap_stat >    MultiLevelHashMap_rcu_sht_stdhash_stat;
+#endif
 
         // SHA256
         struct traits_MultiLevelHashMap_sha256 : public cc::multilevel_hashmap::traits
@@ -55,6 +71,13 @@ namespace map2 {
         };
         typedef MultiLevelHashMap< cds::gc::HP,  Key, Value, traits_MultiLevelHashMap_sha256 >    MultiLevelHashMap_hp_sha256;
         typedef MultiLevelHashMap< cds::gc::DHP, Key, Value, traits_MultiLevelHashMap_sha256 >    MultiLevelHashMap_dhp_sha256;
+        typedef MultiLevelHashMap< rcu_gpi, Key, Value, traits_MultiLevelHashMap_sha256 >    MultiLevelHashMap_rcu_gpi_sha256;
+        typedef MultiLevelHashMap< rcu_gpb, Key, Value, traits_MultiLevelHashMap_sha256 >    MultiLevelHashMap_rcu_gpb_sha256;
+        typedef MultiLevelHashMap< rcu_gpt, Key, Value, traits_MultiLevelHashMap_sha256 >    MultiLevelHashMap_rcu_gpt_sha256;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef MultiLevelHashMap< rcu_shb, Key, Value, traits_MultiLevelHashMap_sha256 >    MultiLevelHashMap_rcu_shb_sha256;
+        typedef MultiLevelHashMap< rcu_sht, Key, Value, traits_MultiLevelHashMap_sha256 >    MultiLevelHashMap_rcu_sht_sha256;
+#endif
 
         struct traits_MultiLevelHashMap_sha256_stat : public traits_MultiLevelHashMap_sha256
         {
@@ -62,6 +85,13 @@ namespace map2 {
         };
         typedef MultiLevelHashMap< cds::gc::HP,  Key, Value, traits_MultiLevelHashMap_sha256_stat >    MultiLevelHashMap_hp_sha256_stat;
         typedef MultiLevelHashMap< cds::gc::DHP, Key, Value, traits_MultiLevelHashMap_sha256_stat >    MultiLevelHashMap_dhp_sha256_stat;
+        typedef MultiLevelHashMap< rcu_gpi, Key, Value, traits_MultiLevelHashMap_sha256_stat >    MultiLevelHashMap_rcu_gpi_sha256_stat;
+        typedef MultiLevelHashMap< rcu_gpb, Key, Value, traits_MultiLevelHashMap_sha256_stat >    MultiLevelHashMap_rcu_gpb_sha256_stat;
+        typedef MultiLevelHashMap< rcu_gpt, Key, Value, traits_MultiLevelHashMap_sha256_stat >    MultiLevelHashMap_rcu_gpt_sha256_stat;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef MultiLevelHashMap< rcu_shb, Key, Value, traits_MultiLevelHashMap_sha256_stat >    MultiLevelHashMap_rcu_shb_sha256_stat;
+        typedef MultiLevelHashMap< rcu_sht, Key, Value, traits_MultiLevelHashMap_sha256_stat >    MultiLevelHashMap_rcu_sht_sha256_stat;
+#endif
 
         //MD5
         struct traits_MultiLevelHashMap_md5 : public cc::multilevel_hashmap::traits
@@ -70,6 +100,13 @@ namespace map2 {
         };
         typedef MultiLevelHashMap< cds::gc::HP,  Key, Value, traits_MultiLevelHashMap_md5 >    MultiLevelHashMap_hp_md5;
         typedef MultiLevelHashMap< cds::gc::DHP, Key, Value, traits_MultiLevelHashMap_md5 >    MultiLevelHashMap_dhp_md5;
+        typedef MultiLevelHashMap< rcu_gpi, Key, Value, traits_MultiLevelHashMap_md5 >    MultiLevelHashMap_rcu_gpi_md5;
+        typedef MultiLevelHashMap< rcu_gpb, Key, Value, traits_MultiLevelHashMap_md5 >    MultiLevelHashMap_rcu_gpb_md5;
+        typedef MultiLevelHashMap< rcu_gpt, Key, Value, traits_MultiLevelHashMap_md5 >    MultiLevelHashMap_rcu_gpt_md5;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef MultiLevelHashMap< rcu_shb, Key, Value, traits_MultiLevelHashMap_md5 >    MultiLevelHashMap_rcu_shb_md5;
+        typedef MultiLevelHashMap< rcu_sht, Key, Value, traits_MultiLevelHashMap_md5 >    MultiLevelHashMap_rcu_sht_md5;
+#endif
 
         struct traits_MultiLevelHashMap_md5_stat : public traits_MultiLevelHashMap_md5
         {
@@ -77,6 +114,13 @@ namespace map2 {
         };
         typedef MultiLevelHashMap< cds::gc::HP,  Key, Value, traits_MultiLevelHashMap_md5_stat >    MultiLevelHashMap_hp_md5_stat;
         typedef MultiLevelHashMap< cds::gc::DHP, Key, Value, traits_MultiLevelHashMap_md5_stat >    MultiLevelHashMap_dhp_md5_stat;
+        typedef MultiLevelHashMap< rcu_gpi, Key, Value, traits_MultiLevelHashMap_md5_stat >    MultiLevelHashMap_rcu_gpi_md5_stat;
+        typedef MultiLevelHashMap< rcu_gpb, Key, Value, traits_MultiLevelHashMap_md5_stat >    MultiLevelHashMap_rcu_gpb_md5_stat;
+        typedef MultiLevelHashMap< rcu_gpt, Key, Value, traits_MultiLevelHashMap_md5_stat >    MultiLevelHashMap_rcu_gpt_md5_stat;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef MultiLevelHashMap< rcu_shb, Key, Value, traits_MultiLevelHashMap_md5_stat >    MultiLevelHashMap_rcu_shb_md5_stat;
+        typedef MultiLevelHashMap< rcu_sht, Key, Value, traits_MultiLevelHashMap_md5_stat >    MultiLevelHashMap_rcu_sht_md5_stat;
+#endif
 
         // CityHash
 #if CDS_BUILD_BITS == 64
@@ -87,6 +131,13 @@ namespace map2 {
         };
         typedef MultiLevelHashMap< cds::gc::HP,  Key, Value, traits_MultiLevelHashMap_city64 >    MultiLevelHashMap_hp_city64;
         typedef MultiLevelHashMap< cds::gc::DHP, Key, Value, traits_MultiLevelHashMap_city64 >    MultiLevelHashMap_dhp_city64;
+        typedef MultiLevelHashMap< rcu_gpi, Key, Value, traits_MultiLevelHashMap_city64 >    MultiLevelHashMap_rcu_gpi_city64;
+        typedef MultiLevelHashMap< rcu_gpb, Key, Value, traits_MultiLevelHashMap_city64 >    MultiLevelHashMap_rcu_gpb_city64;
+        typedef MultiLevelHashMap< rcu_gpt, Key, Value, traits_MultiLevelHashMap_city64 >    MultiLevelHashMap_rcu_gpt_city64;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef MultiLevelHashMap< rcu_shb, Key, Value, traits_MultiLevelHashMap_city64 >    MultiLevelHashMap_rcu_shb_city64;
+        typedef MultiLevelHashMap< rcu_sht, Key, Value, traits_MultiLevelHashMap_city64 >    MultiLevelHashMap_rcu_sht_city64;
+#endif
 
         struct traits_MultiLevelHashMap_city64_stat : public traits_MultiLevelHashMap_city64
         {
@@ -94,6 +145,13 @@ namespace map2 {
         };
         typedef MultiLevelHashMap< cds::gc::HP,  Key, Value, traits_MultiLevelHashMap_city64_stat >    MultiLevelHashMap_hp_city64_stat;
         typedef MultiLevelHashMap< cds::gc::DHP, Key, Value, traits_MultiLevelHashMap_city64_stat >    MultiLevelHashMap_dhp_city64_stat;
+        typedef MultiLevelHashMap< rcu_gpi, Key, Value, traits_MultiLevelHashMap_city64_stat >    MultiLevelHashMap_rcu_gpi_city64_stat;
+        typedef MultiLevelHashMap< rcu_gpb, Key, Value, traits_MultiLevelHashMap_city64_stat >    MultiLevelHashMap_rcu_gpb_city64_stat;
+        typedef MultiLevelHashMap< rcu_gpt, Key, Value, traits_MultiLevelHashMap_city64_stat >    MultiLevelHashMap_rcu_gpt_city64_stat;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef MultiLevelHashMap< rcu_shb, Key, Value, traits_MultiLevelHashMap_city64_stat >    MultiLevelHashMap_rcu_shb_city64_stat;
+        typedef MultiLevelHashMap< rcu_sht, Key, Value, traits_MultiLevelHashMap_city64_stat >    MultiLevelHashMap_rcu_sht_city64_stat;
+#endif
 
         struct traits_MultiLevelHashMap_city128 : public cc::multilevel_hashmap::traits
         {
@@ -102,6 +160,13 @@ namespace map2 {
         };
         typedef MultiLevelHashMap< cds::gc::HP,  Key, Value, traits_MultiLevelHashMap_city128 >    MultiLevelHashMap_hp_city128;
         typedef MultiLevelHashMap< cds::gc::DHP, Key, Value, traits_MultiLevelHashMap_city128 >    MultiLevelHashMap_dhp_city128;
+        typedef MultiLevelHashMap< rcu_gpi, Key, Value, traits_MultiLevelHashMap_city128 >    MultiLevelHashMap_rcu_gpi_city128;
+        typedef MultiLevelHashMap< rcu_gpb, Key, Value, traits_MultiLevelHashMap_city128 >    MultiLevelHashMap_rcu_gpb_city128;
+        typedef MultiLevelHashMap< rcu_gpt, Key, Value, traits_MultiLevelHashMap_city128 >    MultiLevelHashMap_rcu_gpt_city128;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef MultiLevelHashMap< rcu_shb, Key, Value, traits_MultiLevelHashMap_city128 >    MultiLevelHashMap_rcu_shb_city128;
+        typedef MultiLevelHashMap< rcu_sht, Key, Value, traits_MultiLevelHashMap_city128 >    MultiLevelHashMap_rcu_sht_city128;
+#endif
 
         struct traits_MultiLevelHashMap_city128_stat : public traits_MultiLevelHashMap_city128
         {
@@ -109,6 +174,13 @@ namespace map2 {
         };
         typedef MultiLevelHashMap< cds::gc::HP,  Key, Value, traits_MultiLevelHashMap_city128_stat >    MultiLevelHashMap_hp_city128_stat;
         typedef MultiLevelHashMap< cds::gc::DHP, Key, Value, traits_MultiLevelHashMap_city128_stat >    MultiLevelHashMap_dhp_city128_stat;
+        typedef MultiLevelHashMap< rcu_gpi, Key, Value, traits_MultiLevelHashMap_city128_stat >    MultiLevelHashMap_rcu_gpi_city128_stat;
+        typedef MultiLevelHashMap< rcu_gpb, Key, Value, traits_MultiLevelHashMap_city128_stat >    MultiLevelHashMap_rcu_gpb_city128_stat;
+        typedef MultiLevelHashMap< rcu_gpt, Key, Value, traits_MultiLevelHashMap_city128_stat >    MultiLevelHashMap_rcu_gpt_city128_stat;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef MultiLevelHashMap< rcu_shb, Key, Value, traits_MultiLevelHashMap_city128_stat >    MultiLevelHashMap_rcu_shb_city128_stat;
+        typedef MultiLevelHashMap< rcu_sht, Key, Value, traits_MultiLevelHashMap_city128_stat >    MultiLevelHashMap_rcu_sht_city128_stat;
+#endif
 #endif // CDS_BUILD_BITS == 64
     };
 
index 37a5ad05a63610de477941b8e30573288c958c13..a20aa98487a2bd6314a5eafe872347bec727d327 100644 (file)
@@ -27,6 +27,7 @@ namespace map2 {
         // for testing
         static CDS_CONSTEXPR bool const c_bExtractSupported = true;
         static CDS_CONSTEXPR bool const c_bLoadFactorDepended = false;
+        static CDS_CONSTEXPR bool const c_bEraseExactKey = false;
     };
 
     struct tag_SkipListMap;
index 3a807253874419984c9847837a74ebf2ebdd26c6..7685361063e390fe19375629bf20529b595d38dc 100644 (file)
@@ -36,6 +36,7 @@ namespace map2 {
         // for testing
         static CDS_CONSTEXPR bool const c_bExtractSupported = true;
         static CDS_CONSTEXPR bool const c_bLoadFactorDepended = true;
+        static CDS_CONSTEXPR bool const c_bEraseExactKey = false;
     };
 
     template <typename Key, typename T, typename Traits >
index 312f5357e9fdf52513e1bebe5a486362499f2e07..0530cc026d1c60f4a099f1f18170e16befab3ad6 100644 (file)
@@ -102,6 +102,7 @@ namespace map2 {
         // for testing
         static CDS_CONSTEXPR bool const c_bExtractSupported = false;
         static CDS_CONSTEXPR bool const c_bLoadFactorDepended = false;
+        static CDS_CONSTEXPR bool const c_bEraseExactKey = false;
     };
 }   // namespace map2
 
index cbcbc6df45cce0f2ace8b811caedc144c5bcdd7e..477afdb547a12e0ee508bf3c7b79eb5fc07711c6 100644 (file)
@@ -92,6 +92,7 @@ namespace map2 {
         // for testing
         static CDS_CONSTEXPR bool const c_bExtractSupported = false;
         static CDS_CONSTEXPR bool const c_bLoadFactorDepended = false;
+        static CDS_CONSTEXPR bool const c_bEraseExactKey = false;
     };
 }   // namespace map