Reorganized map2 unit test to reduce compiling time and memory
authorkhizmax <khizmax@gmail.com>
Tue, 7 Apr 2015 12:58:12 +0000 (15:58 +0300)
committerkhizmax <khizmax@gmail.com>
Tue, 7 Apr 2015 12:58:12 +0000 (15:58 +0300)
109 files changed:
cds/container/details/bronson_avltree_base.h
projects/Win/vc12/cds.sln
tests/unit/map2/map_defs.h
tests/unit/map2/map_delodd.h
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_michael.cpp
tests/unit/map2/map_delodd_skip.cpp
tests/unit/map2/map_delodd_split.cpp
tests/unit/map2/map_find_int.h
tests/unit/map2/map_find_int_bronsonavltree.cpp
tests/unit/map2/map_find_int_cuckoo.cpp
tests/unit/map2/map_find_int_ellentree.cpp
tests/unit/map2/map_find_int_michael.cpp
tests/unit/map2/map_find_int_refinable.cpp
tests/unit/map2/map_find_int_skip.cpp
tests/unit/map2/map_find_int_split.cpp
tests/unit/map2/map_find_int_std.cpp
tests/unit/map2/map_find_int_striped.cpp
tests/unit/map2/map_find_string.h
tests/unit/map2/map_find_string_bronsonavltree.cpp
tests/unit/map2/map_find_string_cuckoo.cpp
tests/unit/map2/map_find_string_ellentree.cpp
tests/unit/map2/map_find_string_michael.cpp
tests/unit/map2/map_find_string_refinable.cpp
tests/unit/map2/map_find_string_skip.cpp
tests/unit/map2/map_find_string_split.cpp
tests/unit/map2/map_find_string_std.cpp
tests/unit/map2/map_find_string_striped.cpp
tests/unit/map2/map_insdel_func.h
tests/unit/map2/map_insdel_func_bronsonavltree.cpp
tests/unit/map2/map_insdel_func_cuckoo.cpp
tests/unit/map2/map_insdel_func_ellentree.cpp
tests/unit/map2/map_insdel_func_michael.cpp
tests/unit/map2/map_insdel_func_refinable.cpp
tests/unit/map2/map_insdel_func_skip.cpp
tests/unit/map2/map_insdel_func_split.cpp
tests/unit/map2/map_insdel_func_striped.cpp
tests/unit/map2/map_insdel_int.h
tests/unit/map2/map_insdel_int_bronsonavltree.cpp
tests/unit/map2/map_insdel_int_cuckoo.cpp
tests/unit/map2/map_insdel_int_ellentree.cpp
tests/unit/map2/map_insdel_int_michael.cpp
tests/unit/map2/map_insdel_int_refinable.cpp
tests/unit/map2/map_insdel_int_skip.cpp
tests/unit/map2/map_insdel_int_split.cpp
tests/unit/map2/map_insdel_int_striped.cpp
tests/unit/map2/map_insdel_item_int.h
tests/unit/map2/map_insdel_item_int_bronsonavltree.cpp
tests/unit/map2/map_insdel_item_int_cuckoo.cpp
tests/unit/map2/map_insdel_item_int_ellentree.cpp
tests/unit/map2/map_insdel_item_int_michael.cpp
tests/unit/map2/map_insdel_item_int_refinable.cpp
tests/unit/map2/map_insdel_item_int_skip.cpp
tests/unit/map2/map_insdel_item_int_split.cpp
tests/unit/map2/map_insdel_item_int_striped.cpp
tests/unit/map2/map_insdel_item_string.h
tests/unit/map2/map_insdel_item_string_bronsonavltree.cpp
tests/unit/map2/map_insdel_item_string_cuckoo.cpp
tests/unit/map2/map_insdel_item_string_ellentree.cpp
tests/unit/map2/map_insdel_item_string_michael.cpp
tests/unit/map2/map_insdel_item_string_refinable.cpp
tests/unit/map2/map_insdel_item_string_skip.cpp
tests/unit/map2/map_insdel_item_string_split.cpp
tests/unit/map2/map_insdel_item_string_striped.cpp
tests/unit/map2/map_insdel_string.h
tests/unit/map2/map_insdel_string_bronsonavltree.cpp
tests/unit/map2/map_insdel_string_cuckoo.cpp
tests/unit/map2/map_insdel_string_ellentree.cpp
tests/unit/map2/map_insdel_string_michael.cpp
tests/unit/map2/map_insdel_string_refinable.cpp
tests/unit/map2/map_insdel_string_skip.cpp
tests/unit/map2/map_insdel_string_split.cpp
tests/unit/map2/map_insdel_string_std.cpp
tests/unit/map2/map_insdel_string_striped.cpp
tests/unit/map2/map_insdelfind.cpp
tests/unit/map2/map_insdelfind.h
tests/unit/map2/map_insdelfind_bronsonavltree.cpp
tests/unit/map2/map_insdelfind_cuckoo.cpp
tests/unit/map2/map_insdelfind_ellentree.cpp
tests/unit/map2/map_insdelfind_michael.cpp
tests/unit/map2/map_insdelfind_refinable.cpp
tests/unit/map2/map_insdelfind_skip.cpp
tests/unit/map2/map_insdelfind_split.cpp
tests/unit/map2/map_insdelfind_std.cpp
tests/unit/map2/map_insdelfind_striped.cpp
tests/unit/map2/map_insfind_int.h
tests/unit/map2/map_insfind_int_bronsonavltree.cpp
tests/unit/map2/map_insfind_int_cuckoo.cpp
tests/unit/map2/map_insfind_int_ellentree.cpp
tests/unit/map2/map_insfind_int_michael.cpp
tests/unit/map2/map_insfind_int_refinable.cpp
tests/unit/map2/map_insfind_int_skip.cpp
tests/unit/map2/map_insfind_int_split.cpp
tests/unit/map2/map_insfind_int_std.cpp
tests/unit/map2/map_insfind_int_striped.cpp
tests/unit/map2/map_type.h [new file with mode: 0644]
tests/unit/map2/map_type_bronson_avltree.h [new file with mode: 0644]
tests/unit/map2/map_type_cuckoo.h [new file with mode: 0644]
tests/unit/map2/map_type_ellen_bintree.h [new file with mode: 0644]
tests/unit/map2/map_type_lazy_list.h [new file with mode: 0644]
tests/unit/map2/map_type_michael.h [new file with mode: 0644]
tests/unit/map2/map_type_michael_list.h [new file with mode: 0644]
tests/unit/map2/map_type_skip_list.h [new file with mode: 0644]
tests/unit/map2/map_type_split_list.h [new file with mode: 0644]
tests/unit/map2/map_type_std.h [new file with mode: 0644]
tests/unit/map2/map_type_striped.h [new file with mode: 0644]
tests/unit/map2/map_types.h [deleted file]

index fa784e715ae69ee83714eb59ce6703fd4da69420..cf52bda265cfa47b4f8358a3e2892d6e408b6115 100644 (file)
@@ -13,6 +13,9 @@ namespace cds { namespace container {
 
     /// BronsonAVLTree related declarations
     namespace bronson_avltree {
+        //@cond
+        struct implementation_tag;
+        //@endcond
 
         template <typename Key, typename T, typename SyncMonitor >
         struct node;
index a6a447daff0d37f541685bd81f06ac02631c33d0..3f7bde00165d05a1a5c52f6fe4b56b4e0b84a0b2 100644 (file)
@@ -72,7 +72,17 @@ EndProject
 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "map", "map", "{6BB7A27F-FC59-4267-B6FA-D034176D1459}"\r
        ProjectSection(SolutionItems) = preProject\r
                ..\..\..\tests\unit\map2\map_defs.h = ..\..\..\tests\unit\map2\map_defs.h\r
-               ..\..\..\tests\unit\map2\map_types.h = ..\..\..\tests\unit\map2\map_types.h\r
+               ..\..\..\tests\unit\map2\map_type.h = ..\..\..\tests\unit\map2\map_type.h\r
+               ..\..\..\tests\unit\map2\map_type_bronson_avltree.h = ..\..\..\tests\unit\map2\map_type_bronson_avltree.h\r
+               ..\..\..\tests\unit\map2\map_type_cuckoo.h = ..\..\..\tests\unit\map2\map_type_cuckoo.h\r
+               ..\..\..\tests\unit\map2\map_type_ellen_bintree.h = ..\..\..\tests\unit\map2\map_type_ellen_bintree.h\r
+               ..\..\..\tests\unit\map2\map_type_lazy_list.h = ..\..\..\tests\unit\map2\map_type_lazy_list.h\r
+               ..\..\..\tests\unit\map2\map_type_michael.h = ..\..\..\tests\unit\map2\map_type_michael.h\r
+               ..\..\..\tests\unit\map2\map_type_michael_list.h = ..\..\..\tests\unit\map2\map_type_michael_list.h\r
+               ..\..\..\tests\unit\map2\map_type_skip_list.h = ..\..\..\tests\unit\map2\map_type_skip_list.h\r
+               ..\..\..\tests\unit\map2\map_type_split_list.h = ..\..\..\tests\unit\map2\map_type_split_list.h\r
+               ..\..\..\tests\unit\map2\map_type_std.h = ..\..\..\tests\unit\map2\map_type_std.h\r
+               ..\..\..\tests\unit\map2\map_type_striped.h = ..\..\..\tests\unit\map2\map_type_striped.h\r
                ..\..\..\tests\unit\map2\std_hash_map.h = ..\..\..\tests\unit\map2\std_hash_map.h\r
                ..\..\..\tests\unit\map2\std_map.h = ..\..\..\tests\unit\map2\std_map.h\r
        EndProjectSection\r
index f5bb2e6bcec1b6e7ad54b910cc90316c06712c32..dcfb329f1fc9e01a378264e49338056c27777c26 100644 (file)
@@ -4,22 +4,35 @@
 #define CDSUNIT_MAP_DEFS_H
 
 #define CDSUNIT_DECLARE_StdMap \
-    TEST_MAP(StdMap_Spin) \
-    TEST_MAP(StdHashMap_Spin)
+    CDSUNIT_DECLARE_TEST(StdMap_Spin) \
+    CDSUNIT_DECLARE_TEST(StdHashMap_Spin)
+#define CDSUNIT_DEFINE_StdMap(IMPL, C) \
+    TEST_MAP(IMPL, C, StdMap_Spin) \
+    TEST_MAP(IMPL, C, StdHashMap_Spin)
 #define CDSUNIT_TEST_StdMap \
     CPPUNIT_TEST(StdMap_Spin) \
     CPPUNIT_TEST(StdHashMap_Spin) \
 
 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
 #   define CDSUNIT_DECLARE_MichaelMap_RCU_signal \
-    TEST_MAP_EXTRACT(MichaelMap_RCU_SHB_cmp_stdAlloc) \
-    TEST_MAP_EXTRACT(MichaelMap_RCU_SHB_less_michaelAlloc) \
-    TEST_MAP_EXTRACT(MichaelMap_RCU_SHT_cmp_stdAlloc) \
-    TEST_MAP_EXTRACT(MichaelMap_RCU_SHT_less_michaelAlloc) \
-    TEST_MAP_EXTRACT(MichaelMap_Lazy_RCU_SHB_cmp_stdAlloc) \
-    TEST_MAP_EXTRACT(MichaelMap_Lazy_RCU_SHB_less_michaelAlloc) \
-    TEST_MAP_EXTRACT(MichaelMap_Lazy_RCU_SHT_cmp_stdAlloc) \
-    TEST_MAP_EXTRACT(MichaelMap_Lazy_RCU_SHT_less_michaelAlloc)
+    CDSUNIT_DECLARE_TEST(MichaelMap_RCU_SHB_cmp_stdAlloc) \
+    CDSUNIT_DECLARE_TEST(MichaelMap_RCU_SHB_less_michaelAlloc) \
+    CDSUNIT_DECLARE_TEST(MichaelMap_RCU_SHT_cmp_stdAlloc) \
+    CDSUNIT_DECLARE_TEST(MichaelMap_RCU_SHT_less_michaelAlloc) \
+    CDSUNIT_DECLARE_TEST(MichaelMap_Lazy_RCU_SHB_cmp_stdAlloc) \
+    CDSUNIT_DECLARE_TEST(MichaelMap_Lazy_RCU_SHB_less_michaelAlloc) \
+    CDSUNIT_DECLARE_TEST(MichaelMap_Lazy_RCU_SHT_cmp_stdAlloc) \
+    CDSUNIT_DECLARE_TEST(MichaelMap_Lazy_RCU_SHT_less_michaelAlloc)
+
+#   define CDSUNIT_DEFINE_MichaelMap_RCU_signal(IMPL, C) \
+    TEST_MAP_EXTRACT(IMPL, C, MichaelMap_RCU_SHB_cmp_stdAlloc) \
+    TEST_MAP_EXTRACT(IMPL, C, MichaelMap_RCU_SHB_less_michaelAlloc) \
+    TEST_MAP_EXTRACT(IMPL, C, MichaelMap_RCU_SHT_cmp_stdAlloc) \
+    TEST_MAP_EXTRACT(IMPL, C, MichaelMap_RCU_SHT_less_michaelAlloc) \
+    TEST_MAP_EXTRACT(IMPL, C, MichaelMap_Lazy_RCU_SHB_cmp_stdAlloc) \
+    TEST_MAP_EXTRACT(IMPL, C, MichaelMap_Lazy_RCU_SHB_less_michaelAlloc) \
+    TEST_MAP_EXTRACT(IMPL, C, MichaelMap_Lazy_RCU_SHT_cmp_stdAlloc) \
+    TEST_MAP_EXTRACT(IMPL, C, MichaelMap_Lazy_RCU_SHT_less_michaelAlloc)
 
 #   define CDSUNIT_TEST_MichaelMap_RCU_signal \
     CPPUNIT_TEST(MichaelMap_RCU_SHB_cmp_stdAlloc) \
 
 #else
 #   define CDSUNIT_DECLARE_MichaelMap_RCU_signal
+#   define CDSUNIT_DEFINE_MichaelMap_RCU_signal(IMPL, C)
 #   define CDSUNIT_TEST_MichaelMap_RCU_signal
 #endif
 
 
 #define CDSUNIT_DECLARE_MichaelMap  \
-    TEST_MAP_EXTRACT(MichaelMap_HP_cmp_stdAlloc) \
-    TEST_MAP_EXTRACT(MichaelMap_HP_less_michaelAlloc) \
-    TEST_MAP_EXTRACT(MichaelMap_DHP_cmp_stdAlloc) \
-    TEST_MAP_EXTRACT(MichaelMap_DHP_less_michaelAlloc) \
-    TEST_MAP_EXTRACT(MichaelMap_RCU_GPI_cmp_stdAlloc) \
-    TEST_MAP_EXTRACT(MichaelMap_RCU_GPI_less_michaelAlloc) \
-    TEST_MAP_EXTRACT(MichaelMap_RCU_GPB_cmp_stdAlloc) \
-    TEST_MAP_EXTRACT(MichaelMap_RCU_GPB_less_michaelAlloc) \
-    TEST_MAP_EXTRACT(MichaelMap_RCU_GPT_cmp_stdAlloc) \
-    TEST_MAP_EXTRACT(MichaelMap_RCU_GPT_less_michaelAlloc) \
-    TEST_MAP_EXTRACT(MichaelMap_Lazy_HP_cmp_stdAlloc) \
-    TEST_MAP_EXTRACT(MichaelMap_Lazy_HP_less_michaelAlloc) \
-    TEST_MAP_EXTRACT(MichaelMap_Lazy_DHP_cmp_stdAlloc) \
-    TEST_MAP_EXTRACT(MichaelMap_Lazy_DHP_less_michaelAlloc) \
-    TEST_MAP_EXTRACT(MichaelMap_Lazy_RCU_GPI_cmp_stdAlloc) \
-    TEST_MAP_EXTRACT(MichaelMap_Lazy_RCU_GPI_less_michaelAlloc) \
-    TEST_MAP_EXTRACT(MichaelMap_Lazy_RCU_GPB_cmp_stdAlloc) \
-    TEST_MAP_EXTRACT(MichaelMap_Lazy_RCU_GPB_less_michaelAlloc) \
-    TEST_MAP_EXTRACT(MichaelMap_Lazy_RCU_GPT_cmp_stdAlloc) \
-    TEST_MAP_EXTRACT(MichaelMap_Lazy_RCU_GPT_less_michaelAlloc)\
+    CDSUNIT_DECLARE_TEST(MichaelMap_HP_cmp_stdAlloc) \
+    CDSUNIT_DECLARE_TEST(MichaelMap_HP_less_michaelAlloc) \
+    CDSUNIT_DECLARE_TEST(MichaelMap_DHP_cmp_stdAlloc) \
+    CDSUNIT_DECLARE_TEST(MichaelMap_DHP_less_michaelAlloc) \
+    CDSUNIT_DECLARE_TEST(MichaelMap_RCU_GPI_cmp_stdAlloc) \
+    CDSUNIT_DECLARE_TEST(MichaelMap_RCU_GPI_less_michaelAlloc) \
+    CDSUNIT_DECLARE_TEST(MichaelMap_RCU_GPB_cmp_stdAlloc) \
+    CDSUNIT_DECLARE_TEST(MichaelMap_RCU_GPB_less_michaelAlloc) \
+    CDSUNIT_DECLARE_TEST(MichaelMap_RCU_GPT_cmp_stdAlloc) \
+    CDSUNIT_DECLARE_TEST(MichaelMap_RCU_GPT_less_michaelAlloc) \
+    CDSUNIT_DECLARE_TEST(MichaelMap_Lazy_HP_cmp_stdAlloc) \
+    CDSUNIT_DECLARE_TEST(MichaelMap_Lazy_HP_less_michaelAlloc) \
+    CDSUNIT_DECLARE_TEST(MichaelMap_Lazy_DHP_cmp_stdAlloc) \
+    CDSUNIT_DECLARE_TEST(MichaelMap_Lazy_DHP_less_michaelAlloc) \
+    CDSUNIT_DECLARE_TEST(MichaelMap_Lazy_RCU_GPI_cmp_stdAlloc) \
+    CDSUNIT_DECLARE_TEST(MichaelMap_Lazy_RCU_GPI_less_michaelAlloc) \
+    CDSUNIT_DECLARE_TEST(MichaelMap_Lazy_RCU_GPB_cmp_stdAlloc) \
+    CDSUNIT_DECLARE_TEST(MichaelMap_Lazy_RCU_GPB_less_michaelAlloc) \
+    CDSUNIT_DECLARE_TEST(MichaelMap_Lazy_RCU_GPT_cmp_stdAlloc) \
+    CDSUNIT_DECLARE_TEST(MichaelMap_Lazy_RCU_GPT_less_michaelAlloc)\
     CDSUNIT_DECLARE_MichaelMap_RCU_signal
 
+#define CDSUNIT_DEFINE_MichaelMap( IMPL, C )  \
+    TEST_MAP_EXTRACT(IMPL, C, MichaelMap_HP_cmp_stdAlloc) \
+    TEST_MAP_EXTRACT(IMPL, C, MichaelMap_HP_less_michaelAlloc) \
+    TEST_MAP_EXTRACT(IMPL, C, MichaelMap_DHP_cmp_stdAlloc) \
+    TEST_MAP_EXTRACT(IMPL, C, MichaelMap_DHP_less_michaelAlloc) \
+    TEST_MAP_EXTRACT(IMPL, C, MichaelMap_RCU_GPI_cmp_stdAlloc) \
+    TEST_MAP_EXTRACT(IMPL, C, MichaelMap_RCU_GPI_less_michaelAlloc) \
+    TEST_MAP_EXTRACT(IMPL, C, MichaelMap_RCU_GPB_cmp_stdAlloc) \
+    TEST_MAP_EXTRACT(IMPL, C, MichaelMap_RCU_GPB_less_michaelAlloc) \
+    TEST_MAP_EXTRACT(IMPL, C, MichaelMap_RCU_GPT_cmp_stdAlloc) \
+    TEST_MAP_EXTRACT(IMPL, C, MichaelMap_RCU_GPT_less_michaelAlloc) \
+    TEST_MAP_EXTRACT(IMPL, C, MichaelMap_Lazy_HP_cmp_stdAlloc) \
+    TEST_MAP_EXTRACT(IMPL, C, MichaelMap_Lazy_HP_less_michaelAlloc) \
+    TEST_MAP_EXTRACT(IMPL, C, MichaelMap_Lazy_DHP_cmp_stdAlloc) \
+    TEST_MAP_EXTRACT(IMPL, C, MichaelMap_Lazy_DHP_less_michaelAlloc) \
+    TEST_MAP_EXTRACT(IMPL, C, MichaelMap_Lazy_RCU_GPI_cmp_stdAlloc) \
+    TEST_MAP_EXTRACT(IMPL, C, MichaelMap_Lazy_RCU_GPI_less_michaelAlloc) \
+    TEST_MAP_EXTRACT(IMPL, C, MichaelMap_Lazy_RCU_GPB_cmp_stdAlloc) \
+    TEST_MAP_EXTRACT(IMPL, C, MichaelMap_Lazy_RCU_GPB_less_michaelAlloc) \
+    TEST_MAP_EXTRACT(IMPL, C, MichaelMap_Lazy_RCU_GPT_cmp_stdAlloc) \
+    TEST_MAP_EXTRACT(IMPL, C, MichaelMap_Lazy_RCU_GPT_less_michaelAlloc)\
+    CDSUNIT_DEFINE_MichaelMap_RCU_signal( IMPL, C )
+
 #define CDSUNIT_TEST_MichaelMap  \
     CPPUNIT_TEST(MichaelMap_HP_cmp_stdAlloc) \
     CPPUNIT_TEST(MichaelMap_HP_less_michaelAlloc) \
     CDSUNIT_TEST_MichaelMap_RCU_signal
 
 #define CDSUNIT_DECLARE_MichaelMap_nogc  \
-    TEST_MAP(MichaelMap_NOGC_cmp_stdAlloc) \
-    TEST_MAP(MichaelMap_NOGC_less_michaelAlloc) \
-    TEST_MAP(MichaelMap_Lazy_NOGC_cmp_stdAlloc) \
-    TEST_MAP(MichaelMap_Lazy_NOGC_unord_stdAlloc) \
-    TEST_MAP(MichaelMap_Lazy_NOGC_less_michaelAlloc)
+    CDSUNIT_DECLARE_TEST(MichaelMap_NOGC_cmp_stdAlloc) \
+    CDSUNIT_DECLARE_TEST(MichaelMap_NOGC_less_michaelAlloc) \
+    CDSUNIT_DECLARE_TEST(MichaelMap_Lazy_NOGC_cmp_stdAlloc) \
+    CDSUNIT_DECLARE_TEST(MichaelMap_Lazy_NOGC_unord_stdAlloc) \
+    CDSUNIT_DECLARE_TEST(MichaelMap_Lazy_NOGC_less_michaelAlloc)
+
+#define CDSUNIT_DEFINE_MichaelMap_nogc( IMPL, C ) \
+    TEST_MAP(IMPL, C, MichaelMap_NOGC_cmp_stdAlloc) \
+    TEST_MAP(IMPL, C, MichaelMap_NOGC_less_michaelAlloc) \
+    TEST_MAP(IMPL, C, MichaelMap_Lazy_NOGC_cmp_stdAlloc) \
+    TEST_MAP(IMPL, C, MichaelMap_Lazy_NOGC_unord_stdAlloc) \
+    TEST_MAP(IMPL, C, MichaelMap_Lazy_NOGC_less_michaelAlloc)
 
 #define CDSUNIT_TEST_MichaelMap_nogc  \
     CPPUNIT_TEST(MichaelMap_NOGC_cmp_stdAlloc) \
 
 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
 #   define CDSUNIT_DECLARE_SplitList_RCU_signal  \
-    TEST_MAP_EXTRACT(SplitList_Michael_RCU_SHB_dyn_cmp)\
-    TEST_MAP_EXTRACT(SplitList_Michael_RCU_SHB_dyn_cmp_stat)\
-    TEST_MAP_EXTRACT(SplitList_Michael_RCU_SHB_st_cmp)\
-    TEST_MAP_EXTRACT(SplitList_Michael_RCU_SHB_dyn_less)\
-    TEST_MAP_EXTRACT(SplitList_Michael_RCU_SHB_st_less)\
-    TEST_MAP_EXTRACT(SplitList_Michael_RCU_SHB_st_less_stat)\
-    TEST_MAP_EXTRACT(SplitList_Michael_RCU_SHT_dyn_cmp)\
-    TEST_MAP_EXTRACT(SplitList_Michael_RCU_SHT_dyn_cmp_stat)\
-    TEST_MAP_EXTRACT(SplitList_Michael_RCU_SHT_st_cmp)\
-    TEST_MAP_EXTRACT(SplitList_Michael_RCU_SHT_dyn_less)\
-    TEST_MAP_EXTRACT(SplitList_Michael_RCU_SHT_st_less)\
-    TEST_MAP_EXTRACT(SplitList_Michael_RCU_SHT_st_less_stat)\
-    TEST_MAP_EXTRACT(SplitList_Lazy_RCU_SHB_dyn_cmp)\
-    TEST_MAP_EXTRACT(SplitList_Lazy_RCU_SHB_dyn_cmp_stat)\
-    TEST_MAP_EXTRACT(SplitList_Lazy_RCU_SHB_st_cmp)\
-    TEST_MAP_EXTRACT(SplitList_Lazy_RCU_SHB_dyn_less)\
-    TEST_MAP_EXTRACT(SplitList_Lazy_RCU_SHB_st_less)\
-    TEST_MAP_EXTRACT(SplitList_Lazy_RCU_SHB_st_less_stat)\
-    TEST_MAP_EXTRACT(SplitList_Lazy_RCU_SHT_dyn_cmp)\
-    TEST_MAP_EXTRACT(SplitList_Lazy_RCU_SHT_dyn_cmp_stat)\
-    TEST_MAP_EXTRACT(SplitList_Lazy_RCU_SHT_st_cmp)\
-    TEST_MAP_EXTRACT(SplitList_Lazy_RCU_SHT_dyn_less)\
-    TEST_MAP_EXTRACT(SplitList_Lazy_RCU_SHT_st_less)\
-TEST_MAP_EXTRACT(SplitList_Lazy_RCU_SHT_st_less_stat)
+    CDSUNIT_DECLARE_TEST(SplitList_Michael_RCU_SHB_dyn_cmp)\
+    CDSUNIT_DECLARE_TEST(SplitList_Michael_RCU_SHB_dyn_cmp_stat)\
+    CDSUNIT_DECLARE_TEST(SplitList_Michael_RCU_SHB_st_cmp)\
+    CDSUNIT_DECLARE_TEST(SplitList_Michael_RCU_SHB_dyn_less)\
+    CDSUNIT_DECLARE_TEST(SplitList_Michael_RCU_SHB_st_less)\
+    CDSUNIT_DECLARE_TEST(SplitList_Michael_RCU_SHB_st_less_stat)\
+    CDSUNIT_DECLARE_TEST(SplitList_Michael_RCU_SHT_dyn_cmp)\
+    CDSUNIT_DECLARE_TEST(SplitList_Michael_RCU_SHT_dyn_cmp_stat)\
+    CDSUNIT_DECLARE_TEST(SplitList_Michael_RCU_SHT_st_cmp)\
+    CDSUNIT_DECLARE_TEST(SplitList_Michael_RCU_SHT_dyn_less)\
+    CDSUNIT_DECLARE_TEST(SplitList_Michael_RCU_SHT_st_less)\
+    CDSUNIT_DECLARE_TEST(SplitList_Michael_RCU_SHT_st_less_stat)\
+    CDSUNIT_DECLARE_TEST(SplitList_Lazy_RCU_SHB_dyn_cmp)\
+    CDSUNIT_DECLARE_TEST(SplitList_Lazy_RCU_SHB_dyn_cmp_stat)\
+    CDSUNIT_DECLARE_TEST(SplitList_Lazy_RCU_SHB_st_cmp)\
+    CDSUNIT_DECLARE_TEST(SplitList_Lazy_RCU_SHB_dyn_less)\
+    CDSUNIT_DECLARE_TEST(SplitList_Lazy_RCU_SHB_st_less)\
+    CDSUNIT_DECLARE_TEST(SplitList_Lazy_RCU_SHB_st_less_stat)\
+    CDSUNIT_DECLARE_TEST(SplitList_Lazy_RCU_SHT_dyn_cmp)\
+    CDSUNIT_DECLARE_TEST(SplitList_Lazy_RCU_SHT_dyn_cmp_stat)\
+    CDSUNIT_DECLARE_TEST(SplitList_Lazy_RCU_SHT_st_cmp)\
+    CDSUNIT_DECLARE_TEST(SplitList_Lazy_RCU_SHT_dyn_less)\
+    CDSUNIT_DECLARE_TEST(SplitList_Lazy_RCU_SHT_st_less)\
+    CDSUNIT_DECLARE_TEST(SplitList_Lazy_RCU_SHT_st_less_stat)
+
+#   define CDSUNIT_DEFINE_SplitList_RCU_signal( IMPL, C )  \
+    TEST_MAP_EXTRACT(IMPL, C, SplitList_Michael_RCU_SHB_dyn_cmp)\
+    TEST_MAP_EXTRACT(IMPL, C, SplitList_Michael_RCU_SHB_dyn_cmp_stat)\
+    TEST_MAP_EXTRACT(IMPL, C, SplitList_Michael_RCU_SHB_st_cmp)\
+    TEST_MAP_EXTRACT(IMPL, C, SplitList_Michael_RCU_SHB_dyn_less)\
+    TEST_MAP_EXTRACT(IMPL, C, SplitList_Michael_RCU_SHB_st_less)\
+    TEST_MAP_EXTRACT(IMPL, C, SplitList_Michael_RCU_SHB_st_less_stat)\
+    TEST_MAP_EXTRACT(IMPL, C, SplitList_Michael_RCU_SHT_dyn_cmp)\
+    TEST_MAP_EXTRACT(IMPL, C, SplitList_Michael_RCU_SHT_dyn_cmp_stat)\
+    TEST_MAP_EXTRACT(IMPL, C, SplitList_Michael_RCU_SHT_st_cmp)\
+    TEST_MAP_EXTRACT(IMPL, C, SplitList_Michael_RCU_SHT_dyn_less)\
+    TEST_MAP_EXTRACT(IMPL, C, SplitList_Michael_RCU_SHT_st_less)\
+    TEST_MAP_EXTRACT(IMPL, C, SplitList_Michael_RCU_SHT_st_less_stat)\
+    TEST_MAP_EXTRACT(IMPL, C, SplitList_Lazy_RCU_SHB_dyn_cmp)\
+    TEST_MAP_EXTRACT(IMPL, C, SplitList_Lazy_RCU_SHB_dyn_cmp_stat)\
+    TEST_MAP_EXTRACT(IMPL, C, SplitList_Lazy_RCU_SHB_st_cmp)\
+    TEST_MAP_EXTRACT(IMPL, C, SplitList_Lazy_RCU_SHB_dyn_less)\
+    TEST_MAP_EXTRACT(IMPL, C, SplitList_Lazy_RCU_SHB_st_less)\
+    TEST_MAP_EXTRACT(IMPL, C, SplitList_Lazy_RCU_SHB_st_less_stat)\
+    TEST_MAP_EXTRACT(IMPL, C, SplitList_Lazy_RCU_SHT_dyn_cmp)\
+    TEST_MAP_EXTRACT(IMPL, C, SplitList_Lazy_RCU_SHT_dyn_cmp_stat)\
+    TEST_MAP_EXTRACT(IMPL, C, SplitList_Lazy_RCU_SHT_st_cmp)\
+    TEST_MAP_EXTRACT(IMPL, C, SplitList_Lazy_RCU_SHT_dyn_less)\
+    TEST_MAP_EXTRACT(IMPL, C, SplitList_Lazy_RCU_SHT_st_less)\
+    TEST_MAP_EXTRACT(IMPL, C, SplitList_Lazy_RCU_SHT_st_less_stat)
 
 #   define CDSUNIT_TEST_SplitList_RCU_signal \
     CPPUNIT_TEST(SplitList_Michael_RCU_SHB_dyn_cmp)\
@@ -152,72 +222,136 @@ TEST_MAP_EXTRACT(SplitList_Lazy_RCU_SHT_st_less_stat)
 
 #else
 #   define CDSUNIT_DECLARE_SplitList_RCU_signal
+#   define CDSUNIT_DEFINE_SplitList_RCU_signal( IMPL, C )
 #   define CDSUNIT_TEST_SplitList_RCU_signal
 #endif
 
-#define CDSUNIT_DECLARE_SplitList  \
-    TEST_MAP_EXTRACT(SplitList_Michael_HP_dyn_cmp)\
-    TEST_MAP_EXTRACT(SplitList_Michael_HP_dyn_cmp_stat)\
-    TEST_MAP_EXTRACT(SplitList_Michael_HP_st_cmp)\
-    TEST_MAP_EXTRACT(SplitList_Michael_HP_dyn_less)\
-    TEST_MAP_EXTRACT(SplitList_Michael_HP_st_less)\
-    TEST_MAP_EXTRACT(SplitList_Michael_HP_st_less_stat)\
-    TEST_MAP_EXTRACT(SplitList_Michael_DHP_dyn_cmp)\
-    TEST_MAP_EXTRACT(SplitList_Michael_DHP_dyn_cmp_stat)\
-    TEST_MAP_EXTRACT(SplitList_Michael_DHP_st_cmp)\
-    TEST_MAP_EXTRACT(SplitList_Michael_DHP_dyn_less)\
-    TEST_MAP_EXTRACT(SplitList_Michael_DHP_st_less)\
-    TEST_MAP_EXTRACT(SplitList_Michael_DHP_st_less_stat)\
-    TEST_MAP_EXTRACT(SplitList_Michael_RCU_GPI_dyn_cmp)\
-    TEST_MAP_EXTRACT(SplitList_Michael_RCU_GPI_dyn_cmp_stat)\
-    TEST_MAP_EXTRACT(SplitList_Michael_RCU_GPI_st_cmp)\
-    TEST_MAP_EXTRACT(SplitList_Michael_RCU_GPI_dyn_less)\
-    TEST_MAP_EXTRACT(SplitList_Michael_RCU_GPI_st_less)\
-    TEST_MAP_EXTRACT(SplitList_Michael_RCU_GPI_st_less_stat)\
-    TEST_MAP_EXTRACT(SplitList_Michael_RCU_GPB_dyn_cmp)\
-    TEST_MAP_EXTRACT(SplitList_Michael_RCU_GPB_dyn_cmp_stat)\
-    TEST_MAP_EXTRACT(SplitList_Michael_RCU_GPB_st_cmp)\
-    TEST_MAP_EXTRACT(SplitList_Michael_RCU_GPB_dyn_less)\
-    TEST_MAP_EXTRACT(SplitList_Michael_RCU_GPB_st_less)\
-    TEST_MAP_EXTRACT(SplitList_Michael_RCU_GPB_st_less_stat)\
-    TEST_MAP_EXTRACT(SplitList_Michael_RCU_GPT_dyn_cmp)\
-    TEST_MAP_EXTRACT(SplitList_Michael_RCU_GPT_dyn_cmp_stat)\
-    TEST_MAP_EXTRACT(SplitList_Michael_RCU_GPT_st_cmp)\
-    TEST_MAP_EXTRACT(SplitList_Michael_RCU_GPT_dyn_less)\
-    TEST_MAP_EXTRACT(SplitList_Michael_RCU_GPT_st_less)\
-    TEST_MAP_EXTRACT(SplitList_Michael_RCU_GPT_st_less_stat)\
-    TEST_MAP_EXTRACT(SplitList_Lazy_HP_dyn_cmp)\
-    TEST_MAP_EXTRACT(SplitList_Lazy_HP_dyn_cmp_stat)\
-    TEST_MAP_EXTRACT(SplitList_Lazy_HP_st_cmp)\
-    TEST_MAP_EXTRACT(SplitList_Lazy_HP_dyn_less)\
-    TEST_MAP_EXTRACT(SplitList_Lazy_HP_st_less)\
-    TEST_MAP_EXTRACT(SplitList_Lazy_HP_st_less_stat)\
-    TEST_MAP_EXTRACT(SplitList_Lazy_DHP_dyn_cmp)\
-    TEST_MAP_EXTRACT(SplitList_Lazy_DHP_dyn_cmp_stat)\
-    TEST_MAP_EXTRACT(SplitList_Lazy_DHP_st_cmp)\
-    TEST_MAP_EXTRACT(SplitList_Lazy_DHP_dyn_less)\
-    TEST_MAP_EXTRACT(SplitList_Lazy_DHP_st_less)\
-    TEST_MAP_EXTRACT(SplitList_Lazy_DHP_st_less_stat)\
-    TEST_MAP_EXTRACT(SplitList_Lazy_RCU_GPI_dyn_cmp)\
-    TEST_MAP_EXTRACT(SplitList_Lazy_RCU_GPI_dyn_cmp_stat)\
-    TEST_MAP_EXTRACT(SplitList_Lazy_RCU_GPI_st_cmp)\
-    TEST_MAP_EXTRACT(SplitList_Lazy_RCU_GPI_dyn_less)\
-    TEST_MAP_EXTRACT(SplitList_Lazy_RCU_GPI_st_less)\
-    TEST_MAP_EXTRACT(SplitList_Lazy_RCU_GPI_st_less_stat)\
-    TEST_MAP_EXTRACT(SplitList_Lazy_RCU_GPB_dyn_cmp)\
-    TEST_MAP_EXTRACT(SplitList_Lazy_RCU_GPB_dyn_cmp_stat)\
-    TEST_MAP_EXTRACT(SplitList_Lazy_RCU_GPB_st_cmp)\
-    TEST_MAP_EXTRACT(SplitList_Lazy_RCU_GPB_dyn_less)\
-    TEST_MAP_EXTRACT(SplitList_Lazy_RCU_GPB_st_less)\
-    TEST_MAP_EXTRACT(SplitList_Lazy_RCU_GPB_st_less_stat)\
-    TEST_MAP_EXTRACT(SplitList_Lazy_RCU_GPT_dyn_cmp)\
-    TEST_MAP_EXTRACT(SplitList_Lazy_RCU_GPT_dyn_cmp_stat)\
-    TEST_MAP_EXTRACT(SplitList_Lazy_RCU_GPT_st_cmp)\
-    TEST_MAP_EXTRACT(SplitList_Lazy_RCU_GPT_dyn_less)\
-    TEST_MAP_EXTRACT(SplitList_Lazy_RCU_GPT_st_less)\
-    TEST_MAP_EXTRACT(SplitList_Lazy_RCU_GPT_st_less_stat)\
+#define CDSUNIT_DECLARE_SplitList \
+    CDSUNIT_DECLARE_TEST(SplitList_Michael_HP_dyn_cmp)\
+    CDSUNIT_DECLARE_TEST(SplitList_Michael_HP_dyn_cmp_stat)\
+    CDSUNIT_DECLARE_TEST(SplitList_Michael_HP_st_cmp)\
+    CDSUNIT_DECLARE_TEST(SplitList_Michael_HP_dyn_less)\
+    CDSUNIT_DECLARE_TEST(SplitList_Michael_HP_st_less)\
+    CDSUNIT_DECLARE_TEST(SplitList_Michael_HP_st_less_stat)\
+    CDSUNIT_DECLARE_TEST(SplitList_Michael_DHP_dyn_cmp)\
+    CDSUNIT_DECLARE_TEST(SplitList_Michael_DHP_dyn_cmp_stat)\
+    CDSUNIT_DECLARE_TEST(SplitList_Michael_DHP_st_cmp)\
+    CDSUNIT_DECLARE_TEST(SplitList_Michael_DHP_dyn_less)\
+    CDSUNIT_DECLARE_TEST(SplitList_Michael_DHP_st_less)\
+    CDSUNIT_DECLARE_TEST(SplitList_Michael_DHP_st_less_stat)\
+    CDSUNIT_DECLARE_TEST(SplitList_Michael_RCU_GPI_dyn_cmp)\
+    CDSUNIT_DECLARE_TEST(SplitList_Michael_RCU_GPI_dyn_cmp_stat)\
+    CDSUNIT_DECLARE_TEST(SplitList_Michael_RCU_GPI_st_cmp)\
+    CDSUNIT_DECLARE_TEST(SplitList_Michael_RCU_GPI_dyn_less)\
+    CDSUNIT_DECLARE_TEST(SplitList_Michael_RCU_GPI_st_less)\
+    CDSUNIT_DECLARE_TEST(SplitList_Michael_RCU_GPI_st_less_stat)\
+    CDSUNIT_DECLARE_TEST(SplitList_Michael_RCU_GPB_dyn_cmp)\
+    CDSUNIT_DECLARE_TEST(SplitList_Michael_RCU_GPB_dyn_cmp_stat)\
+    CDSUNIT_DECLARE_TEST(SplitList_Michael_RCU_GPB_st_cmp)\
+    CDSUNIT_DECLARE_TEST(SplitList_Michael_RCU_GPB_dyn_less)\
+    CDSUNIT_DECLARE_TEST(SplitList_Michael_RCU_GPB_st_less)\
+    CDSUNIT_DECLARE_TEST(SplitList_Michael_RCU_GPB_st_less_stat)\
+    CDSUNIT_DECLARE_TEST(SplitList_Michael_RCU_GPT_dyn_cmp)\
+    CDSUNIT_DECLARE_TEST(SplitList_Michael_RCU_GPT_dyn_cmp_stat)\
+    CDSUNIT_DECLARE_TEST(SplitList_Michael_RCU_GPT_st_cmp)\
+    CDSUNIT_DECLARE_TEST(SplitList_Michael_RCU_GPT_dyn_less)\
+    CDSUNIT_DECLARE_TEST(SplitList_Michael_RCU_GPT_st_less)\
+    CDSUNIT_DECLARE_TEST(SplitList_Michael_RCU_GPT_st_less_stat)\
+    CDSUNIT_DECLARE_TEST(SplitList_Lazy_HP_dyn_cmp)\
+    CDSUNIT_DECLARE_TEST(SplitList_Lazy_HP_dyn_cmp_stat)\
+    CDSUNIT_DECLARE_TEST(SplitList_Lazy_HP_st_cmp)\
+    CDSUNIT_DECLARE_TEST(SplitList_Lazy_HP_dyn_less)\
+    CDSUNIT_DECLARE_TEST(SplitList_Lazy_HP_st_less)\
+    CDSUNIT_DECLARE_TEST(SplitList_Lazy_HP_st_less_stat)\
+    CDSUNIT_DECLARE_TEST(SplitList_Lazy_DHP_dyn_cmp)\
+    CDSUNIT_DECLARE_TEST(SplitList_Lazy_DHP_dyn_cmp_stat)\
+    CDSUNIT_DECLARE_TEST(SplitList_Lazy_DHP_st_cmp)\
+    CDSUNIT_DECLARE_TEST(SplitList_Lazy_DHP_dyn_less)\
+    CDSUNIT_DECLARE_TEST(SplitList_Lazy_DHP_st_less)\
+    CDSUNIT_DECLARE_TEST(SplitList_Lazy_DHP_st_less_stat)\
+    CDSUNIT_DECLARE_TEST(SplitList_Lazy_RCU_GPI_dyn_cmp)\
+    CDSUNIT_DECLARE_TEST(SplitList_Lazy_RCU_GPI_dyn_cmp_stat)\
+    CDSUNIT_DECLARE_TEST(SplitList_Lazy_RCU_GPI_st_cmp)\
+    CDSUNIT_DECLARE_TEST(SplitList_Lazy_RCU_GPI_dyn_less)\
+    CDSUNIT_DECLARE_TEST(SplitList_Lazy_RCU_GPI_st_less)\
+    CDSUNIT_DECLARE_TEST(SplitList_Lazy_RCU_GPI_st_less_stat)\
+    CDSUNIT_DECLARE_TEST(SplitList_Lazy_RCU_GPB_dyn_cmp)\
+    CDSUNIT_DECLARE_TEST(SplitList_Lazy_RCU_GPB_dyn_cmp_stat)\
+    CDSUNIT_DECLARE_TEST(SplitList_Lazy_RCU_GPB_st_cmp)\
+    CDSUNIT_DECLARE_TEST(SplitList_Lazy_RCU_GPB_dyn_less)\
+    CDSUNIT_DECLARE_TEST(SplitList_Lazy_RCU_GPB_st_less)\
+    CDSUNIT_DECLARE_TEST(SplitList_Lazy_RCU_GPB_st_less_stat)\
+    CDSUNIT_DECLARE_TEST(SplitList_Lazy_RCU_GPT_dyn_cmp)\
+    CDSUNIT_DECLARE_TEST(SplitList_Lazy_RCU_GPT_dyn_cmp_stat)\
+    CDSUNIT_DECLARE_TEST(SplitList_Lazy_RCU_GPT_st_cmp)\
+    CDSUNIT_DECLARE_TEST(SplitList_Lazy_RCU_GPT_dyn_less)\
+    CDSUNIT_DECLARE_TEST(SplitList_Lazy_RCU_GPT_st_less)\
+    CDSUNIT_DECLARE_TEST(SplitList_Lazy_RCU_GPT_st_less_stat)\
     CDSUNIT_DECLARE_SplitList_RCU_signal
 
+#define CDSUNIT_DEFINE_SplitList( IMPL, C ) \
+    TEST_MAP_EXTRACT(IMPL, C, SplitList_Michael_HP_dyn_cmp)\
+    TEST_MAP_EXTRACT(IMPL, C, SplitList_Michael_HP_dyn_cmp_stat)\
+    TEST_MAP_EXTRACT(IMPL, C, SplitList_Michael_HP_st_cmp)\
+    TEST_MAP_EXTRACT(IMPL, C, SplitList_Michael_HP_dyn_less)\
+    TEST_MAP_EXTRACT(IMPL, C, SplitList_Michael_HP_st_less)\
+    TEST_MAP_EXTRACT(IMPL, C, SplitList_Michael_HP_st_less_stat)\
+    TEST_MAP_EXTRACT(IMPL, C, SplitList_Michael_DHP_dyn_cmp)\
+    TEST_MAP_EXTRACT(IMPL, C, SplitList_Michael_DHP_dyn_cmp_stat)\
+    TEST_MAP_EXTRACT(IMPL, C, SplitList_Michael_DHP_st_cmp)\
+    TEST_MAP_EXTRACT(IMPL, C, SplitList_Michael_DHP_dyn_less)\
+    TEST_MAP_EXTRACT(IMPL, C, SplitList_Michael_DHP_st_less)\
+    TEST_MAP_EXTRACT(IMPL, C, SplitList_Michael_DHP_st_less_stat)\
+    TEST_MAP_EXTRACT(IMPL, C, SplitList_Michael_RCU_GPI_dyn_cmp)\
+    TEST_MAP_EXTRACT(IMPL, C, SplitList_Michael_RCU_GPI_dyn_cmp_stat)\
+    TEST_MAP_EXTRACT(IMPL, C, SplitList_Michael_RCU_GPI_st_cmp)\
+    TEST_MAP_EXTRACT(IMPL, C, SplitList_Michael_RCU_GPI_dyn_less)\
+    TEST_MAP_EXTRACT(IMPL, C, SplitList_Michael_RCU_GPI_st_less)\
+    TEST_MAP_EXTRACT(IMPL, C, SplitList_Michael_RCU_GPI_st_less_stat)\
+    TEST_MAP_EXTRACT(IMPL, C, SplitList_Michael_RCU_GPB_dyn_cmp)\
+    TEST_MAP_EXTRACT(IMPL, C, SplitList_Michael_RCU_GPB_dyn_cmp_stat)\
+    TEST_MAP_EXTRACT(IMPL, C, SplitList_Michael_RCU_GPB_st_cmp)\
+    TEST_MAP_EXTRACT(IMPL, C, SplitList_Michael_RCU_GPB_dyn_less)\
+    TEST_MAP_EXTRACT(IMPL, C, SplitList_Michael_RCU_GPB_st_less)\
+    TEST_MAP_EXTRACT(IMPL, C, SplitList_Michael_RCU_GPB_st_less_stat)\
+    TEST_MAP_EXTRACT(IMPL, C, SplitList_Michael_RCU_GPT_dyn_cmp)\
+    TEST_MAP_EXTRACT(IMPL, C, SplitList_Michael_RCU_GPT_dyn_cmp_stat)\
+    TEST_MAP_EXTRACT(IMPL, C, SplitList_Michael_RCU_GPT_st_cmp)\
+    TEST_MAP_EXTRACT(IMPL, C, SplitList_Michael_RCU_GPT_dyn_less)\
+    TEST_MAP_EXTRACT(IMPL, C, SplitList_Michael_RCU_GPT_st_less)\
+    TEST_MAP_EXTRACT(IMPL, C, SplitList_Michael_RCU_GPT_st_less_stat)\
+    TEST_MAP_EXTRACT(IMPL, C, SplitList_Lazy_HP_dyn_cmp)\
+    TEST_MAP_EXTRACT(IMPL, C, SplitList_Lazy_HP_dyn_cmp_stat)\
+    TEST_MAP_EXTRACT(IMPL, C, SplitList_Lazy_HP_st_cmp)\
+    TEST_MAP_EXTRACT(IMPL, C, SplitList_Lazy_HP_dyn_less)\
+    TEST_MAP_EXTRACT(IMPL, C, SplitList_Lazy_HP_st_less)\
+    TEST_MAP_EXTRACT(IMPL, C, SplitList_Lazy_HP_st_less_stat)\
+    TEST_MAP_EXTRACT(IMPL, C, SplitList_Lazy_DHP_dyn_cmp)\
+    TEST_MAP_EXTRACT(IMPL, C, SplitList_Lazy_DHP_dyn_cmp_stat)\
+    TEST_MAP_EXTRACT(IMPL, C, SplitList_Lazy_DHP_st_cmp)\
+    TEST_MAP_EXTRACT(IMPL, C, SplitList_Lazy_DHP_dyn_less)\
+    TEST_MAP_EXTRACT(IMPL, C, SplitList_Lazy_DHP_st_less)\
+    TEST_MAP_EXTRACT(IMPL, C, SplitList_Lazy_DHP_st_less_stat)\
+    TEST_MAP_EXTRACT(IMPL, C, SplitList_Lazy_RCU_GPI_dyn_cmp)\
+    TEST_MAP_EXTRACT(IMPL, C, SplitList_Lazy_RCU_GPI_dyn_cmp_stat)\
+    TEST_MAP_EXTRACT(IMPL, C, SplitList_Lazy_RCU_GPI_st_cmp)\
+    TEST_MAP_EXTRACT(IMPL, C, SplitList_Lazy_RCU_GPI_dyn_less)\
+    TEST_MAP_EXTRACT(IMPL, C, SplitList_Lazy_RCU_GPI_st_less)\
+    TEST_MAP_EXTRACT(IMPL, C, SplitList_Lazy_RCU_GPI_st_less_stat)\
+    TEST_MAP_EXTRACT(IMPL, C, SplitList_Lazy_RCU_GPB_dyn_cmp)\
+    TEST_MAP_EXTRACT(IMPL, C, SplitList_Lazy_RCU_GPB_dyn_cmp_stat)\
+    TEST_MAP_EXTRACT(IMPL, C, SplitList_Lazy_RCU_GPB_st_cmp)\
+    TEST_MAP_EXTRACT(IMPL, C, SplitList_Lazy_RCU_GPB_dyn_less)\
+    TEST_MAP_EXTRACT(IMPL, C, SplitList_Lazy_RCU_GPB_st_less)\
+    TEST_MAP_EXTRACT(IMPL, C, SplitList_Lazy_RCU_GPB_st_less_stat)\
+    TEST_MAP_EXTRACT(IMPL, C, SplitList_Lazy_RCU_GPT_dyn_cmp)\
+    TEST_MAP_EXTRACT(IMPL, C, SplitList_Lazy_RCU_GPT_dyn_cmp_stat)\
+    TEST_MAP_EXTRACT(IMPL, C, SplitList_Lazy_RCU_GPT_st_cmp)\
+    TEST_MAP_EXTRACT(IMPL, C, SplitList_Lazy_RCU_GPT_dyn_less)\
+    TEST_MAP_EXTRACT(IMPL, C, SplitList_Lazy_RCU_GPT_st_less)\
+    TEST_MAP_EXTRACT(IMPL, C, SplitList_Lazy_RCU_GPT_st_less_stat)\
+    CDSUNIT_DEFINE_SplitList_RCU_signal( IMPL, C )
+
 #define CDSUNIT_TEST_SplitList  \
     CPPUNIT_TEST(SplitList_Michael_HP_dyn_cmp)\
     CPPUNIT_TEST(SplitList_Michael_HP_dyn_cmp_stat)\
@@ -282,14 +416,24 @@ TEST_MAP_EXTRACT(SplitList_Lazy_RCU_SHT_st_less_stat)
     CDSUNIT_TEST_SplitList_RCU_signal
 
 #define CDSUNIT_DECLARE_SplitList_nogc  \
-    TEST_MAP(SplitList_Michael_NOGC_dyn_cmp)\
-    TEST_MAP(SplitList_Michael_NOGC_st_cmp)\
-    TEST_MAP(SplitList_Michael_NOGC_dyn_less)\
-    TEST_MAP(SplitList_Michael_NOGC_st_less)\
-    TEST_MAP(SplitList_Lazy_NOGC_dyn_cmp)\
-    TEST_MAP(SplitList_Lazy_NOGC_st_cmp)\
-    TEST_MAP(SplitList_Lazy_NOGC_dyn_less)\
-    TEST_MAP(SplitList_Lazy_NOGC_st_less)
+    CDSUNIT_DECLARE_TEST(SplitList_Michael_NOGC_dyn_cmp)\
+    CDSUNIT_DECLARE_TEST(SplitList_Michael_NOGC_st_cmp)\
+    CDSUNIT_DECLARE_TEST(SplitList_Michael_NOGC_dyn_less)\
+    CDSUNIT_DECLARE_TEST(SplitList_Michael_NOGC_st_less)\
+    CDSUNIT_DECLARE_TEST(SplitList_Lazy_NOGC_dyn_cmp)\
+    CDSUNIT_DECLARE_TEST(SplitList_Lazy_NOGC_st_cmp)\
+    CDSUNIT_DECLARE_TEST(SplitList_Lazy_NOGC_dyn_less)\
+    CDSUNIT_DECLARE_TEST(SplitList_Lazy_NOGC_st_less)
+
+#define CDSUNIT_DEFINE_SplitList_nogc( IMPL, C )  \
+    TEST_MAP(IMPL, C, SplitList_Michael_NOGC_dyn_cmp)\
+    TEST_MAP(IMPL, C, SplitList_Michael_NOGC_st_cmp)\
+    TEST_MAP(IMPL, C, SplitList_Michael_NOGC_dyn_less)\
+    TEST_MAP(IMPL, C, SplitList_Michael_NOGC_st_less)\
+    TEST_MAP(IMPL, C, SplitList_Lazy_NOGC_dyn_cmp)\
+    TEST_MAP(IMPL, C, SplitList_Lazy_NOGC_st_cmp)\
+    TEST_MAP(IMPL, C, SplitList_Lazy_NOGC_dyn_less)\
+    TEST_MAP(IMPL, C, SplitList_Lazy_NOGC_st_less)
 
 #define CDSUNIT_TEST_SplitList_nogc  \
     CPPUNIT_TEST(SplitList_Michael_NOGC_dyn_cmp)\
@@ -303,14 +447,24 @@ TEST_MAP_EXTRACT(SplitList_Lazy_RCU_SHT_st_less_stat)
 
 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
 #   define CDSUNIT_DECLARE_SkipListMap_RCU_signal \
-    TEST_MAP_NOLF_EXTRACT(SkipListMap_rcu_shb_less_pascal)\
-    TEST_MAP_NOLF_EXTRACT(SkipListMap_rcu_shb_cmp_pascal_stat)\
-    TEST_MAP_NOLF_EXTRACT(SkipListMap_rcu_shb_less_xorshift)\
-    TEST_MAP_NOLF_EXTRACT(SkipListMap_rcu_shb_cmp_xorshift_stat)\
-    TEST_MAP_NOLF_EXTRACT(SkipListMap_rcu_sht_less_pascal)\
-    TEST_MAP_NOLF_EXTRACT(SkipListMap_rcu_sht_cmp_pascal_stat)\
-    TEST_MAP_NOLF_EXTRACT(SkipListMap_rcu_sht_less_xorshift)\
-    TEST_MAP_NOLF_EXTRACT(SkipListMap_rcu_sht_cmp_xorshift_stat)
+    CDSUNIT_DECLARE_TEST(SkipListMap_rcu_shb_less_pascal)\
+    CDSUNIT_DECLARE_TEST(SkipListMap_rcu_shb_cmp_pascal_stat)\
+    CDSUNIT_DECLARE_TEST(SkipListMap_rcu_shb_less_xorshift)\
+    CDSUNIT_DECLARE_TEST(SkipListMap_rcu_shb_cmp_xorshift_stat)\
+    CDSUNIT_DECLARE_TEST(SkipListMap_rcu_sht_less_pascal)\
+    CDSUNIT_DECLARE_TEST(SkipListMap_rcu_sht_cmp_pascal_stat)\
+    CDSUNIT_DECLARE_TEST(SkipListMap_rcu_sht_less_xorshift)\
+    CDSUNIT_DECLARE_TEST(SkipListMap_rcu_sht_cmp_xorshift_stat)
+
+#   define CDSUNIT_DEFINE_SkipListMap_RCU_signal( IMPL, C ) \
+    TEST_MAP_NOLF_EXTRACT(IMPL, C, SkipListMap_rcu_shb_less_pascal)\
+    TEST_MAP_NOLF_EXTRACT(IMPL, C, SkipListMap_rcu_shb_cmp_pascal_stat)\
+    TEST_MAP_NOLF_EXTRACT(IMPL, C, SkipListMap_rcu_shb_less_xorshift)\
+    TEST_MAP_NOLF_EXTRACT(IMPL, C, SkipListMap_rcu_shb_cmp_xorshift_stat)\
+    TEST_MAP_NOLF_EXTRACT(IMPL, C, SkipListMap_rcu_sht_less_pascal)\
+    TEST_MAP_NOLF_EXTRACT(IMPL, C, SkipListMap_rcu_sht_cmp_pascal_stat)\
+    TEST_MAP_NOLF_EXTRACT(IMPL, C, SkipListMap_rcu_sht_less_xorshift)\
+    TEST_MAP_NOLF_EXTRACT(IMPL, C, SkipListMap_rcu_sht_cmp_xorshift_stat)
 
 #   define CDSUNIT_TEST_SkipListMap_RCU_signal \
     CPPUNIT_TEST(SkipListMap_rcu_shb_less_pascal)\
@@ -324,32 +478,55 @@ TEST_MAP_EXTRACT(SplitList_Lazy_RCU_SHT_st_less_stat)
 
 #else
 #   define CDSUNIT_DECLARE_SkipListMap_RCU_signal
+#   define CDSUNIT_DEFINE_SkipListMap_RCU_signal( IMPL, C )
 #   define CDSUNIT_TEST_SkipListMap_RCU_signal
 #endif
 
 #define CDSUNIT_DECLARE_SkipListMap \
-    TEST_MAP_NOLF_EXTRACT(SkipListMap_hp_less_pascal)\
-    TEST_MAP_NOLF_EXTRACT(SkipListMap_hp_cmp_pascal_stat)\
-    TEST_MAP_NOLF_EXTRACT(SkipListMap_hp_less_xorshift)\
-    TEST_MAP_NOLF_EXTRACT(SkipListMap_hp_cmp_xorshift_stat)\
-    TEST_MAP_NOLF_EXTRACT(SkipListMap_dhp_less_pascal)\
-    TEST_MAP_NOLF_EXTRACT(SkipListMap_dhp_cmp_pascal_stat)\
-    TEST_MAP_NOLF_EXTRACT(SkipListMap_dhp_less_xorshift)\
-    TEST_MAP_NOLF_EXTRACT(SkipListMap_dhp_cmp_xorshift_stat)\
-    TEST_MAP_NOLF_EXTRACT(SkipListMap_rcu_gpi_less_pascal)\
-    TEST_MAP_NOLF_EXTRACT(SkipListMap_rcu_gpi_cmp_pascal_stat)\
-    TEST_MAP_NOLF_EXTRACT(SkipListMap_rcu_gpi_less_xorshift)\
-    TEST_MAP_NOLF_EXTRACT(SkipListMap_rcu_gpi_cmp_xorshift_stat)\
-    TEST_MAP_NOLF_EXTRACT(SkipListMap_rcu_gpb_less_pascal)\
-    TEST_MAP_NOLF_EXTRACT(SkipListMap_rcu_gpb_cmp_pascal_stat)\
-    TEST_MAP_NOLF_EXTRACT(SkipListMap_rcu_gpb_less_xorshift)\
-    TEST_MAP_NOLF_EXTRACT(SkipListMap_rcu_gpb_cmp_xorshift_stat)\
-    TEST_MAP_NOLF_EXTRACT(SkipListMap_rcu_gpt_less_pascal)\
-    TEST_MAP_NOLF_EXTRACT(SkipListMap_rcu_gpt_cmp_pascal_stat)\
-    TEST_MAP_NOLF_EXTRACT(SkipListMap_rcu_gpt_less_xorshift)\
-    TEST_MAP_NOLF_EXTRACT(SkipListMap_rcu_gpt_cmp_xorshift_stat)\
+    CDSUNIT_DECLARE_TEST(SkipListMap_hp_less_pascal)\
+    CDSUNIT_DECLARE_TEST(SkipListMap_hp_cmp_pascal_stat)\
+    CDSUNIT_DECLARE_TEST(SkipListMap_hp_less_xorshift)\
+    CDSUNIT_DECLARE_TEST(SkipListMap_hp_cmp_xorshift_stat)\
+    CDSUNIT_DECLARE_TEST(SkipListMap_dhp_less_pascal)\
+    CDSUNIT_DECLARE_TEST(SkipListMap_dhp_cmp_pascal_stat)\
+    CDSUNIT_DECLARE_TEST(SkipListMap_dhp_less_xorshift)\
+    CDSUNIT_DECLARE_TEST(SkipListMap_dhp_cmp_xorshift_stat)\
+    CDSUNIT_DECLARE_TEST(SkipListMap_rcu_gpi_less_pascal)\
+    CDSUNIT_DECLARE_TEST(SkipListMap_rcu_gpi_cmp_pascal_stat)\
+    CDSUNIT_DECLARE_TEST(SkipListMap_rcu_gpi_less_xorshift)\
+    CDSUNIT_DECLARE_TEST(SkipListMap_rcu_gpi_cmp_xorshift_stat)\
+    CDSUNIT_DECLARE_TEST(SkipListMap_rcu_gpb_less_pascal)\
+    CDSUNIT_DECLARE_TEST(SkipListMap_rcu_gpb_cmp_pascal_stat)\
+    CDSUNIT_DECLARE_TEST(SkipListMap_rcu_gpb_less_xorshift)\
+    CDSUNIT_DECLARE_TEST(SkipListMap_rcu_gpb_cmp_xorshift_stat)\
+    CDSUNIT_DECLARE_TEST(SkipListMap_rcu_gpt_less_pascal)\
+    CDSUNIT_DECLARE_TEST(SkipListMap_rcu_gpt_cmp_pascal_stat)\
+    CDSUNIT_DECLARE_TEST(SkipListMap_rcu_gpt_less_xorshift)\
+    CDSUNIT_DECLARE_TEST(SkipListMap_rcu_gpt_cmp_xorshift_stat)\
     CDSUNIT_DECLARE_SkipListMap_RCU_signal
 
+#define CDSUNIT_DEFINE_SkipListMap( IMPL, C ) \
+    TEST_MAP_NOLF_EXTRACT(IMPL, C, SkipListMap_hp_less_pascal)\
+    TEST_MAP_NOLF_EXTRACT(IMPL, C, SkipListMap_hp_cmp_pascal_stat)\
+    TEST_MAP_NOLF_EXTRACT(IMPL, C, SkipListMap_hp_less_xorshift)\
+    TEST_MAP_NOLF_EXTRACT(IMPL, C, SkipListMap_hp_cmp_xorshift_stat)\
+    TEST_MAP_NOLF_EXTRACT(IMPL, C, SkipListMap_dhp_less_pascal)\
+    TEST_MAP_NOLF_EXTRACT(IMPL, C, SkipListMap_dhp_cmp_pascal_stat)\
+    TEST_MAP_NOLF_EXTRACT(IMPL, C, SkipListMap_dhp_less_xorshift)\
+    TEST_MAP_NOLF_EXTRACT(IMPL, C, SkipListMap_dhp_cmp_xorshift_stat)\
+    TEST_MAP_NOLF_EXTRACT(IMPL, C, SkipListMap_rcu_gpi_less_pascal)\
+    TEST_MAP_NOLF_EXTRACT(IMPL, C, SkipListMap_rcu_gpi_cmp_pascal_stat)\
+    TEST_MAP_NOLF_EXTRACT(IMPL, C, SkipListMap_rcu_gpi_less_xorshift)\
+    TEST_MAP_NOLF_EXTRACT(IMPL, C, SkipListMap_rcu_gpi_cmp_xorshift_stat)\
+    TEST_MAP_NOLF_EXTRACT(IMPL, C, SkipListMap_rcu_gpb_less_pascal)\
+    TEST_MAP_NOLF_EXTRACT(IMPL, C, SkipListMap_rcu_gpb_cmp_pascal_stat)\
+    TEST_MAP_NOLF_EXTRACT(IMPL, C, SkipListMap_rcu_gpb_less_xorshift)\
+    TEST_MAP_NOLF_EXTRACT(IMPL, C, SkipListMap_rcu_gpb_cmp_xorshift_stat)\
+    TEST_MAP_NOLF_EXTRACT(IMPL, C, SkipListMap_rcu_gpt_less_pascal)\
+    TEST_MAP_NOLF_EXTRACT(IMPL, C, SkipListMap_rcu_gpt_cmp_pascal_stat)\
+    TEST_MAP_NOLF_EXTRACT(IMPL, C, SkipListMap_rcu_gpt_less_xorshift)\
+    TEST_MAP_NOLF_EXTRACT(IMPL, C, SkipListMap_rcu_gpt_cmp_xorshift_stat)\
+    CDSUNIT_DEFINE_SkipListMap_RCU_signal( IMPL, C )
 
 #define CDSUNIT_TEST_SkipListMap \
     CPPUNIT_TEST(SkipListMap_hp_less_pascal)\
@@ -375,10 +552,16 @@ TEST_MAP_EXTRACT(SplitList_Lazy_RCU_SHT_st_less_stat)
     CDSUNIT_TEST_SkipListMap_RCU_signal
 
 #define CDSUNIT_DECLARE_SkipListMap_nogc \
-    TEST_MAP_NOLF(SkipListMap_nogc_less_pascal)\
-    TEST_MAP_NOLF(SkipListMap_nogc_cmp_pascal_stat)\
-    TEST_MAP_NOLF(SkipListMap_nogc_less_xorshift)\
-    TEST_MAP_NOLF(SkipListMap_nogc_cmp_xorshift_stat)
+    CDSUNIT_DECLARE_TEST(SkipListMap_nogc_less_pascal)\
+    CDSUNIT_DECLARE_TEST(SkipListMap_nogc_cmp_pascal_stat)\
+    CDSUNIT_DECLARE_TEST(SkipListMap_nogc_less_xorshift)\
+    CDSUNIT_DECLARE_TEST(SkipListMap_nogc_cmp_xorshift_stat)
+
+#define CDSUNIT_DEFINE_SkipListMap_nogc( IMPL, C ) \
+    TEST_MAP_NOLF(IMPL, C, SkipListMap_nogc_less_pascal)\
+    TEST_MAP_NOLF(IMPL, C, SkipListMap_nogc_cmp_pascal_stat)\
+    TEST_MAP_NOLF(IMPL, C, SkipListMap_nogc_less_xorshift)\
+    TEST_MAP_NOLF(IMPL, C, SkipListMap_nogc_cmp_xorshift_stat)
 
 #define CDSUNIT_TEST_SkipListMap_nogc \
     CPPUNIT_TEST(SkipListMap_nogc_less_pascal)\
@@ -388,10 +571,16 @@ TEST_MAP_EXTRACT(SplitList_Lazy_RCU_SHT_st_less_stat)
 
 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
 #   define CDSUNIT_DECLARE_EllenBinTreeMap_RCU_signal \
-    TEST_MAP_NOLF_EXTRACT(EllenBinTreeMap_rcu_shb)\
-    TEST_MAP_NOLF_EXTRACT(EllenBinTreeMap_rcu_shb_stat)\
-    TEST_MAP_NOLF_EXTRACT(EllenBinTreeMap_rcu_sht)\
-    TEST_MAP_NOLF_EXTRACT(EllenBinTreeMap_rcu_sht_stat)
+    CDSUNIT_DECLARE_TEST(EllenBinTreeMap_rcu_shb)\
+    CDSUNIT_DECLARE_TEST(EllenBinTreeMap_rcu_shb_stat)\
+    CDSUNIT_DECLARE_TEST(EllenBinTreeMap_rcu_sht)\
+    CDSUNIT_DECLARE_TEST(EllenBinTreeMap_rcu_sht_stat)
+
+#   define CDSUNIT_DEFINE_EllenBinTreeMap_RCU_signal( IMPL, C ) \
+    TEST_MAP_NOLF_EXTRACT(IMPL, C, EllenBinTreeMap_rcu_shb)\
+    TEST_MAP_NOLF_EXTRACT(IMPL, C, EllenBinTreeMap_rcu_shb_stat)\
+    TEST_MAP_NOLF_EXTRACT(IMPL, C, EllenBinTreeMap_rcu_sht)\
+    TEST_MAP_NOLF_EXTRACT(IMPL, C, EllenBinTreeMap_rcu_sht_stat)
 
 #   define CDSUNIT_TEST_EllenBinTreeMap_RCU_signal \
     CPPUNIT_TEST(EllenBinTreeMap_rcu_shb)\
@@ -400,25 +589,42 @@ TEST_MAP_EXTRACT(SplitList_Lazy_RCU_SHT_st_less_stat)
     CPPUNIT_TEST(EllenBinTreeMap_rcu_sht_stat)
 #else
 #   define CDSUNIT_DECLARE_EllenBinTreeMap_RCU_signal
+#   define CDSUNIT_DEFINE_EllenBinTreeMap_RCU_signal( IMPL, C )
 #   define CDSUNIT_TEST_EllenBinTreeMap_RCU_signal
 #endif
 
 #define CDSUNIT_DECLARE_EllenBinTreeMap \
-    TEST_MAP_NOLF_EXTRACT(EllenBinTreeMap_hp)\
-    TEST_MAP_NOLF_EXTRACT(EllenBinTreeMap_hp_yield)\
-    TEST_MAP_NOLF_EXTRACT(EllenBinTreeMap_hp_stat)\
-    TEST_MAP_NOLF_EXTRACT(EllenBinTreeMap_dhp)\
-    TEST_MAP_NOLF_EXTRACT(EllenBinTreeMap_dhp_yield)\
-    TEST_MAP_NOLF_EXTRACT(EllenBinTreeMap_dhp_stat)\
-    TEST_MAP_NOLF_EXTRACT(EllenBinTreeMap_rcu_gpi)\
-    TEST_MAP_NOLF_EXTRACT(EllenBinTreeMap_rcu_gpi_stat)\
-    TEST_MAP_NOLF_EXTRACT(EllenBinTreeMap_rcu_gpb)\
-    TEST_MAP_NOLF_EXTRACT(EllenBinTreeMap_rcu_gpb_yield)\
-    TEST_MAP_NOLF_EXTRACT(EllenBinTreeMap_rcu_gpb_stat)\
-    TEST_MAP_NOLF_EXTRACT(EllenBinTreeMap_rcu_gpt)\
-    TEST_MAP_NOLF_EXTRACT(EllenBinTreeMap_rcu_gpt_stat)\
+    CDSUNIT_DECLARE_TEST(EllenBinTreeMap_hp)\
+    CDSUNIT_DECLARE_TEST(EllenBinTreeMap_hp_yield)\
+    CDSUNIT_DECLARE_TEST(EllenBinTreeMap_hp_stat)\
+    CDSUNIT_DECLARE_TEST(EllenBinTreeMap_dhp)\
+    CDSUNIT_DECLARE_TEST(EllenBinTreeMap_dhp_yield)\
+    CDSUNIT_DECLARE_TEST(EllenBinTreeMap_dhp_stat)\
+    CDSUNIT_DECLARE_TEST(EllenBinTreeMap_rcu_gpi)\
+    CDSUNIT_DECLARE_TEST(EllenBinTreeMap_rcu_gpi_stat)\
+    CDSUNIT_DECLARE_TEST(EllenBinTreeMap_rcu_gpb)\
+    CDSUNIT_DECLARE_TEST(EllenBinTreeMap_rcu_gpb_yield)\
+    CDSUNIT_DECLARE_TEST(EllenBinTreeMap_rcu_gpb_stat)\
+    CDSUNIT_DECLARE_TEST(EllenBinTreeMap_rcu_gpt)\
+    CDSUNIT_DECLARE_TEST(EllenBinTreeMap_rcu_gpt_stat)\
     CDSUNIT_DECLARE_EllenBinTreeMap_RCU_signal
 
+#define CDSUNIT_DEFINE_EllenBinTreeMap( IMPL, C ) \
+    TEST_MAP_NOLF_EXTRACT(IMPL, C, EllenBinTreeMap_hp)\
+    TEST_MAP_NOLF_EXTRACT(IMPL, C, EllenBinTreeMap_hp_yield)\
+    TEST_MAP_NOLF_EXTRACT(IMPL, C, EllenBinTreeMap_hp_stat)\
+    TEST_MAP_NOLF_EXTRACT(IMPL, C, EllenBinTreeMap_dhp)\
+    TEST_MAP_NOLF_EXTRACT(IMPL, C, EllenBinTreeMap_dhp_yield)\
+    TEST_MAP_NOLF_EXTRACT(IMPL, C, EllenBinTreeMap_dhp_stat)\
+    TEST_MAP_NOLF_EXTRACT(IMPL, C, EllenBinTreeMap_rcu_gpi)\
+    TEST_MAP_NOLF_EXTRACT(IMPL, C, EllenBinTreeMap_rcu_gpi_stat)\
+    TEST_MAP_NOLF_EXTRACT(IMPL, C, EllenBinTreeMap_rcu_gpb)\
+    TEST_MAP_NOLF_EXTRACT(IMPL, C, EllenBinTreeMap_rcu_gpb_yield)\
+    TEST_MAP_NOLF_EXTRACT(IMPL, C, EllenBinTreeMap_rcu_gpb_stat)\
+    TEST_MAP_NOLF_EXTRACT(IMPL, C, EllenBinTreeMap_rcu_gpt)\
+    TEST_MAP_NOLF_EXTRACT(IMPL, C, EllenBinTreeMap_rcu_gpt_stat)\
+    CDSUNIT_DEFINE_EllenBinTreeMap_RCU_signal( IMPL, C )
+
 #define CDSUNIT_TEST_EllenBinTreeMap \
     CPPUNIT_TEST(EllenBinTreeMap_hp)\
     CPPUNIT_TEST(EllenBinTreeMap_hp_yield)\
@@ -437,22 +643,40 @@ TEST_MAP_EXTRACT(SplitList_Lazy_RCU_SHT_st_less_stat)
 
 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
 #   define CDSUNIT_DECLARE_BronsonAVLTreeMap_RCU_signal \
-    TEST_MAP_NOLF_EXTRACT(BronsonAVLTreeMap_rcu_shb_less) \
-    TEST_MAP_NOLF_EXTRACT(BronsonAVLTreeMap_rcu_sht_less) \
-    TEST_MAP_NOLF_EXTRACT(BronsonAVLTreeMap_rcu_shb_cmp_stat) \
-    TEST_MAP_NOLF_EXTRACT(BronsonAVLTreeMap_rcu_sht_cmp_stat) \
-    TEST_MAP_NOLF_EXTRACT(BronsonAVLTreeMap_rcu_shb_less_pool_simple) \
-    TEST_MAP_NOLF_EXTRACT(BronsonAVLTreeMap_rcu_sht_less_pool_simple) \
-    TEST_MAP_NOLF_EXTRACT(BronsonAVLTreeMap_rcu_shb_less_pool_simple_stat) \
-    TEST_MAP_NOLF_EXTRACT(BronsonAVLTreeMap_rcu_sht_less_pool_simple_stat) \
-    TEST_MAP_NOLF_EXTRACT(BronsonAVLTreeMap_rcu_shb_less_pool_lazy) \
-    TEST_MAP_NOLF_EXTRACT(BronsonAVLTreeMap_rcu_sht_less_pool_lazy) \
-    TEST_MAP_NOLF_EXTRACT(BronsonAVLTreeMap_rcu_shb_less_pool_lazy_stat) \
-    TEST_MAP_NOLF_EXTRACT(BronsonAVLTreeMap_rcu_sht_less_pool_lazy_stat) \
-    TEST_MAP_NOLF_EXTRACT(BronsonAVLTreeMap_rcu_shb_less_pool_bounded) \
-    TEST_MAP_NOLF_EXTRACT(BronsonAVLTreeMap_rcu_sht_less_pool_bounded) \
-    TEST_MAP_NOLF_EXTRACT(BronsonAVLTreeMap_rcu_shb_less_pool_bounded_stat) \
-    TEST_MAP_NOLF_EXTRACT(BronsonAVLTreeMap_rcu_sht_less_pool_bounded_stat) \
+    CDSUNIT_DECLARE_TEST(BronsonAVLTreeMap_rcu_shb_less) \
+    CDSUNIT_DECLARE_TEST(BronsonAVLTreeMap_rcu_sht_less) \
+    CDSUNIT_DECLARE_TEST(BronsonAVLTreeMap_rcu_shb_cmp_stat) \
+    CDSUNIT_DECLARE_TEST(BronsonAVLTreeMap_rcu_sht_cmp_stat) \
+    CDSUNIT_DECLARE_TEST(BronsonAVLTreeMap_rcu_shb_less_pool_simple) \
+    CDSUNIT_DECLARE_TEST(BronsonAVLTreeMap_rcu_sht_less_pool_simple) \
+    CDSUNIT_DECLARE_TEST(BronsonAVLTreeMap_rcu_shb_less_pool_simple_stat) \
+    CDSUNIT_DECLARE_TEST(BronsonAVLTreeMap_rcu_sht_less_pool_simple_stat) \
+    CDSUNIT_DECLARE_TEST(BronsonAVLTreeMap_rcu_shb_less_pool_lazy) \
+    CDSUNIT_DECLARE_TEST(BronsonAVLTreeMap_rcu_sht_less_pool_lazy) \
+    CDSUNIT_DECLARE_TEST(BronsonAVLTreeMap_rcu_shb_less_pool_lazy_stat) \
+    CDSUNIT_DECLARE_TEST(BronsonAVLTreeMap_rcu_sht_less_pool_lazy_stat) \
+    CDSUNIT_DECLARE_TEST(BronsonAVLTreeMap_rcu_shb_less_pool_bounded) \
+    CDSUNIT_DECLARE_TEST(BronsonAVLTreeMap_rcu_sht_less_pool_bounded) \
+    CDSUNIT_DECLARE_TEST(BronsonAVLTreeMap_rcu_shb_less_pool_bounded_stat) \
+    CDSUNIT_DECLARE_TEST(BronsonAVLTreeMap_rcu_sht_less_pool_bounded_stat) \
+
+#   define CDSUNIT_DEFINE_BronsonAVLTreeMap_RCU_signal(IMPL, C) \
+    TEST_MAP_NOLF_EXTRACT(IMPL, C, BronsonAVLTreeMap_rcu_shb_less) \
+    TEST_MAP_NOLF_EXTRACT(IMPL, C, BronsonAVLTreeMap_rcu_sht_less) \
+    TEST_MAP_NOLF_EXTRACT(IMPL, C, BronsonAVLTreeMap_rcu_shb_cmp_stat) \
+    TEST_MAP_NOLF_EXTRACT(IMPL, C, BronsonAVLTreeMap_rcu_sht_cmp_stat) \
+    TEST_MAP_NOLF_EXTRACT(IMPL, C, BronsonAVLTreeMap_rcu_shb_less_pool_simple) \
+    TEST_MAP_NOLF_EXTRACT(IMPL, C, BronsonAVLTreeMap_rcu_sht_less_pool_simple) \
+    TEST_MAP_NOLF_EXTRACT(IMPL, C, BronsonAVLTreeMap_rcu_shb_less_pool_simple_stat) \
+    TEST_MAP_NOLF_EXTRACT(IMPL, C, BronsonAVLTreeMap_rcu_sht_less_pool_simple_stat) \
+    TEST_MAP_NOLF_EXTRACT(IMPL, C, BronsonAVLTreeMap_rcu_shb_less_pool_lazy) \
+    TEST_MAP_NOLF_EXTRACT(IMPL, C, BronsonAVLTreeMap_rcu_sht_less_pool_lazy) \
+    TEST_MAP_NOLF_EXTRACT(IMPL, C, BronsonAVLTreeMap_rcu_shb_less_pool_lazy_stat) \
+    TEST_MAP_NOLF_EXTRACT(IMPL, C, BronsonAVLTreeMap_rcu_sht_less_pool_lazy_stat) \
+    TEST_MAP_NOLF_EXTRACT(IMPL, C, BronsonAVLTreeMap_rcu_shb_less_pool_bounded) \
+    TEST_MAP_NOLF_EXTRACT(IMPL, C, BronsonAVLTreeMap_rcu_sht_less_pool_bounded) \
+    TEST_MAP_NOLF_EXTRACT(IMPL, C, BronsonAVLTreeMap_rcu_shb_less_pool_bounded_stat) \
+    TEST_MAP_NOLF_EXTRACT(IMPL, C, BronsonAVLTreeMap_rcu_sht_less_pool_bounded_stat) \
 
 #   define CDSUNIT_TEST_BronsonAVLTreeMap_RCU_signal \
     CPPUNIT_TEST(BronsonAVLTreeMap_rcu_shb_less) \
@@ -474,36 +698,64 @@ TEST_MAP_EXTRACT(SplitList_Lazy_RCU_SHT_st_less_stat)
 
 #else
 #   define CDSUNIT_DECLARE_BronsonAVLTreeMap_RCU_signal
+#   define CDSUNIT_DEFINE_BronsonAVLTreeMap_RCU_signal(IMPL, C)
 #   define CDSUNIT_TEST_BronsonAVLTreeMap_RCU_signal
 #endif
 
 #define CDSUNIT_DECLARE_BronsonAVLTreeMap \
-    TEST_MAP_NOLF_EXTRACT(BronsonAVLTreeMap_rcu_gpi_less)\
-    TEST_MAP_NOLF_EXTRACT(BronsonAVLTreeMap_rcu_gpb_less)\
-    TEST_MAP_NOLF_EXTRACT(BronsonAVLTreeMap_rcu_gpt_less)\
-    TEST_MAP_NOLF_EXTRACT(BronsonAVLTreeMap_rcu_gpi_cmp_stat)\
-    TEST_MAP_NOLF_EXTRACT(BronsonAVLTreeMap_rcu_gpb_cmp_stat)\
-    TEST_MAP_NOLF_EXTRACT(BronsonAVLTreeMap_rcu_gpt_cmp_stat)\
-    TEST_MAP_NOLF_EXTRACT(BronsonAVLTreeMap_rcu_gpi_less_pool_simple)\
-    TEST_MAP_NOLF_EXTRACT(BronsonAVLTreeMap_rcu_gpb_less_pool_simple)\
-    TEST_MAP_NOLF_EXTRACT(BronsonAVLTreeMap_rcu_gpt_less_pool_simple)\
-    TEST_MAP_NOLF_EXTRACT(BronsonAVLTreeMap_rcu_gpi_less_pool_simple_stat)\
-    TEST_MAP_NOLF_EXTRACT(BronsonAVLTreeMap_rcu_gpb_less_pool_simple_stat)\
-    TEST_MAP_NOLF_EXTRACT(BronsonAVLTreeMap_rcu_gpt_less_pool_simple_stat)\
-    TEST_MAP_NOLF_EXTRACT(BronsonAVLTreeMap_rcu_gpi_less_pool_lazy)\
-    TEST_MAP_NOLF_EXTRACT(BronsonAVLTreeMap_rcu_gpb_less_pool_lazy)\
-    TEST_MAP_NOLF_EXTRACT(BronsonAVLTreeMap_rcu_gpt_less_pool_lazy)\
-    TEST_MAP_NOLF_EXTRACT(BronsonAVLTreeMap_rcu_gpi_less_pool_lazy_stat)\
-    TEST_MAP_NOLF_EXTRACT(BronsonAVLTreeMap_rcu_gpb_less_pool_lazy_stat)\
-    TEST_MAP_NOLF_EXTRACT(BronsonAVLTreeMap_rcu_gpt_less_pool_lazy_stat)\
-    TEST_MAP_NOLF_EXTRACT(BronsonAVLTreeMap_rcu_gpi_less_pool_bounded)\
-    TEST_MAP_NOLF_EXTRACT(BronsonAVLTreeMap_rcu_gpb_less_pool_bounded)\
-    TEST_MAP_NOLF_EXTRACT(BronsonAVLTreeMap_rcu_gpt_less_pool_bounded)\
-    TEST_MAP_NOLF_EXTRACT(BronsonAVLTreeMap_rcu_gpi_less_pool_bounded_stat)\
-    TEST_MAP_NOLF_EXTRACT(BronsonAVLTreeMap_rcu_gpb_less_pool_bounded_stat)\
-    TEST_MAP_NOLF_EXTRACT(BronsonAVLTreeMap_rcu_gpt_less_pool_bounded_stat)\
+    CDSUNIT_DECLARE_TEST(BronsonAVLTreeMap_rcu_gpi_less)\
+    CDSUNIT_DECLARE_TEST(BronsonAVLTreeMap_rcu_gpb_less)\
+    CDSUNIT_DECLARE_TEST(BronsonAVLTreeMap_rcu_gpt_less)\
+    CDSUNIT_DECLARE_TEST(BronsonAVLTreeMap_rcu_gpi_cmp_stat)\
+    CDSUNIT_DECLARE_TEST(BronsonAVLTreeMap_rcu_gpb_cmp_stat)\
+    CDSUNIT_DECLARE_TEST(BronsonAVLTreeMap_rcu_gpt_cmp_stat)\
+    CDSUNIT_DECLARE_TEST(BronsonAVLTreeMap_rcu_gpi_less_pool_simple)\
+    CDSUNIT_DECLARE_TEST(BronsonAVLTreeMap_rcu_gpb_less_pool_simple)\
+    CDSUNIT_DECLARE_TEST(BronsonAVLTreeMap_rcu_gpt_less_pool_simple)\
+    CDSUNIT_DECLARE_TEST(BronsonAVLTreeMap_rcu_gpi_less_pool_simple_stat)\
+    CDSUNIT_DECLARE_TEST(BronsonAVLTreeMap_rcu_gpb_less_pool_simple_stat)\
+    CDSUNIT_DECLARE_TEST(BronsonAVLTreeMap_rcu_gpt_less_pool_simple_stat)\
+    CDSUNIT_DECLARE_TEST(BronsonAVLTreeMap_rcu_gpi_less_pool_lazy)\
+    CDSUNIT_DECLARE_TEST(BronsonAVLTreeMap_rcu_gpb_less_pool_lazy)\
+    CDSUNIT_DECLARE_TEST(BronsonAVLTreeMap_rcu_gpt_less_pool_lazy)\
+    CDSUNIT_DECLARE_TEST(BronsonAVLTreeMap_rcu_gpi_less_pool_lazy_stat)\
+    CDSUNIT_DECLARE_TEST(BronsonAVLTreeMap_rcu_gpb_less_pool_lazy_stat)\
+    CDSUNIT_DECLARE_TEST(BronsonAVLTreeMap_rcu_gpt_less_pool_lazy_stat)\
+    CDSUNIT_DECLARE_TEST(BronsonAVLTreeMap_rcu_gpi_less_pool_bounded)\
+    CDSUNIT_DECLARE_TEST(BronsonAVLTreeMap_rcu_gpb_less_pool_bounded)\
+    CDSUNIT_DECLARE_TEST(BronsonAVLTreeMap_rcu_gpt_less_pool_bounded)\
+    CDSUNIT_DECLARE_TEST(BronsonAVLTreeMap_rcu_gpi_less_pool_bounded_stat)\
+    CDSUNIT_DECLARE_TEST(BronsonAVLTreeMap_rcu_gpb_less_pool_bounded_stat)\
+    CDSUNIT_DECLARE_TEST(BronsonAVLTreeMap_rcu_gpt_less_pool_bounded_stat)\
     CDSUNIT_DECLARE_BronsonAVLTreeMap_RCU_signal
 
+#define CDSUNIT_DEFINE_BronsonAVLTreeMap( IMPL, C ) \
+    TEST_MAP_NOLF_EXTRACT(IMPL, C, BronsonAVLTreeMap_rcu_gpi_less)\
+    TEST_MAP_NOLF_EXTRACT(IMPL, C, BronsonAVLTreeMap_rcu_gpb_less)\
+    TEST_MAP_NOLF_EXTRACT(IMPL, C, BronsonAVLTreeMap_rcu_gpt_less)\
+    TEST_MAP_NOLF_EXTRACT(IMPL, C, BronsonAVLTreeMap_rcu_gpi_cmp_stat)\
+    TEST_MAP_NOLF_EXTRACT(IMPL, C, BronsonAVLTreeMap_rcu_gpb_cmp_stat)\
+    TEST_MAP_NOLF_EXTRACT(IMPL, C, BronsonAVLTreeMap_rcu_gpt_cmp_stat)\
+    TEST_MAP_NOLF_EXTRACT(IMPL, C, BronsonAVLTreeMap_rcu_gpi_less_pool_simple)\
+    TEST_MAP_NOLF_EXTRACT(IMPL, C, BronsonAVLTreeMap_rcu_gpb_less_pool_simple)\
+    TEST_MAP_NOLF_EXTRACT(IMPL, C, BronsonAVLTreeMap_rcu_gpt_less_pool_simple)\
+    TEST_MAP_NOLF_EXTRACT(IMPL, C, BronsonAVLTreeMap_rcu_gpi_less_pool_simple_stat)\
+    TEST_MAP_NOLF_EXTRACT(IMPL, C, BronsonAVLTreeMap_rcu_gpb_less_pool_simple_stat)\
+    TEST_MAP_NOLF_EXTRACT(IMPL, C, BronsonAVLTreeMap_rcu_gpt_less_pool_simple_stat)\
+    TEST_MAP_NOLF_EXTRACT(IMPL, C, BronsonAVLTreeMap_rcu_gpi_less_pool_lazy)\
+    TEST_MAP_NOLF_EXTRACT(IMPL, C, BronsonAVLTreeMap_rcu_gpb_less_pool_lazy)\
+    TEST_MAP_NOLF_EXTRACT(IMPL, C, BronsonAVLTreeMap_rcu_gpt_less_pool_lazy)\
+    TEST_MAP_NOLF_EXTRACT(IMPL, C, BronsonAVLTreeMap_rcu_gpi_less_pool_lazy_stat)\
+    TEST_MAP_NOLF_EXTRACT(IMPL, C, BronsonAVLTreeMap_rcu_gpb_less_pool_lazy_stat)\
+    TEST_MAP_NOLF_EXTRACT(IMPL, C, BronsonAVLTreeMap_rcu_gpt_less_pool_lazy_stat)\
+    TEST_MAP_NOLF_EXTRACT(IMPL, C, BronsonAVLTreeMap_rcu_gpi_less_pool_bounded)\
+    TEST_MAP_NOLF_EXTRACT(IMPL, C, BronsonAVLTreeMap_rcu_gpb_less_pool_bounded)\
+    TEST_MAP_NOLF_EXTRACT(IMPL, C, BronsonAVLTreeMap_rcu_gpt_less_pool_bounded)\
+    TEST_MAP_NOLF_EXTRACT(IMPL, C, BronsonAVLTreeMap_rcu_gpi_less_pool_bounded_stat)\
+    TEST_MAP_NOLF_EXTRACT(IMPL, C, BronsonAVLTreeMap_rcu_gpb_less_pool_bounded_stat)\
+    TEST_MAP_NOLF_EXTRACT(IMPL, C, BronsonAVLTreeMap_rcu_gpt_less_pool_bounded_stat)\
+    CDSUNIT_DEFINE_BronsonAVLTreeMap_RCU_signal( IMPL, C )
+
 #define CDSUNIT_TEST_BronsonAVLTreeMap \
     CPPUNIT_TEST(BronsonAVLTreeMap_rcu_gpi_less)\
     CPPUNIT_TEST(BronsonAVLTreeMap_rcu_gpi_cmp_stat)\
@@ -532,10 +784,16 @@ TEST_MAP_EXTRACT(SplitList_Lazy_RCU_SHT_st_less_stat)
     CDSUNIT_TEST_BronsonAVLTreeMap_RCU_signal
 
 #define CDSUNIT_DECLARE_StripedMap_common \
-    TEST_MAP(StripedMap_list) \
-    TEST_MAP(StripedMap_map) \
-    TEST_MAP(StripedMap_hashmap) \
-    TEST_MAP(StripedMap_boost_unordered_map)
+    CDSUNIT_DECLARE_TEST(StripedMap_list) \
+    CDSUNIT_DECLARE_TEST(StripedMap_map) \
+    CDSUNIT_DECLARE_TEST(StripedMap_hashmap) \
+    CDSUNIT_DECLARE_TEST(StripedMap_boost_unordered_map)
+
+#define CDSUNIT_DEFINE_StripedMap_common( IMPL, C ) \
+    TEST_MAP(IMPL, C, StripedMap_list) \
+    TEST_MAP(IMPL, C, StripedMap_map) \
+    TEST_MAP(IMPL, C, StripedMap_hashmap) \
+    TEST_MAP(IMPL, C, StripedMap_boost_unordered_map)
 
 #define CDSUNIT_TEST_StripedMap_common \
     CPPUNIT_TEST(StripedMap_list) \
@@ -545,25 +803,33 @@ TEST_MAP_EXTRACT(SplitList_Lazy_RCU_SHT_st_less_stat)
 
 #if BOOST_VERSION >= 104800
 #   define CDSUNIT_DECLARE_StripedMap_boost_container \
-        TEST_MAP(StripedMap_boost_list) \
-        TEST_MAP(StripedMap_slist) \
-        TEST_MAP(StripedMap_boost_map)
+        CDSUNIT_DECLARE_TEST(StripedMap_boost_list) \
+        CDSUNIT_DECLARE_TEST(StripedMap_slist) \
+        CDSUNIT_DECLARE_TEST(StripedMap_boost_map)
+#   define CDSUNIT_DEFINE_StripedMap_boost_container( IMPL, C ) \
+        TEST_MAP(IMPL, C, StripedMap_boost_list) \
+        TEST_MAP(IMPL, C, StripedMap_slist) \
+        TEST_MAP(IMPL, C, StripedMap_boost_map)
 #   define CDSUNIT_TEST_StripedMap_boost_container \
         CPPUNIT_TEST(StripedMap_boost_list) \
         CPPUNIT_TEST(StripedMap_slist) \
         CPPUNIT_TEST(StripedMap_boost_map)
 #else
 #   define CDSUNIT_DECLARE_StripedMap_boost_container
+#   define CDSUNIT_DEFINE_StripedMap_boost_container( IMPL, C )
 #   define CDSUNIT_TEST_StripedMap_boost_container
 #endif
 
 #if BOOST_VERSION >= 104800 && defined(CDS_UNIT_MAP_TYPES_ENABLE_BOOST_FLAT_CONTAINERS)
 #   define CDSUNIT_DECLARE_StripedMap_boost_flat_container \
-        TEST_MAP(StripedMap_boost_flat_map)
+        CDSUNIT_DECLARE_TEST(StripedMap_boost_flat_map)
+#   define CDSUNIT_DEFINE_StripedMap_boost_flat_container( IMPL, C ) \
+        TEST_MAP(IMPL, C, StripedMap_boost_flat_map)
 #   define CDSUNIT_TEST_StripedMap_boost_flat_container \
         CPPUNIT_TEST(StripedMap_boost_flat_map)
 #else
 #   define CDSUNIT_DECLARE_StripedMap_boost_flat_container
+#   define CDSUNIT_DEFINE_StripedMap_boost_flat_container( IMPL, C )
 #   define CDSUNIT_TEST_StripedMap_boost_flat_container
 #endif
 
@@ -571,6 +837,10 @@ TEST_MAP_EXTRACT(SplitList_Lazy_RCU_SHT_st_less_stat)
     CDSUNIT_DECLARE_StripedMap_common \
     CDSUNIT_DECLARE_StripedMap_boost_container \
     CDSUNIT_DECLARE_StripedMap_boost_flat_container
+#define CDSUNIT_DEFINE_StripedMap( IMPL, C ) \
+    CDSUNIT_DEFINE_StripedMap_common( IMPL, C ) \
+    CDSUNIT_DEFINE_StripedMap_boost_container( IMPL, C ) \
+    CDSUNIT_DEFINE_StripedMap_boost_flat_container( IMPL, C )
 #define CDSUNIT_TEST_StripedMap \
     CDSUNIT_TEST_StripedMap_common \
     CDSUNIT_TEST_StripedMap_boost_container \
@@ -579,10 +849,15 @@ TEST_MAP_EXTRACT(SplitList_Lazy_RCU_SHT_st_less_stat)
 
 
 #define CDSUNIT_DECLARE_RefinableMap_common \
-    TEST_MAP(RefinableMap_list) \
-    TEST_MAP(RefinableMap_map) \
-    TEST_MAP(RefinableMap_hashmap) \
-    TEST_MAP(RefinableMap_boost_unordered_map)
+    CDSUNIT_DECLARE_TEST(RefinableMap_list) \
+    CDSUNIT_DECLARE_TEST(RefinableMap_map) \
+    CDSUNIT_DECLARE_TEST(RefinableMap_hashmap) \
+    CDSUNIT_DECLARE_TEST(RefinableMap_boost_unordered_map)
+#define CDSUNIT_DEFINE_RefinableMap_common( IMPL, C ) \
+    TEST_MAP(IMPL, C, RefinableMap_list) \
+    TEST_MAP(IMPL, C, RefinableMap_map) \
+    TEST_MAP(IMPL, C, RefinableMap_hashmap) \
+    TEST_MAP(IMPL, C, RefinableMap_boost_unordered_map)
 #define CDSUNIT_TEST_RefinableMap_common \
     CPPUNIT_TEST(RefinableMap_list) \
     CPPUNIT_TEST(RefinableMap_map) \
@@ -591,25 +866,33 @@ TEST_MAP_EXTRACT(SplitList_Lazy_RCU_SHT_st_less_stat)
 
 #if BOOST_VERSION >= 104800
 #   define CDSUNIT_DECLARE_RefinableMap_boost_container \
-        TEST_MAP(RefinableMap_boost_list) \
-        TEST_MAP(RefinableMap_slist) \
-        TEST_MAP(RefinableMap_boost_map)
+        CDSUNIT_DECLARE_TEST(RefinableMap_boost_list) \
+        CDSUNIT_DECLARE_TEST(RefinableMap_slist) \
+        CDSUNIT_DECLARE_TEST(RefinableMap_boost_map)
+#   define CDSUNIT_DEFINE_RefinableMap_boost_container( IMPL, C ) \
+        TEST_MAP(IMPL, C, RefinableMap_boost_list) \
+        TEST_MAP(IMPL, C, RefinableMap_slist) \
+        TEST_MAP(IMPL, C, RefinableMap_boost_map)
 #   define CDSUNIT_TEST_RefinableMap_boost_container \
         CPPUNIT_TEST(RefinableMap_boost_list) \
         CPPUNIT_TEST(RefinableMap_slist) \
         CPPUNIT_TEST(RefinableMap_boost_map)
 #else
 #   define CDSUNIT_DECLARE_RefinableMap_boost_container
+#   define CDSUNIT_DEFINE_RefinableMap_boost_container( IMPL, C )
 #   define CDSUNIT_TEST_RefinableMap_boost_container
 #endif
 
 #if BOOST_VERSION >= 104800 && defined(CDS_UNIT_MAP_TYPES_ENABLE_BOOST_FLAT_CONTAINERS)
 #   define CDSUNIT_DECLARE_RefinableMap_boost_flat_container \
-        TEST_MAP(RefinableMap_boost_flat_map)
+        CDSUNIT_DECLARE_TEST(RefinableMap_boost_flat_map)
+#   define CDSUNIT_DEFINE_RefinableMap_boost_flat_container( IMPL, C ) \
+        TEST_MAP( IMPL, C, RefinableMap_boost_flat_map)
 #   define CDSUNIT_TEST_RefinableMap_boost_flat_container \
         CPPUNIT_TEST(RefinableMap_boost_flat_map)
 #else
 #   define CDSUNIT_DECLARE_RefinableMap_boost_flat_container
+#   define CDSUNIT_DEFINE_RefinableMap_boost_flat_container( IMPL, C )
 #   define CDSUNIT_TEST_RefinableMap_boost_flat_container
 #endif
 
@@ -617,36 +900,66 @@ TEST_MAP_EXTRACT(SplitList_Lazy_RCU_SHT_st_less_stat)
     CDSUNIT_DECLARE_RefinableMap_common \
     CDSUNIT_DECLARE_RefinableMap_boost_container \
     CDSUNIT_DECLARE_RefinableMap_boost_flat_container
+#define CDSUNIT_DEFINE_RefinableMap( IMPL, C ) \
+    CDSUNIT_DEFINE_RefinableMap_common( IMPL, C ) \
+    CDSUNIT_DEFINE_RefinableMap_boost_container( IMPL, C ) \
+    CDSUNIT_DEFINE_RefinableMap_boost_flat_container( IMPL, C )
 #define CDSUNIT_TEST_RefinableMap \
     CDSUNIT_TEST_RefinableMap_common \
     CDSUNIT_TEST_RefinableMap_boost_container \
     CDSUNIT_TEST_RefinableMap_boost_flat_container
 
 #define CDSUNIT_DECLARE_CuckooMap \
-    TEST_MAP(CuckooStripedMap_list_unord)\
-    TEST_MAP(CuckooStripedMap_list_ord)\
-    TEST_MAP(CuckooStripedMap_vector_unord)\
-    TEST_MAP(CuckooStripedMap_vector_ord)\
-    TEST_MAP(CuckooStripedMap_list_unord_stat)\
-    TEST_MAP(CuckooStripedMap_list_ord_stat)\
-    TEST_MAP(CuckooStripedMap_vector_unord_stat)\
-    TEST_MAP(CuckooStripedMap_vector_ord_stat)\
-    TEST_MAP(CuckooRefinableMap_list_unord)\
-    TEST_MAP(CuckooRefinableMap_list_ord)\
-    TEST_MAP(CuckooRefinableMap_vector_unord)\
-    TEST_MAP(CuckooRefinableMap_vector_ord) \
-    TEST_MAP(CuckooRefinableMap_list_unord_stat)\
-    TEST_MAP(CuckooRefinableMap_list_ord_stat)\
-    TEST_MAP(CuckooRefinableMap_vector_unord_stat)\
-    TEST_MAP(CuckooRefinableMap_vector_ord_stat) \
-    TEST_MAP(CuckooStripedMap_list_unord_storehash)\
-    TEST_MAP(CuckooStripedMap_list_ord_storehash)\
-    TEST_MAP(CuckooStripedMap_vector_unord_storehash)\
-    TEST_MAP(CuckooStripedMap_vector_ord_storehash)\
-    TEST_MAP(CuckooRefinableMap_list_unord_storehash)\
-    TEST_MAP(CuckooRefinableMap_list_ord_storehash)\
-    TEST_MAP(CuckooRefinableMap_vector_unord_storehash)\
-    TEST_MAP(CuckooRefinableMap_vector_ord_storehash)
+    CDSUNIT_DECLARE_TEST(CuckooStripedMap_list_unord)\
+    CDSUNIT_DECLARE_TEST(CuckooStripedMap_list_ord)\
+    CDSUNIT_DECLARE_TEST(CuckooStripedMap_vector_unord)\
+    CDSUNIT_DECLARE_TEST(CuckooStripedMap_vector_ord)\
+    CDSUNIT_DECLARE_TEST(CuckooStripedMap_list_unord_stat)\
+    CDSUNIT_DECLARE_TEST(CuckooStripedMap_list_ord_stat)\
+    CDSUNIT_DECLARE_TEST(CuckooStripedMap_vector_unord_stat)\
+    CDSUNIT_DECLARE_TEST(CuckooStripedMap_vector_ord_stat)\
+    CDSUNIT_DECLARE_TEST(CuckooRefinableMap_list_unord)\
+    CDSUNIT_DECLARE_TEST(CuckooRefinableMap_list_ord)\
+    CDSUNIT_DECLARE_TEST(CuckooRefinableMap_vector_unord)\
+    CDSUNIT_DECLARE_TEST(CuckooRefinableMap_vector_ord) \
+    CDSUNIT_DECLARE_TEST(CuckooRefinableMap_list_unord_stat)\
+    CDSUNIT_DECLARE_TEST(CuckooRefinableMap_list_ord_stat)\
+    CDSUNIT_DECLARE_TEST(CuckooRefinableMap_vector_unord_stat)\
+    CDSUNIT_DECLARE_TEST(CuckooRefinableMap_vector_ord_stat) \
+    CDSUNIT_DECLARE_TEST(CuckooStripedMap_list_unord_storehash)\
+    CDSUNIT_DECLARE_TEST(CuckooStripedMap_list_ord_storehash)\
+    CDSUNIT_DECLARE_TEST(CuckooStripedMap_vector_unord_storehash)\
+    CDSUNIT_DECLARE_TEST(CuckooStripedMap_vector_ord_storehash)\
+    CDSUNIT_DECLARE_TEST(CuckooRefinableMap_list_unord_storehash)\
+    CDSUNIT_DECLARE_TEST(CuckooRefinableMap_list_ord_storehash)\
+    CDSUNIT_DECLARE_TEST(CuckooRefinableMap_vector_unord_storehash)\
+    CDSUNIT_DECLARE_TEST(CuckooRefinableMap_vector_ord_storehash)
+
+#define CDSUNIT_DEFINE_CuckooMap( IMPL, C ) \
+    TEST_MAP(IMPL, C, CuckooStripedMap_list_unord)\
+    TEST_MAP(IMPL, C, CuckooStripedMap_list_ord)\
+    TEST_MAP(IMPL, C, CuckooStripedMap_vector_unord)\
+    TEST_MAP(IMPL, C, CuckooStripedMap_vector_ord)\
+    TEST_MAP(IMPL, C, CuckooStripedMap_list_unord_stat)\
+    TEST_MAP(IMPL, C, CuckooStripedMap_list_ord_stat)\
+    TEST_MAP(IMPL, C, CuckooStripedMap_vector_unord_stat)\
+    TEST_MAP(IMPL, C, CuckooStripedMap_vector_ord_stat)\
+    TEST_MAP(IMPL, C, CuckooRefinableMap_list_unord)\
+    TEST_MAP(IMPL, C, CuckooRefinableMap_list_ord)\
+    TEST_MAP(IMPL, C, CuckooRefinableMap_vector_unord)\
+    TEST_MAP(IMPL, C, CuckooRefinableMap_vector_ord) \
+    TEST_MAP(IMPL, C, CuckooRefinableMap_list_unord_stat)\
+    TEST_MAP(IMPL, C, CuckooRefinableMap_list_ord_stat)\
+    TEST_MAP(IMPL, C, CuckooRefinableMap_vector_unord_stat)\
+    TEST_MAP(IMPL, C, CuckooRefinableMap_vector_ord_stat) \
+    TEST_MAP(IMPL, C, CuckooStripedMap_list_unord_storehash)\
+    TEST_MAP(IMPL, C, CuckooStripedMap_list_ord_storehash)\
+    TEST_MAP(IMPL, C, CuckooStripedMap_vector_unord_storehash)\
+    TEST_MAP(IMPL, C, CuckooStripedMap_vector_ord_storehash)\
+    TEST_MAP(IMPL, C, CuckooRefinableMap_list_unord_storehash)\
+    TEST_MAP(IMPL, C, CuckooRefinableMap_list_ord_storehash)\
+    TEST_MAP(IMPL, C, CuckooRefinableMap_vector_unord_storehash)\
+    TEST_MAP(IMPL, C, CuckooRefinableMap_vector_ord_storehash)
 
 #define CDSUNIT_TEST_CuckooMap \
     CPPUNIT_TEST(CuckooStripedMap_list_unord)\
index 661571a76f792bbdb39acd9a147ced40f72f5ddf..cd1e2707fee198b04935df8e0f5302c7b0eb4bfe 100644 (file)
@@ -1,15 +1,16 @@
 //$$CDS-header$$
 
 #include "cppunit/thread.h"
-#include "map2/map_types.h"
+#include "map2/map_type.h"
 #include <algorithm> // random_shuffle
+#include <cds/os/topology.h>
 
 namespace map2 {
 
-#   define TEST_MAP(X)         void X() { test<MapTypes<key_type, value_type>::X >(); }
-#   define TEST_MAP_EXTRACT(X) void X() { test_extract<MapTypes<key_type, value_type>::X >(); }
-#   define TEST_MAP_NOLF(X)    void X() { test_nolf<MapTypes<key_type, value_type>::X >(); }
-#   define TEST_MAP_NOLF_EXTRACT(X) void X() { test_nolf_extract<MapTypes<key_type, value_type>::X >(); }
+#   define TEST_MAP(IMPL, C, X)         void C::X() { test<map_type<IMPL, key_type, value_type>::X >(); }
+#   define TEST_MAP_EXTRACT(IMPL, C, X) void C::X() { test_extract<map_type<IMPL, key_type, value_type>::X >(); }
+#   define TEST_MAP_NOLF(IMPL, C, X)    void C::X() { test_nolf<map_type<IMPL, key_type, value_type>::X >(); }
+#   define TEST_MAP_NOLF_EXTRACT(IMPL, C, X) void C::X() { test_nolf_extract<map_type<IMPL, key_type, value_type>::X >(); }
 
     namespace {
         struct key_thread
index 0448891bed4c99f6913181ec74426829e5683915..2d2df6ad56f2a0d311965733dbce94044e4bf49c 100644 (file)
@@ -1,8 +1,11 @@
 //$$CDS-header$$
 
 #include "map2/map_delodd.h"
+#include "map2/map_type_bronson_avltree.h"
 
 namespace map2 {
+    CDSUNIT_DEFINE_BronsonAVLTreeMap( cc::bronson_avltree::implementation_tag, Map_DelOdd)
+
     CPPUNIT_TEST_SUITE_PART( Map_DelOdd, run_BronsonAVLTreeMap )
         CDSUNIT_TEST_BronsonAVLTreeMap
     CPPUNIT_TEST_SUITE_END_PART()
index 191d35a95e90509090b54d354d1cd898c5ead53b..3d314b5f14ab1edf4a69ebc845db9b1beb2a7d29 100644 (file)
@@ -1,8 +1,11 @@
 //$$CDS-header$$
 
 #include "map2/map_delodd.h"
+#include "map2/map_type_cuckoo.h"
 
 namespace map2 {
+    CDSUNIT_DEFINE_CuckooMap(cds::intrusive::cuckoo::implementation_tag, Map_DelOdd)
+
     CPPUNIT_TEST_SUITE_PART( Map_DelOdd, run_CuckooMap )
         CDSUNIT_TEST_CuckooMap
     CPPUNIT_TEST_SUITE_END_PART()
index e6883aa47a1096c7f29fe541509f3f3eefb25480..fdeab8253214b648661c0eab72acc471beb3118d 100644 (file)
@@ -1,8 +1,11 @@
 //$$CDS-header$$
 
 #include "map2/map_delodd.h"
+#include "map2/map_type_ellen_bintree.h"
 
 namespace map2 {
+    CDSUNIT_DEFINE_EllenBinTreeMap( cc::ellen_bintree::implementation_tag, Map_DelOdd)
+
     CPPUNIT_TEST_SUITE_PART( Map_DelOdd, run_EllenBinTreeMap )
         CDSUNIT_TEST_EllenBinTreeMap
     CPPUNIT_TEST_SUITE_END_PART()
index c114aed0a6e03cec80e15ba73981117116a56977..de5a6f641c658ec4b8baac987f13f46a270ea57c 100644 (file)
@@ -1,8 +1,11 @@
 //$$CDS-header$$
 
 #include "map2/map_delodd.h"
+#include "map2/map_type_michael.h"
 
 namespace map2 {
+    CDSUNIT_DEFINE_MichaelMap( cc::michael_map::implementation_tag, Map_DelOdd )
+
     CPPUNIT_TEST_SUITE_PART( Map_DelOdd, run_MichaelMap )
         CDSUNIT_TEST_MichaelMap
     CPPUNIT_TEST_SUITE_END_PART()
index bb92b6d763740f07ef5bfe695ee03edb9c130fe2..255f0784489848fc14e9b85dbec4ddb5f6d7a66f 100644 (file)
@@ -1,8 +1,11 @@
 //$$CDS-header$$
 
 #include "map2/map_delodd.h"
+#include "map2/map_type_skip_list.h"
 
 namespace map2 {
+    CDSUNIT_DEFINE_SkipListMap( cc::skip_list::implementation_tag, Map_DelOdd)
+
     CPPUNIT_TEST_SUITE_PART( Map_DelOdd, run_SkipListMap )
         CDSUNIT_TEST_SkipListMap
     CPPUNIT_TEST_SUITE_END_PART()
index b8895cb789000ac11746ee72e4e4c6e85feac8c2..e1e916f2e85c90fb2d3afedfcde7db0158555efe 100644 (file)
@@ -1,8 +1,11 @@
 //$$CDS-header$$
 
 #include "map2/map_delodd.h"
+#include "map2/map_type_split_list.h"
 
 namespace map2 {
+    CDSUNIT_DEFINE_SplitList( cc::split_list::implementation_tag, Map_DelOdd )
+
     CPPUNIT_TEST_SUITE_PART( Map_DelOdd, run_SplitList )
         CDSUNIT_TEST_SplitList
     CPPUNIT_TEST_SUITE_END_PART()
index cc4c12eed9512d544dd04aa964306c4acb41b9ff..77bbb81d9f0409885438d64df387b971281f3fc6 100644 (file)
@@ -2,7 +2,7 @@
 
 // defines concurrent access to map::nonconcurrent_iterator::Sequence::TValue::nAccess field
 
-#include "map2/map_types.h"
+#include "map2/map_type.h"
 #include "cppunit/thread.h"
 
 #include <vector>
 // find int test in map<int> in mutithreaded mode
 namespace map2 {
 
-#   define TEST_MAP(X)         void X() { test<MapTypes<key_type, value_type>::X >()    ; }
-#   define TEST_MAP_NOLF(X)    void X() { test_nolf<MapTypes<key_type, value_type>::X >()    ; }
-#   define TEST_MAP_EXTRACT(X)  TEST_MAP(X)
-#   define TEST_MAP_NOLF_EXTRACT(X) TEST_MAP_NOLF(X)
+#   define TEST_MAP(IMPL, C, X)         void C::X() { test<map_type<IMPL, key_type, value_type>::X >(); }
+#   define TEST_MAP_NOLF(IMPL, C, X)    void C::X() { test_nolf<map_type<IMPL, key_type, value_type>::X >(); }
+#   define TEST_MAP_EXTRACT(IMPL, C, X)  TEST_MAP(IMPL, C, X)
+#   define TEST_MAP_NOLF_EXTRACT(IMPL, C, X) TEST_MAP_NOLF(IMPL, C, X)
 
     class Map_find_int: public CppUnitMini::TestCase
     {
index 2c915a6ea0012548567f9e6a53e68894d76406a6..6cd051c0805d2b21cfe06b80225830009fd53489 100644 (file)
@@ -1,8 +1,11 @@
 //$$CDS-header$$
 
 #include "map2/map_find_int.h"
+#include "map2/map_type_bronson_avltree.h"
 
 namespace map2 {
+    CDSUNIT_DEFINE_BronsonAVLTreeMap( cc::bronson_avltree::implementation_tag, Map_find_int)
+
     CPPUNIT_TEST_SUITE_PART( Map_find_int, run_BronsonAVLTreeMap )
         CDSUNIT_TEST_BronsonAVLTreeMap
     CPPUNIT_TEST_SUITE_END_PART()
index b397fcac78b3a315625e5d1e83024962fcb13bb0..3bdc562e621661d99f6c60214270a9083ac74bf7 100644 (file)
@@ -1,8 +1,11 @@
 //$$CDS-header$$
 
 #include "map2/map_find_int.h"
+#include "map2/map_type_cuckoo.h"
 
 namespace map2 {
+    CDSUNIT_DEFINE_CuckooMap(cds::intrusive::cuckoo::implementation_tag, Map_find_int)
+
     CPPUNIT_TEST_SUITE_PART( Map_find_int, run_CuckooMap )
         CDSUNIT_TEST_CuckooMap
     CPPUNIT_TEST_SUITE_END_PART()
index 3f5e9ffe90b9bf76649947059bb10145ce155d56..6d930f838d7fe9170e29cfc22eadcc3b62f052c3 100644 (file)
@@ -1,8 +1,11 @@
 //$$CDS-header$$
 
 #include "map2/map_find_int.h"
+#include "map2/map_type_ellen_bintree.h"
 
 namespace map2 {
+    CDSUNIT_DEFINE_EllenBinTreeMap( cc::ellen_bintree::implementation_tag, Map_find_int)
+
     CPPUNIT_TEST_SUITE_PART( Map_find_int, run_EllenBinTreeMap )
         CDSUNIT_TEST_EllenBinTreeMap
     CPPUNIT_TEST_SUITE_END_PART()
index 6ab770211d22280dbab651e4fe08be24ec2278f6..137951a5bc934f3a8d84a0f6d5c56d4c85c85aa6 100644 (file)
@@ -1,8 +1,12 @@
 //$$CDS-header$$
 
 #include "map2/map_find_int.h"
+#include "map2/map_type_michael.h"
 
 namespace map2 {
+    CDSUNIT_DEFINE_MichaelMap( cc::michael_map::implementation_tag, Map_find_int )
+    CDSUNIT_DEFINE_MichaelMap_nogc( cc::michael_map::implementation_tag, Map_find_int )
+
     CPPUNIT_TEST_SUITE_PART( Map_find_int, run_MichaelMap )
         CDSUNIT_TEST_MichaelMap
         CDSUNIT_TEST_MichaelMap_nogc
index d047537c4ce2d8b9c6b21957dfbb12cc00183dce..710576c5b52b73c2a113350985aff01ee7343951 100644 (file)
@@ -1,8 +1,11 @@
 //$$CDS-header$$
 
 #include "map2/map_find_int.h"
+#include "map2/map_type_striped.h"
 
 namespace map2 {
+    CDSUNIT_DEFINE_RefinableMap(cc::striped_set::implementation_tag, Map_find_int)
+
     CPPUNIT_TEST_SUITE_PART( Map_find_int, run_RefinableMap )
         CDSUNIT_TEST_RefinableMap
     CPPUNIT_TEST_SUITE_END_PART()
index edfcc4106f7a6d7bde6b0788f98d597f58bafc97..6ede5c5113c2b6909f1f420d13b06dae7dde2b91 100644 (file)
@@ -1,8 +1,12 @@
 //$$CDS-header$$
 
 #include "map2/map_find_int.h"
+#include "map2/map_type_skip_list.h"
 
 namespace map2 {
+    CDSUNIT_DEFINE_SkipListMap( cc::skip_list::implementation_tag, Map_find_int)
+    CDSUNIT_DEFINE_SkipListMap_nogc( cc::skip_list::implementation_tag, Map_find_int)
+
     CPPUNIT_TEST_SUITE_PART( Map_find_int, run_SkipListMap )
         CDSUNIT_TEST_SkipListMap
         CDSUNIT_TEST_SkipListMap_nogc
index b565e3e6d0bea80ddc60888d8727ffa39d48cb82..08b71fa2cd565fd6b5a7f8d746f37647f8ab8c74 100644 (file)
@@ -1,8 +1,12 @@
 //$$CDS-header$$
 
 #include "map2/map_find_int.h"
+#include "map2/map_type_split_list.h"
 
 namespace map2 {
+    CDSUNIT_DEFINE_SplitList( cc::split_list::implementation_tag, Map_find_int )
+    CDSUNIT_DEFINE_SplitList_nogc( cc::split_list::implementation_tag, Map_find_int )
+
     CPPUNIT_TEST_SUITE_PART( Map_find_int, run_SplitList )
         CDSUNIT_TEST_SplitList
         CDSUNIT_TEST_SplitList_nogc
index bcb759e012166f9047137636e8b41e81d079fa22..c310c474989ff870fc158a7535697e3d8df9e5ef 100644 (file)
@@ -1,8 +1,11 @@
 //$$CDS-header$$
 
 #include "map2/map_find_int.h"
+#include "map2/map_type_std.h"
 
 namespace map2 {
+    CDSUNIT_DEFINE_StdMap( map2::std_implementation_tag, Map_find_int)
+
     CPPUNIT_TEST_SUITE_PART( Map_find_int, run_StdMap )
         CDSUNIT_TEST_StdMap
     CPPUNIT_TEST_SUITE_END_PART()
index d93dbf1a49eff1332d94a10d9ca01acd36da3b87..23b1c393594076821cb4bf6e7475e2be734a43f4 100644 (file)
@@ -1,8 +1,11 @@
 //$$CDS-header$$
 
 #include "map2/map_find_int.h"
+#include "map2/map_type_striped.h"
 
 namespace map2 {
+    CDSUNIT_DEFINE_StripedMap(cc::striped_set::implementation_tag, Map_find_int)
+
     CPPUNIT_TEST_SUITE_PART( Map_find_int, run_StripedMap )
         CDSUNIT_TEST_StripedMap
     CPPUNIT_TEST_SUITE_END_PART()
index 8796698ef52029e7bb816de4790cde3c77504c83..31d3fe43dbdd480936dee55db70d6a69a04daa02 100644 (file)
@@ -1,16 +1,16 @@
 //$$CDS-header$$
 
-#include "map2/map_types.h"
+#include "map2/map_type.h"
 #include "cppunit/thread.h"
 
 #include <vector>
 
 namespace map2 {
 
-#   define TEST_MAP(X)         void X() { test<MapTypes<key_type, value_type>::X >()    ; }
-#   define TEST_MAP_NOLF(X)    void X() { test_nolf<MapTypes<key_type, value_type>::X >()    ; }
-#   define TEST_MAP_EXTRACT(X)  TEST_MAP(X)
-#   define TEST_MAP_NOLF_EXTRACT(X) TEST_MAP_NOLF(X)
+#   define TEST_MAP(IMPL, C, X)         void C::X() { test<map_type<IMPL, key_type, value_type>::X >(); }
+#   define TEST_MAP_NOLF(IMPL, C, X)    void C::X() { test_nolf<map_type<IMPL, key_type, value_type>::X >(); }
+#   define TEST_MAP_EXTRACT(IMPL, C, X)  TEST_MAP(IMPL, C, X)
+#   define TEST_MAP_NOLF_EXTRACT(IMPL, C, X) TEST_MAP_NOLF(IMPL, C, X)
 
     class Map_find_string: public CppUnitMini::TestCase
     {
index b74d0177d7a03b2c4e61c9c41685e27e3e6d5299..5f4fb3c501978a3bc2d8affd0e1a9b1b2d082af4 100644 (file)
@@ -1,8 +1,11 @@
 //$$CDS-header$$
 
 #include "map2/map_find_string.h"
+#include "map2/map_type_bronson_avltree.h"
 
 namespace map2 {
+    CDSUNIT_DEFINE_BronsonAVLTreeMap( cc::bronson_avltree::implementation_tag, Map_find_string)
+
     CPPUNIT_TEST_SUITE_PART( Map_find_string, run_BronsonAVLTreeMap )
         CDSUNIT_TEST_BronsonAVLTreeMap
     CPPUNIT_TEST_SUITE_END_PART()
index c5085126a69e965280c79c06ff5b08533a0611ba..6bb731587312863aad8bda4ae1c3b1a21a604ba6 100644 (file)
@@ -1,8 +1,11 @@
 //$$CDS-header$$
 
 #include "map2/map_find_string.h"
+#include "map2/map_type_cuckoo.h"
 
 namespace map2 {
+    CDSUNIT_DEFINE_CuckooMap(cds::intrusive::cuckoo::implementation_tag, Map_find_string)
+
     CPPUNIT_TEST_SUITE_PART( Map_find_string, run_CuckooMap )
         CDSUNIT_TEST_CuckooMap
     CPPUNIT_TEST_SUITE_END_PART()
index 9539c7d149e6f5ba56bdc90e14d256b419d5c29a..6dfe517244d7c911bea2088dab9780cdf5c039a4 100644 (file)
@@ -1,8 +1,11 @@
 //$$CDS-header$$
 
 #include "map2/map_find_string.h"
+#include "map2/map_type_ellen_bintree.h"
 
 namespace map2 {
+    CDSUNIT_DEFINE_EllenBinTreeMap( cc::ellen_bintree::implementation_tag, Map_find_string)
+
     CPPUNIT_TEST_SUITE_PART( Map_find_string, run_EllenBinTreeMap )
         CDSUNIT_TEST_EllenBinTreeMap
     CPPUNIT_TEST_SUITE_END_PART()
index 5e9f61b2a0c93a632919bb095982889f12f6436a..9cb59f5097a47fdcc04a92443e592ef8677ff330 100644 (file)
@@ -1,8 +1,12 @@
 //$$CDS-header$$
 
 #include "map2/map_find_string.h"
+#include "map2/map_type_michael.h"
 
 namespace map2 {
+    CDSUNIT_DEFINE_MichaelMap( cc::michael_map::implementation_tag, Map_find_string )
+    CDSUNIT_DEFINE_MichaelMap_nogc( cc::michael_map::implementation_tag, Map_find_string )
+
     CPPUNIT_TEST_SUITE_PART( Map_find_string, run_MichaelMap )
         CDSUNIT_TEST_MichaelMap
         CDSUNIT_TEST_MichaelMap_nogc
index dd9a91f184a176d9494bb603f4bca90f9ba9d122..3f708edb1345ea34bbfe35225bf6a6db33ff5414 100644 (file)
@@ -1,8 +1,11 @@
 //$$CDS-header$$
 
 #include "map2/map_find_string.h"
+#include "map2/map_type_striped.h"
 
 namespace map2 {
+    CDSUNIT_DEFINE_RefinableMap(cc::striped_set::implementation_tag, Map_find_string)
+
     CPPUNIT_TEST_SUITE_PART( Map_find_string, run_RefinableMap )
         CDSUNIT_TEST_RefinableMap
     CPPUNIT_TEST_SUITE_END_PART()
index 47671c112fd4d9867b8a858ba76b78a689b72065..ae9f27fa087e8b5a14fdf3863e96d5629183ac02 100644 (file)
@@ -1,8 +1,12 @@
 //$$CDS-header$$
 
 #include "map2/map_find_string.h"
+#include "map2/map_type_skip_list.h"
 
 namespace map2 {
+    CDSUNIT_DEFINE_SkipListMap( cc::skip_list::implementation_tag, Map_find_string)
+    CDSUNIT_DEFINE_SkipListMap_nogc( cc::skip_list::implementation_tag, Map_find_string)
+
     CPPUNIT_TEST_SUITE_PART( Map_find_string, run_SkipListMap )
         CDSUNIT_TEST_SkipListMap
         CDSUNIT_TEST_SkipListMap_nogc
index d2095b1dfd6a9c59c0ad081ea9f0f3fc57ad90c1..ee236aa56f160692869145978cd9fd22f105986f 100644 (file)
@@ -1,8 +1,12 @@
 //$$CDS-header$$
 
 #include "map2/map_find_string.h"
+#include "map2/map_type_split_list.h"
 
 namespace map2 {
+    CDSUNIT_DEFINE_SplitList( cc::split_list::implementation_tag, Map_find_string )
+    CDSUNIT_DEFINE_SplitList_nogc( cc::split_list::implementation_tag, Map_find_string )
+
     CPPUNIT_TEST_SUITE_PART( Map_find_string, run_SplitList )
         CDSUNIT_TEST_SplitList
         CDSUNIT_TEST_SplitList_nogc
index d268977a5b37de6b3a51f5a600eb460df8a6cf1e..6f2a645cfb121064c9c46c1ae530b7b0cb5038de 100644 (file)
@@ -1,8 +1,11 @@
 //$$CDS-header$$
 
 #include "map2/map_find_string.h"
+#include "map2/map_type_std.h"
 
 namespace map2 {
+    CDSUNIT_DEFINE_StdMap( map2::std_implementation_tag, Map_find_string)
+
     CPPUNIT_TEST_SUITE_PART( Map_find_string, run_StdMap )
         CDSUNIT_TEST_StdMap
     CPPUNIT_TEST_SUITE_END_PART()
index 1d8280bc553033a687bd9f71e9decb18c04f0f9b..afba7b6722ab01b4d152fa5227947c39ad51d655 100644 (file)
@@ -1,8 +1,11 @@
 //$$CDS-header$$
 
 #include "map2/map_find_string.h"
+#include "map2/map_type_striped.h"
 
 namespace map2 {
+    CDSUNIT_DEFINE_StripedMap(cc::striped_set::implementation_tag, Map_find_string)
+
     CPPUNIT_TEST_SUITE_PART( Map_find_string, run_StripedMap )
         CDSUNIT_TEST_StripedMap
     CPPUNIT_TEST_SUITE_END_PART()
index 9621e06ae6844d2205a092f7271fc7f0206cdda4..92f88f2dc95c734bdc96ee90c8c2f86318abdcea 100644 (file)
@@ -2,7 +2,7 @@
 
 #include <functional>
 #include <mutex>    //unique_lock
-#include "map2/map_types.h"
+#include "map2/map_type.h"
 #include "cppunit/thread.h"
 
 #include <cds/sync/spinlock.h>
 
 namespace map2 {
 
-#   define TEST_MAP(X)          void X() { test<MapTypes<key_type, value_type>::X >()    ; }
-#   define TEST_MAP_EXTRACT(X)  TEST_MAP(X)
-#   define TEST_MAP_NOLF(X)     void X() { test_nolf<MapTypes<key_type, value_type>::X >()    ; }
-#   define TEST_MAP_NOLF_EXTRACT(X) TEST_MAP_NOLF(X)
+#   define TEST_MAP(IMPL, C, X)          void C::X() { test<map_type<IMPL, key_type, value_type>::X >()    ; }
+#   define TEST_MAP_EXTRACT(IMPL, C, X)  TEST_MAP(IMPL, C, X)
+#   define TEST_MAP_NOLF(IMPL, C, X)     void C::X() { test_nolf<map_type<IMPL, key_type, value_type>::X >()    ; }
+#   define TEST_MAP_NOLF_EXTRACT(IMPL, C, X) TEST_MAP_NOLF(IMPL, C, X)
 
     class Map_InsDel_func: public CppUnitMini::TestCase
     {
index 30d277d39cf2468815e2efdb185278b5ca8c6060..0c03dfc7e347e91f4ff7d92726666701002328a5 100644 (file)
@@ -1,8 +1,11 @@
 //$$CDS-header$$
 
 #include "map2/map_insdel_func.h"
+#include "map2/map_type_bronson_avltree.h"
 
 namespace map2 {
+    CDSUNIT_DEFINE_BronsonAVLTreeMap( cc::bronson_avltree::implementation_tag, Map_InsDel_func)
+
     CPPUNIT_TEST_SUITE_PART( Map_InsDel_func, run_BronsonAVLTreeMap )
         CDSUNIT_TEST_BronsonAVLTreeMap
     CPPUNIT_TEST_SUITE_END_PART()
index b890195018918769d15d5614fdbd361dacbe2ca5..272e46af96019a4232f81ee31f0f6f3c1f5aa412 100644 (file)
@@ -1,8 +1,11 @@
 //$$CDS-header$$
 
 #include "map2/map_insdel_func.h"
+#include "map2/map_type_cuckoo.h"
 
 namespace map2 {
+    CDSUNIT_DEFINE_CuckooMap(cds::intrusive::cuckoo::implementation_tag, Map_InsDel_func)
+
     CPPUNIT_TEST_SUITE_PART( Map_InsDel_func, run_CuckooMap )
         CDSUNIT_TEST_CuckooMap
     CPPUNIT_TEST_SUITE_END_PART()
index 1533d352ec21ff430430cc294a9b4a35cc514e2e..3eca4dc27473909b04b7c630c80adf8910d0984c 100644 (file)
@@ -1,8 +1,11 @@
 //$$CDS-header$$
 
 #include "map2/map_insdel_func.h"
+#include "map2/map_type_ellen_bintree.h"
 
 namespace map2 {
+    CDSUNIT_DEFINE_EllenBinTreeMap( cc::ellen_bintree::implementation_tag, Map_InsDel_func)
+
     CPPUNIT_TEST_SUITE_PART( Map_InsDel_func, run_EllenBinTreeMap )
         CDSUNIT_TEST_EllenBinTreeMap
     CPPUNIT_TEST_SUITE_END_PART()
index 41e1a7cf7d0c4cc6d25dd508ab14417a4f1e496a..7ef1c98288649fa4051d71e52dedd4a701adb221 100644 (file)
@@ -1,8 +1,11 @@
 //$$CDS-header$$
 
 #include "map2/map_insdel_func.h"
+#include "map2/map_type_michael.h"
 
 namespace map2 {
+    CDSUNIT_DEFINE_MichaelMap( cc::michael_map::implementation_tag, Map_InsDel_func )
+
     CPPUNIT_TEST_SUITE_PART( Map_InsDel_func, run_MichaelMap )
         CDSUNIT_TEST_MichaelMap
     CPPUNIT_TEST_SUITE_END_PART()
index 10fdfad6a5de53bee8da92a68a79ecbcc1d8c99c..9203731d7ee45d820e8d9a305e87bf754efc6451 100644 (file)
@@ -1,8 +1,11 @@
 //$$CDS-header$$
 
 #include "map2/map_insdel_func.h"
+#include "map2/map_type_striped.h"
 
 namespace map2 {
+    CDSUNIT_DEFINE_RefinableMap(cc::striped_set::implementation_tag, Map_InsDel_func)
+
     CPPUNIT_TEST_SUITE_PART( Map_InsDel_func, run_RefinableMap )
         CDSUNIT_TEST_RefinableMap
     CPPUNIT_TEST_SUITE_END_PART()
index 9cec610e29266a8b8e17633e5205b4bf208b7d7f..d0ba06701fa1fe52f493353b6f4f91ab8f80fb0a 100644 (file)
@@ -1,8 +1,11 @@
 //$$CDS-header$$
 
 #include "map2/map_insdel_func.h"
+#include "map2/map_type_skip_list.h"
 
 namespace map2 {
+    CDSUNIT_DEFINE_SkipListMap( cc::skip_list::implementation_tag, Map_InsDel_func)
+
     CPPUNIT_TEST_SUITE_PART( Map_InsDel_func, run_SkipListMap )
         CDSUNIT_TEST_SkipListMap
     CPPUNIT_TEST_SUITE_END_PART()
index da1c3fac022615a541b39caef6f1d25c78a45b10..d7761456b86a6887d078ecaf6f0a3442719bf10e 100644 (file)
@@ -1,8 +1,11 @@
 //$$CDS-header$$
 
 #include "map2/map_insdel_func.h"
+#include "map2/map_type_split_list.h"
 
 namespace map2 {
+    CDSUNIT_DEFINE_SplitList( cc::split_list::implementation_tag, Map_InsDel_func )
+
     CPPUNIT_TEST_SUITE_PART( Map_InsDel_func, run_SplitList )
         CDSUNIT_TEST_SplitList
     CPPUNIT_TEST_SUITE_END_PART()
index f68411836c21b3684f6c37bbf5ef8259b78dba17..424184cecc320b51e5463bd88fa2e4b8041a20ae 100644 (file)
@@ -1,8 +1,11 @@
 //$$CDS-header$$
 
 #include "map2/map_insdel_func.h"
+#include "map2/map_type_striped.h"
 
 namespace map2 {
+    CDSUNIT_DEFINE_StripedMap(cc::striped_set::implementation_tag, Map_InsDel_func)
+
     CPPUNIT_TEST_SUITE_PART( Map_InsDel_func, run_StripedMap )
         CDSUNIT_TEST_StripedMap
     CPPUNIT_TEST_SUITE_END_PART()
index c1b825dba3820bed8c3acbcf6074819599520935..51a3c7dc7853ddc405b1f2753ced7529c35418fd 100644 (file)
@@ -1,16 +1,16 @@
 //$$CDS-header$$
 
-#include "map2/map_types.h"
+#include "map2/map_type.h"
 #include "cppunit/thread.h"
 
 #include <vector>
 
 namespace map2 {
 
-#   define TEST_MAP(X)         void X() { test<MapTypes<key_type, value_type>::X >(); }
-#   define TEST_MAP_EXTRACT(X) TEST_MAP(X)
-#   define TEST_MAP_NOLF(X)    void X() { test_nolf<MapTypes<key_type, value_type>::X >(); }
-#   define TEST_MAP_NOLF_EXTRACT(X) TEST_MAP_NOLF(X)
+#   define TEST_MAP(IMPL, C, X)         void C::X() { test<map_type<IMPL, key_type, value_type>::X >(); }
+#   define TEST_MAP_EXTRACT(IMPL, C, X) TEST_MAP(IMPL, C, X)
+#   define TEST_MAP_NOLF(IMPL, C, X)    void C::X() { test_nolf<map_type<IMPL, key_type, value_type>::X >(); }
+#   define TEST_MAP_NOLF_EXTRACT(IMPL, C, X) TEST_MAP_NOLF(IMPL, C, X)
 
     class Map_InsDel_int: public CppUnitMini::TestCase
     {
index e2c4c33e679ad8a6cae39f20e5bc90859f887962..520be6c2a489175f9f61ccddf1f8e2fcb1232d7e 100644 (file)
@@ -1,8 +1,11 @@
 //$$CDS-header$$
 
 #include "map2/map_insdel_int.h"
+#include "map2/map_type_bronson_avltree.h"
 
 namespace map2 {
+    CDSUNIT_DEFINE_BronsonAVLTreeMap( cc::bronson_avltree::implementation_tag, Map_InsDel_int)
+
     CPPUNIT_TEST_SUITE_PART( Map_InsDel_int, run_BronsonAVLTreeMap )
         CDSUNIT_TEST_BronsonAVLTreeMap
     CPPUNIT_TEST_SUITE_END_PART()
index f18faff98bb9954cba0e02018a29fd21a9aaead7..b9e399dc94270af72b7db9610a4d963fd988fc97 100644 (file)
@@ -1,8 +1,11 @@
 //$$CDS-header$$
 
 #include "map2/map_insdel_int.h"
+#include "map2/map_type_cuckoo.h"
 
 namespace map2 {
+    CDSUNIT_DEFINE_CuckooMap(cds::intrusive::cuckoo::implementation_tag, Map_InsDel_int)
+
     CPPUNIT_TEST_SUITE_PART( Map_InsDel_int, run_CuckooMap )
         CDSUNIT_TEST_CuckooMap
     CPPUNIT_TEST_SUITE_END_PART()
index d026cca436150ca5b0373893db50c46a2261dee3..3288eb5a87ff1b153b1cc54ef3f507e2d88671e2 100644 (file)
@@ -1,8 +1,11 @@
 //$$CDS-header$$
 
 #include "map2/map_insdel_int.h"
+#include "map2/map_type_ellen_bintree.h"
 
 namespace map2 {
+    CDSUNIT_DEFINE_EllenBinTreeMap( cc::ellen_bintree::implementation_tag, Map_InsDel_int)
+
     CPPUNIT_TEST_SUITE_PART( Map_InsDel_int, run_EllenBinTreeMap )
         CDSUNIT_TEST_EllenBinTreeMap
     CPPUNIT_TEST_SUITE_END_PART()
index 1f523d47bb701f757efbaf6cd93b5c1417905381..45f5482475fe90015400a1482935a69626415746 100644 (file)
@@ -1,8 +1,11 @@
 //$$CDS-header$$
 
 #include "map2/map_insdel_int.h"
+#include "map2/map_type_michael.h"
 
 namespace map2 {
+    CDSUNIT_DEFINE_MichaelMap( cc::michael_map::implementation_tag, Map_InsDel_int )
+
     CPPUNIT_TEST_SUITE_PART( Map_InsDel_int, run_MichaelMap )
         CDSUNIT_TEST_MichaelMap
     CPPUNIT_TEST_SUITE_END_PART()
index 956eb423c278dbdcc13999f7fd75376192f26dad..78c490f30cefda0fca9b36b651780840eb66ad9a 100644 (file)
@@ -1,8 +1,11 @@
 //$$CDS-header$$
 
 #include "map2/map_insdel_int.h"
+#include "map2/map_type_striped.h"
 
 namespace map2 {
+    CDSUNIT_DEFINE_RefinableMap(cc::striped_set::implementation_tag, Map_InsDel_int)
+
     CPPUNIT_TEST_SUITE_PART( Map_InsDel_int, run_RefinableMap )
         CDSUNIT_TEST_RefinableMap
     CPPUNIT_TEST_SUITE_END_PART()
index c0b4405853a8d265878f2ece7451e1f91d261d69..7c5e6d90b8a289bc6a2f0cc7f89e9d7e8f0650c3 100644 (file)
@@ -1,8 +1,11 @@
 //$$CDS-header$$
 
 #include "map2/map_insdel_int.h"
+#include "map2/map_type_skip_list.h"
 
 namespace map2 {
+    CDSUNIT_DEFINE_SkipListMap( cc::skip_list::implementation_tag, Map_InsDel_int)
+
     CPPUNIT_TEST_SUITE_PART( Map_InsDel_int, run_SkipListMap )
         CDSUNIT_TEST_SkipListMap
     CPPUNIT_TEST_SUITE_END_PART()
index b28f0d6a3a14a01bec6cac07636092ea76dc8eef..1c8e3e20eaa40b8ffa0500d6a604b549414a5dc6 100644 (file)
@@ -1,8 +1,11 @@
 //$$CDS-header$$
 
 #include "map2/map_insdel_int.h"
+#include "map2/map_type_split_list.h"
 
 namespace map2 {
+    CDSUNIT_DEFINE_SplitList( cc::split_list::implementation_tag, Map_InsDel_int )
+
     CPPUNIT_TEST_SUITE_PART( Map_InsDel_int, run_SplitList )
         CDSUNIT_TEST_SplitList
     CPPUNIT_TEST_SUITE_END_PART()
index fc4644ffa0af61fd75afb561c378d57fd450215f..4bcb09bc2b291aaeba923a9d8df44c100efa50c0 100644 (file)
@@ -1,8 +1,11 @@
 //$$CDS-header$$
 
 #include "map2/map_insdel_int.h"
+#include "map2/map_type_striped.h"
 
 namespace map2 {
+    CDSUNIT_DEFINE_StripedMap(cc::striped_set::implementation_tag, Map_InsDel_int)
+
     CPPUNIT_TEST_SUITE_PART( Map_InsDel_int, run_StripedMap )
         CDSUNIT_TEST_StripedMap
     CPPUNIT_TEST_SUITE_END_PART()
index cc1177689217d7c765b14636c8099c9313611ab8..fc7a2db4515f71e48036abe69493f7f484a0ac2c 100644 (file)
@@ -1,6 +1,6 @@
 //$$CDS-header$$
 
-#include "map2/map_types.h"
+#include "map2/map_type.h"
 #include "cppunit/thread.h"
 
 #include <vector>
@@ -8,10 +8,10 @@
 
 namespace map2 {
 
-#   define TEST_MAP(X)         void X() { test<MapTypes<key_type, value_type>::X >()    ; }
-#   define TEST_MAP_NOLF(X)    void X() { test_nolf<MapTypes<key_type, value_type>::X >()    ; }
-#   define TEST_MAP_EXTRACT(X)  TEST_MAP(X)
-#   define TEST_MAP_NOLF_EXTRACT(X) TEST_MAP_NOLF(X)
+#   define TEST_MAP(IMPL, C, X)         void C::X() { test<map_type<IMPL, key_type, value_type>::X >(); }
+#   define TEST_MAP_NOLF(IMPL, C, X)    void C::X() { test_nolf<map_type<IMPL, key_type, value_type>::X >(); }
+#   define TEST_MAP_EXTRACT(IMPL, C, X)  TEST_MAP(IMPL, C, X)
+#   define TEST_MAP_NOLF_EXTRACT(IMPL, C, X) TEST_MAP_NOLF(IMPL, C, X)
 
     class Map_InsDel_Item_int: public CppUnitMini::TestCase
     {
index a2be151ef569fbf6c7442d798517f78cd80a21d5..2146deeb5b961d583a78560e81f14670a58d0b32 100644 (file)
@@ -1,8 +1,11 @@
 //$$CDS-header$$
 
 #include "map2/map_insdel_item_int.h"
+#include "map2/map_type_bronson_avltree.h"
 
 namespace map2 {
+    CDSUNIT_DEFINE_BronsonAVLTreeMap( cc::bronson_avltree::implementation_tag, Map_InsDel_Item_int)
+
     CPPUNIT_TEST_SUITE_PART( Map_InsDel_Item_int, run_BronsonAVLTreeMap )
         CDSUNIT_TEST_BronsonAVLTreeMap
     CPPUNIT_TEST_SUITE_END_PART()
index 6213c6fb9f40fb38ed3efe08cbf443af9c43a303..a0dd6d6ac66080db009602bd76f6540d3cde7d7f 100644 (file)
@@ -1,8 +1,11 @@
 //$$CDS-header$$
 
 #include "map2/map_insdel_item_int.h"
+#include "map2/map_type_cuckoo.h"
 
 namespace map2 {
+    CDSUNIT_DEFINE_CuckooMap(cds::intrusive::cuckoo::implementation_tag, Map_InsDel_Item_int)
+
     CPPUNIT_TEST_SUITE_PART( Map_InsDel_Item_int, run_CuckooMap )
         CDSUNIT_TEST_CuckooMap
     CPPUNIT_TEST_SUITE_END_PART()
index dc810aed6e3a20efe5bfa41a5f0dad8bb5557607..6790ec190aa0f611e202fb1f55d9c531aa891937 100644 (file)
@@ -1,8 +1,11 @@
 //$$CDS-header$$
 
 #include "map2/map_insdel_item_int.h"
+#include "map2/map_type_ellen_bintree.h"
 
 namespace map2 {
+    CDSUNIT_DEFINE_EllenBinTreeMap( cc::ellen_bintree::implementation_tag, Map_InsDel_Item_int)
+
     CPPUNIT_TEST_SUITE_PART( Map_InsDel_Item_int, run_EllenBinTreeMap )
         CDSUNIT_TEST_EllenBinTreeMap
     CPPUNIT_TEST_SUITE_END_PART()
index 578462f840c6cdd1037fa421e37088c7790432ab..487af6b25c8b17e43f61c14d10d2b27e975dea03 100644 (file)
@@ -1,8 +1,11 @@
 //$$CDS-header$$
 
 #include "map2/map_insdel_item_int.h"
+#include "map2/map_type_michael.h"
 
 namespace map2 {
+    CDSUNIT_DEFINE_MichaelMap( cc::michael_map::implementation_tag, Map_InsDel_Item_int )
+
     CPPUNIT_TEST_SUITE_PART( Map_InsDel_Item_int, run_MichaelMap )
         CDSUNIT_TEST_MichaelMap
     CPPUNIT_TEST_SUITE_END_PART()
index 5fc0aee1b7f5f377a17dbe9431ae70c7bde61eac..d05b6af00c749d68e3f0f474bd4a2ce416494ff1 100644 (file)
@@ -1,8 +1,11 @@
 //$$CDS-header$$
 
 #include "map2/map_insdel_item_int.h"
+#include "map2/map_type_striped.h"
 
 namespace map2 {
+    CDSUNIT_DEFINE_RefinableMap(cc::striped_set::implementation_tag, Map_InsDel_Item_int)
+
     CPPUNIT_TEST_SUITE_PART( Map_InsDel_Item_int, run_RefinableMap )
         CDSUNIT_TEST_RefinableMap
     CPPUNIT_TEST_SUITE_END_PART()
index 97bb844dad0e8b4f1fe5a2b534d8be9b2c81ef40..0a9dd2444f290d830268bf3b6322191a5fc2c546 100644 (file)
@@ -1,8 +1,11 @@
 //$$CDS-header$$
 
 #include "map2/map_insdel_item_int.h"
+#include "map2/map_type_skip_list.h"
 
 namespace map2 {
+    CDSUNIT_DEFINE_SkipListMap( cc::skip_list::implementation_tag, Map_InsDel_Item_int)
+
     CPPUNIT_TEST_SUITE_PART( Map_InsDel_Item_int, run_SkipListMap )
         CDSUNIT_TEST_SkipListMap
     CPPUNIT_TEST_SUITE_END_PART()
index 8d6b5fc6cca77cf29ce684c671111fd5570e3a29..40c48aea99f9e6fd6f5c16cbc1f33f1a2c0df30a 100644 (file)
@@ -1,8 +1,11 @@
 //$$CDS-header$$
 
 #include "map2/map_insdel_item_int.h"
+#include "map2/map_type_split_list.h"
 
 namespace map2 {
+    CDSUNIT_DEFINE_SplitList( cc::split_list::implementation_tag, Map_InsDel_Item_int )
+
     CPPUNIT_TEST_SUITE_PART( Map_InsDel_Item_int, run_SplitList )
         CDSUNIT_TEST_SplitList
     CPPUNIT_TEST_SUITE_END_PART()
index 6c7ce65af0bf89e219da836790d78fa746caad55..e59cc31491a94ff242333696d62e170936e57f48 100644 (file)
@@ -1,8 +1,11 @@
 //$$CDS-header$$
 
 #include "map2/map_insdel_item_int.h"
+#include "map2/map_type_striped.h"
 
 namespace map2 {
+    CDSUNIT_DEFINE_StripedMap(cc::striped_set::implementation_tag, Map_InsDel_Item_int)
+
     CPPUNIT_TEST_SUITE_PART( Map_InsDel_Item_int, run_StripedMap )
         CDSUNIT_TEST_StripedMap
     CPPUNIT_TEST_SUITE_END_PART()
index b42450c4c310acf8c78c96317a113752701c8cea..532ab5c4652798a2840eaed46f43376388d59c92 100644 (file)
@@ -1,16 +1,16 @@
 //$$CDS-header$$
 
-#include "map2/map_types.h"
+#include "map2/map_type.h"
 #include "cppunit/thread.h"
 
 #include <vector>
 
 namespace map2 {
 
-#   define TEST_MAP(X)         void X() { test<MapTypes<key_type, value_type>::X >()    ; }
-#   define TEST_MAP_NOLF(X)    void X() { test_nolf<MapTypes<key_type, value_type>::X >()    ; }
-#   define TEST_MAP_EXTRACT(X)  TEST_MAP(X)
-#   define TEST_MAP_NOLF_EXTRACT(X) TEST_MAP_NOLF(X)
+#   define TEST_MAP(IMPL, C, X)         void C::X() { test<map_type<IMPL, key_type, value_type>::X >(); }
+#   define TEST_MAP_NOLF(IMPL, C, X)    void C::X() { test_nolf<map_type<IMPL, key_type, value_type>::X >(); }
+#   define TEST_MAP_EXTRACT(IMPL, C, X)  TEST_MAP(IMPL, C, X)
+#   define TEST_MAP_NOLF_EXTRACT(IMPL, C, X) TEST_MAP_NOLF(IMPL, C, X)
 
     class Map_InsDel_Item_string: public CppUnitMini::TestCase
     {
index 57c5e82bc47543baa5cf2e0c8a9b423f15ec1fb1..3e159558b15feb72484aefbb35f1b945c1f80d9d 100644 (file)
@@ -1,8 +1,11 @@
 //$$CDS-header$$
 
 #include "map2/map_insdel_item_string.h"
+#include "map2/map_type_bronson_avltree.h"
 
 namespace map2 {
+    CDSUNIT_DEFINE_BronsonAVLTreeMap( cc::bronson_avltree::implementation_tag, Map_InsDel_Item_string)
+
     CPPUNIT_TEST_SUITE_PART( Map_InsDel_Item_string, run_BronsonAVLTreeMap )
         CDSUNIT_TEST_BronsonAVLTreeMap
     CPPUNIT_TEST_SUITE_END_PART()
index a7ec0dd0f6d3593f13990758990fcf10b4191425..e05b60697ce5f0a64416cfd8328aa65208828e18 100644 (file)
@@ -1,8 +1,11 @@
 //$$CDS-header$$
 
 #include "map2/map_insdel_item_string.h"
+#include "map2/map_type_cuckoo.h"
 
 namespace map2 {
+    CDSUNIT_DEFINE_CuckooMap(cds::intrusive::cuckoo::implementation_tag, Map_InsDel_Item_string)
+
     CPPUNIT_TEST_SUITE_PART( Map_InsDel_Item_string, run_CuckooMap )
         CDSUNIT_TEST_CuckooMap
     CPPUNIT_TEST_SUITE_END_PART()
index c2fff3fcddb0d9ed2f1ec7f26d4d8e4246a45432..1ab799517e0f333bab29094275553027df8a74e2 100644 (file)
@@ -1,8 +1,11 @@
 //$$CDS-header$$
 
 #include "map2/map_insdel_item_string.h"
+#include "map2/map_type_ellen_bintree.h"
 
 namespace map2 {
+    CDSUNIT_DEFINE_EllenBinTreeMap( cc::ellen_bintree::implementation_tag, Map_InsDel_Item_string)
+
     CPPUNIT_TEST_SUITE_PART( Map_InsDel_Item_string, run_EllenBinTreeMap )
         CDSUNIT_TEST_EllenBinTreeMap
     CPPUNIT_TEST_SUITE_END_PART()
index e2a17a29bbfaaa39962132d470ca6fdae24ab10a..3e35739a0e9a9a4c60771a619def435f2711d1d6 100644 (file)
@@ -1,8 +1,11 @@
 //$$CDS-header$$
 
 #include "map2/map_insdel_item_string.h"
+#include "map2/map_type_michael.h"
 
 namespace map2 {
+    CDSUNIT_DEFINE_MichaelMap( cc::michael_map::implementation_tag, Map_InsDel_Item_string )
+
     CPPUNIT_TEST_SUITE_PART( Map_InsDel_Item_string, run_MichaelMap )
         CDSUNIT_TEST_MichaelMap
     CPPUNIT_TEST_SUITE_END_PART()
index 2d5819c79b566a79d42af381475ea9bf437c3465..44bac2db1edb67a74a4452f9613aad2b23163262 100644 (file)
@@ -1,8 +1,11 @@
 //$$CDS-header$$
 
 #include "map2/map_insdel_item_string.h"
+#include "map2/map_type_striped.h"
 
 namespace map2 {
+    CDSUNIT_DEFINE_RefinableMap(cc::striped_set::implementation_tag, Map_InsDel_Item_string)
+
     CPPUNIT_TEST_SUITE_PART( Map_InsDel_Item_string, run_RefinableMap )
         CDSUNIT_TEST_RefinableMap
     CPPUNIT_TEST_SUITE_END_PART()
index 4a3fa18adabee852d6863197d728d7c86bda3927..60235a714a4f74998c1457049cf3e90a4202f758 100644 (file)
@@ -1,8 +1,11 @@
 //$$CDS-header$$
 
 #include "map2/map_insdel_item_string.h"
+#include "map2/map_type_skip_list.h"
 
 namespace map2 {
+    CDSUNIT_DEFINE_SkipListMap( cc::skip_list::implementation_tag, Map_InsDel_Item_string)
+
     CPPUNIT_TEST_SUITE_PART( Map_InsDel_Item_string, run_SkipListMap )
         CDSUNIT_TEST_SkipListMap
     CPPUNIT_TEST_SUITE_END_PART()
index ebb2bf008c44ab1b973bd9a0f3c085fc6bf402b7..1efdd6b8b64c2b1a76ced25d1ca52be5c582561b 100644 (file)
@@ -1,8 +1,11 @@
 //$$CDS-header$$
 
 #include "map2/map_insdel_item_string.h"
+#include "map2/map_type_split_list.h"
 
 namespace map2 {
+    CDSUNIT_DEFINE_SplitList( cc::split_list::implementation_tag, Map_InsDel_Item_string )
+
     CPPUNIT_TEST_SUITE_PART( Map_InsDel_Item_string, run_SplitList )
         CDSUNIT_TEST_SplitList
     CPPUNIT_TEST_SUITE_END_PART()
index be0ba3dfdf04e0c2973acdefee85f48eeb975bf6..2ae3b6df2fa74fa392c8c4115e595ec6b6d90e87 100644 (file)
@@ -1,8 +1,11 @@
 //$$CDS-header$$
 
 #include "map2/map_insdel_item_string.h"
+#include "map2/map_type_striped.h"
 
 namespace map2 {
+    CDSUNIT_DEFINE_StripedMap(cc::striped_set::implementation_tag, Map_InsDel_Item_string)
+
     CPPUNIT_TEST_SUITE_PART( Map_InsDel_Item_string, run_StripedMap )
         CDSUNIT_TEST_StripedMap
     CPPUNIT_TEST_SUITE_END_PART()
index 334b29121cfe5941b66f1bd639f926e689aa0376..d7b5096c8f96f87060784955c329d43c04f255d6 100644 (file)
@@ -1,16 +1,16 @@
 //$$CDS-header$$
 
-#include "map2/map_types.h"
+#include "map2/map_type.h"
 #include "cppunit/thread.h"
 
 #include <vector>
 
 namespace map2 {
 
-#   define TEST_MAP(X)         void X() { test<MapTypes<key_type, value_type>::X >()    ; }
-#   define TEST_MAP_NOLF(X)    void X() { test_nolf<MapTypes<key_type, value_type>::X >()    ; }
-#   define TEST_MAP_EXTRACT(X)  TEST_MAP(X)
-#   define TEST_MAP_NOLF_EXTRACT(X) TEST_MAP_NOLF(X)
+#   define TEST_MAP(IMPL, C, X)         void C::X() { test<map_type<IMPL, key_type, value_type>::X >(); }
+#   define TEST_MAP_NOLF(IMPL, C, X)    void C::X() { test_nolf<map_type<IMPL, key_type, value_type>::X >(); }
+#   define TEST_MAP_EXTRACT(IMPL, C, X)  TEST_MAP(IMPL, C, X)
+#   define TEST_MAP_NOLF_EXTRACT(IMPL, C, X) TEST_MAP_NOLF(IMPL, C, X)
 
     class Map_InsDel_string: public CppUnitMini::TestCase
     {
index 89fe877c0eea6faca886e3fd8e5abbd55eea9f7a..8ba8b414106258f40f9e52fd9240978b105ba78b 100644 (file)
@@ -1,8 +1,11 @@
 //$$CDS-header$$
 
 #include "map2/map_insdel_string.h"
+#include "map2/map_type_bronson_avltree.h"
 
 namespace map2 {
+    CDSUNIT_DEFINE_BronsonAVLTreeMap( cc::bronson_avltree::implementation_tag, Map_InsDel_string)
+
     CPPUNIT_TEST_SUITE_PART( Map_InsDel_string, run_BronsonAVLTreeMap )
         CDSUNIT_TEST_BronsonAVLTreeMap
     CPPUNIT_TEST_SUITE_END_PART()
index a6b218b33548d5ec8c87a7d71eae7b7753bd4b7b..92e8c79c34e03dbae023d4a474a05f7130288c8b 100644 (file)
@@ -1,8 +1,11 @@
 //$$CDS-header$$
 
 #include "map2/map_insdel_string.h"
+#include "map2/map_type_cuckoo.h"
 
 namespace map2 {
+    CDSUNIT_DEFINE_CuckooMap(cds::intrusive::cuckoo::implementation_tag, Map_InsDel_string)
+
     CPPUNIT_TEST_SUITE_PART( Map_InsDel_string, run_CuckooMap )
         CDSUNIT_TEST_CuckooMap
     CPPUNIT_TEST_SUITE_END_PART()
index 8fbeeb24e4e33c7a242302f5e20cb83b05af27c1..cd00f031ccea9363bbd5d44f2b3f9b2b02c2d2f8 100644 (file)
@@ -1,8 +1,11 @@
 //$$CDS-header$$
 
 #include "map2/map_insdel_string.h"
+#include "map2/map_type_ellen_bintree.h"
 
 namespace map2 {
+    CDSUNIT_DEFINE_EllenBinTreeMap( cc::ellen_bintree::implementation_tag, Map_InsDel_string)
+
     CPPUNIT_TEST_SUITE_PART( Map_InsDel_string, run_EllenBinTreeMap )
         CDSUNIT_TEST_EllenBinTreeMap
     CPPUNIT_TEST_SUITE_END_PART()
index b679209e4ecaa9dd3b80057763f9b3126aaf2a49..6a205ea0a17a001a0bc1ae92c83f43199786845a 100644 (file)
@@ -1,8 +1,11 @@
 //$$CDS-header$$
 
 #include "map2/map_insdel_string.h"
+#include "map2/map_type_michael.h"
 
 namespace map2 {
+    CDSUNIT_DEFINE_MichaelMap( cc::michael_map::implementation_tag, Map_InsDel_string )
+
     CPPUNIT_TEST_SUITE_PART( Map_InsDel_string, run_MichaelMap )
         CDSUNIT_TEST_MichaelMap
     CPPUNIT_TEST_SUITE_END_PART()
index 0dcd44f00da9ce48da4564e9f21e5a435d96600e..74448fbffbc7025465484a2a2ec41e2bb5a86840 100644 (file)
@@ -1,8 +1,11 @@
 //$$CDS-header$$
 
 #include "map2/map_insdel_string.h"
+#include "map2/map_type_striped.h"
 
 namespace map2 {
+    CDSUNIT_DEFINE_RefinableMap(cc::striped_set::implementation_tag, Map_InsDel_string)
+
     CPPUNIT_TEST_SUITE_PART( Map_InsDel_string, run_RefinableMap )
         CDSUNIT_TEST_RefinableMap
     CPPUNIT_TEST_SUITE_END_PART()
index 2cfcbf6af01af126f5d1322cb3199e12182f27f3..ba047749ffe61ad672f3f5b749c98f86777f9690 100644 (file)
@@ -1,8 +1,11 @@
 //$$CDS-header$$
 
 #include "map2/map_insdel_string.h"
+#include "map2/map_type_skip_list.h"
 
 namespace map2 {
+    CDSUNIT_DEFINE_SkipListMap( cc::skip_list::implementation_tag, Map_InsDel_string)
+
     CPPUNIT_TEST_SUITE_PART( Map_InsDel_string, run_SkipListMap )
         CDSUNIT_TEST_SkipListMap
     CPPUNIT_TEST_SUITE_END_PART()
index be6342d3ba60f3c956932cad5594f2373352b3e7..1ab66aae22c0f1a8c2bf4533e519cbd3cf7bab26 100644 (file)
@@ -1,8 +1,11 @@
 //$$CDS-header$$
 
 #include "map2/map_insdel_string.h"
+#include "map2/map_type_split_list.h"
 
 namespace map2 {
+    CDSUNIT_DEFINE_SplitList( cc::split_list::implementation_tag, Map_InsDel_string )
+
     CPPUNIT_TEST_SUITE_PART( Map_InsDel_string, run_SplitList )
         CDSUNIT_TEST_SplitList
     CPPUNIT_TEST_SUITE_END_PART()
index f7a7e2b8982390e95b2355c1e2345cfbcf901504..5ec096584276f894e64dd04b6466aa630023f3ba 100644 (file)
@@ -1,8 +1,11 @@
 //$$CDS-header$$
 
 #include "map2/map_insdel_string.h"
+#include "map2/map_type_std.h"
 
 namespace map2 {
+    CDSUNIT_DEFINE_StdMap( map2::std_implementation_tag, Map_InsDel_string)
+
     CPPUNIT_TEST_SUITE_PART( Map_InsDel_string, run_StdMap )
         CDSUNIT_TEST_StdMap
     CPPUNIT_TEST_SUITE_END_PART()
index 2c772fc610eccfa3a4ff543bfb293288895b6c42..f24df48680920a46d35e044bbdb893f1e5d926d0 100644 (file)
@@ -1,8 +1,11 @@
 //$$CDS-header$$
 
 #include "map2/map_insdel_string.h"
+#include "map2/map_type_striped.h"
 
 namespace map2 {
+    CDSUNIT_DEFINE_StripedMap(cc::striped_set::implementation_tag, Map_InsDel_string)
+
     CPPUNIT_TEST_SUITE_PART( Map_InsDel_string, run_StripedMap )
         CDSUNIT_TEST_StripedMap
     CPPUNIT_TEST_SUITE_END_PART()
index 28df1fac25e2e7d1cb14c4c0b6372d677c4bd203..e5d56bb589809c4ec9b03db984f375f3d1e4563d 100644 (file)
@@ -1,6 +1,7 @@
 //$$CDS-header$$
 
 #include "map2/map_insdelfind.h"
+#include <cds/os/topology.h>
 
 namespace map2 {
     CPPUNIT_TEST_SUITE_REGISTRATION( Map_InsDelFind );
index c5e36f1accdcf5a0f0a5054c48e9758c9b736e0c..1b689c6c6900e6c0dbb10694921d1041753743a5 100644 (file)
@@ -1,16 +1,16 @@
 //$$CDS-header$$
 
-#include "map2/map_types.h"
+#include "map2/map_type.h"
 #include "cppunit/thread.h"
 #include <algorithm> // random_shuffle
 #include <vector>
 
 namespace map2 {
 
-#   define TEST_MAP(X)         void X() { test<MapTypes<key_type, value_type>::X >()    ; }
-#   define TEST_MAP_NOLF(X)    void X() { test_nolf<MapTypes<key_type, value_type>::X >()    ; }
-#   define TEST_MAP_EXTRACT(X)  TEST_MAP(X)
-#   define TEST_MAP_NOLF_EXTRACT(X) TEST_MAP_NOLF(X)
+#   define TEST_MAP(IMPL, C, X)         void C::X() { test<map_type<IMPL, key_type, value_type>::X >(); }
+#   define TEST_MAP_NOLF(IMPL, C, X)    void C::X() { test_nolf<map_type<IMPL, key_type, value_type>::X >(); }
+#   define TEST_MAP_EXTRACT(IMPL, C, X)  TEST_MAP(IMPL, C, X)
+#   define TEST_MAP_NOLF_EXTRACT(IMPL, C, X) TEST_MAP_NOLF(IMPL, C, X)
 
     class Map_InsDelFind: public CppUnitMini::TestCase
     {
index 7d1731e8c67c16c916eab1e0c278e416328c9ce4..30f63afa28dffbc6128a464b8b95189e0d1f72bb 100644 (file)
@@ -1,8 +1,11 @@
 //$$CDS-header$$
 
 #include "map2/map_insdelfind.h"
+#include "map2/map_type_bronson_avltree.h"
 
 namespace map2 {
+    CDSUNIT_DEFINE_BronsonAVLTreeMap( cc::bronson_avltree::implementation_tag, Map_InsDelFind)
+
     CPPUNIT_TEST_SUITE_PART( Map_InsDelFind, run_BronsonAVLTreeMap )
         CDSUNIT_TEST_BronsonAVLTreeMap
     CPPUNIT_TEST_SUITE_END_PART()
index 10e174942281f0d8fc41e977f2d181d201ff694f..de5d5a1e91177f0d1e353b5cfcdbecee8abe1eb8 100644 (file)
@@ -1,8 +1,11 @@
 //$$CDS-header$$
 
 #include "map2/map_insdelfind.h"
+#include "map2/map_type_cuckoo.h"
 
 namespace map2 {
+    CDSUNIT_DEFINE_CuckooMap(cds::intrusive::cuckoo::implementation_tag, Map_InsDelFind)
+
     CPPUNIT_TEST_SUITE_PART( Map_InsDelFind, run_CuckooMap )
         CDSUNIT_TEST_CuckooMap
     CPPUNIT_TEST_SUITE_END_PART()
index 22b669516b8d4415352830fc33c9f2096a4f4040..43dc8109922c546add94539e8f7a6a49426888f2 100644 (file)
@@ -1,8 +1,11 @@
 //$$CDS-header$$
 
 #include "map2/map_insdelfind.h"
+#include "map2/map_type_ellen_bintree.h"
 
 namespace map2 {
+    CDSUNIT_DEFINE_EllenBinTreeMap( cc::ellen_bintree::implementation_tag, Map_InsDelFind)
+
     CPPUNIT_TEST_SUITE_PART( Map_InsDelFind, run_EllenBinTreeMap )
         CDSUNIT_TEST_EllenBinTreeMap
     CPPUNIT_TEST_SUITE_END_PART()
index dbc0487b01a1647e139f873f5d07f8dbe6a637be..45b2589423076b499807b29e6098d74b54c53c7a 100644 (file)
@@ -1,8 +1,11 @@
 //$$CDS-header$$
 
 #include "map2/map_insdelfind.h"
+#include "map2/map_type_michael.h"
 
 namespace map2 {
+    CDSUNIT_DEFINE_MichaelMap( cc::michael_map::implementation_tag, Map_InsDelFind )
+
     CPPUNIT_TEST_SUITE_PART( Map_InsDelFind, run_MichaelMap )
         CDSUNIT_TEST_MichaelMap
     CPPUNIT_TEST_SUITE_END_PART()
index a1bbde45a2b899b779606c773ba02789f65fbc22..e6c1ae98a9fd71ac1456fb33fd6b4fd6e5855660 100644 (file)
@@ -1,8 +1,11 @@
 //$$CDS-header$$
 
 #include "map2/map_insdelfind.h"
+#include "map2/map_type_striped.h"
 
 namespace map2 {
+    CDSUNIT_DEFINE_RefinableMap(cc::striped_set::implementation_tag, Map_InsDelFind)
+
     CPPUNIT_TEST_SUITE_PART( Map_InsDelFind, run_RefinableMap )
         CDSUNIT_TEST_RefinableMap
     CPPUNIT_TEST_SUITE_END_PART()
index 861ffaef360d6081b0916b3851120680467ad1e9..d407482e12d66acda4b39a109761d2da3d1dc628 100644 (file)
@@ -1,8 +1,11 @@
 //$$CDS-header$$
 
 #include "map2/map_insdelfind.h"
+#include "map2/map_type_skip_list.h"
 
 namespace map2 {
+    CDSUNIT_DEFINE_SkipListMap( cc::skip_list::implementation_tag, Map_InsDelFind)
+
     CPPUNIT_TEST_SUITE_PART( Map_InsDelFind, run_SkipListMap )
         CDSUNIT_TEST_SkipListMap
     CPPUNIT_TEST_SUITE_END_PART()
index c5b3c7c1831b98346bc2c24d56c40c7c7c8c21e5..f96c8839c5bee4d15237887d769dc8087a4a3534 100644 (file)
@@ -1,8 +1,11 @@
 //$$CDS-header$$
 
 #include "map2/map_insdelfind.h"
+#include "map2/map_type_split_list.h"
 
 namespace map2 {
+    CDSUNIT_DEFINE_SplitList( cc::split_list::implementation_tag, Map_InsDelFind )
+
     CPPUNIT_TEST_SUITE_PART( Map_InsDelFind, run_SplitList )
         CDSUNIT_TEST_SplitList
     CPPUNIT_TEST_SUITE_END_PART()
index b608a9bb41172f32dab14d61e8d030fe63f0010b..4607f3c4384e1f6abbfd6215bbe5041f2e13353e 100644 (file)
@@ -1,8 +1,11 @@
 //$$CDS-header$$
 
 #include "map2/map_insdelfind.h"
+#include "map2/map_type_std.h"
 
 namespace map2 {
+    CDSUNIT_DEFINE_StdMap( map2::std_implementation_tag, Map_InsDelFind)
+
     CPPUNIT_TEST_SUITE_PART( Map_InsDelFind, run_StdMap )
         CDSUNIT_TEST_StdMap
     CPPUNIT_TEST_SUITE_END_PART()
index 9384ffd80885bcd16e8f0fb9d6c683d97137f051..db8d2658c5092977924e00c311167690538c80f5 100644 (file)
@@ -1,8 +1,11 @@
 //$$CDS-header$$
 
 #include "map2/map_insdelfind.h"
+#include "map2/map_type_striped.h"
 
 namespace map2 {
+    CDSUNIT_DEFINE_StripedMap(cc::striped_set::implementation_tag, Map_InsDelFind)
+
     CPPUNIT_TEST_SUITE_PART( Map_InsDelFind, run_StripedMap )
         CDSUNIT_TEST_StripedMap
     CPPUNIT_TEST_SUITE_END_PART()
index 2003896a3fe17cf93e3ebf79653eb42ab90cbcdd..0eb0fc2f7e860e4b91d285e80cacce5fd07205cc 100644 (file)
@@ -1,6 +1,6 @@
 //$$CDS-header$$
 
-#include "map2/map_types.h"
+#include "map2/map_type.h"
 #include "cppunit/thread.h"
 
 #include <cds/os/topology.h>
@@ -9,10 +9,10 @@
 
 namespace map2 {
 
-#   define TEST_MAP(X)         void X() { test<MapTypes<key_type, value_type>::X >()    ; }
-#   define TEST_MAP_NOLF(X)    void X() { test_nolf<MapTypes<key_type, value_type>::X >()    ; }
-#   define TEST_MAP_EXTRACT(X)  TEST_MAP(X)
-#   define TEST_MAP_NOLF_EXTRACT(X) TEST_MAP_NOLF(X)
+#   define TEST_MAP(IMPL, C, X)         void C::X() { test<map_type<IMPL, key_type, value_type>::X >(); }
+#   define TEST_MAP_NOLF(IMPL, C, X)    void C::X() { test_nolf<map_type<IMPL, key_type, value_type>::X >(); }
+#   define TEST_MAP_EXTRACT(IMPL, C, X)  TEST_MAP(IMPL, C, X)
+#   define TEST_MAP_NOLF_EXTRACT(IMPL, C, X) TEST_MAP_NOLF(IMPL, C, X)
 
     class Map_InsFind_int: public CppUnitMini::TestCase
     {
index 520b785a04972b3cc455a34ecad36a5c63261376..b1f0d92fdbeaed28e6f0503616088da3382281a9 100644 (file)
@@ -1,8 +1,11 @@
 //$$CDS-header$$
 
 #include "map2/map_insfind_int.h"
+#include "map2/map_type_bronson_avltree.h"
 
 namespace map2 {
+    CDSUNIT_DEFINE_BronsonAVLTreeMap( cc::bronson_avltree::implementation_tag, Map_InsFind_int)
+
     CPPUNIT_TEST_SUITE_PART( Map_InsFind_int, run_BronsonAVLTreeMap )
         CDSUNIT_TEST_BronsonAVLTreeMap
     CPPUNIT_TEST_SUITE_END_PART()
index b1fa855937e859e22d54ff3e1814140f429238ad..8d79acf679cf2b54147b932fc6f953e5af61a883 100644 (file)
@@ -1,8 +1,11 @@
 //$$CDS-header$$
 
 #include "map2/map_insfind_int.h"
+#include "map2/map_type_cuckoo.h"
 
 namespace map2 {
+    CDSUNIT_DEFINE_CuckooMap(cds::intrusive::cuckoo::implementation_tag, Map_InsFind_int)
+
     CPPUNIT_TEST_SUITE_PART( Map_InsFind_int, run_CuckooMap )
         CDSUNIT_TEST_CuckooMap
     CPPUNIT_TEST_SUITE_END_PART()
index 17b5d0e44d97356d20c7f45600b8e96e64449fa3..29a66dff451e32d2210052529f3fe531c9a0bfd5 100644 (file)
@@ -1,8 +1,11 @@
 //$$CDS-header$$
 
 #include "map2/map_insfind_int.h"
+#include "map2/map_type_ellen_bintree.h"
 
 namespace map2 {
+    CDSUNIT_DEFINE_EllenBinTreeMap( cc::ellen_bintree::implementation_tag, Map_InsFind_int)
+
     CPPUNIT_TEST_SUITE_PART( Map_InsFind_int, run_EllenBinTreeMap )
         CDSUNIT_TEST_EllenBinTreeMap
     CPPUNIT_TEST_SUITE_END_PART()
index 8703e06112fc17e4ee69143f932dc652f75d7533..fbe64b1abb125d72f59b69aebb575581ec194fb3 100644 (file)
@@ -1,8 +1,12 @@
 //$$CDS-header$$
 
 #include "map2/map_insfind_int.h"
+#include "map2/map_type_michael.h"
 
 namespace map2 {
+    CDSUNIT_DEFINE_MichaelMap( cc::michael_map::implementation_tag, Map_InsFind_int )
+    CDSUNIT_DEFINE_MichaelMap_nogc( cc::michael_map::implementation_tag, Map_InsFind_int )
+
     CPPUNIT_TEST_SUITE_PART( Map_InsFind_int, run_MichaelMap )
         CDSUNIT_TEST_MichaelMap
         CDSUNIT_TEST_MichaelMap_nogc
index 8926de27d1859defaf525a91e12d1616d76ec92a..6ead2563f95f29cf29ce468d8838ed87b7c6e357 100644 (file)
@@ -1,8 +1,11 @@
 //$$CDS-header$$
 
 #include "map2/map_insfind_int.h"
+#include "map2/map_type_striped.h"
 
 namespace map2 {
+    CDSUNIT_DEFINE_RefinableMap(cc::striped_set::implementation_tag, Map_InsFind_int)
+
     CPPUNIT_TEST_SUITE_PART( Map_InsFind_int, run_RefinableMap )
         CDSUNIT_TEST_RefinableMap
     CPPUNIT_TEST_SUITE_END_PART()
index 930ccf1d3286d1fa1ce45c84625e59d9fe1cdeb5..18ab54ae498f5d1d31bf3f3ff2b6073f3b3ae8c1 100644 (file)
@@ -1,8 +1,12 @@
 //$$CDS-header$$
 
 #include "map2/map_insfind_int.h"
+#include "map2/map_type_skip_list.h"
 
 namespace map2 {
+    CDSUNIT_DEFINE_SkipListMap( cc::skip_list::implementation_tag, Map_InsFind_int)
+    CDSUNIT_DEFINE_SkipListMap_nogc( cc::skip_list::implementation_tag, Map_InsFind_int)
+
     CPPUNIT_TEST_SUITE_PART( Map_InsFind_int, run_SkipListMap )
         CDSUNIT_TEST_SkipListMap
         CDSUNIT_TEST_SkipListMap_nogc
index 4af7722ed921112b8f3106b4383a6e7c43f44da7..48dbfa7dc9975d3bc7b2bdbda5076a50e8cc8a84 100644 (file)
@@ -1,8 +1,12 @@
 //$$CDS-header$$
 
 #include "map2/map_insfind_int.h"
+#include "map2/map_type_split_list.h"
 
 namespace map2 {
+    CDSUNIT_DEFINE_SplitList( cc::split_list::implementation_tag, Map_InsFind_int )
+    CDSUNIT_DEFINE_SplitList_nogc( cc::split_list::implementation_tag, Map_InsFind_int )
+
     CPPUNIT_TEST_SUITE_PART( Map_InsFind_int, run_SplitList )
         CDSUNIT_TEST_SplitList
         CDSUNIT_TEST_SplitList_nogc
index 473fb746d713b42f020e22027227d1f5a6cf73ec..378cdc135284deaceb5f04e7ce7d44fee569a5b0 100644 (file)
@@ -1,8 +1,11 @@
 //$$CDS-header$$
 
 #include "map2/map_insfind_int.h"
+#include "map2/map_type_std.h"
 
 namespace map2 {
+    CDSUNIT_DEFINE_StdMap( map2::std_implementation_tag, Map_InsFind_int)
+
     CPPUNIT_TEST_SUITE_PART( Map_InsFind_int, run_StdMap )
         CDSUNIT_TEST_StdMap
     CPPUNIT_TEST_SUITE_END_PART()
index 392ca36de8fcabc18d171bd3f13fb6e5fd8cc3b7..cffe5ba8ab7d1da911f8223319cad92b2b803d3f 100644 (file)
@@ -1,8 +1,11 @@
 //$$CDS-header$$
 
 #include "map2/map_insfind_int.h"
+#include "map2/map_type_striped.h"
 
 namespace map2 {
+    CDSUNIT_DEFINE_StripedMap(cc::striped_set::implementation_tag, Map_InsFind_int)
+
     CPPUNIT_TEST_SUITE_PART( Map_InsFind_int, run_StripedMap )
         CDSUNIT_TEST_StripedMap
     CPPUNIT_TEST_SUITE_END_PART()
diff --git a/tests/unit/map2/map_type.h b/tests/unit/map2/map_type.h
new file mode 100644 (file)
index 0000000..5d97392
--- /dev/null
@@ -0,0 +1,135 @@
+//$$CDS-header$$
+
+#ifndef CDSUNIT_MAP_TYPE_H
+#define CDSUNIT_MAP_TYPE_H
+
+#include <cds/urcu/general_instant.h>
+#include <cds/urcu/general_buffered.h>
+#include <cds/urcu/general_threaded.h>
+#include <cds/urcu/signal_buffered.h>
+#include <cds/urcu/signal_threaded.h>
+
+#include <cds/sync/spinlock.h>
+#include <cds/opt/hash.h>
+#include <boost/functional/hash/hash.hpp>
+
+#include "cppunit/cppunit_mini.h"
+
+namespace map2 {
+    namespace cc = cds::container;
+    namespace co = cds::opt;
+
+    typedef cds::urcu::gc< cds::urcu::general_instant<> >   rcu_gpi;
+    typedef cds::urcu::gc< cds::urcu::general_buffered<> >  rcu_gpb;
+    typedef cds::urcu::gc< cds::urcu::general_threaded<> >  rcu_gpt;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+    typedef cds::urcu::gc< cds::urcu::signal_buffered<> >  rcu_shb;
+    typedef cds::urcu::gc< cds::urcu::signal_threaded<> >  rcu_sht;
+#endif
+
+    template <typename Key>
+    struct cmp {
+        int operator ()(Key const& k1, Key const& k2) const
+        {
+            if ( std::less<Key>( k1, k2 ) )
+                return -1;
+            return std::less<Key>( k2, k1 ) ? 1 : 0;
+        }
+    };
+
+#define CDSUNIT_INT_COMPARE(t)  template <> struct cmp<t> { int operator()( t k1, t k2 ){ return (int)(k1 - k2); } }
+    CDSUNIT_INT_COMPARE(char);
+    CDSUNIT_INT_COMPARE(unsigned char);
+    CDSUNIT_INT_COMPARE(int);
+    CDSUNIT_INT_COMPARE(unsigned int);
+    CDSUNIT_INT_COMPARE(long);
+    CDSUNIT_INT_COMPARE(unsigned long);
+    CDSUNIT_INT_COMPARE(long long);
+    CDSUNIT_INT_COMPARE(unsigned long long);
+#undef CDSUNIT_INT_COMPARE
+
+    template <>
+    struct cmp<std::string>
+    {
+        int operator()(std::string const& s1, std::string const& s2)
+        {
+            return s1.compare( s2 );
+        }
+        int operator()(std::string const& s1, char const * s2)
+        {
+            return s1.compare( s2 );
+        }
+        int operator()(char const * s1, std::string const& s2)
+        {
+            return -s2.compare( s1 );
+        }
+    };
+
+    // forward
+    template <typename ImplSelector, typename Key, typename Value>
+    struct map_type;
+
+    template <typename Key, typename Value>
+    struct map_type_base
+    {
+        typedef co::v::hash<Key>    key_hash;
+        typedef std::less<Key>      less;
+        typedef cmp<Key>            compare;
+
+        struct equal_to {
+            bool operator()( Key const& k1, Key const& k2 ) const
+            {
+                return compare()( k1, k2 ) == 0;
+            }
+        };
+
+        struct hash: public key_hash
+        {
+            size_t operator()( Key const& k ) const
+            {
+                return key_hash::operator()( k );
+            }
+            template <typename Q>
+            size_t operator()( Q const& k ) const
+            {
+                return key_hash::operator()( k );
+            }
+        };
+
+        struct hash2: public key_hash
+        {
+            size_t operator()( Key const& k ) const
+            {
+                size_t seed = ~key_hash::operator ()( k );
+                boost::hash_combine( seed, k );
+                return seed;
+            }
+            template <typename Q>
+            size_t operator()( Q const& k ) const
+            {
+                size_t seed = ~key_hash::operator()( k );
+                boost::hash_combine( seed, k );
+                return seed;
+            }
+        };
+    };
+
+    template <typename Map>
+    static inline void print_stat( Map const& /*m*/ )
+    {}
+
+    template <typename Map>
+    static inline void check_before_cleanup( Map& /*m*/ )
+    {}
+
+    template <typename Map>
+    static inline void additional_cleanup( Map& /*m*/ )
+    {}
+
+    template <typename Map>
+    static inline void additional_check( Map& /*m*/ )
+    {}
+
+}   // namespace map2
+
+#endif // ifndef CDSUNIT_MAP_TYPE_H
diff --git a/tests/unit/map2/map_type_bronson_avltree.h b/tests/unit/map2/map_type_bronson_avltree.h
new file mode 100644 (file)
index 0000000..f765abb
--- /dev/null
@@ -0,0 +1,153 @@
+//$$CDS-header$$
+
+#ifndef CDSUNIT_MAP_TYPE_BRONSON_AVLTREE_H
+#define CDSUNIT_MAP_TYPE_BRONSON_AVLTREE_H
+
+#include "map2/map_type.h"
+
+#include <cds/memory/vyukov_queue_pool.h>
+#include <cds/sync/pool_monitor.h>
+#include <cds/container/bronson_avltree_map_rcu.h>
+
+#include "print_bronsonavltree_stat.h"
+#include "print_sync_monitor_stat.h"
+
+namespace map2 {
+
+    template <typename Key, typename Value>
+    struct map_type< cc::bronson_avltree::implementation_tag, Key, Value >: public map_type_base< Key, Value >
+    {
+        typedef map_type_base< Key, Value > base_class;
+        typedef typename base_class::compare    compare;
+        typedef typename base_class::less       less;
+
+        typedef cds::memory::vyukov_queue_pool< std::mutex > BronsonAVLTreeMap_simple_pool;
+        typedef cds::memory::lazy_vyukov_queue_pool< std::mutex > BronsonAVLTreeMap_lazy_pool;
+        typedef cds::memory::bounded_vyukov_queue_pool< std::mutex > BronsonAVLTreeMap_bounded_pool;
+
+        struct BronsonAVLTreeMap_less: public 
+            cc::bronson_avltree::make_traits<
+                co::less< less >
+                ,cc::bronson_avltree::relaxed_insert< false >
+                ,co::item_counter< cds::atomicity::item_counter >
+            >::type
+        {};
+        typedef cc::BronsonAVLTreeMap< rcu_gpi, Key, Value, BronsonAVLTreeMap_less > BronsonAVLTreeMap_rcu_gpi_less;
+        typedef cc::BronsonAVLTreeMap< rcu_gpb, Key, Value, BronsonAVLTreeMap_less > BronsonAVLTreeMap_rcu_gpb_less;
+        typedef cc::BronsonAVLTreeMap< rcu_gpt, Key, Value, BronsonAVLTreeMap_less > BronsonAVLTreeMap_rcu_gpt_less;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef cc::BronsonAVLTreeMap< rcu_shb, Key, Value, BronsonAVLTreeMap_less > BronsonAVLTreeMap_rcu_shb_less;
+        typedef cc::BronsonAVLTreeMap< rcu_sht, Key, Value, BronsonAVLTreeMap_less > BronsonAVLTreeMap_rcu_sht_less;
+#endif
+        struct BronsonAVLTreeMap_cmp_stat: public 
+            cc::bronson_avltree::make_traits<
+                co::compare< compare >
+                ,cc::bronson_avltree::relaxed_insert< false >
+                ,co::item_counter< cds::atomicity::item_counter >
+                ,co::stat< cc::bronson_avltree::stat<>>
+            >::type
+        {};
+        typedef cc::BronsonAVLTreeMap< rcu_gpi, Key, Value, BronsonAVLTreeMap_cmp_stat > BronsonAVLTreeMap_rcu_gpi_cmp_stat;
+        typedef cc::BronsonAVLTreeMap< rcu_gpb, Key, Value, BronsonAVLTreeMap_cmp_stat > BronsonAVLTreeMap_rcu_gpb_cmp_stat;
+        typedef cc::BronsonAVLTreeMap< rcu_gpt, Key, Value, BronsonAVLTreeMap_cmp_stat > BronsonAVLTreeMap_rcu_gpt_cmp_stat;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef cc::BronsonAVLTreeMap< rcu_shb, Key, Value, BronsonAVLTreeMap_cmp_stat > BronsonAVLTreeMap_rcu_shb_cmp_stat;
+        typedef cc::BronsonAVLTreeMap< rcu_sht, Key, Value, BronsonAVLTreeMap_cmp_stat > BronsonAVLTreeMap_rcu_sht_cmp_stat;
+#endif
+
+        struct BronsonAVLTreeMap_less_pool_simple: public BronsonAVLTreeMap_less
+        {
+            typedef cds::sync::pool_monitor<BronsonAVLTreeMap_simple_pool> sync_monitor;
+        };
+        typedef cc::BronsonAVLTreeMap< rcu_gpi, Key, Value, BronsonAVLTreeMap_less_pool_simple > BronsonAVLTreeMap_rcu_gpi_less_pool_simple;
+        typedef cc::BronsonAVLTreeMap< rcu_gpb, Key, Value, BronsonAVLTreeMap_less_pool_simple > BronsonAVLTreeMap_rcu_gpb_less_pool_simple;
+        typedef cc::BronsonAVLTreeMap< rcu_gpt, Key, Value, BronsonAVLTreeMap_less_pool_simple > BronsonAVLTreeMap_rcu_gpt_less_pool_simple;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef cc::BronsonAVLTreeMap< rcu_shb, Key, Value, BronsonAVLTreeMap_less_pool_simple > BronsonAVLTreeMap_rcu_shb_less_pool_simple;
+        typedef cc::BronsonAVLTreeMap< rcu_sht, Key, Value, BronsonAVLTreeMap_less_pool_simple > BronsonAVLTreeMap_rcu_sht_less_pool_simple;
+#endif
+        struct BronsonAVLTreeMap_less_pool_simple_stat : public BronsonAVLTreeMap_less
+        {
+            typedef cc::bronson_avltree::stat<> stat;
+            typedef cds::sync::pool_monitor<BronsonAVLTreeMap_simple_pool, cds::opt::none, true > sync_monitor;
+        };
+        typedef cc::BronsonAVLTreeMap< rcu_gpi, Key, Value, BronsonAVLTreeMap_less_pool_simple_stat > BronsonAVLTreeMap_rcu_gpi_less_pool_simple_stat;
+        typedef cc::BronsonAVLTreeMap< rcu_gpb, Key, Value, BronsonAVLTreeMap_less_pool_simple_stat > BronsonAVLTreeMap_rcu_gpb_less_pool_simple_stat;
+        typedef cc::BronsonAVLTreeMap< rcu_gpt, Key, Value, BronsonAVLTreeMap_less_pool_simple_stat > BronsonAVLTreeMap_rcu_gpt_less_pool_simple_stat;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef cc::BronsonAVLTreeMap< rcu_shb, Key, Value, BronsonAVLTreeMap_less_pool_simple_stat > BronsonAVLTreeMap_rcu_shb_less_pool_simple_stat;
+        typedef cc::BronsonAVLTreeMap< rcu_sht, Key, Value, BronsonAVLTreeMap_less_pool_simple_stat > BronsonAVLTreeMap_rcu_sht_less_pool_simple_stat;
+#endif
+        struct BronsonAVLTreeMap_less_pool_lazy: public BronsonAVLTreeMap_less
+        {
+            typedef cds::sync::pool_monitor<BronsonAVLTreeMap_lazy_pool> sync_monitor;
+            static CDS_CONSTEXPR bool const relaxed_insert = true;
+        };
+        typedef cc::BronsonAVLTreeMap< rcu_gpi, Key, Value, BronsonAVLTreeMap_less_pool_lazy > BronsonAVLTreeMap_rcu_gpi_less_pool_lazy;
+        typedef cc::BronsonAVLTreeMap< rcu_gpb, Key, Value, BronsonAVLTreeMap_less_pool_lazy > BronsonAVLTreeMap_rcu_gpb_less_pool_lazy;
+        typedef cc::BronsonAVLTreeMap< rcu_gpt, Key, Value, BronsonAVLTreeMap_less_pool_lazy > BronsonAVLTreeMap_rcu_gpt_less_pool_lazy;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef cc::BronsonAVLTreeMap< rcu_shb, Key, Value, BronsonAVLTreeMap_less_pool_lazy > BronsonAVLTreeMap_rcu_shb_less_pool_lazy;
+        typedef cc::BronsonAVLTreeMap< rcu_sht, Key, Value, BronsonAVLTreeMap_less_pool_lazy > BronsonAVLTreeMap_rcu_sht_less_pool_lazy;
+#endif
+        struct BronsonAVLTreeMap_less_pool_lazy_stat : public BronsonAVLTreeMap_less
+        {
+            typedef cc::bronson_avltree::stat<> stat;
+            typedef cds::sync::pool_monitor<BronsonAVLTreeMap_lazy_pool, cds::opt::none, true > sync_monitor;
+            static CDS_CONSTEXPR bool const relaxed_insert = true;
+        };
+        typedef cc::BronsonAVLTreeMap< rcu_gpi, Key, Value, BronsonAVLTreeMap_less_pool_lazy_stat > BronsonAVLTreeMap_rcu_gpi_less_pool_lazy_stat;
+        typedef cc::BronsonAVLTreeMap< rcu_gpb, Key, Value, BronsonAVLTreeMap_less_pool_lazy_stat > BronsonAVLTreeMap_rcu_gpb_less_pool_lazy_stat;
+        typedef cc::BronsonAVLTreeMap< rcu_gpt, Key, Value, BronsonAVLTreeMap_less_pool_lazy_stat > BronsonAVLTreeMap_rcu_gpt_less_pool_lazy_stat;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef cc::BronsonAVLTreeMap< rcu_shb, Key, Value, BronsonAVLTreeMap_less_pool_lazy_stat > BronsonAVLTreeMap_rcu_shb_less_pool_lazy_stat;
+        typedef cc::BronsonAVLTreeMap< rcu_sht, Key, Value, BronsonAVLTreeMap_less_pool_lazy_stat > BronsonAVLTreeMap_rcu_sht_less_pool_lazy_stat;
+#endif
+        struct BronsonAVLTreeMap_less_pool_bounded: public BronsonAVLTreeMap_less
+        {
+            typedef cds::sync::pool_monitor<BronsonAVLTreeMap_bounded_pool> sync_monitor;
+            static CDS_CONSTEXPR bool const relaxed_insert = true;
+        };
+        typedef cc::BronsonAVLTreeMap< rcu_gpi, Key, Value, BronsonAVLTreeMap_less_pool_bounded > BronsonAVLTreeMap_rcu_gpi_less_pool_bounded;
+        typedef cc::BronsonAVLTreeMap< rcu_gpb, Key, Value, BronsonAVLTreeMap_less_pool_bounded > BronsonAVLTreeMap_rcu_gpb_less_pool_bounded;
+        typedef cc::BronsonAVLTreeMap< rcu_gpt, Key, Value, BronsonAVLTreeMap_less_pool_bounded > BronsonAVLTreeMap_rcu_gpt_less_pool_bounded;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef cc::BronsonAVLTreeMap< rcu_shb, Key, Value, BronsonAVLTreeMap_less_pool_bounded > BronsonAVLTreeMap_rcu_shb_less_pool_bounded;
+        typedef cc::BronsonAVLTreeMap< rcu_sht, Key, Value, BronsonAVLTreeMap_less_pool_bounded > BronsonAVLTreeMap_rcu_sht_less_pool_bounded;
+#endif
+        struct BronsonAVLTreeMap_less_pool_bounded_stat : public BronsonAVLTreeMap_less
+        {
+            typedef cc::bronson_avltree::stat<> stat;
+            typedef cds::sync::pool_monitor<BronsonAVLTreeMap_bounded_pool, cds::opt::none, true > sync_monitor;
+            static CDS_CONSTEXPR bool const relaxed_insert = true;
+        };
+        typedef cc::BronsonAVLTreeMap< rcu_gpi, Key, Value, BronsonAVLTreeMap_less_pool_bounded_stat > BronsonAVLTreeMap_rcu_gpi_less_pool_bounded_stat;
+        typedef cc::BronsonAVLTreeMap< rcu_gpb, Key, Value, BronsonAVLTreeMap_less_pool_bounded_stat > BronsonAVLTreeMap_rcu_gpb_less_pool_bounded_stat;
+        typedef cc::BronsonAVLTreeMap< rcu_gpt, Key, Value, BronsonAVLTreeMap_less_pool_bounded_stat > BronsonAVLTreeMap_rcu_gpt_less_pool_bounded_stat;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef cc::BronsonAVLTreeMap< rcu_shb, Key, Value, BronsonAVLTreeMap_less_pool_bounded_stat > BronsonAVLTreeMap_rcu_shb_less_pool_bounded_stat;
+        typedef cc::BronsonAVLTreeMap< rcu_sht, Key, Value, BronsonAVLTreeMap_less_pool_bounded_stat > BronsonAVLTreeMap_rcu_sht_less_pool_bounded_stat;
+#endif
+    };
+
+    template <typename GC, typename Key, typename T, typename Traits>
+    static inline void print_stat( cc::BronsonAVLTreeMap<GC, Key, T, Traits> const& m )
+    {
+        CPPUNIT_MSG( m.statistics() );
+        CPPUNIT_MSG( m.monitor().statistics() );
+    }
+
+    template <typename GC, typename Key, typename T, typename Traits>
+    static inline void check_before_cleanup( cc::BronsonAVLTreeMap<GC, Key, T, Traits>& m )
+    {
+        CPPUNIT_MSG( "  Check internal consistency (single-threaded)..." );
+        bool bOk = m.check_consistency([]( size_t nLevel, size_t hLeft, size_t hRight )
+            { 
+                CPPUNIT_MSG( "Tree violation on level=" << nLevel << ": hLeft=" << hLeft << ", hRight=" << hRight ) 
+            });
+        CPPUNIT_CHECK_CURRENT_EX( bOk, "check_consistency failed");
+    }
+
+}   // namespace map2
+
+#endif // ifndef CDSUNIT_MAP_TYPE_BRONSON_AVLTREE_H
diff --git a/tests/unit/map2/map_type_cuckoo.h b/tests/unit/map2/map_type_cuckoo.h
new file mode 100644 (file)
index 0000000..3875ead
--- /dev/null
@@ -0,0 +1,168 @@
+//$$CDS-header$$
+
+#ifndef CDSUNIT_MAP_TYPE_CUCKOO_H
+#define CDSUNIT_MAP_TYPE_CUCKOO_H
+
+#include "map2/map_type.h"
+
+#include <cds/container/cuckoo_map.h>
+
+#include "print_cuckoo_stat.h"
+
+namespace map2 {
+
+    template <typename K, typename V, typename Traits>
+    class CuckooMap :
+        public cc::CuckooMap< K, V, Traits >
+    {
+    public:
+        typedef cc::CuckooMap< K, V, Traits > cuckoo_base_class;
+
+    public:
+        CuckooMap( size_t nCapacity, size_t nLoadFactor )
+            : cuckoo_base_class( nCapacity / (nLoadFactor * 16), (unsigned int) 4 )
+        {}
+
+        template <typename Q, typename Pred>
+        bool erase_with( Q const& key, Pred /*pred*/ )
+        {
+            return cuckoo_base_class::erase_with( key, typename std::conditional< cuckoo_base_class::c_isSorted, Pred, typename Pred::equal_to>::type() );
+        }
+    };
+
+    template <typename Key, typename Value>
+    struct map_type< cds::intrusive::cuckoo::implementation_tag, Key, Value >: public map_type_base< Key, Value >
+    {
+        typedef map_type_base< Key, Value > base_class;
+        typedef typename base_class::compare    compare;
+        typedef typename base_class::less       less;
+        typedef typename base_class::equal_to   equal_to;
+        typedef typename base_class::key_hash   key_hash;
+        typedef typename base_class::hash       hash;
+        typedef typename base_class::hash2      hash2;
+
+        template <typename Traits>
+        struct traits_CuckooStripedMap: public Traits
+        {
+            typedef cc::cuckoo::striping<> mutex_policy;
+        };
+        template <typename Traits>
+        struct traits_CuckooRefinableMap : public Traits
+        {
+            typedef cc::cuckoo::refinable<> mutex_policy;
+        };
+
+        struct traits_CuckooMap_list_unord :
+            public cc::cuckoo::make_traits <
+                cc::cuckoo::probeset_type< cc::cuckoo::list >
+                , co::equal_to< equal_to >
+                , co::hash< std::tuple< hash, hash2 > >
+            > ::type
+        {};
+        typedef CuckooMap< Key, Value, traits_CuckooStripedMap<traits_CuckooMap_list_unord>> CuckooStripedMap_list_unord;
+        typedef CuckooMap< Key, Value, traits_CuckooRefinableMap<traits_CuckooMap_list_unord>> CuckooRefinableMap_list_unord;
+
+        struct traits_CuckooMap_list_unord_stat : public traits_CuckooMap_list_unord
+        {
+            typedef cc::cuckoo::stat stat;
+        };
+        typedef CuckooMap< Key, Value, traits_CuckooStripedMap<traits_CuckooMap_list_unord_stat>> CuckooStripedMap_list_unord_stat;
+        typedef CuckooMap< Key, Value, traits_CuckooRefinableMap<traits_CuckooMap_list_unord_stat>> CuckooRefinableMap_list_unord_stat;
+
+        struct traits_CuckooMap_list_unord_storehash : public traits_CuckooMap_list_unord
+        {
+            static CDS_CONSTEXPR const bool store_hash = true;
+        };
+        typedef CuckooMap< Key, Value, traits_CuckooStripedMap<traits_CuckooMap_list_unord_storehash>> CuckooStripedMap_list_unord_storehash;
+        typedef CuckooMap< Key, Value, traits_CuckooRefinableMap<traits_CuckooMap_list_unord_storehash>> CuckooRefinableMap_list_unord_storehash;
+
+        struct traits_CuckooMap_list_ord :
+            public cc::cuckoo::make_traits <
+                cc::cuckoo::probeset_type< cc::cuckoo::list >
+                , co::compare< compare >
+                , co::hash< std::tuple< hash, hash2 > >
+            >::type
+        {};
+        typedef CuckooMap< Key, Value, traits_CuckooStripedMap<traits_CuckooMap_list_ord>> CuckooStripedMap_list_ord;
+        typedef CuckooMap< Key, Value, traits_CuckooRefinableMap<traits_CuckooMap_list_ord>> CuckooRefinableMap_list_ord;
+
+        struct traits_CuckooMap_list_ord_stat : public traits_CuckooMap_list_ord
+        {
+            typedef cc::cuckoo::stat stat;
+        };
+        typedef CuckooMap< Key, Value, traits_CuckooStripedMap<traits_CuckooMap_list_ord_stat>> CuckooStripedMap_list_ord_stat;
+        typedef CuckooMap< Key, Value, traits_CuckooRefinableMap<traits_CuckooMap_list_ord_stat>> CuckooRefinableMap_list_ord_stat;
+
+        struct traits_CuckooMap_list_ord_storehash : public traits_CuckooMap_list_ord
+        {
+            static CDS_CONSTEXPR const bool store_hash = true;
+        };
+        typedef CuckooMap< Key, Value, traits_CuckooStripedMap<traits_CuckooMap_list_ord_storehash>> CuckooStripedMap_list_ord_storehash;
+        typedef CuckooMap< Key, Value, traits_CuckooRefinableMap<traits_CuckooMap_list_ord_storehash>> CuckooRefinableMap_list_ord_storehash;
+
+        struct traits_CuckooMap_vector_unord :
+            public cc::cuckoo::make_traits <
+                cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
+                , co::equal_to< equal_to >
+                , co::hash< std::tuple< hash, hash2 > >
+            >::type
+        {};
+        typedef CuckooMap< Key, Value, traits_CuckooStripedMap<traits_CuckooMap_vector_unord>> CuckooStripedMap_vector_unord;
+        typedef CuckooMap< Key, Value, traits_CuckooRefinableMap<traits_CuckooMap_vector_unord>> CuckooRefinableMap_vector_unord;
+
+        struct traits_CuckooMap_vector_unord_stat : public traits_CuckooMap_vector_unord
+        {
+            typedef cc::cuckoo::stat stat;
+        };
+        typedef CuckooMap< Key, Value, traits_CuckooStripedMap<traits_CuckooMap_vector_unord_stat>> CuckooStripedMap_vector_unord_stat;
+        typedef CuckooMap< Key, Value, traits_CuckooRefinableMap<traits_CuckooMap_vector_unord_stat>> CuckooRefinableMap_vector_unord_stat;
+
+        struct traits_CuckooMap_vector_unord_storehash : public traits_CuckooMap_vector_unord
+        {
+            static CDS_CONSTEXPR const bool store_hash = true;
+        };
+        typedef CuckooMap< Key, Value, traits_CuckooStripedMap<traits_CuckooMap_vector_unord_storehash>> CuckooStripedMap_vector_unord_storehash;
+        typedef CuckooMap< Key, Value, traits_CuckooRefinableMap<traits_CuckooMap_vector_unord_storehash>> CuckooRefinableMap_vector_unord_storehash;
+
+        struct traits_CuckooMap_vector_ord :
+            public cc::cuckoo::make_traits <
+                cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
+                , co::compare< compare >
+                , co::hash< std::tuple< hash, hash2 > >
+            >::type
+        {};
+        typedef CuckooMap< Key, Value, traits_CuckooStripedMap<traits_CuckooMap_vector_ord>> CuckooStripedMap_vector_ord;
+        typedef CuckooMap< Key, Value, traits_CuckooRefinableMap<traits_CuckooMap_vector_ord>> CuckooRefinableMap_vector_ord;
+
+        struct traits_CuckooMap_vector_ord_stat : public traits_CuckooMap_vector_ord
+        {
+            typedef cc::cuckoo::stat stat;
+        };
+        typedef CuckooMap< Key, Value, traits_CuckooStripedMap<traits_CuckooMap_vector_ord_stat>> CuckooStripedMap_vector_ord_stat;
+        typedef CuckooMap< Key, Value, traits_CuckooRefinableMap<traits_CuckooMap_vector_ord_stat>> CuckooRefinableMap_vector_ord_stat;
+
+        struct traits_CuckooMap_vector_ord_storehash : public traits_CuckooMap_vector_ord
+        {
+            static CDS_CONSTEXPR const bool store_hash = true;
+        };
+        typedef CuckooMap< Key, Value, traits_CuckooStripedMap<traits_CuckooMap_vector_ord_storehash>> CuckooStripedMap_vector_ord_storehash;
+        typedef CuckooMap< Key, Value, traits_CuckooRefinableMap<traits_CuckooMap_vector_ord_storehash>> CuckooRefinableMap_vector_ord_storehash;
+
+    };
+
+    template <typename K, typename T, typename Traits >
+    static inline void print_stat( cc::CuckooMap< K, T, Traits > const& m )
+    {
+        CPPUNIT_MSG( m.statistics() << m.mutex_policy_statistics() );
+    }
+
+    template <typename K, typename V, typename Traits>
+    static inline void print_stat( CuckooMap< K, V, Traits > const& m )
+    {
+        typedef CuckooMap< K, V, Traits > map_type;
+        print_stat( static_cast<typename map_type::cuckoo_base_class const&>(m) );
+    }
+
+}   // namespace map2
+
+#endif // ifndef CDSUNIT_MAP_TYPE_CUCKOO_H
diff --git a/tests/unit/map2/map_type_ellen_bintree.h b/tests/unit/map2/map_type_ellen_bintree.h
new file mode 100644 (file)
index 0000000..6b382b1
--- /dev/null
@@ -0,0 +1,233 @@
+//$$CDS-header$$
+
+#ifndef CDSUNIT_MAP_TYPE_ELLEN_BINTREE_H
+#define CDSUNIT_MAP_TYPE_ELLEN_BINTREE_H
+
+#include "map2/map_type.h"
+
+#include <cds/container/ellen_bintree_map_rcu.h>
+#include <cds/container/ellen_bintree_map_hp.h>
+#include <cds/container/ellen_bintree_map_dhp.h>
+
+#include "ellen_bintree_update_desc_pool.h"
+#include "print_ellenbintree_stat.h"
+
+namespace map2 {
+
+    template <typename Key, typename Value>
+    struct map_type< cc::ellen_bintree::implementation_tag, Key, Value >: public map_type_base< Key, Value >
+    {
+        typedef map_type_base< Key, Value > base_class;
+        typedef typename base_class::compare    compare;
+        typedef typename base_class::less       less;
+
+        struct ellen_bintree_props {
+            struct hp_gc {
+                typedef cc::ellen_bintree::map_node<cds::gc::HP, Key, Value>        leaf_node;
+                typedef cc::ellen_bintree::internal_node< Key, leaf_node >          internal_node;
+                typedef cc::ellen_bintree::update_desc< leaf_node, internal_node >  update_desc;
+            };
+            struct dhp_gc {
+                typedef cc::ellen_bintree::map_node<cds::gc::DHP, Key, Value>       leaf_node;
+                typedef cc::ellen_bintree::internal_node< Key, leaf_node >          internal_node;
+                typedef cc::ellen_bintree::update_desc< leaf_node, internal_node >  update_desc;
+            };
+            struct gpi {
+                typedef cc::ellen_bintree::map_node<rcu_gpi, Key, Value>            leaf_node;
+                typedef cc::ellen_bintree::internal_node< Key, leaf_node >          internal_node;
+                typedef cc::ellen_bintree::update_desc< leaf_node, internal_node >  update_desc;
+            };
+            struct gpb {
+                typedef cc::ellen_bintree::map_node<rcu_gpb, Key, Value>            leaf_node;
+                typedef cc::ellen_bintree::internal_node< Key, leaf_node >          internal_node;
+                typedef cc::ellen_bintree::update_desc< leaf_node, internal_node >  update_desc;
+            };
+            struct gpt {
+                typedef cc::ellen_bintree::map_node<rcu_gpt, Key, Value>            leaf_node;
+                typedef cc::ellen_bintree::internal_node< Key, leaf_node >          internal_node;
+                typedef cc::ellen_bintree::update_desc< leaf_node, internal_node >  update_desc;
+            };
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+            struct shb {
+                typedef cc::ellen_bintree::map_node<rcu_shb, Key, Value>            leaf_node;
+                typedef cc::ellen_bintree::internal_node< Key, leaf_node >          internal_node;
+                typedef cc::ellen_bintree::update_desc< leaf_node, internal_node >  update_desc;
+            };
+            struct sht {
+                typedef cc::ellen_bintree::map_node<rcu_sht, Key, Value>            leaf_node;
+                typedef cc::ellen_bintree::internal_node< Key, leaf_node >          internal_node;
+                typedef cc::ellen_bintree::update_desc< leaf_node, internal_node >  update_desc;
+            };
+#endif
+        };
+
+        struct traits_EllenBinTreeMap: public cc::ellen_bintree::make_set_traits<
+                co::less< less >
+                ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
+                ,co::item_counter< cds::atomicity::item_counter >
+            >::type
+        {};
+        struct traits_EllenBinTreeMap_hp : traits_EllenBinTreeMap {
+            typedef cds::memory::pool_allocator< typename ellen_bintree_props::hp_gc::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
+        };
+        typedef cc::EllenBinTreeMap< cds::gc::HP, Key, Value, traits_EllenBinTreeMap_hp >EllenBinTreeMap_hp;
+
+        struct traits_EllenBinTreeMap_dhp : traits_EllenBinTreeMap {
+            typedef cds::memory::pool_allocator< typename ellen_bintree_props::dhp_gc::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
+        };
+        typedef cc::EllenBinTreeMap< cds::gc::DHP, Key, Value, traits_EllenBinTreeMap_dhp >EllenBinTreeMap_dhp;
+
+        struct traits_EllenBinTreeMap_gpi : traits_EllenBinTreeMap {
+            typedef cds::memory::pool_allocator< typename ellen_bintree_props::gpi::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
+        };
+        typedef cc::EllenBinTreeMap< rcu_gpi, Key, Value, traits_EllenBinTreeMap_gpi >EllenBinTreeMap_rcu_gpi;
+
+        struct traits_EllenBinTreeMap_gpb : traits_EllenBinTreeMap {
+            typedef cds::memory::pool_allocator< typename ellen_bintree_props::gpb::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
+        };
+        typedef cc::EllenBinTreeMap< rcu_gpb, Key, Value, traits_EllenBinTreeMap_gpb >EllenBinTreeMap_rcu_gpb;
+
+        struct traits_EllenBinTreeMap_gpt : traits_EllenBinTreeMap {
+            typedef cds::memory::pool_allocator< typename ellen_bintree_props::gpt::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
+        };
+        typedef cc::EllenBinTreeMap< rcu_gpt, Key, Value, traits_EllenBinTreeMap_gpt >EllenBinTreeMap_rcu_gpt;
+
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        struct traits_EllenBinTreeMap_shb : traits_EllenBinTreeMap {
+            typedef cds::memory::pool_allocator< typename ellen_bintree_props::shb::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
+        };
+        typedef cc::EllenBinTreeMap< rcu_shb, Key, Value, traits_EllenBinTreeMap_shb >EllenBinTreeMap_rcu_shb;
+
+        struct traits_EllenBinTreeMap_sht : traits_EllenBinTreeMap {
+            typedef cds::memory::pool_allocator< typename ellen_bintree_props::sht::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
+        };
+        typedef cc::EllenBinTreeMap< rcu_sht, Key, Value, traits_EllenBinTreeMap_sht >EllenBinTreeMap_rcu_sht;
+#endif
+
+        struct traits_EllenBinTreeMap_yield : public traits_EllenBinTreeMap
+        {
+            typedef cds::backoff::yield back_off;
+        };
+        struct traits_EllenBinTreeMap_hp_yield : traits_EllenBinTreeMap_yield {
+            typedef cds::memory::pool_allocator< typename ellen_bintree_props::hp_gc::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
+        };
+        typedef cc::EllenBinTreeMap< cds::gc::HP, Key, Value, traits_EllenBinTreeMap_hp_yield >EllenBinTreeMap_hp_yield;
+
+        struct traits_EllenBinTreeMap_dhp_yield : traits_EllenBinTreeMap_yield {
+            typedef cds::memory::pool_allocator< typename ellen_bintree_props::dhp_gc::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
+        };
+        typedef cc::EllenBinTreeMap< cds::gc::DHP, Key, Value, traits_EllenBinTreeMap_dhp_yield >EllenBinTreeMap_dhp_yield;
+
+        struct traits_EllenBinTreeMap_gpb_yield : traits_EllenBinTreeMap_yield {
+            typedef cds::memory::pool_allocator< typename ellen_bintree_props::gpb::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
+        };
+        typedef cc::EllenBinTreeMap< rcu_gpb, Key, Value, traits_EllenBinTreeMap_gpb_yield >EllenBinTreeMap_rcu_gpb_yield;
+
+
+        struct traits_EllenBinTreeMap_stat: public cc::ellen_bintree::make_set_traits<
+                co::less< less >
+                ,cc::ellen_bintree::update_desc_allocator<
+                    cds::memory::pool_allocator< typename ellen_bintree_props::hp_gc::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
+                >
+                ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
+                ,co::stat< cc::ellen_bintree::stat<> >
+                ,co::item_counter< cds::atomicity::item_counter >
+            >::type
+        {};
+
+        struct traits_EllenBinTreeMap_stat_hp : public traits_EllenBinTreeMap_stat
+        {
+            typedef cds::memory::pool_allocator< typename ellen_bintree_props::hp_gc::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
+        };
+        typedef cc::EllenBinTreeMap< cds::gc::HP, Key, Value, traits_EllenBinTreeMap_stat_hp > EllenBinTreeMap_hp_stat;
+
+        struct traits_EllenBinTreeMap_stat_dhp : public traits_EllenBinTreeMap_stat
+        {
+            typedef cds::memory::pool_allocator< typename ellen_bintree_props::dhp_gc::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
+        };
+        typedef cc::EllenBinTreeMap< cds::gc::HP, Key, Value, traits_EllenBinTreeMap_stat_dhp > EllenBinTreeMap_dhp_stat;
+
+        struct traits_EllenBinTreeMap_stat_gpi : public traits_EllenBinTreeMap_stat
+        {
+            typedef cds::memory::pool_allocator< typename ellen_bintree_props::gpi::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
+        };
+        typedef cc::EllenBinTreeMap< rcu_gpi, Key, Value, traits_EllenBinTreeMap_stat_gpi > EllenBinTreeMap_rcu_gpi_stat;
+
+        struct traits_EllenBinTreeMap_stat_gpb : public traits_EllenBinTreeMap_stat
+        {
+            typedef cds::memory::pool_allocator< typename ellen_bintree_props::gpb::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
+        };
+        typedef cc::EllenBinTreeMap< rcu_gpb, Key, Value, traits_EllenBinTreeMap_stat_gpb > EllenBinTreeMap_rcu_gpb_stat;
+
+        struct traits_EllenBinTreeMap_stat_gpt : public traits_EllenBinTreeMap_stat
+        {
+            typedef cds::memory::pool_allocator< typename ellen_bintree_props::gpt::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
+        };
+        typedef cc::EllenBinTreeMap< rcu_gpt, Key, Value, traits_EllenBinTreeMap_stat_gpt > EllenBinTreeMap_rcu_gpt_stat;
+
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        struct traits_EllenBinTreeMap_stat_shb : public traits_EllenBinTreeMap_stat
+        {
+            typedef cds::memory::pool_allocator< typename ellen_bintree_props::shb::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
+        };
+        typedef cc::EllenBinTreeMap< rcu_shb, Key, Value, traits_EllenBinTreeMap_stat_shb > EllenBinTreeMap_rcu_shb_stat;
+
+        struct traits_EllenBinTreeMap_stat_sht : public traits_EllenBinTreeMap_stat
+        {
+            typedef cds::memory::pool_allocator< typename ellen_bintree_props::sht::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
+        };
+        typedef cc::EllenBinTreeMap< rcu_sht, Key, Value, traits_EllenBinTreeMap_stat_sht > EllenBinTreeMap_rcu_sht_stat;
+#endif
+    };
+
+    template <typename GC, typename Key, typename T, typename Traits>
+    static inline void print_stat( cc::EllenBinTreeMap<GC, Key, T, Traits> const& s )
+    {
+        CPPUNIT_MSG( s.statistics() );
+    }
+    template <typename GC, typename Key, typename T, typename Traits>
+    static inline void additional_cleanup( cc::EllenBinTreeMap<GC, Key, T, Traits>& /*s*/ )
+    {
+        ellen_bintree_pool::internal_node_counter::reset();
+    }
+    namespace ellen_bintree_check {
+        static inline void check_stat( cds::intrusive::ellen_bintree::empty_stat const& /*s*/ )
+        {
+            // This check is not valid for thread-based RCU
+            /*
+            CPPUNIT_CHECK_CURRENT_EX( ellen_bintree_pool::internal_node_counter::m_nAlloc.get() == ellen_bintree_pool::internal_node_counter::m_nFree.get(),
+                "m_nAlloc=" << ellen_bintree_pool::internal_node_counter::m_nAlloc.get()
+                << ", m_nFree=" << ellen_bintree_pool::internal_node_counter::m_nFree.get()
+                );
+            */
+        }
+
+        static inline void check_stat( cds::intrusive::ellen_bintree::stat<> const& stat )
+        {
+            CPPUNIT_CHECK_CURRENT_EX( stat.m_nInternalNodeCreated == stat.m_nInternalNodeDeleted,
+                "m_nInternalNodeCreated=" << stat.m_nInternalNodeCreated
+                << " m_nInternalNodeDeleted=" << stat.m_nInternalNodeDeleted );
+            CPPUNIT_CHECK_CURRENT_EX( stat.m_nUpdateDescCreated == stat.m_nUpdateDescDeleted,
+                "m_nUpdateDescCreated=" << stat.m_nUpdateDescCreated
+                << " m_nUpdateDescDeleted=" << stat.m_nUpdateDescDeleted );
+            CPPUNIT_CHECK_CURRENT_EX( ellen_bintree_pool::internal_node_counter::m_nAlloc.get() == stat.m_nInternalNodeCreated,
+                "allocated=" << ellen_bintree_pool::internal_node_counter::m_nAlloc.get()
+                << "m_nInternalNodeCreated=" << stat.m_nInternalNodeCreated );
+        }
+    }   // namespace ellen_bintree_check
+    template <typename GC, typename Key, typename T, typename Traits>
+    static inline void additional_check( cc::EllenBinTreeMap<GC, Key, T, Traits>& s )
+    {
+        GC::force_dispose();
+        ellen_bintree_check::check_stat( s.statistics() );
+    }
+
+    template <typename GC, typename Key, typename T, typename Traits>
+    static inline void check_before_cleanup( cc::EllenBinTreeMap<GC, Key, T, Traits>& m )
+    {
+        CPPUNIT_MSG( "  Check internal consistency (single-threaded)..." );
+        CPPUNIT_CHECK_CURRENT( m.check_consistency() );
+    }
+}   // namespace map2
+
+#endif // ifndef CDSUNIT_MAP_TYPE_ELLEN_BINTREE_H
diff --git a/tests/unit/map2/map_type_lazy_list.h b/tests/unit/map2/map_type_lazy_list.h
new file mode 100644 (file)
index 0000000..6116bb6
--- /dev/null
@@ -0,0 +1,134 @@
+//$$CDS-header$$
+
+#ifndef CDSUNIT_MAP_TYPE_LAZY_LIST_H
+#define CDSUNIT_MAP_TYPE_LAZY_LIST_H
+
+#include "map2/map_type.h"
+
+#include <cds/container/lazy_kvlist_hp.h>
+#include <cds/container/lazy_kvlist_dhp.h>
+#include <cds/container/lazy_kvlist_rcu.h>
+#include <cds/container/lazy_kvlist_nogc.h>
+
+#include "michael_alloc.h"
+
+namespace map2 {
+
+    template <typename Key, typename Value>
+    struct lazy_list_type
+    {
+        typedef typename map_type_base<Key, Value>::compare compare;
+        typedef typename map_type_base<Key, Value>::less    less;
+        typedef typename map_type_base<Key, Value>::equal_to equal_to;
+
+        struct traits_LazyList_cmp_stdAlloc:
+            public cc::lazy_list::make_traits<
+                co::compare< compare >
+            >::type
+        {};
+        typedef cc::LazyKVList< cds::gc::HP, Key, Value, traits_LazyList_cmp_stdAlloc > LazyList_HP_cmp_stdAlloc;
+        typedef cc::LazyKVList< cds::gc::DHP, Key, Value, traits_LazyList_cmp_stdAlloc > LazyList_DHP_cmp_stdAlloc;
+        typedef cc::LazyKVList< cds::gc::nogc, Key, Value, traits_LazyList_cmp_stdAlloc > LazyList_NOGC_cmp_stdAlloc;
+        typedef cc::LazyKVList< rcu_gpi, Key, Value, traits_LazyList_cmp_stdAlloc > LazyList_RCU_GPI_cmp_stdAlloc;
+        typedef cc::LazyKVList< rcu_gpb, Key, Value, traits_LazyList_cmp_stdAlloc > LazyList_RCU_GPB_cmp_stdAlloc;
+        typedef cc::LazyKVList< rcu_gpt, Key, Value, traits_LazyList_cmp_stdAlloc > LazyList_RCU_GPT_cmp_stdAlloc;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef cc::LazyKVList< rcu_shb, Key, Value, traits_LazyList_cmp_stdAlloc > LazyList_RCU_SHB_cmp_stdAlloc;
+        typedef cc::LazyKVList< rcu_sht, Key, Value, traits_LazyList_cmp_stdAlloc > LazyList_RCU_SHT_cmp_stdAlloc;
+#endif
+
+        struct traits_LazyList_unord_stdAlloc :
+            public cc::lazy_list::make_traits<
+                co::equal_to< equal_to >
+                ,co::sort< false >
+            >::type
+        {};
+        typedef cc::LazyKVList< cds::gc::nogc, Key, Value, traits_LazyList_unord_stdAlloc > LazyList_NOGC_unord_stdAlloc;
+
+        struct traits_LazyList_cmp_stdAlloc_seqcst :
+            public cc::lazy_list::make_traits<
+                co::compare< compare >
+                ,co::memory_model< co::v::sequential_consistent >
+            >::type
+        {};
+        typedef cc::LazyKVList< cds::gc::HP, Key, Value, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_HP_cmp_stdAlloc_seqcst;
+        typedef cc::LazyKVList< cds::gc::DHP, Key, Value, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_DHP_cmp_stdAlloc_seqcst;
+        typedef cc::LazyKVList< cds::gc::nogc, Key, Value, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_NOGC_cmp_stdAlloc_seqcst;
+        typedef cc::LazyKVList< rcu_gpi, Key, Value, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_RCU_GPI_cmp_stdAlloc_seqcst;
+        typedef cc::LazyKVList< rcu_gpb, Key, Value, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_RCU_GPB_cmp_stdAlloc_seqcst;
+        typedef cc::LazyKVList< rcu_gpt, Key, Value, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_RCU_GPT_cmp_stdAlloc_seqcst;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef cc::LazyKVList< rcu_shb, Key, Value, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_RCU_SHB_cmp_stdAlloc_seqcst;
+        typedef cc::LazyKVList< rcu_sht, Key, Value, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_RCU_SHT_cmp_stdAlloc_seqcst;
+#endif
+
+        struct traits_LazyList_cmp_michaelAlloc :
+            public cc::lazy_list::make_traits<
+                co::compare< compare >,
+                co::allocator< memory::MichaelAllocator<int> >
+            >::type
+        {};
+        typedef cc::LazyKVList< cds::gc::HP, Key, Value, traits_LazyList_cmp_michaelAlloc > LazyList_HP_cmp_michaelAlloc;
+        typedef cc::LazyKVList< cds::gc::DHP, Key, Value, traits_LazyList_cmp_michaelAlloc > LazyList_DHP_cmp_michaelAlloc;
+        typedef cc::LazyKVList< cds::gc::nogc, Key, Value, traits_LazyList_cmp_michaelAlloc > LazyList_NOGC_cmp_michaelAlloc;
+        typedef cc::LazyKVList< rcu_gpi, Key, Value, traits_LazyList_cmp_michaelAlloc > LazyList_RCU_GPI_cmp_michaelAlloc;
+        typedef cc::LazyKVList< rcu_gpb, Key, Value, traits_LazyList_cmp_michaelAlloc > LazyList_RCU_GPB_cmp_michaelAlloc;
+        typedef cc::LazyKVList< rcu_gpt, Key, Value, traits_LazyList_cmp_michaelAlloc > LazyList_RCU_GPT_cmp_michaelAlloc;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef cc::LazyKVList< rcu_shb, Key, Value, traits_LazyList_cmp_michaelAlloc > LazyList_RCU_SHB_cmp_michaelAlloc;
+        typedef cc::LazyKVList< rcu_sht, Key, Value, traits_LazyList_cmp_michaelAlloc > LazyList_RCU_SHT_cmp_michaelAlloc;
+#endif
+        struct traits_LazyList_less_stdAlloc :
+            public cc::lazy_list::make_traits<
+                co::less< less >
+            >::type
+        {};
+        typedef cc::LazyKVList< cds::gc::HP, Key, Value, traits_LazyList_less_stdAlloc > LazyList_HP_less_stdAlloc;
+        typedef cc::LazyKVList< cds::gc::DHP, Key, Value, traits_LazyList_less_stdAlloc > LazyList_DHP_less_stdAlloc;
+        typedef cc::LazyKVList< cds::gc::nogc, Key, Value, traits_LazyList_less_stdAlloc > LazyList_NOGC_less_stdAlloc;
+        typedef cc::LazyKVList< rcu_gpi, Key, Value, traits_LazyList_less_stdAlloc > LazyList_RCU_GPI_less_stdAlloc;
+        typedef cc::LazyKVList< rcu_gpb, Key, Value, traits_LazyList_less_stdAlloc > LazyList_RCU_GPB_less_stdAlloc;
+        typedef cc::LazyKVList< rcu_gpt, Key, Value, traits_LazyList_less_stdAlloc > LazyList_RCU_GPT_less_stdAlloc;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef cc::LazyKVList< rcu_shb, Key, Value, traits_LazyList_less_stdAlloc > LazyList_RCU_SHB_less_stdAlloc;
+        typedef cc::LazyKVList< rcu_sht, Key, Value, traits_LazyList_less_stdAlloc > LazyList_RCU_SHT_less_stdAlloc;
+#endif
+
+        struct traits_LazyList_less_stdAlloc_seqcst :
+            public cc::lazy_list::make_traits<
+                co::less< less >
+                ,co::memory_model< co::v::sequential_consistent >
+            >::type
+        {};
+        typedef cc::LazyKVList< cds::gc::HP, Key, Value, traits_LazyList_less_stdAlloc_seqcst > LazyList_HP_less_stdAlloc_seqcst;
+        typedef cc::LazyKVList< cds::gc::DHP, Key, Value, traits_LazyList_less_stdAlloc_seqcst > LazyList_DHP_less_stdAlloc_seqcst;
+        typedef cc::LazyKVList< cds::gc::nogc, Key, Value, traits_LazyList_less_stdAlloc_seqcst > LazyList_NOGC_less_stdAlloc_seqcst;
+        typedef cc::LazyKVList< rcu_gpi, Key, Value, traits_LazyList_less_stdAlloc_seqcst > LazyList_RCU_GPI_less_stdAlloc_seqcst;
+        typedef cc::LazyKVList< rcu_gpb, Key, Value, traits_LazyList_less_stdAlloc_seqcst > LazyList_RCU_GPB_less_stdAlloc_seqcst;
+        typedef cc::LazyKVList< rcu_gpt, Key, Value, traits_LazyList_less_stdAlloc_seqcst > LazyList_RCU_GPT_less_stdAlloc_seqcst;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef cc::LazyKVList< rcu_shb, Key, Value, traits_LazyList_less_stdAlloc_seqcst > LazyList_RCU_SHB_less_stdAlloc_seqcst;
+        typedef cc::LazyKVList< rcu_sht, Key, Value, traits_LazyList_less_stdAlloc_seqcst > LazyList_RCU_SHT_less_stdAlloc_seqcst;
+#endif
+
+        struct traits_LazyList_less_michaelAlloc :
+            public cc::lazy_list::make_traits<
+                co::less< less >,
+                co::allocator< memory::MichaelAllocator<int> >
+            >::type
+        {};
+        typedef cc::LazyKVList< cds::gc::HP, Key, Value, traits_LazyList_less_michaelAlloc > LazyList_HP_less_michaelAlloc;
+        typedef cc::LazyKVList< cds::gc::DHP, Key, Value, traits_LazyList_less_michaelAlloc > LazyList_DHP_less_michaelAlloc;
+        typedef cc::LazyKVList< cds::gc::nogc, Key, Value, traits_LazyList_less_michaelAlloc > LazyList_NOGC_less_michaelAlloc;
+        typedef cc::LazyKVList< rcu_gpi, Key, Value, traits_LazyList_less_michaelAlloc > LazyList_RCU_GPI_less_michaelAlloc;
+        typedef cc::LazyKVList< rcu_gpb, Key, Value, traits_LazyList_less_michaelAlloc > LazyList_RCU_GPB_less_michaelAlloc;
+        typedef cc::LazyKVList< rcu_gpt, Key, Value, traits_LazyList_less_michaelAlloc > LazyList_RCU_GPT_less_michaelAlloc;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef cc::LazyKVList< rcu_shb, Key, Value, traits_LazyList_less_michaelAlloc > LazyList_RCU_SHB_less_michaelAlloc;
+        typedef cc::LazyKVList< rcu_sht, Key, Value, traits_LazyList_less_michaelAlloc > LazyList_RCU_SHT_less_michaelAlloc;
+#endif
+    };
+
+}   // namespace map2
+
+#endif // ifndef CDSUNIT_MAP_TYPE_LAZY_LIST_H
diff --git a/tests/unit/map2/map_type_michael.h b/tests/unit/map2/map_type_michael.h
new file mode 100644 (file)
index 0000000..8e9cfd8
--- /dev/null
@@ -0,0 +1,180 @@
+//$$CDS-header$$
+
+#ifndef CDSUNIT_MAP_TYPE_MICHAEL_H
+#define CDSUNIT_MAP_TYPE_MICHAEL_H
+
+#include "map2/map_type_michael_list.h"
+#include "map2/map_type_lazy_list.h"
+
+#include <cds/container/michael_map.h>
+#include <cds/container/michael_map_rcu.h>
+#include <cds/container/michael_map_nogc.h>
+
+namespace map2 {
+
+    template <typename Key, typename Value>
+    struct map_type< cc::michael_map::implementation_tag, Key, Value >: public map_type_base< Key, Value >
+    {
+        typedef map_type_base< Key, Value > base_class;
+        typedef typename base_class::compare    compare;
+        typedef typename base_class::less       less;
+        typedef typename base_class::equal_to   equal_to;
+        typedef typename base_class::key_hash   key_hash;
+        typedef typename base_class::hash       hash;
+
+
+        // ***************************************************************************
+        // MichaelHashMap based on MichaelKVList
+        typedef michael_list_type< Key, Value > ml;
+
+        struct traits_MichaelMap_hash :
+            public cc::michael_map::make_traits<
+                co::hash< hash >
+            >::type
+        {};
+        typedef cc::MichaelHashMap< cds::gc::HP,  typename ml::MichaelList_HP_cmp_stdAlloc,  traits_MichaelMap_hash > MichaelMap_HP_cmp_stdAlloc;
+        typedef cc::MichaelHashMap< cds::gc::DHP, typename ml::MichaelList_DHP_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_DHP_cmp_stdAlloc;
+        typedef cc::MichaelHashMap< cds::gc::nogc, typename ml::MichaelList_NOGC_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_NOGC_cmp_stdAlloc;
+        typedef cc::MichaelHashMap< rcu_gpi, typename ml::MichaelList_RCU_GPI_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_RCU_GPI_cmp_stdAlloc;
+        typedef cc::MichaelHashMap< rcu_gpb, typename ml::MichaelList_RCU_GPB_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_RCU_GPB_cmp_stdAlloc;
+        typedef cc::MichaelHashMap< rcu_gpt, typename ml::MichaelList_RCU_GPT_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_RCU_GPT_cmp_stdAlloc;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef cc::MichaelHashMap< rcu_shb, typename ml::MichaelList_RCU_SHB_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_RCU_SHB_cmp_stdAlloc;
+        typedef cc::MichaelHashMap< rcu_sht, typename ml::MichaelList_RCU_SHT_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_RCU_SHT_cmp_stdAlloc;
+#endif
+
+        typedef cc::MichaelHashMap< cds::gc::HP, typename ml::MichaelList_HP_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_HP_less_stdAlloc;
+        typedef cc::MichaelHashMap< cds::gc::DHP, typename ml::MichaelList_DHP_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_DHP_less_stdAlloc;
+        typedef cc::MichaelHashMap< cds::gc::nogc, typename ml::MichaelList_NOGC_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_NOGC_less_stdAlloc;
+        typedef cc::MichaelHashMap< rcu_gpi, typename ml::MichaelList_RCU_GPI_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_RCU_GPI_less_stdAlloc;
+        typedef cc::MichaelHashMap< rcu_gpb, typename ml::MichaelList_RCU_GPB_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_RCU_GPB_less_stdAlloc;
+        typedef cc::MichaelHashMap< rcu_gpt, typename ml::MichaelList_RCU_GPT_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_RCU_GPT_less_stdAlloc;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef cc::MichaelHashMap< rcu_shb, typename ml::MichaelList_RCU_SHB_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_RCU_SHB_less_stdAlloc;
+        typedef cc::MichaelHashMap< rcu_sht, typename ml::MichaelList_RCU_SHT_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_RCU_SHT_less_stdAlloc;
+#endif
+
+        typedef cc::MichaelHashMap< cds::gc::HP, typename ml::MichaelList_HP_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_HP_cmp_stdAlloc_seqcst;
+        typedef cc::MichaelHashMap< cds::gc::DHP, typename ml::MichaelList_DHP_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_DHP_cmp_stdAlloc_seqcst;
+        typedef cc::MichaelHashMap< cds::gc::nogc, typename ml::MichaelList_NOGC_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_NOGC_cmp_stdAlloc_seqcst;
+        typedef cc::MichaelHashMap< rcu_gpi, typename ml::MichaelList_RCU_GPI_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_GPI_cmp_stdAlloc_seqcst;
+        typedef cc::MichaelHashMap< rcu_gpb, typename ml::MichaelList_RCU_GPB_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_GPB_cmp_stdAlloc_seqcst;
+        typedef cc::MichaelHashMap< rcu_gpt, typename ml::MichaelList_RCU_GPT_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_GPT_cmp_stdAlloc_seqcst;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef cc::MichaelHashMap< rcu_shb, typename ml::MichaelList_RCU_SHB_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_SHB_cmp_stdAlloc_seqcst;
+        typedef cc::MichaelHashMap< rcu_sht, typename ml::MichaelList_RCU_SHT_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_SHT_cmp_stdAlloc_seqcst;
+#endif
+
+        typedef cc::MichaelHashMap< cds::gc::HP, typename ml::MichaelList_HP_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_HP_less_stdAlloc_seqcst;
+        typedef cc::MichaelHashMap< cds::gc::DHP, typename ml::MichaelList_DHP_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_DHP_less_stdAlloc_seqcst;
+        typedef cc::MichaelHashMap< cds::gc::nogc, typename ml::MichaelList_NOGC_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_NOGC_less_stdAlloc_seqcst;
+        typedef cc::MichaelHashMap< rcu_gpi, typename ml::MichaelList_RCU_GPI_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_GPI_less_stdAlloc_seqcst;
+        typedef cc::MichaelHashMap< rcu_gpb, typename ml::MichaelList_RCU_GPB_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_GPB_less_stdAlloc_seqcst;
+        typedef cc::MichaelHashMap< rcu_gpt, typename ml::MichaelList_RCU_GPT_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_GPT_less_stdAlloc_seqcst;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef cc::MichaelHashMap< rcu_shb, typename ml::MichaelList_RCU_SHB_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_SHB_less_stdAlloc_seqcst;
+        typedef cc::MichaelHashMap< rcu_sht, typename ml::MichaelList_RCU_SHT_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_SHT_less_stdAlloc_seqcst;
+#endif
+
+        struct traits_MichaelSet_michaelAlloc :
+            public traits_MichaelMap_hash
+        {
+            typedef memory::MichaelAllocator<int> allocator;
+        };
+        typedef cc::MichaelHashMap< cds::gc::HP, typename ml::MichaelList_HP_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_HP_cmp_michaelAlloc;
+        typedef cc::MichaelHashMap< cds::gc::DHP, typename ml::MichaelList_DHP_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_DHP_cmp_michaelAlloc;
+        typedef cc::MichaelHashMap< cds::gc::nogc, typename ml::MichaelList_NOGC_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_NOGC_cmp_michaelAlloc;
+        typedef cc::MichaelHashMap< rcu_gpi, typename ml::MichaelList_RCU_GPI_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_RCU_GPI_cmp_michaelAlloc;
+        typedef cc::MichaelHashMap< rcu_gpb, typename ml::MichaelList_RCU_GPB_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_RCU_GPB_cmp_michaelAlloc;
+        typedef cc::MichaelHashMap< rcu_gpt, typename ml::MichaelList_RCU_GPT_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_RCU_GPT_cmp_michaelAlloc;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef cc::MichaelHashMap< rcu_shb, typename ml::MichaelList_RCU_SHB_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_RCU_SHB_cmp_michaelAlloc;
+        typedef cc::MichaelHashMap< rcu_sht, typename ml::MichaelList_RCU_SHT_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_RCU_SHT_cmp_michaelAlloc;
+#endif
+        typedef cc::MichaelHashMap< cds::gc::HP, typename ml::MichaelList_HP_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_HP_less_michaelAlloc;
+        typedef cc::MichaelHashMap< cds::gc::DHP, typename ml::MichaelList_DHP_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_DHP_less_michaelAlloc;
+        typedef cc::MichaelHashMap< cds::gc::nogc, typename ml::MichaelList_NOGC_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_NOGC_less_michaelAlloc;
+        typedef cc::MichaelHashMap< rcu_gpi, typename ml::MichaelList_RCU_GPI_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_RCU_GPI_less_michaelAlloc;
+        typedef cc::MichaelHashMap< rcu_gpb, typename ml::MichaelList_RCU_GPB_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_RCU_GPB_less_michaelAlloc;
+        typedef cc::MichaelHashMap< rcu_gpt, typename ml::MichaelList_RCU_GPT_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_RCU_GPT_less_michaelAlloc;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef cc::MichaelHashMap< rcu_shb, typename ml::MichaelList_RCU_SHB_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_RCU_SHB_less_michaelAlloc;
+        typedef cc::MichaelHashMap< rcu_sht, typename ml::MichaelList_RCU_SHT_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_RCU_SHT_less_michaelAlloc;
+#endif
+
+
+        // ***************************************************************************
+        // MichaelHashMap based on LazyKVList
+        typedef lazy_list_type< Key, Value > ll;
+
+        typedef cc::MichaelHashMap< cds::gc::HP, typename ll::LazyList_HP_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_HP_cmp_stdAlloc;
+        typedef cc::MichaelHashMap< cds::gc::DHP, typename ll::LazyList_DHP_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_DHP_cmp_stdAlloc;
+        typedef cc::MichaelHashMap< cds::gc::nogc, typename ll::LazyList_NOGC_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_NOGC_cmp_stdAlloc;
+        typedef cc::MichaelHashMap< rcu_gpi, typename ll::LazyList_RCU_GPI_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPI_cmp_stdAlloc;
+        typedef cc::MichaelHashMap< rcu_gpb, typename ll::LazyList_RCU_GPB_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPB_cmp_stdAlloc;
+        typedef cc::MichaelHashMap< rcu_gpt, typename ll::LazyList_RCU_GPT_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPT_cmp_stdAlloc;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef cc::MichaelHashMap< rcu_shb, typename ll::LazyList_RCU_SHB_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_SHB_cmp_stdAlloc;
+        typedef cc::MichaelHashMap< rcu_sht, typename ll::LazyList_RCU_SHT_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_SHT_cmp_stdAlloc;
+#endif
+
+        typedef cc::MichaelHashMap< cds::gc::nogc, typename ll::LazyList_NOGC_unord_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_NOGC_unord_stdAlloc;
+
+        typedef cc::MichaelHashMap< cds::gc::HP, typename ll::LazyList_HP_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_HP_less_stdAlloc;
+        typedef cc::MichaelHashMap< cds::gc::DHP, typename ll::LazyList_DHP_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_DHP_less_stdAlloc;
+        typedef cc::MichaelHashMap< cds::gc::nogc, typename ll::LazyList_NOGC_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_NOGC_less_stdAlloc;
+        typedef cc::MichaelHashMap< rcu_gpi, typename ll::LazyList_RCU_GPI_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPI_less_stdAlloc;
+        typedef cc::MichaelHashMap< rcu_gpb, typename ll::LazyList_RCU_GPB_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPB_less_stdAlloc;
+        typedef cc::MichaelHashMap< rcu_gpt, typename ll::LazyList_RCU_GPT_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPT_less_stdAlloc;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef cc::MichaelHashMap< rcu_shb, typename ll::LazyList_RCU_SHB_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_SHB_less_stdAlloc;
+        typedef cc::MichaelHashMap< rcu_sht, typename ll::LazyList_RCU_SHT_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_SHT_less_stdAlloc;
+#endif
+
+        typedef cc::MichaelHashMap< cds::gc::HP, typename ll::LazyList_HP_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_HP_cmp_stdAlloc_seqcst;
+        typedef cc::MichaelHashMap< cds::gc::DHP, typename ll::LazyList_DHP_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_DHP_cmp_stdAlloc_seqcst;
+        typedef cc::MichaelHashMap< cds::gc::nogc, typename ll::LazyList_NOGC_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_NOGC_cmp_stdAlloc_seqcst;
+        typedef cc::MichaelHashMap< rcu_gpi, typename ll::LazyList_RCU_GPI_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPI_cmp_stdAlloc_seqcst;
+        typedef cc::MichaelHashMap< rcu_gpb, typename ll::LazyList_RCU_GPB_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPB_cmp_stdAlloc_seqcst;
+        typedef cc::MichaelHashMap< rcu_gpt, typename ll::LazyList_RCU_GPT_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPT_cmp_stdAlloc_seqcst;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef cc::MichaelHashMap< rcu_shb, typename ll::LazyList_RCU_SHB_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_SHB_cmp_stdAlloc_seqcst;
+        typedef cc::MichaelHashMap< rcu_sht, typename ll::LazyList_RCU_SHT_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_SHT_cmp_stdAlloc_seqcst;
+#endif
+
+        typedef cc::MichaelHashMap< cds::gc::HP, typename ll::LazyList_HP_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_HP_less_stdAlloc_seqcst;
+        typedef cc::MichaelHashMap< cds::gc::DHP, typename ll::LazyList_DHP_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_DHP_less_stdAlloc_seqcst;
+        typedef cc::MichaelHashMap< cds::gc::nogc, typename ll::LazyList_NOGC_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_NOGC_less_stdAlloc_seqcst;
+        typedef cc::MichaelHashMap< rcu_gpi, typename ll::LazyList_RCU_GPI_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPI_less_stdAlloc_seqcst;
+        typedef cc::MichaelHashMap< rcu_gpb, typename ll::LazyList_RCU_GPB_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPB_less_stdAlloc_seqcst;
+        typedef cc::MichaelHashMap< rcu_gpt, typename ll::LazyList_RCU_GPT_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPT_less_stdAlloc_seqcst;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef cc::MichaelHashMap< rcu_shb, typename ll::LazyList_RCU_SHB_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_SHB_less_stdAlloc_seqcst;
+        typedef cc::MichaelHashMap< rcu_sht, typename ll::LazyList_RCU_SHT_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_SHT_less_stdAlloc_seqcst;
+#endif
+
+        typedef cc::MichaelHashMap< cds::gc::HP, typename ll::LazyList_HP_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_HP_cmp_michaelAlloc;
+        typedef cc::MichaelHashMap< cds::gc::DHP, typename ll::LazyList_DHP_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_DHP_cmp_michaelAlloc;
+        typedef cc::MichaelHashMap< cds::gc::nogc, typename ll::LazyList_NOGC_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_NOGC_cmp_michaelAlloc;
+        typedef cc::MichaelHashMap< rcu_gpi, typename ll::LazyList_RCU_GPI_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_RCU_GPI_cmp_michaelAlloc;
+        typedef cc::MichaelHashMap< rcu_gpb, typename ll::LazyList_RCU_GPB_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_RCU_GPB_cmp_michaelAlloc;
+        typedef cc::MichaelHashMap< rcu_gpt, typename ll::LazyList_RCU_GPT_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_RCU_GPT_cmp_michaelAlloc;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef cc::MichaelHashMap< rcu_shb, typename ll::LazyList_RCU_SHB_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_RCU_SHB_cmp_michaelAlloc;
+        typedef cc::MichaelHashMap< rcu_sht, typename ll::LazyList_RCU_SHT_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_RCU_SHT_cmp_michaelAlloc;
+#endif
+        typedef cc::MichaelHashMap< cds::gc::HP, typename ll::LazyList_HP_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_HP_less_michaelAlloc;
+        typedef cc::MichaelHashMap< cds::gc::DHP, typename ll::LazyList_DHP_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_DHP_less_michaelAlloc;
+        typedef cc::MichaelHashMap< cds::gc::nogc, typename ll::LazyList_NOGC_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_NOGC_less_michaelAlloc;
+        typedef cc::MichaelHashMap< rcu_gpi, typename ll::LazyList_RCU_GPI_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_RCU_GPI_less_michaelAlloc;
+        typedef cc::MichaelHashMap< rcu_gpb, typename ll::LazyList_RCU_GPB_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_RCU_GPB_less_michaelAlloc;
+        typedef cc::MichaelHashMap< rcu_gpt, typename ll::LazyList_RCU_GPT_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_RCU_GPT_less_michaelAlloc;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef cc::MichaelHashMap< rcu_shb, typename ll::LazyList_RCU_SHB_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_RCU_SHB_less_michaelAlloc;
+        typedef cc::MichaelHashMap< rcu_sht, typename ll::LazyList_RCU_SHT_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_RCU_SHT_less_michaelAlloc;
+#endif
+
+    };
+}   // namespace map2
+
+#endif // ifndef CDSUNIT_MAP_TYPE_MICHAEL_H
diff --git a/tests/unit/map2/map_type_michael_list.h b/tests/unit/map2/map_type_michael_list.h
new file mode 100644 (file)
index 0000000..acb1813
--- /dev/null
@@ -0,0 +1,126 @@
+//$$CDS-header$$
+
+#ifndef CDSUNIT_MAP_TYPE_MICHAEL_LIST_H
+#define CDSUNIT_MAP_TYPE_MICHAEL_LIST_H
+
+#include "map2/map_type.h"
+
+#include <cds/container/michael_kvlist_hp.h>
+#include <cds/container/michael_kvlist_dhp.h>
+#include <cds/container/michael_kvlist_rcu.h>
+#include <cds/container/michael_kvlist_nogc.h>
+
+#include "michael_alloc.h"
+
+namespace map2 {
+
+    template <typename Key, typename Value>
+    struct michael_list_type
+    {
+        typedef typename map_type_base<Key, Value>::compare compare;
+        typedef typename map_type_base<Key, Value>::less    less;
+
+        struct traits_MichaelList_cmp_stdAlloc :
+            public cc::michael_list::make_traits<
+                co::compare< compare >
+            >::type
+        {};
+        typedef cc::MichaelKVList< cds::gc::HP,  Key, Value, traits_MichaelList_cmp_stdAlloc > MichaelList_HP_cmp_stdAlloc;
+        typedef cc::MichaelKVList< cds::gc::DHP, Key, Value, traits_MichaelList_cmp_stdAlloc > MichaelList_DHP_cmp_stdAlloc;
+        typedef cc::MichaelKVList< cds::gc::nogc, Key, Value, traits_MichaelList_cmp_stdAlloc > MichaelList_NOGC_cmp_stdAlloc;
+        typedef cc::MichaelKVList< rcu_gpi, Key, Value, traits_MichaelList_cmp_stdAlloc > MichaelList_RCU_GPI_cmp_stdAlloc;
+        typedef cc::MichaelKVList< rcu_gpb, Key, Value, traits_MichaelList_cmp_stdAlloc > MichaelList_RCU_GPB_cmp_stdAlloc;
+        typedef cc::MichaelKVList< rcu_gpt, Key, Value, traits_MichaelList_cmp_stdAlloc > MichaelList_RCU_GPT_cmp_stdAlloc;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef cc::MichaelKVList< rcu_shb, Key, Value, traits_MichaelList_cmp_stdAlloc > MichaelList_RCU_SHB_cmp_stdAlloc;
+        typedef cc::MichaelKVList< rcu_sht, Key, Value, traits_MichaelList_cmp_stdAlloc > MichaelList_RCU_SHT_cmp_stdAlloc;
+#endif
+
+        struct traits_MichaelList_cmp_stdAlloc_seqcst :
+            public cc::michael_list::make_traits<
+                co::compare< compare >
+                ,co::memory_model< co::v::sequential_consistent >
+            >::type
+        {};
+        typedef cc::MichaelKVList< cds::gc::HP,  Key, Value, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_HP_cmp_stdAlloc_seqcst;
+        typedef cc::MichaelKVList< cds::gc::DHP, Key, Value, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_DHP_cmp_stdAlloc_seqcst;
+        typedef cc::MichaelKVList< cds::gc::nogc, Key, Value, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_NOGC_cmp_stdAlloc_seqcst;
+        typedef cc::MichaelKVList< rcu_gpi, Key, Value, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_RCU_GPI_cmp_stdAlloc_seqcst;
+        typedef cc::MichaelKVList< rcu_gpb, Key, Value, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_RCU_GPB_cmp_stdAlloc_seqcst;
+        typedef cc::MichaelKVList< rcu_gpt, Key, Value, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_RCU_GPT_cmp_stdAlloc_seqcst;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef cc::MichaelKVList< rcu_shb, Key, Value, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_RCU_SHB_cmp_stdAlloc_seqcst;
+        typedef cc::MichaelKVList< rcu_sht, Key, Value, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_RCU_SHT_cmp_stdAlloc_seqcst;
+#endif
+
+        struct traits_MichaelList_cmp_michaelAlloc :
+            public cc::michael_list::make_traits<
+                co::compare< compare >,
+                co::allocator< memory::MichaelAllocator<int> >
+            >::type
+        {};
+        typedef cc::MichaelKVList< cds::gc::HP,  Key, Value, traits_MichaelList_cmp_michaelAlloc > MichaelList_HP_cmp_michaelAlloc;
+        typedef cc::MichaelKVList< cds::gc::DHP, Key, Value, traits_MichaelList_cmp_michaelAlloc > MichaelList_DHP_cmp_michaelAlloc;
+        typedef cc::MichaelKVList< cds::gc::nogc, Key, Value, traits_MichaelList_cmp_michaelAlloc > MichaelList_NOGC_cmp_michaelAlloc;
+        typedef cc::MichaelKVList< rcu_gpi, Key, Value, traits_MichaelList_cmp_michaelAlloc > MichaelList_RCU_GPI_cmp_michaelAlloc;
+        typedef cc::MichaelKVList< rcu_gpb, Key, Value, traits_MichaelList_cmp_michaelAlloc > MichaelList_RCU_GPB_cmp_michaelAlloc;
+        typedef cc::MichaelKVList< rcu_gpt, Key, Value, traits_MichaelList_cmp_michaelAlloc > MichaelList_RCU_GPT_cmp_michaelAlloc;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef cc::MichaelKVList< rcu_shb, Key, Value, traits_MichaelList_cmp_michaelAlloc > MichaelList_RCU_SHB_cmp_michaelAlloc;
+        typedef cc::MichaelKVList< rcu_sht, Key, Value, traits_MichaelList_cmp_michaelAlloc > MichaelList_RCU_SHT_cmp_michaelAlloc;
+#endif
+
+        struct traits_MichaelList_less_stdAlloc :
+            public cc::michael_list::make_traits<
+                co::less< less >
+            >::type
+        {};
+        typedef cc::MichaelKVList< cds::gc::HP,  Key, Value, traits_MichaelList_less_stdAlloc > MichaelList_HP_less_stdAlloc;
+        typedef cc::MichaelKVList< cds::gc::DHP, Key, Value, traits_MichaelList_less_stdAlloc > MichaelList_DHP_less_stdAlloc;
+        typedef cc::MichaelKVList< cds::gc::nogc, Key, Value, traits_MichaelList_less_stdAlloc > MichaelList_NOGC_less_stdAlloc;
+        typedef cc::MichaelKVList< rcu_gpi, Key, Value, traits_MichaelList_less_stdAlloc > MichaelList_RCU_GPI_less_stdAlloc;
+        typedef cc::MichaelKVList< rcu_gpb, Key, Value, traits_MichaelList_less_stdAlloc > MichaelList_RCU_GPB_less_stdAlloc;
+        typedef cc::MichaelKVList< rcu_gpt, Key, Value, traits_MichaelList_less_stdAlloc > MichaelList_RCU_GPT_less_stdAlloc;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef cc::MichaelKVList< rcu_shb, Key, Value, traits_MichaelList_less_stdAlloc > MichaelList_RCU_SHB_less_stdAlloc;
+        typedef cc::MichaelKVList< rcu_sht, Key, Value, traits_MichaelList_less_stdAlloc > MichaelList_RCU_SHT_less_stdAlloc;
+#endif
+
+        struct traits_MichaelList_less_stdAlloc_seqcst :
+            public cc::michael_list::make_traits<
+                co::less< less >
+                ,co::memory_model< co::v::sequential_consistent >
+            >::type
+        {};
+        typedef cc::MichaelKVList< cds::gc::HP,  Key, Value, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_HP_less_stdAlloc_seqcst;
+        typedef cc::MichaelKVList< cds::gc::DHP, Key, Value, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_DHP_less_stdAlloc_seqcst;
+        typedef cc::MichaelKVList< cds::gc::nogc, Key, Value, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_NOGC_less_stdAlloc_seqcst;
+        typedef cc::MichaelKVList< rcu_gpi, Key, Value, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_RCU_GPI_less_stdAlloc_seqcst;
+        typedef cc::MichaelKVList< rcu_gpb, Key, Value, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_RCU_GPB_less_stdAlloc_seqcst;
+        typedef cc::MichaelKVList< rcu_gpt, Key, Value, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_RCU_GPT_less_stdAlloc_seqcst;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef cc::MichaelKVList< rcu_shb, Key, Value, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_RCU_SHB_less_stdAlloc_seqcst;
+        typedef cc::MichaelKVList< rcu_sht, Key, Value, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_RCU_SHT_less_stdAlloc_seqcst;
+#endif
+
+        struct traits_MichaelList_less_michaelAlloc :
+            public cc::michael_list::make_traits<
+                co::less< less >,
+                co::allocator< memory::MichaelAllocator<int> >
+            >::type
+        {};
+        typedef cc::MichaelKVList< cds::gc::HP,  Key, Value, traits_MichaelList_less_michaelAlloc > MichaelList_HP_less_michaelAlloc;
+        typedef cc::MichaelKVList< cds::gc::DHP, Key, Value, traits_MichaelList_less_michaelAlloc > MichaelList_DHP_less_michaelAlloc;
+        typedef cc::MichaelKVList< cds::gc::nogc, Key, Value, traits_MichaelList_less_michaelAlloc > MichaelList_NOGC_less_michaelAlloc;
+        typedef cc::MichaelKVList< rcu_gpi, Key, Value, traits_MichaelList_less_michaelAlloc > MichaelList_RCU_GPI_less_michaelAlloc;
+        typedef cc::MichaelKVList< rcu_gpb, Key, Value, traits_MichaelList_less_michaelAlloc > MichaelList_RCU_GPB_less_michaelAlloc;
+        typedef cc::MichaelKVList< rcu_gpt, Key, Value, traits_MichaelList_less_michaelAlloc > MichaelList_RCU_GPT_less_michaelAlloc;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef cc::MichaelKVList< rcu_shb, Key, Value, traits_MichaelList_less_michaelAlloc > MichaelList_RCU_SHB_less_michaelAlloc;
+        typedef cc::MichaelKVList< rcu_sht, Key, Value, traits_MichaelList_less_michaelAlloc > MichaelList_RCU_SHT_less_michaelAlloc;
+#endif
+    };
+
+}   // namespace map2
+
+#endif // ifndef CDSUNIT_MAP_TYPE_MICHAEL_LIST_H
diff --git a/tests/unit/map2/map_type_skip_list.h b/tests/unit/map2/map_type_skip_list.h
new file mode 100644 (file)
index 0000000..eb142c9
--- /dev/null
@@ -0,0 +1,192 @@
+//$$CDS-header$$
+
+#ifndef CDSUNIT_MAP_TYPE_SKIP_LIST_H
+#define CDSUNIT_MAP_TYPE_SKIP_LIST_H
+
+#include "map2/map_type.h"
+
+#include <cds/container/skip_list_map_hp.h>
+#include <cds/container/skip_list_map_dhp.h>
+#include <cds/container/skip_list_map_rcu.h>
+#include <cds/container/skip_list_map_nogc.h>
+
+#include "print_skip_list_stat.h"
+
+namespace map2 {
+
+    template <typename Key, typename Value>
+    struct map_type< cc::skip_list::implementation_tag, Key, Value >: public map_type_base< Key, Value >
+    {
+        typedef map_type_base< Key, Value > base_class;
+        typedef typename base_class::compare    compare;
+        typedef typename base_class::less       less;
+
+        class traits_SkipListMap_less_pascal: public cc::skip_list::make_traits <
+                co::less< less >
+                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
+                ,co::item_counter< cds::atomicity::item_counter >
+            >::type
+        {};
+        typedef cc::SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_less_pascal > SkipListMap_hp_less_pascal;
+        typedef cc::SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_less_pascal > SkipListMap_dhp_less_pascal;
+        typedef cc::SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_less_pascal > SkipListMap_nogc_less_pascal;
+        typedef cc::SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_less_pascal > SkipListMap_rcu_gpi_less_pascal;
+        typedef cc::SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_less_pascal > SkipListMap_rcu_gpb_less_pascal;
+        typedef cc::SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_less_pascal > SkipListMap_rcu_gpt_less_pascal;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef cc::SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_less_pascal > SkipListMap_rcu_shb_less_pascal;
+        typedef cc::SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_less_pascal > SkipListMap_rcu_sht_less_pascal;
+#endif
+
+        class traits_SkipListMap_less_pascal_seqcst: public cc::skip_list::make_traits <
+                co::less< less >
+                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
+                ,co::memory_model< co::v::sequential_consistent >
+                ,co::item_counter< cds::atomicity::item_counter >
+            >::type
+        {};
+        typedef cc::SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_less_pascal_seqcst > SkipListMap_hp_less_pascal_seqcst;
+        typedef cc::SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_less_pascal_seqcst > SkipListMap_dhp_less_pascal_seqcst;
+        typedef cc::SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_less_pascal_seqcst > SkipListMap_nogc_less_pascal_seqcst;
+        typedef cc::SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_less_pascal_seqcst > SkipListMap_rcu_gpi_less_pascal_seqcst;
+        typedef cc::SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_less_pascal_seqcst > SkipListMap_rcu_gpb_less_pascal_seqcst;
+        typedef cc::SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_less_pascal_seqcst > SkipListMap_rcu_gpt_less_pascal_seqcst;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef cc::SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_less_pascal_seqcst > SkipListMap_rcu_shb_less_pascal_seqcst;
+        typedef cc::SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_less_pascal_seqcst > SkipListMap_rcu_sht_less_pascal_seqcst;
+#endif
+
+        class traits_SkipListMap_less_pascal_stat: public cc::skip_list::make_traits <
+                co::less< less >
+                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
+                ,co::stat< cc::skip_list::stat<> >
+                ,co::item_counter< cds::atomicity::item_counter >
+            >::type
+        {};
+        typedef cc::SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_less_pascal_stat > SkipListMap_hp_less_pascal_stat;
+        typedef cc::SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_less_pascal_stat > SkipListMap_dhp_less_pascal_stat;
+        typedef cc::SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_less_pascal_stat > SkipListMap_nogc_less_pascal_stat;
+        typedef cc::SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_less_pascal_stat > SkipListMap_rcu_gpi_less_pascal_stat;
+        typedef cc::SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_less_pascal_stat > SkipListMap_rcu_gpb_less_pascal_stat;
+        typedef cc::SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_less_pascal_stat > SkipListMap_rcu_gpt_less_pascal_stat;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef cc::SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_less_pascal_stat > SkipListMap_rcu_shb_less_pascal_stat;
+        typedef cc::SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_less_pascal_stat > SkipListMap_rcu_sht_less_pascal_stat;
+#endif
+
+        class traits_SkipListMap_cmp_pascal: public cc::skip_list::make_traits <
+                co::compare< compare >
+                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
+                ,co::item_counter< cds::atomicity::item_counter >
+            >::type
+        {};
+        typedef cc::SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_cmp_pascal > SkipListMap_hp_cmp_pascal;
+        typedef cc::SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_cmp_pascal > SkipListMap_dhp_cmp_pascal;
+        typedef cc::SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_cmp_pascal > SkipListMap_nogc_cmp_pascal;
+        typedef cc::SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_cmp_pascal > SkipListMap_rcu_gpi_cmp_pascal;
+        typedef cc::SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_cmp_pascal > SkipListMap_rcu_gpb_cmp_pascal;
+        typedef cc::SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_cmp_pascal > SkipListMap_rcu_gpt_cmp_pascal;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef cc::SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_cmp_pascal > SkipListMap_rcu_shb_cmp_pascal;
+        typedef cc::SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_cmp_pascal > SkipListMap_rcu_sht_cmp_pascal;
+#endif
+
+        class traits_SkipListMap_cmp_pascal_stat: public cc::skip_list::make_traits <
+                co::compare< compare >
+                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
+                ,co::stat< cc::skip_list::stat<> >
+                ,co::item_counter< cds::atomicity::item_counter >
+            >::type
+        {};
+        typedef cc::SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_cmp_pascal_stat > SkipListMap_hp_cmp_pascal_stat;
+        typedef cc::SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_cmp_pascal_stat > SkipListMap_dhp_cmp_pascal_stat;
+        typedef cc::SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_cmp_pascal_stat > SkipListMap_nogc_cmp_pascal_stat;
+        typedef cc::SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_cmp_pascal_stat > SkipListMap_rcu_gpi_cmp_pascal_stat;
+        typedef cc::SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_cmp_pascal_stat > SkipListMap_rcu_gpb_cmp_pascal_stat;
+        typedef cc::SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_cmp_pascal_stat > SkipListMap_rcu_gpt_cmp_pascal_stat;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef cc::SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_cmp_pascal_stat > SkipListMap_rcu_shb_cmp_pascal_stat;
+        typedef cc::SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_cmp_pascal_stat > SkipListMap_rcu_sht_cmp_pascal_stat;
+#endif
+
+        class traits_SkipListMap_less_xorshift: public cc::skip_list::make_traits <
+                co::less< less >
+                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
+                ,co::item_counter< cds::atomicity::item_counter >
+            >::type
+        {};
+        typedef cc::SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_less_xorshift > SkipListMap_hp_less_xorshift;
+        typedef cc::SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_less_xorshift > SkipListMap_dhp_less_xorshift;
+        typedef cc::SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_less_xorshift > SkipListMap_nogc_less_xorshift;
+        typedef cc::SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_less_xorshift > SkipListMap_rcu_gpi_less_xorshift;
+        typedef cc::SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_less_xorshift > SkipListMap_rcu_gpb_less_xorshift;
+        typedef cc::SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_less_xorshift > SkipListMap_rcu_gpt_less_xorshift;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef cc::SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_less_xorshift > SkipListMap_rcu_shb_less_xorshift;
+        typedef cc::SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_less_xorshift > SkipListMap_rcu_sht_less_xorshift;
+#endif
+
+        class traits_SkipListMap_less_xorshift_stat: public cc::skip_list::make_traits <
+                co::less< less >
+                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
+                ,co::stat< cc::skip_list::stat<> >
+                ,co::item_counter< cds::atomicity::item_counter >
+            >::type
+        {};
+        typedef cc::SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_less_xorshift_stat > SkipListMap_hp_less_xorshift_stat;
+        typedef cc::SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_less_xorshift_stat > SkipListMap_dhp_less_xorshift_stat;
+        typedef cc::SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_less_xorshift_stat > SkipListMap_nogc_less_xorshift_stat;
+        typedef cc::SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_less_xorshift_stat > SkipListMap_rcu_gpi_less_xorshift_stat;
+        typedef cc::SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_less_xorshift_stat > SkipListMap_rcu_gpb_less_xorshift_stat;
+        typedef cc::SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_less_xorshift_stat > SkipListMap_rcu_gpt_less_xorshift_stat;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef cc::SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_less_xorshift_stat > SkipListMap_rcu_shb_less_xorshift_stat;
+        typedef cc::SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_less_xorshift_stat > SkipListMap_rcu_sht_less_xorshift_stat;
+#endif
+
+        class traits_SkipListMap_cmp_xorshift: public cc::skip_list::make_traits <
+                co::compare< compare >
+                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
+                ,co::item_counter< cds::atomicity::item_counter >
+            >::type
+        {};
+        typedef cc::SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_cmp_xorshift > SkipListMap_hp_cmp_xorshift;
+        typedef cc::SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_cmp_xorshift > SkipListMap_dhp_cmp_xorshift;
+        typedef cc::SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_cmp_xorshift > SkipListMap_nogc_cmp_xorshift;
+        typedef cc::SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_cmp_xorshift > SkipListMap_rcu_gpi_cmp_xorshift;
+        typedef cc::SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_cmp_xorshift > SkipListMap_rcu_gpb_cmp_xorshift;
+        typedef cc::SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_cmp_xorshift > SkipListMap_rcu_gpt_cmp_xorshift;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef cc::SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_cmp_xorshift > SkipListMap_rcu_shb_cmp_xorshift;
+        typedef cc::SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_cmp_xorshift > SkipListMap_rcu_sht_cmp_xorshift;
+#endif
+
+        class traits_SkipListMap_cmp_xorshift_stat: public cc::skip_list::make_traits <
+                co::compare< compare >
+                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
+                ,co::stat< cc::skip_list::stat<> >
+                ,co::item_counter< cds::atomicity::item_counter >
+            >::type
+        {};
+        typedef cc::SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_cmp_xorshift_stat > SkipListMap_hp_cmp_xorshift_stat;
+        typedef cc::SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_cmp_xorshift_stat > SkipListMap_dhp_cmp_xorshift_stat;
+        typedef cc::SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_cmp_xorshift_stat > SkipListMap_nogc_cmp_xorshift_stat;
+        typedef cc::SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_cmp_xorshift_stat > SkipListMap_rcu_gpi_cmp_xorshift_stat;
+        typedef cc::SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_cmp_xorshift_stat > SkipListMap_rcu_gpb_cmp_xorshift_stat;
+        typedef cc::SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_cmp_xorshift_stat > SkipListMap_rcu_gpt_cmp_xorshift_stat;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef cc::SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_cmp_xorshift_stat > SkipListMap_rcu_shb_cmp_xorshift_stat;
+        typedef cc::SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_cmp_xorshift_stat > SkipListMap_rcu_sht_cmp_xorshift_stat;
+#endif
+
+    };
+
+    template <typename GC, typename K, typename T, typename Traits >
+    static inline void print_stat( cc::SkipListMap< GC, K, T, Traits > const& m )
+    {
+        CPPUNIT_MSG( m.statistics() );
+    }
+
+}   // namespace map2
+
+#endif // ifndef CDSUNIT_MAP_TYPE_SKIP_LIST_H
diff --git a/tests/unit/map2/map_type_split_list.h b/tests/unit/map2/map_type_split_list.h
new file mode 100644 (file)
index 0000000..e18aa24
--- /dev/null
@@ -0,0 +1,523 @@
+//$$CDS-header$$
+
+#ifndef CDSUNIT_MAP_TYPE_SPLIT_LIST_H
+#define CDSUNIT_MAP_TYPE_SPLIT_LIST_H
+
+#include "map2/map_type.h"
+
+#include <cds/container/michael_kvlist_hp.h>
+#include <cds/container/michael_kvlist_dhp.h>
+#include <cds/container/michael_kvlist_rcu.h>
+#include <cds/container/michael_kvlist_nogc.h>
+
+#include <cds/container/lazy_kvlist_hp.h>
+#include <cds/container/lazy_kvlist_dhp.h>
+#include <cds/container/lazy_kvlist_rcu.h>
+#include <cds/container/lazy_kvlist_nogc.h>
+
+#include <cds/container/split_list_map.h>
+#include <cds/container/split_list_map_rcu.h>
+#include <cds/container/split_list_map_nogc.h>
+
+#include "print_split_list_stat.h"
+
+namespace map2 {
+
+    template <typename Key, typename Value>
+    struct map_type< cc::split_list::implementation_tag, Key, Value >: public map_type_base< Key, Value >
+    {
+        typedef map_type_base< Key, Value > base_class;
+        typedef typename base_class::compare    compare;
+        typedef typename base_class::less       less;
+        typedef typename base_class::equal_to   equal_to;
+        typedef typename base_class::key_hash   key_hash;
+        typedef typename base_class::hash       hash;
+
+        // SplitListMap<gc::nogc> has no clear() method
+        template <typename Base>
+        class NogcSplitMapWrapper: public Base
+        {
+            typedef Base    base_class;
+        public:
+            NogcSplitMapWrapper( size_t nMaxItemCount, size_t nLoadFactor )
+                : base_class( nMaxItemCount, nLoadFactor )
+            {}
+
+            template <typename K>
+            bool insert( K const& key )
+            {
+                return base_class::insert( key ) != base_class::end();
+            }
+
+            template <typename K, typename V>
+            bool insert( K const& key, V const& val )
+            {
+                return base_class::insert( key, val ) != base_class::end();
+            }
+
+            template <typename K, typename Func>
+            bool insert_with( K const& key, Func func )
+            {
+                return base_class::insert_with( key, func ) != base_class::end();
+            }
+
+            template <typename K>
+            bool find( K const& key )
+            {
+                return base_class::find( key ) != base_class::end();
+            }
+
+            void clear()
+            {}
+        };
+
+
+        // ***************************************************************************
+        // SplitListMap based on MichaelList
+        struct traits_SplitList_Michael_dyn_cmp: public cc::split_list::make_traits<
+                cc::split_list::ordered_list<cc::michael_list_tag>
+                ,co::hash< hash >
+                ,cc::split_list::ordered_list_traits<
+                    typename cc::michael_list::make_traits<
+                        co::compare< compare >
+                    >::type
+                >
+            >::type
+        {};
+        typedef cc::SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_HP_dyn_cmp;
+        typedef cc::SplitListMap< cds::gc::DHP, Key, Value, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_DHP_dyn_cmp;
+        typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value, traits_SplitList_Michael_dyn_cmp >> SplitList_Michael_NOGC_dyn_cmp;
+        typedef cc::SplitListMap< rcu_gpi, Key, Value, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_RCU_GPI_dyn_cmp;
+        typedef cc::SplitListMap< rcu_gpb, Key, Value, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_RCU_GPB_dyn_cmp;
+        typedef cc::SplitListMap< rcu_gpt, Key, Value, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_RCU_GPT_dyn_cmp;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef cc::SplitListMap< rcu_shb, Key, Value, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_RCU_SHB_dyn_cmp;
+        typedef cc::SplitListMap< rcu_sht, Key, Value, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_RCU_SHT_dyn_cmp;
+#endif
+
+        struct traits_SplitList_Michael_dyn_cmp_stat : public traits_SplitList_Michael_dyn_cmp
+        {
+            typedef cc::split_list::stat<> stat;
+        };
+        typedef cc::SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_HP_dyn_cmp_stat;
+        typedef cc::SplitListMap< cds::gc::DHP, Key, Value, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_DHP_dyn_cmp_stat;
+        typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value, traits_SplitList_Michael_dyn_cmp_stat >> SplitList_Michael_NOGC_dyn_cmp_stat;
+        typedef cc::SplitListMap< rcu_gpi, Key, Value, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_RCU_GPI_dyn_cmp_stat;
+        typedef cc::SplitListMap< rcu_gpb, Key, Value, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_RCU_GPB_dyn_cmp_stat;
+        typedef cc::SplitListMap< rcu_gpt, Key, Value, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_RCU_GPT_dyn_cmp_stat;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef cc::SplitListMap< rcu_shb, Key, Value, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_RCU_SHB_dyn_cmp_stat;
+        typedef cc::SplitListMap< rcu_sht, Key, Value, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_RCU_SHT_dyn_cmp_stat;
+#endif
+
+        struct traits_SplitList_Michael_dyn_cmp_seqcst: public cc::split_list::make_traits<
+                cc::split_list::ordered_list<cc::michael_list_tag>
+                ,co::hash< hash >
+                ,co::memory_model< co::v::sequential_consistent >
+                ,cc::split_list::ordered_list_traits<
+                    typename cc::michael_list::make_traits<
+                        co::compare< compare >
+                        ,co::memory_model< co::v::sequential_consistent >
+                    >::type
+                >
+            >::type
+        {};
+        typedef cc::SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_HP_dyn_cmp_seqcst;
+        typedef cc::SplitListMap< cds::gc::DHP, Key, Value, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_DHP_dyn_cmp_seqcst;
+        typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value, traits_SplitList_Michael_dyn_cmp_seqcst >> SplitList_Michael_NOGC_dyn_cmp_seqcst;
+        typedef cc::SplitListMap< rcu_gpi, Key, Value, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_RCU_GPI_dyn_cmp_seqcst;
+        typedef cc::SplitListMap< rcu_gpb, Key, Value, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_RCU_GPB_dyn_cmp_seqcst;
+        typedef cc::SplitListMap< rcu_gpt, Key, Value, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_RCU_GPT_dyn_cmp_seqcst;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef cc::SplitListMap< rcu_shb, Key, Value, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_RCU_SHB_dyn_cmp_seqcst;
+        typedef cc::SplitListMap< rcu_sht, Key, Value, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_RCU_SHT_dyn_cmp_seqcst;
+#endif
+
+        struct traits_SplitList_Michael_st_cmp: public cc::split_list::make_traits<
+                cc::split_list::ordered_list<cc::michael_list_tag>
+                ,cc::split_list::dynamic_bucket_table< false >
+                ,co::hash< hash >
+                ,cc::split_list::ordered_list_traits<
+                    typename cc::michael_list::make_traits<
+                        co::compare< compare >
+                    >::type
+                >
+            >::type
+        {};
+        typedef cc::SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Michael_st_cmp > SplitList_Michael_HP_st_cmp;
+        typedef cc::SplitListMap< cds::gc::DHP, Key, Value, traits_SplitList_Michael_st_cmp > SplitList_Michael_DHP_st_cmp;
+        typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value, traits_SplitList_Michael_st_cmp >> SplitList_Michael_NOGC_st_cmp;
+        typedef cc::SplitListMap< rcu_gpi, Key, Value, traits_SplitList_Michael_st_cmp > SplitList_Michael_RCU_GPI_st_cmp;
+        typedef cc::SplitListMap< rcu_gpb, Key, Value, traits_SplitList_Michael_st_cmp > SplitList_Michael_RCU_GPB_st_cmp;
+        typedef cc::SplitListMap< rcu_gpt, Key, Value, traits_SplitList_Michael_st_cmp > SplitList_Michael_RCU_GPT_st_cmp;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef cc::SplitListMap< rcu_shb, Key, Value, traits_SplitList_Michael_st_cmp > SplitList_Michael_RCU_SHB_st_cmp;
+        typedef cc::SplitListMap< rcu_sht, Key, Value, traits_SplitList_Michael_st_cmp > SplitList_Michael_RCU_SHT_st_cmp;
+#endif
+
+        struct traits_SplitList_Michael_st_cmp_seqcst: public cc::split_list::make_traits<
+                cc::split_list::ordered_list<cc::michael_list_tag>
+                ,co::hash< hash >
+                ,cc::split_list::dynamic_bucket_table< false >
+                ,co::memory_model< co::v::sequential_consistent >
+                ,cc::split_list::ordered_list_traits<
+                    typename cc::michael_list::make_traits<
+                        co::compare< compare >
+                        ,co::memory_model< co::v::sequential_consistent >
+                    >::type
+                >
+            >::type
+        {};
+        typedef cc::SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Michael_st_cmp_seqcst > SplitList_Michael_HP_st_cmp_seqcst;
+        typedef cc::SplitListMap< cds::gc::DHP, Key, Value, traits_SplitList_Michael_st_cmp_seqcst > SplitList_Michael_DHP_st_cmp_seqcst;
+        typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value, traits_SplitList_Michael_st_cmp_seqcst >> SplitList_Michael_NOGC_st_cmp_seqcst;
+        typedef cc::SplitListMap< rcu_gpi, Key, Value, traits_SplitList_Michael_st_cmp_seqcst > SplitList_Michael_RCU_GPI_st_cmp_seqcst;
+        typedef cc::SplitListMap< rcu_gpb, Key, Value, traits_SplitList_Michael_st_cmp_seqcst > SplitList_Michael_RCU_GPB_st_cmp_seqcst;
+        typedef cc::SplitListMap< rcu_gpt, Key, Value, traits_SplitList_Michael_st_cmp_seqcst > SplitList_Michael_RCU_GPT_st_cmp_seqcst;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef cc::SplitListMap< rcu_shb, Key, Value, traits_SplitList_Michael_st_cmp_seqcst > SplitList_Michael_RCU_SHB_st_cmp_seqcst;
+        typedef cc::SplitListMap< rcu_sht, Key, Value, traits_SplitList_Michael_st_cmp_seqcst > SplitList_Michael_RCU_SHT_st_cmp_seqcst;
+#endif
+
+        //HP + less
+        struct traits_SplitList_Michael_dyn_less: public cc::split_list::make_traits<
+                cc::split_list::ordered_list<cc::michael_list_tag>
+                ,co::hash< hash >
+                ,cc::split_list::ordered_list_traits<
+                    typename cc::michael_list::make_traits<
+                        co::less< less >
+                    >::type
+                >
+            >::type
+        {};
+        typedef cc::SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Michael_dyn_less > SplitList_Michael_HP_dyn_less;
+        typedef cc::SplitListMap< cds::gc::DHP, Key, Value, traits_SplitList_Michael_dyn_less > SplitList_Michael_DHP_dyn_less;
+        typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value, traits_SplitList_Michael_dyn_less >> SplitList_Michael_NOGC_dyn_less;
+        typedef cc::SplitListMap< rcu_gpi, Key, Value, traits_SplitList_Michael_dyn_less > SplitList_Michael_RCU_GPI_dyn_less;
+        typedef cc::SplitListMap< rcu_gpb, Key, Value, traits_SplitList_Michael_dyn_less > SplitList_Michael_RCU_GPB_dyn_less;
+        typedef cc::SplitListMap< rcu_gpt, Key, Value, traits_SplitList_Michael_dyn_less > SplitList_Michael_RCU_GPT_dyn_less;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef cc::SplitListMap< rcu_shb, Key, Value, traits_SplitList_Michael_dyn_less > SplitList_Michael_RCU_SHB_dyn_less;
+        typedef cc::SplitListMap< rcu_sht, Key, Value, traits_SplitList_Michael_dyn_less > SplitList_Michael_RCU_SHT_dyn_less;
+#endif
+
+
+        struct traits_SplitList_Michael_dyn_less_seqcst: public cc::split_list::make_traits<
+                cc::split_list::ordered_list<cc::michael_list_tag>
+                ,co::hash< hash >
+                ,co::memory_model< co::v::sequential_consistent >
+                ,cc::split_list::ordered_list_traits<
+                    typename cc::michael_list::make_traits<
+                        co::less< less >
+                        ,co::memory_model< co::v::sequential_consistent >
+                    >::type
+                >
+            >::type
+        {};
+        typedef cc::SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Michael_dyn_less_seqcst > SplitList_Michael_HP_dyn_less_seqcst;
+        typedef cc::SplitListMap< cds::gc::DHP, Key, Value, traits_SplitList_Michael_dyn_less_seqcst > SplitList_Michael_DHP_dyn_less_seqcst;
+        typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value, traits_SplitList_Michael_dyn_less_seqcst >> SplitList_Michael_NOGC_dyn_less_seqcst;
+        typedef cc::SplitListMap< rcu_gpi, Key, Value, traits_SplitList_Michael_dyn_less_seqcst > SplitList_Michael_RCU_GPI_dyn_less_seqcst;
+        typedef cc::SplitListMap< rcu_gpb, Key, Value, traits_SplitList_Michael_dyn_less_seqcst > SplitList_Michael_RCU_GPB_dyn_less_seqcst;
+        typedef cc::SplitListMap< rcu_gpt, Key, Value, traits_SplitList_Michael_dyn_less_seqcst > SplitList_Michael_RCU_GPT_dyn_less_seqcst;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef cc::SplitListMap< rcu_shb, Key, Value, traits_SplitList_Michael_dyn_less_seqcst > SplitList_Michael_RCU_SHB_dyn_less_seqcst;
+        typedef cc::SplitListMap< rcu_sht, Key, Value, traits_SplitList_Michael_dyn_less_seqcst > SplitList_Michael_RCU_SHT_dyn_less_seqcst;
+#endif
+
+        struct traits_SplitList_Michael_st_less: public cc::split_list::make_traits<
+                cc::split_list::ordered_list<cc::michael_list_tag>
+                ,cc::split_list::dynamic_bucket_table< false >
+                ,co::hash< hash >
+                ,cc::split_list::ordered_list_traits<
+                    typename cc::michael_list::make_traits<
+                        co::less< less >
+                    >::type
+                >
+            >::type
+        {};
+        typedef cc::SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Michael_st_less > SplitList_Michael_HP_st_less;
+        typedef cc::SplitListMap< cds::gc::DHP, Key, Value, traits_SplitList_Michael_st_less > SplitList_Michael_DHP_st_less;
+        typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value, traits_SplitList_Michael_st_less >> SplitList_Michael_NOGC_st_less;
+        typedef cc::SplitListMap< rcu_gpi, Key, Value, traits_SplitList_Michael_st_less > SplitList_Michael_RCU_GPI_st_less;
+        typedef cc::SplitListMap< rcu_gpb, Key, Value, traits_SplitList_Michael_st_less > SplitList_Michael_RCU_GPB_st_less;
+        typedef cc::SplitListMap< rcu_gpt, Key, Value, traits_SplitList_Michael_st_less > SplitList_Michael_RCU_GPT_st_less;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef cc::SplitListMap< rcu_shb, Key, Value, traits_SplitList_Michael_st_less > SplitList_Michael_RCU_SHB_st_less;
+        typedef cc::SplitListMap< rcu_sht, Key, Value, traits_SplitList_Michael_st_less > SplitList_Michael_RCU_SHT_st_less;
+#endif
+
+        struct traits_SplitList_Michael_st_less_stat : traits_SplitList_Michael_st_less
+        {
+            typedef cc::split_list::stat<> stat;
+        };
+        typedef cc::SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Michael_st_less_stat > SplitList_Michael_HP_st_less_stat;
+        typedef cc::SplitListMap< cds::gc::DHP, Key, Value, traits_SplitList_Michael_st_less_stat > SplitList_Michael_DHP_st_less_stat;
+        typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value, traits_SplitList_Michael_st_less_stat >> SplitList_Michael_NOGC_st_less_stat;
+        typedef cc::SplitListMap< rcu_gpi, Key, Value, traits_SplitList_Michael_st_less_stat > SplitList_Michael_RCU_GPI_st_less_stat;
+        typedef cc::SplitListMap< rcu_gpb, Key, Value, traits_SplitList_Michael_st_less_stat > SplitList_Michael_RCU_GPB_st_less_stat;
+        typedef cc::SplitListMap< rcu_gpt, Key, Value, traits_SplitList_Michael_st_less_stat > SplitList_Michael_RCU_GPT_st_less_stat;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef cc::SplitListMap< rcu_shb, Key, Value, traits_SplitList_Michael_st_less_stat > SplitList_Michael_RCU_SHB_st_less_stat;
+        typedef cc::SplitListMap< rcu_sht, Key, Value, traits_SplitList_Michael_st_less_stat > SplitList_Michael_RCU_SHT_st_less_stat;
+#endif
+
+
+        class traits_SplitList_Michael_st_less_seqcst: public cc::split_list::make_traits<
+                cc::split_list::ordered_list<cc::michael_list_tag>
+                ,co::hash< hash >
+                ,cc::split_list::dynamic_bucket_table< false >
+                ,co::memory_model< co::v::sequential_consistent >
+                ,cc::split_list::ordered_list_traits<
+                    typename cc::michael_list::make_traits<
+                        co::less< less >
+                        ,co::memory_model< co::v::sequential_consistent >
+                    >::type
+                >
+            >::type
+        {};
+        typedef cc::SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Michael_st_less_seqcst > SplitList_Michael_HP_st_less_seqcst;
+        typedef cc::SplitListMap< cds::gc::DHP, Key, Value, traits_SplitList_Michael_st_less_seqcst > SplitList_Michael_DHP_st_less_seqcst;
+        typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value, traits_SplitList_Michael_st_less_seqcst >> SplitList_Michael_NOGC_st_less_seqcst;
+        typedef cc::SplitListMap< rcu_gpi, Key, Value, traits_SplitList_Michael_st_less_seqcst > SplitList_Michael_RCU_GPI_st_less_seqcst;
+        typedef cc::SplitListMap< rcu_gpb, Key, Value, traits_SplitList_Michael_st_less_seqcst > SplitList_Michael_RCU_GPB_st_less_seqcst;
+        typedef cc::SplitListMap< rcu_gpt, Key, Value, traits_SplitList_Michael_st_less_seqcst > SplitList_Michael_RCU_GPT_st_less_seqcst;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef cc::SplitListMap< rcu_shb, Key, Value, traits_SplitList_Michael_st_less_seqcst > SplitList_Michael_RCU_SHB_st_less_seqcst;
+        typedef cc::SplitListMap< rcu_sht, Key, Value, traits_SplitList_Michael_st_less_seqcst > SplitList_Michael_RCU_SHT_st_less_seqcst;
+#endif
+
+
+        // ***************************************************************************
+        // SplitListMap based on LazyKVList
+
+        struct SplitList_Lazy_dyn_cmp :
+            public cc::split_list::make_traits<
+                cc::split_list::ordered_list<cc::lazy_list_tag>
+                ,co::hash< hash >
+                ,cc::split_list::ordered_list_traits<
+                    typename cc::lazy_list::make_traits<
+                        co::compare< compare >
+                    >::type
+                >
+            >::type
+        {};
+        typedef cc::SplitListMap< cds::gc::HP, Key, Value, SplitList_Lazy_dyn_cmp > SplitList_Lazy_HP_dyn_cmp;
+        typedef cc::SplitListMap< cds::gc::DHP, Key, Value, SplitList_Lazy_dyn_cmp > SplitList_Lazy_DHP_dyn_cmp;
+        typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value, SplitList_Lazy_dyn_cmp >> SplitList_Lazy_NOGC_dyn_cmp;
+        typedef cc::SplitListMap< rcu_gpi, Key, Value, SplitList_Lazy_dyn_cmp > SplitList_Lazy_RCU_GPI_dyn_cmp;
+        typedef cc::SplitListMap< rcu_gpb, Key, Value, SplitList_Lazy_dyn_cmp > SplitList_Lazy_RCU_GPB_dyn_cmp;
+        typedef cc::SplitListMap< rcu_gpt, Key, Value, SplitList_Lazy_dyn_cmp > SplitList_Lazy_RCU_GPT_dyn_cmp;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef cc::SplitListMap< rcu_shb, Key, Value, SplitList_Lazy_dyn_cmp > SplitList_Lazy_RCU_SHB_dyn_cmp;
+        typedef cc::SplitListMap< rcu_sht, Key, Value, SplitList_Lazy_dyn_cmp > SplitList_Lazy_RCU_SHT_dyn_cmp;
+#endif
+
+        struct SplitList_Lazy_dyn_cmp_stat : public SplitList_Lazy_dyn_cmp
+        {
+            typedef cc::split_list::stat<> stat;
+        };
+        typedef cc::SplitListMap< cds::gc::HP, Key, Value, SplitList_Lazy_dyn_cmp_stat > SplitList_Lazy_HP_dyn_cmp_stat;
+        typedef cc::SplitListMap< cds::gc::DHP, Key, Value, SplitList_Lazy_dyn_cmp_stat > SplitList_Lazy_DHP_dyn_cmp_stat;
+        typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value, SplitList_Lazy_dyn_cmp_stat >> SplitList_Lazy_NOGC_dyn_cmp_stat;
+        typedef cc::SplitListMap< rcu_gpi, Key, Value, SplitList_Lazy_dyn_cmp_stat > SplitList_Lazy_RCU_GPI_dyn_cmp_stat;
+        typedef cc::SplitListMap< rcu_gpb, Key, Value, SplitList_Lazy_dyn_cmp_stat > SplitList_Lazy_RCU_GPB_dyn_cmp_stat;
+        typedef cc::SplitListMap< rcu_gpt, Key, Value, SplitList_Lazy_dyn_cmp_stat > SplitList_Lazy_RCU_GPT_dyn_cmp_stat;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef cc::SplitListMap< rcu_shb, Key, Value, SplitList_Lazy_dyn_cmp_stat > SplitList_Lazy_RCU_SHB_dyn_cmp_stat;
+        typedef cc::SplitListMap< rcu_sht, Key, Value, SplitList_Lazy_dyn_cmp_stat > SplitList_Lazy_RCU_SHT_dyn_cmp_stat;
+#endif
+
+        struct SplitList_Lazy_dyn_cmp_seqcst :
+            public cc::split_list::make_traits<
+                cc::split_list::ordered_list<cc::lazy_list_tag>
+                ,co::hash< hash >
+                ,co::memory_model< co::v::sequential_consistent >
+                ,cc::split_list::ordered_list_traits<
+                    typename cc::lazy_list::make_traits<
+                        co::compare< compare >
+                        ,co::memory_model< co::v::sequential_consistent >
+                    >::type
+                >
+            >::type
+        {};
+        typedef cc::SplitListMap< cds::gc::HP, Key, Value, SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_HP_dyn_cmp_seqcst;
+        typedef cc::SplitListMap< cds::gc::DHP, Key, Value, SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_DHP_dyn_cmp_seqcst;
+        typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value, SplitList_Lazy_dyn_cmp_seqcst >> SplitList_Lazy_NOGC_dyn_cmp_seqcst;
+        typedef cc::SplitListMap< rcu_gpi, Key, Value, SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_RCU_GPI_dyn_cmp_seqcst;
+        typedef cc::SplitListMap< rcu_gpb, Key, Value, SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_RCU_GPB_dyn_cmp_seqcst;
+        typedef cc::SplitListMap< rcu_gpt, Key, Value, SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_RCU_GPT_dyn_cmp_seqcst;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef cc::SplitListMap< rcu_shb, Key, Value, SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_RCU_SHB_dyn_cmp_seqcst;
+        typedef cc::SplitListMap< rcu_sht, Key, Value, SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_RCU_SHT_dyn_cmp_seqcst;
+#endif
+
+        struct SplitList_Lazy_st_cmp :
+            public cc::split_list::make_traits<
+                cc::split_list::ordered_list<cc::lazy_list_tag>
+                ,cc::split_list::dynamic_bucket_table< false >
+                ,co::hash< hash >
+                ,cc::split_list::ordered_list_traits<
+                    typename cc::lazy_list::make_traits<
+                        co::compare< compare >
+                    >::type
+                >
+            >::type
+        {};
+        typedef cc::SplitListMap< cds::gc::HP, Key, Value, SplitList_Lazy_st_cmp > SplitList_Lazy_HP_st_cmp;
+        typedef cc::SplitListMap< cds::gc::DHP, Key, Value, SplitList_Lazy_st_cmp > SplitList_Lazy_DHP_st_cmp;
+        typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value, SplitList_Lazy_st_cmp >> SplitList_Lazy_NOGC_st_cmp;
+        typedef cc::SplitListMap< rcu_gpi, Key, Value, SplitList_Lazy_st_cmp > SplitList_Lazy_RCU_GPI_st_cmp;
+        typedef cc::SplitListMap< rcu_gpb, Key, Value, SplitList_Lazy_st_cmp > SplitList_Lazy_RCU_GPB_st_cmp;
+        typedef cc::SplitListMap< rcu_gpt, Key, Value, SplitList_Lazy_st_cmp > SplitList_Lazy_RCU_GPT_st_cmp;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef cc::SplitListMap< rcu_shb, Key, Value, SplitList_Lazy_st_cmp > SplitList_Lazy_RCU_SHB_st_cmp;
+        typedef cc::SplitListMap< rcu_sht, Key, Value, SplitList_Lazy_st_cmp > SplitList_Lazy_RCU_SHT_st_cmp;
+#endif
+
+
+        struct SplitList_Lazy_st_cmp_seqcst :
+            public cc::split_list::make_traits<
+                cc::split_list::ordered_list<cc::lazy_list_tag>
+                ,co::hash< hash >
+                ,cc::split_list::dynamic_bucket_table< false >
+                ,co::memory_model< co::v::sequential_consistent >
+                ,cc::split_list::ordered_list_traits<
+                    typename cc::lazy_list::make_traits<
+                        co::compare< compare >
+                        ,co::memory_model< co::v::sequential_consistent >
+                    >::type
+                >
+            >::type
+        {};
+        typedef cc::SplitListMap< cds::gc::HP, Key, Value, SplitList_Lazy_st_cmp_seqcst> SplitList_Lazy_HP_st_cmp_seqcst;
+        typedef cc::SplitListMap< cds::gc::DHP, Key, Value, SplitList_Lazy_st_cmp_seqcst> SplitList_Lazy_DHP_st_cmp_seqcst;
+        typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value, SplitList_Lazy_st_cmp_seqcst >> SplitList_Lazy_NOGC_st_cmp_seqcst;
+        typedef cc::SplitListMap< rcu_gpi, Key, Value, SplitList_Lazy_st_cmp_seqcst> SplitList_Lazy_RCU_GPI_st_cmp_seqcst;
+        typedef cc::SplitListMap< rcu_gpb, Key, Value, SplitList_Lazy_st_cmp_seqcst> SplitList_Lazy_RCU_GPB_st_cmp_seqcst;
+        typedef cc::SplitListMap< rcu_gpt, Key, Value, SplitList_Lazy_st_cmp_seqcst> SplitList_Lazy_RCU_GPT_st_cmp_seqcst;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef cc::SplitListMap< rcu_shb, Key, Value, SplitList_Lazy_st_cmp_seqcst> SplitList_Lazy_RCU_SHB_st_cmp_seqcst;
+        typedef cc::SplitListMap< rcu_sht, Key, Value, SplitList_Lazy_st_cmp_seqcst> SplitList_Lazy_RCU_SHT_st_cmp_seqcst;
+#endif
+
+
+        struct SplitList_Lazy_dyn_less :
+            public cc::split_list::make_traits<
+                cc::split_list::ordered_list<cc::lazy_list_tag>
+                ,co::hash< hash >
+                ,cc::split_list::ordered_list_traits<
+                    typename cc::lazy_list::make_traits<
+                        co::less< less >
+                    >::type
+                >
+            >::type
+        {};
+        typedef cc::SplitListMap< cds::gc::HP, Key, Value, SplitList_Lazy_dyn_less > SplitList_Lazy_HP_dyn_less;
+        typedef cc::SplitListMap< cds::gc::DHP, Key, Value, SplitList_Lazy_dyn_less > SplitList_Lazy_DHP_dyn_less;
+        typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value, SplitList_Lazy_dyn_less >> SplitList_Lazy_NOGC_dyn_less;
+        typedef cc::SplitListMap< rcu_gpi, Key, Value, SplitList_Lazy_dyn_less > SplitList_Lazy_RCU_GPI_dyn_less;
+        typedef cc::SplitListMap< rcu_gpb, Key, Value, SplitList_Lazy_dyn_less > SplitList_Lazy_RCU_GPB_dyn_less;
+        typedef cc::SplitListMap< rcu_gpt, Key, Value, SplitList_Lazy_dyn_less > SplitList_Lazy_RCU_GPT_dyn_less;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef cc::SplitListMap< rcu_shb, Key, Value, SplitList_Lazy_dyn_less > SplitList_Lazy_RCU_SHB_dyn_less;
+        typedef cc::SplitListMap< rcu_sht, Key, Value, SplitList_Lazy_dyn_less > SplitList_Lazy_RCU_SHT_dyn_less;
+#endif
+
+        struct SplitList_Lazy_dyn_less_seqcst:
+            public cc::split_list::make_traits<
+                cc::split_list::ordered_list<cc::lazy_list_tag>
+                ,co::hash< hash >
+                ,co::memory_model< co::v::sequential_consistent >
+                ,cc::split_list::ordered_list_traits<
+                    typename cc::lazy_list::make_traits<
+                        co::less< less >
+                        ,co::memory_model< co::v::sequential_consistent >
+                    >::type
+                >
+            >::type
+        {};
+        typedef cc::SplitListMap< cds::gc::HP, Key, Value, SplitList_Lazy_dyn_less_seqcst > SplitList_Lazy_HP_dyn_less_seqcst;
+        typedef cc::SplitListMap< cds::gc::DHP, Key, Value, SplitList_Lazy_dyn_less_seqcst > SplitList_Lazy_DHP_dyn_less_seqcst;
+        typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value, SplitList_Lazy_dyn_less_seqcst >> SplitList_Lazy_NOGC_dyn_less_seqcst;
+        typedef cc::SplitListMap< rcu_gpi, Key, Value, SplitList_Lazy_dyn_less_seqcst > SplitList_Lazy_RCU_GPI_dyn_less_seqcst;
+        typedef cc::SplitListMap< rcu_gpb, Key, Value, SplitList_Lazy_dyn_less_seqcst > SplitList_Lazy_RCU_GPB_dyn_less_seqcst;
+        typedef cc::SplitListMap< rcu_gpt, Key, Value, SplitList_Lazy_dyn_less_seqcst > SplitList_Lazy_RCU_GPT_dyn_less_seqcst;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef cc::SplitListMap< rcu_shb, Key, Value, SplitList_Lazy_dyn_less_seqcst > SplitList_Lazy_RCU_SHB_dyn_less_seqcst;
+        typedef cc::SplitListMap< rcu_sht, Key, Value, SplitList_Lazy_dyn_less_seqcst > SplitList_Lazy_RCU_SHT_dyn_less_seqcst;
+#endif
+
+        struct SplitList_Lazy_st_less :
+            public cc::split_list::make_traits<
+                cc::split_list::ordered_list<cc::lazy_list_tag>
+                ,cc::split_list::dynamic_bucket_table< false >
+                ,co::hash< hash >
+                ,cc::split_list::ordered_list_traits<
+                    typename cc::lazy_list::make_traits<
+                        co::less< less >
+                    >::type
+                >
+            >::type
+        {};
+        typedef cc::SplitListMap< cds::gc::HP, Key, Value, SplitList_Lazy_st_less > SplitList_Lazy_HP_st_less;
+        typedef cc::SplitListMap< cds::gc::DHP, Key, Value, SplitList_Lazy_st_less > SplitList_Lazy_DHP_st_less;
+        typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value, SplitList_Lazy_st_less >> SplitList_Lazy_NOGC_st_less;
+        typedef cc::SplitListMap< rcu_gpi, Key, Value, SplitList_Lazy_st_less > SplitList_Lazy_RCU_GPI_st_less;
+        typedef cc::SplitListMap< rcu_gpb, Key, Value, SplitList_Lazy_st_less > SplitList_Lazy_RCU_GPB_st_less;
+        typedef cc::SplitListMap< rcu_gpt, Key, Value, SplitList_Lazy_st_less > SplitList_Lazy_RCU_GPT_st_less;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef cc::SplitListMap< rcu_shb, Key, Value, SplitList_Lazy_st_less > SplitList_Lazy_RCU_SHB_st_less;
+        typedef cc::SplitListMap< rcu_sht, Key, Value, SplitList_Lazy_st_less > SplitList_Lazy_RCU_SHT_st_less;
+#endif
+
+        struct SplitList_Lazy_st_less_stat : public SplitList_Lazy_st_less
+        {
+            typedef cc::split_list::stat<> stat;
+        };
+        typedef cc::SplitListMap< cds::gc::HP, Key, Value, SplitList_Lazy_st_less_stat > SplitList_Lazy_HP_st_less_stat;
+        typedef cc::SplitListMap< cds::gc::DHP, Key, Value, SplitList_Lazy_st_less_stat > SplitList_Lazy_DHP_st_less_stat;
+        typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value, SplitList_Lazy_st_less_stat >> SplitList_Lazy_NOGC_st_less_stat;
+        typedef cc::SplitListMap< rcu_gpi, Key, Value, SplitList_Lazy_st_less_stat > SplitList_Lazy_RCU_GPI_st_less_stat;
+        typedef cc::SplitListMap< rcu_gpb, Key, Value, SplitList_Lazy_st_less_stat > SplitList_Lazy_RCU_GPB_st_less_stat;
+        typedef cc::SplitListMap< rcu_gpt, Key, Value, SplitList_Lazy_st_less_stat > SplitList_Lazy_RCU_GPT_st_less_stat;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef cc::SplitListMap< rcu_shb, Key, Value, SplitList_Lazy_st_less_stat > SplitList_Lazy_RCU_SHB_st_less_stat;
+        typedef cc::SplitListMap< rcu_sht, Key, Value, SplitList_Lazy_st_less_stat > SplitList_Lazy_RCU_SHT_st_less_stat;
+#endif
+
+        struct SplitList_Lazy_st_less_seqcst :
+            public cc::split_list::make_traits<
+                cc::split_list::ordered_list<cc::lazy_list_tag>
+                ,co::hash< hash >
+                ,cc::split_list::dynamic_bucket_table< false >
+                ,co::memory_model< co::v::sequential_consistent >
+                ,cc::split_list::ordered_list_traits<
+                    typename cc::lazy_list::make_traits<
+                        co::less< less >
+                        ,co::memory_model< co::v::sequential_consistent >
+                    >::type
+                >
+            >::type
+        {};
+        typedef cc::SplitListMap< cds::gc::HP, Key, Value, SplitList_Lazy_st_less_seqcst > SplitList_Lazy_HP_st_less_seqcst;
+        typedef cc::SplitListMap< cds::gc::DHP, Key, Value, SplitList_Lazy_st_less_seqcst > SplitList_Lazy_DHP_st_less_seqcst;
+        typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value, SplitList_Lazy_st_less_seqcst >> SplitList_Lazy_NOGC_st_less_seqcst;
+        typedef cc::SplitListMap< rcu_gpi, Key, Value, SplitList_Lazy_st_less_seqcst > SplitList_Lazy_RCU_GPI_st_less_seqcst;
+        typedef cc::SplitListMap< rcu_gpb, Key, Value, SplitList_Lazy_st_less_seqcst > SplitList_Lazy_RCU_GPB_st_less_seqcst;
+        typedef cc::SplitListMap< rcu_gpt, Key, Value, SplitList_Lazy_st_less_seqcst > SplitList_Lazy_RCU_GPT_st_less_seqcst;
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef cc::SplitListMap< rcu_shb, Key, Value, SplitList_Lazy_st_less_seqcst > SplitList_Lazy_RCU_SHB_st_less_seqcst;
+        typedef cc::SplitListMap< rcu_sht, Key, Value, SplitList_Lazy_st_less_seqcst > SplitList_Lazy_RCU_SHT_st_less_seqcst;
+#endif
+    };
+
+    template <typename GC, typename K, typename T, typename Traits >
+    static inline void print_stat( cc::SplitListMap< GC, K, T, Traits > const& m )
+    {
+        CPPUNIT_MSG( m.statistics() );
+    }
+
+}   // namespace map2
+
+#endif // ifndef CDSUNIT_MAP_TYPE_SPLIT_LIST_H
diff --git a/tests/unit/map2/map_type_std.h b/tests/unit/map2/map_type_std.h
new file mode 100644 (file)
index 0000000..3022896
--- /dev/null
@@ -0,0 +1,32 @@
+//$$CDS-header$$
+
+#ifndef CDSUNIT_MAP_TYPE_STD_H
+#define CDSUNIT_MAP_TYPE_STD_H
+
+#include "map2/map_type.h"
+
+#include "map2/std_map.h"
+#include "map2/std_hash_map.h"
+
+#include "lock/nolock.h"
+
+namespace map2 {
+
+    struct std_implementation_tag;
+
+    template <typename Key, typename Value>
+    struct map_type< std_implementation_tag, Key, Value >: public map_type_base< Key, Value >
+    {
+        typedef map_type_base< Key, Value > base_class;
+        typedef typename base_class::compare    compare;
+        typedef typename base_class::less       less;
+
+        typedef StdMap< Key, Value, cds::sync::spin >     StdMap_Spin;
+        typedef StdMap< Key, Value, lock::NoLock>         StdMap_NoLock;
+
+        typedef StdHashMap< Key, Value, cds::sync::spin > StdHashMap_Spin;
+        typedef StdHashMap< Key, Value, lock::NoLock >    StdHashMap_NoLock;
+    };
+}   // namespace map2
+
+#endif // ifndef CDSUNIT_MAP_TYPE_STD_H
diff --git a/tests/unit/map2/map_type_striped.h b/tests/unit/map2/map_type_striped.h
new file mode 100644 (file)
index 0000000..a1e5a1e
--- /dev/null
@@ -0,0 +1,234 @@
+//$$CDS-header$$
+
+#ifndef CDSUNIT_MAP_TYPE_MICHAEL_H
+#define CDSUNIT_MAP_TYPE_MICHAEL_H
+
+#include "map2/map_type.h"
+#include <cds/container/striped_map/std_list.h>
+#include <cds/container/striped_map/std_map.h>
+#include <cds/container/striped_map/std_hash_map.h>
+
+#include <boost/version.hpp>
+#if BOOST_VERSION >= 104800
+#   include <cds/container/striped_map/boost_list.h>
+#   include <cds/container/striped_map/boost_slist.h>
+#   include <cds/container/striped_map/boost_map.h>
+#   include <cds/container/striped_map/boost_flat_map.h>
+#endif
+#include <cds/container/striped_map/boost_unordered_map.h>
+#include <cds/container/striped_map.h>
+
+namespace map2 {
+
+    template <typename Key, typename Value>
+    struct map_type< cc::striped_set::implementation_tag, Key, Value >: public map_type_base< Key, Value >
+    {
+        typedef map_type_base< Key, Value > base_class;
+        typedef typename base_class::compare    compare;
+        typedef typename base_class::less       less;
+        typedef typename base_class::equal_to   equal_to;
+        typedef typename base_class::key_hash   key_hash;
+        typedef typename base_class::hash       hash;
+        typedef typename base_class::hash2      hash2;
+
+        // for sequential containers
+        template <class BucketEntry, typename... Options>
+        class StripedHashMap_seq:
+            public cc::StripedMap< BucketEntry,
+                co::mutex_policy< cc::striped_set::striping<> >
+                ,co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
+                , Options...
+            >
+        {
+            typedef cc::StripedMap< BucketEntry,
+                co::mutex_policy< cc::striped_set::striping<> >
+                ,co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
+                , Options...
+            > base_class;
+            typedef typename base_class::resizing_policy resizing_policy_t;
+
+            resizing_policy_t   m_placeHolder;
+        public:
+            StripedHashMap_seq( size_t nCapacity, size_t nLoadFactor )
+                : base_class( nCapacity / nLoadFactor / 16, *(new(&m_placeHolder) resizing_policy_t( nLoadFactor )) )
+            {}
+        };
+
+        // for non-sequential ordered containers
+        template <class BucketEntry, typename... Options>
+        class StripedHashMap_ord:
+            public cc::StripedMap< BucketEntry,
+                co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
+                ,co::mutex_policy< cc::striped_set::striping<> >
+                , Options...
+            >
+        {
+            typedef cc::StripedMap< BucketEntry,
+               co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
+                ,co::mutex_policy< cc::striped_set::striping<> >
+                , Options...
+            > base_class;
+            typedef typename base_class::resizing_policy resizing_policy_t;
+
+            resizing_policy_t   m_placeHolder;
+        public:
+            StripedHashMap_ord( size_t /*nCapacity*/, size_t nLoadFactor )
+                : base_class( 0, *(new(&m_placeHolder) resizing_policy_t( nLoadFactor * 1024 )) )
+            {}
+        };
+
+
+        typedef StripedHashMap_seq<
+            std::list< std::pair< Key const, Value > >
+            , co::hash< hash2 >
+            , co::less< less >
+        > StripedMap_list;
+
+#   if (CDS_COMPILER == CDS_COMPILER_MSVC || (CDS_COMPILER == CDS_COMPILER_INTEL && CDS_OS_INTERFACE == CDS_OSI_WINDOWS)) && _MSC_VER < 1600
+        typedef StripedHashMap_ord<
+            stdext::hash_map< Key, Value, stdext::hash_compare<Key, less > >
+            , co::hash< hash2 >
+        > StripedMap_hashmap;
+#   else
+        typedef StripedHashMap_ord<
+            std::unordered_map< Key, Value, hash, equal_to >
+            , co::hash< hash2 >
+        > StripedMap_hashmap;
+#   endif
+
+        typedef StripedHashMap_ord<
+            std::map< Key, Value, less >
+            , co::hash< hash2 >
+        > StripedMap_map;
+
+        typedef StripedHashMap_ord<
+            boost::unordered_map< Key, Value, hash, equal_to >
+            , co::hash< hash2 >
+        > StripedMap_boost_unordered_map;
+
+#   if BOOST_VERSION >= 104800
+        typedef StripedHashMap_seq<
+            boost::container::slist< std::pair< Key const, Value > >
+            , co::hash< hash2 >
+            , co::less< less >
+        > StripedMap_slist;
+
+        typedef StripedHashMap_seq<
+            boost::container::list< std::pair< Key const, Value > >
+            , co::hash< hash2 >
+            , co::less< less >
+        > StripedMap_boost_list;
+
+        typedef StripedHashMap_ord<
+            boost::container::map< Key, Value, less >
+            , co::hash< hash2 >
+        > StripedMap_boost_map;
+
+        typedef StripedHashMap_ord<
+            boost::container::flat_map< Key, Value, less >
+            , co::hash< hash2 >
+        > StripedMap_boost_flat_map;
+#   endif  // BOOST_VERSION >= 104800
+
+
+        // ***************************************************************************
+        // RefinableHashMap
+
+        // for sequential containers
+        template <class BucketEntry, typename... Options>
+        class RefinableHashMap_seq:
+            public cc::StripedMap< BucketEntry,
+                co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
+                ,co::mutex_policy< cc::striped_set::refinable<> >
+                , Options...
+            >
+        {
+            typedef cc::StripedMap< BucketEntry,
+               co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
+                ,co::mutex_policy< cc::striped_set::refinable<> >
+                , Options...
+            > base_class;
+            typedef typename base_class::resizing_policy resizing_policy_t;
+
+            resizing_policy_t   m_placeHolder;
+        public:
+            RefinableHashMap_seq( size_t nCapacity, size_t nLoadFactor )
+                : base_class( nCapacity / nLoadFactor / 16, *(new(&m_placeHolder) resizing_policy_t( nLoadFactor )) )
+            {}
+        };
+
+        // for non-sequential ordered containers
+        template <class BucketEntry, typename... Options>
+        class RefinableHashMap_ord:
+            public cc::StripedMap< BucketEntry,
+                co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
+                ,co::mutex_policy< cc::striped_set::refinable<> >
+                , Options...
+            >
+        {
+            typedef cc::StripedMap< BucketEntry,
+               co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
+                ,co::mutex_policy< cc::striped_set::refinable<> >
+                , Options...
+            > base_class;
+            typedef typename base_class::resizing_policy resizing_policy_t;
+
+            resizing_policy_t   m_placeHolder;
+        public:
+            RefinableHashMap_ord( size_t /*nCapacity*/, size_t nLoadFactor )
+                : base_class( 0, *(new(&m_placeHolder) resizing_policy_t( nLoadFactor * 1024 )) )
+            {}
+        };
+
+
+        typedef RefinableHashMap_seq<
+            std::list< std::pair< Key const, Value > >
+            , co::hash< hash2 >
+            , co::less< less >
+        > RefinableMap_list;
+
+#   if BOOST_VERSION >= 104800
+        typedef RefinableHashMap_seq<
+            boost::container::slist< std::pair< Key const, Value > >
+            , co::hash< hash2 >
+            , co::less< less >
+        > RefinableMap_slist;
+#   endif
+
+        typedef RefinableHashMap_ord<
+            std::map< Key, Value, less >
+            , co::hash< hash2 >
+        > RefinableMap_map;
+
+        typedef RefinableHashMap_ord<
+            std::unordered_map< Key, Value, hash, equal_to >
+            , co::hash< hash2 >
+        > RefinableMap_hashmap;
+
+        typedef RefinableHashMap_ord<
+            boost::unordered_map< Key, Value, hash, equal_to >
+            , co::hash< hash2 >
+        > RefinableMap_boost_unordered_map;
+
+#   if BOOST_VERSION >= 104800
+        typedef RefinableHashMap_seq<
+            boost::container::list< std::pair< Key const, Value > >
+            , co::hash< hash2 >
+            , co::less< less >
+        > RefinableMap_boost_list;
+
+        typedef RefinableHashMap_ord<
+            boost::container::map< Key, Value, less >
+            , co::hash< hash2 >
+        > RefinableMap_boost_map;
+
+        typedef RefinableHashMap_ord<
+            boost::container::flat_map< Key, Value, less >
+            , co::hash< hash2 >
+        > RefinableMap_boost_flat_map;
+#   endif // #if BOOST_VERSION >= 104800
+
+    };
+}   // namespace map2
+
+#endif // ifndef CDSUNIT_MAP_TYPE_MICHAEL_H
diff --git a/tests/unit/map2/map_types.h b/tests/unit/map2/map_types.h
deleted file mode 100644 (file)
index 085bcad..0000000
+++ /dev/null
@@ -1,1966 +0,0 @@
-//$$CDS-header$$
-
-#ifndef CDSUNIT_MAP_TYPES_H
-#define CDSUNIT_MAP_TYPES_H
-
-#include <cds/urcu/general_instant.h>
-#include <cds/urcu/general_buffered.h>
-#include <cds/urcu/general_threaded.h>
-#include <cds/urcu/signal_buffered.h>
-#include <cds/urcu/signal_threaded.h>
-
-#include <cds/container/michael_kvlist_hp.h>
-#include <cds/container/michael_kvlist_dhp.h>
-#include <cds/container/michael_kvlist_rcu.h>
-#include <cds/container/michael_kvlist_nogc.h>
-
-#include <cds/container/lazy_kvlist_hp.h>
-#include <cds/container/lazy_kvlist_dhp.h>
-#include <cds/container/lazy_kvlist_rcu.h>
-#include <cds/container/lazy_kvlist_nogc.h>
-
-#include <cds/container/michael_map.h>
-#include <cds/container/michael_map_rcu.h>
-#include <cds/container/michael_map_nogc.h>
-
-#include <cds/container/split_list_map.h>
-#include <cds/container/split_list_map_rcu.h>
-#include <cds/container/split_list_map_nogc.h>
-
-#include <cds/container/striped_map/std_list.h>
-#include <cds/container/striped_map/std_map.h>
-#include <cds/container/striped_map/std_hash_map.h>
-#include <cds/container/cuckoo_map.h>
-
-#include <cds/container/skip_list_map_hp.h>
-#include <cds/container/skip_list_map_dhp.h>
-#include <cds/container/skip_list_map_rcu.h>
-#include <cds/container/skip_list_map_nogc.h>
-
-#include <cds/container/ellen_bintree_map_rcu.h>
-#include <cds/container/ellen_bintree_map_hp.h>
-#include <cds/container/ellen_bintree_map_dhp.h>
-
-#include <cds/sync/pool_monitor.h>
-#include <cds/container/bronson_avltree_map_rcu.h>
-
-#include <boost/version.hpp>
-#if BOOST_VERSION >= 104800
-#   include <cds/container/striped_map/boost_list.h>
-#   include <cds/container/striped_map/boost_slist.h>
-#   include <cds/container/striped_map/boost_map.h>
-#   include <cds/container/striped_map/boost_flat_map.h>
-#endif
-#include <cds/container/striped_map/boost_unordered_map.h>
-#include <cds/container/striped_map.h>
-
-#include <cds/sync/spinlock.h>
-
-#include "cppunit/cppunit_mini.h"
-#include "lock/nolock.h"
-#include "map2/std_map.h"
-#include "map2/std_hash_map.h"
-#include "michael_alloc.h"
-#include "print_cuckoo_stat.h"
-#include "print_split_list_stat.h"
-#include "print_skip_list_stat.h"
-#include "print_ellenbintree_stat.h"
-#include "print_bronsonavltree_stat.h"
-#include "print_sync_monitor_stat.h"
-#include "ellen_bintree_update_desc_pool.h"
-
-namespace map2 {
-    namespace cc = cds::container;
-    namespace co = cds::opt;
-
-    typedef cds::urcu::gc< cds::urcu::general_instant<> >   rcu_gpi;
-    typedef cds::urcu::gc< cds::urcu::general_buffered<> >  rcu_gpb;
-    typedef cds::urcu::gc< cds::urcu::general_threaded<> >  rcu_gpt;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-    typedef cds::urcu::gc< cds::urcu::signal_buffered<> >  rcu_shb;
-    typedef cds::urcu::gc< cds::urcu::signal_threaded<> >  rcu_sht;
-#endif
-
-    template <typename Key>
-    struct cmp {
-        int operator ()(Key const& k1, Key const& k2) const
-        {
-            if ( std::less<Key>( k1, k2 ) )
-                return -1;
-            return std::less<Key>( k2, k1 ) ? 1 : 0;
-        }
-    };
-
-#define CDSUNIT_INT_COMPARE(t)  template <> struct cmp<t> { int operator()( t k1, t k2 ){ return (int)(k1 - k2); } }
-    CDSUNIT_INT_COMPARE(char);
-    CDSUNIT_INT_COMPARE(unsigned char);
-    CDSUNIT_INT_COMPARE(int);
-    CDSUNIT_INT_COMPARE(unsigned int);
-    CDSUNIT_INT_COMPARE(long);
-    CDSUNIT_INT_COMPARE(unsigned long);
-    CDSUNIT_INT_COMPARE(long long);
-    CDSUNIT_INT_COMPARE(unsigned long long);
-#undef CDSUNIT_INT_COMPARE
-
-    template <>
-    struct cmp<std::string>
-    {
-        int operator()(std::string const& s1, std::string const& s2)
-        {
-            return s1.compare( s2 );
-        }
-        int operator()(std::string const& s1, char const * s2)
-        {
-            return s1.compare( s2 );
-        }
-        int operator()(char const * s1, std::string const& s2)
-        {
-            return -s2.compare( s1 );
-        }
-    };
-
-    template <typename K, typename V, typename Traits>
-    class CuckooMap :
-        public cc::CuckooMap< K, V, Traits >
-    {
-    public:
-        typedef cc::CuckooMap< K, V, Traits > cuckoo_base_class;
-
-    public:
-        CuckooMap( size_t nCapacity, size_t nLoadFactor )
-            : cuckoo_base_class( nCapacity / (nLoadFactor * 16), (unsigned int) 4 )
-        {}
-
-        template <typename Q, typename Pred>
-        bool erase_with( Q const& key, Pred /*pred*/ )
-        {
-            return cuckoo_base_class::erase_with( key, typename std::conditional< cuckoo_base_class::c_isSorted, Pred, typename Pred::equal_to>::type() );
-        }
-    };
-
-    template <typename Key, typename Value>
-    struct MapTypes {
-        typedef co::v::hash<Key>    key_hash;
-        typedef std::less<Key>      less;
-        typedef cmp<Key>            compare;
-
-        struct equal_to {
-            bool operator()( Key const& k1, Key const& k2 ) const
-            {
-                return compare()( k1, k2 ) == 0;
-            }
-        };
-
-        struct hash: public key_hash
-        {
-            size_t operator()( Key const& k ) const
-            {
-                return key_hash::operator()( k );
-            }
-            template <typename Q>
-            size_t operator()( Q const& k ) const
-            {
-                return key_hash::operator()( k );
-            }
-        };
-
-        struct hash2: public key_hash
-        {
-            size_t operator()( Key const& k ) const
-            {
-                size_t seed = ~key_hash::operator ()( k );
-                boost::hash_combine( seed, k );
-                return seed;
-            }
-            template <typename Q>
-            size_t operator()( Q const& k ) const
-            {
-                size_t seed = ~key_hash::operator()( k );
-                boost::hash_combine( seed, k );
-                return seed;
-            }
-        };
-
-        // ***************************************************************************
-        // MichaelKVList
-
-        struct traits_MichaelList_cmp_stdAlloc :
-            public cc::michael_list::make_traits<
-                co::compare< compare >
-            >::type
-        {};
-        typedef cc::MichaelKVList< cds::gc::HP,  Key, Value, traits_MichaelList_cmp_stdAlloc > MichaelList_HP_cmp_stdAlloc;
-        typedef cc::MichaelKVList< cds::gc::DHP, Key, Value, traits_MichaelList_cmp_stdAlloc > MichaelList_DHP_cmp_stdAlloc;
-        typedef cc::MichaelKVList< cds::gc::nogc, Key, Value, traits_MichaelList_cmp_stdAlloc > MichaelList_NOGC_cmp_stdAlloc;
-        typedef cc::MichaelKVList< rcu_gpi, Key, Value, traits_MichaelList_cmp_stdAlloc > MichaelList_RCU_GPI_cmp_stdAlloc;
-        typedef cc::MichaelKVList< rcu_gpb, Key, Value, traits_MichaelList_cmp_stdAlloc > MichaelList_RCU_GPB_cmp_stdAlloc;
-        typedef cc::MichaelKVList< rcu_gpt, Key, Value, traits_MichaelList_cmp_stdAlloc > MichaelList_RCU_GPT_cmp_stdAlloc;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::MichaelKVList< rcu_shb, Key, Value, traits_MichaelList_cmp_stdAlloc > MichaelList_RCU_SHB_cmp_stdAlloc;
-        typedef cc::MichaelKVList< rcu_sht, Key, Value, traits_MichaelList_cmp_stdAlloc > MichaelList_RCU_SHT_cmp_stdAlloc;
-#endif
-
-        struct traits_MichaelList_cmp_stdAlloc_seqcst :
-            public cc::michael_list::make_traits<
-                co::compare< compare >
-                ,co::memory_model< co::v::sequential_consistent >
-            >::type
-        {};
-        typedef cc::MichaelKVList< cds::gc::HP,  Key, Value, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_HP_cmp_stdAlloc_seqcst;
-        typedef cc::MichaelKVList< cds::gc::DHP, Key, Value, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_DHP_cmp_stdAlloc_seqcst;
-        typedef cc::MichaelKVList< cds::gc::nogc, Key, Value, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_NOGC_cmp_stdAlloc_seqcst;
-        typedef cc::MichaelKVList< rcu_gpi, Key, Value, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_RCU_GPI_cmp_stdAlloc_seqcst;
-        typedef cc::MichaelKVList< rcu_gpb, Key, Value, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_RCU_GPB_cmp_stdAlloc_seqcst;
-        typedef cc::MichaelKVList< rcu_gpt, Key, Value, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_RCU_GPT_cmp_stdAlloc_seqcst;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::MichaelKVList< rcu_shb, Key, Value, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_RCU_SHB_cmp_stdAlloc_seqcst;
-        typedef cc::MichaelKVList< rcu_sht, Key, Value, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_RCU_SHT_cmp_stdAlloc_seqcst;
-#endif
-
-        struct traits_MichaelList_cmp_michaelAlloc :
-            public cc::michael_list::make_traits<
-                co::compare< compare >,
-                co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        {};
-        typedef cc::MichaelKVList< cds::gc::HP,  Key, Value, traits_MichaelList_cmp_michaelAlloc > MichaelList_HP_cmp_michaelAlloc;
-        typedef cc::MichaelKVList< cds::gc::DHP, Key, Value, traits_MichaelList_cmp_michaelAlloc > MichaelList_DHP_cmp_michaelAlloc;
-        typedef cc::MichaelKVList< cds::gc::nogc, Key, Value, traits_MichaelList_cmp_michaelAlloc > MichaelList_NOGC_cmp_michaelAlloc;
-        typedef cc::MichaelKVList< rcu_gpi, Key, Value, traits_MichaelList_cmp_michaelAlloc > MichaelList_RCU_GPI_cmp_michaelAlloc;
-        typedef cc::MichaelKVList< rcu_gpb, Key, Value, traits_MichaelList_cmp_michaelAlloc > MichaelList_RCU_GPB_cmp_michaelAlloc;
-        typedef cc::MichaelKVList< rcu_gpt, Key, Value, traits_MichaelList_cmp_michaelAlloc > MichaelList_RCU_GPT_cmp_michaelAlloc;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::MichaelKVList< rcu_shb, Key, Value, traits_MichaelList_cmp_michaelAlloc > MichaelList_RCU_SHB_cmp_michaelAlloc;
-        typedef cc::MichaelKVList< rcu_sht, Key, Value, traits_MichaelList_cmp_michaelAlloc > MichaelList_RCU_SHT_cmp_michaelAlloc;
-#endif
-
-        struct traits_MichaelList_less_stdAlloc :
-            public cc::michael_list::make_traits<
-                co::less< less >
-            >::type
-        {};
-        typedef cc::MichaelKVList< cds::gc::HP,  Key, Value, traits_MichaelList_less_stdAlloc > MichaelList_HP_less_stdAlloc;
-        typedef cc::MichaelKVList< cds::gc::DHP, Key, Value, traits_MichaelList_less_stdAlloc > MichaelList_DHP_less_stdAlloc;
-        typedef cc::MichaelKVList< cds::gc::nogc, Key, Value, traits_MichaelList_less_stdAlloc > MichaelList_NOGC_less_stdAlloc;
-        typedef cc::MichaelKVList< rcu_gpi, Key, Value, traits_MichaelList_less_stdAlloc > MichaelList_RCU_GPI_less_stdAlloc;
-        typedef cc::MichaelKVList< rcu_gpb, Key, Value, traits_MichaelList_less_stdAlloc > MichaelList_RCU_GPB_less_stdAlloc;
-        typedef cc::MichaelKVList< rcu_gpt, Key, Value, traits_MichaelList_less_stdAlloc > MichaelList_RCU_GPT_less_stdAlloc;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::MichaelKVList< rcu_shb, Key, Value, traits_MichaelList_less_stdAlloc > MichaelList_RCU_SHB_less_stdAlloc;
-        typedef cc::MichaelKVList< rcu_sht, Key, Value, traits_MichaelList_less_stdAlloc > MichaelList_RCU_SHT_less_stdAlloc;
-#endif
-
-        struct traits_MichaelList_less_stdAlloc_seqcst :
-            public cc::michael_list::make_traits<
-                co::less< less >
-                ,co::memory_model< co::v::sequential_consistent >
-            >::type
-        {};
-        typedef cc::MichaelKVList< cds::gc::HP,  Key, Value, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_HP_less_stdAlloc_seqcst;
-        typedef cc::MichaelKVList< cds::gc::DHP, Key, Value, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_DHP_less_stdAlloc_seqcst;
-        typedef cc::MichaelKVList< cds::gc::nogc, Key, Value, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_NOGC_less_stdAlloc_seqcst;
-        typedef cc::MichaelKVList< rcu_gpi, Key, Value, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_RCU_GPI_less_stdAlloc_seqcst;
-        typedef cc::MichaelKVList< rcu_gpb, Key, Value, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_RCU_GPB_less_stdAlloc_seqcst;
-        typedef cc::MichaelKVList< rcu_gpt, Key, Value, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_RCU_GPT_less_stdAlloc_seqcst;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::MichaelKVList< rcu_shb, Key, Value, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_RCU_SHB_less_stdAlloc_seqcst;
-        typedef cc::MichaelKVList< rcu_sht, Key, Value, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_RCU_SHT_less_stdAlloc_seqcst;
-#endif
-
-        struct traits_MichaelList_less_michaelAlloc :
-            public cc::michael_list::make_traits<
-                co::less< less >,
-                co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        {};
-        typedef cc::MichaelKVList< cds::gc::HP,  Key, Value, traits_MichaelList_less_michaelAlloc > MichaelList_HP_less_michaelAlloc;
-        typedef cc::MichaelKVList< cds::gc::DHP, Key, Value, traits_MichaelList_less_michaelAlloc > MichaelList_DHP_less_michaelAlloc;
-        typedef cc::MichaelKVList< cds::gc::nogc, Key, Value, traits_MichaelList_less_michaelAlloc > MichaelList_NOGC_less_michaelAlloc;
-        typedef cc::MichaelKVList< rcu_gpi, Key, Value, traits_MichaelList_less_michaelAlloc > MichaelList_RCU_GPI_less_michaelAlloc;
-        typedef cc::MichaelKVList< rcu_gpb, Key, Value, traits_MichaelList_less_michaelAlloc > MichaelList_RCU_GPB_less_michaelAlloc;
-        typedef cc::MichaelKVList< rcu_gpt, Key, Value, traits_MichaelList_less_michaelAlloc > MichaelList_RCU_GPT_less_michaelAlloc;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::MichaelKVList< rcu_shb, Key, Value, traits_MichaelList_less_michaelAlloc > MichaelList_RCU_SHB_less_michaelAlloc;
-        typedef cc::MichaelKVList< rcu_sht, Key, Value, traits_MichaelList_less_michaelAlloc > MichaelList_RCU_SHT_less_michaelAlloc;
-#endif
-
-        template <typename Base>
-        class NogcMapWrapper: public Base
-        {
-            typedef Base    base_class;
-        public:
-            NogcMapWrapper( size_t nMaxItemCount, size_t nLoadFactor )
-                : base_class( nMaxItemCount, nLoadFactor )
-            {}
-
-            template <typename K>
-            bool insert( K const& key )
-            {
-                return base_class::insert( key ) != base_class::end();
-            }
-
-            template <typename K, typename V>
-            bool insert( K const& key, V const& val )
-            {
-                return base_class::insert( key, val ) != base_class::end();
-            }
-
-            template <typename K, typename Func>
-            bool insert_with( K const& key, Func func )
-            {
-                return base_class::insert_with( key, func ) != base_class::end();
-            }
-
-            template <typename K>
-            bool find( K const& key )
-            {
-                return base_class::find( key ) != base_class::end();
-            }
-
-            void clear()
-            {
-                base_class::clear();
-            }
-        };
-
-        template <typename Base>
-        class NogcMapWrapper_dctor: public Base
-        {
-            typedef Base    base_class;
-        public:
-            NogcMapWrapper_dctor()
-            {}
-
-            template <typename K>
-            bool insert( K const& key )
-            {
-                return base_class::insert( key ) != base_class::end();
-            }
-
-            template <typename K, typename V>
-            bool insert( K const& key, V const& val )
-            {
-                return base_class::insert( key, val ) != base_class::end();
-            }
-
-            template <typename K, typename Func>
-            bool insert_with( K const& key, Func func )
-            {
-                return base_class::insert_with( key, func ) != base_class::end();
-            }
-
-            template <typename K>
-            bool find( K const& key )
-            {
-                return base_class::find( key ) != base_class::end();
-            }
-        };
-
-        // SplitListMap<gc::nogc> has no clear() method
-        template <typename Base>
-        class NogcSplitMapWrapper: public Base
-        {
-            typedef Base    base_class;
-        public:
-            NogcSplitMapWrapper( size_t nMaxItemCount, size_t nLoadFactor )
-                : base_class( nMaxItemCount, nLoadFactor )
-            {}
-
-            template <typename K>
-            bool insert( K const& key )
-            {
-                return base_class::insert( key ) != base_class::end();
-            }
-
-            template <typename K, typename V>
-            bool insert( K const& key, V const& val )
-            {
-                return base_class::insert( key, val ) != base_class::end();
-            }
-
-            template <typename K, typename Func>
-            bool insert_with( K const& key, Func func )
-            {
-                return base_class::insert_with( key, func ) != base_class::end();
-            }
-
-            template <typename K>
-            bool find( K const& key )
-            {
-                return base_class::find( key ) != base_class::end();
-            }
-
-            void clear()
-            {}
-        };
-
-
-        // ***************************************************************************
-        // MichaelHashMap based on MichaelKVList
-
-        struct traits_MichaelMap_hash :
-            public cc::michael_map::make_traits<
-                co::hash< hash >
-            >::type
-        {};
-        typedef cc::MichaelHashMap< cds::gc::HP,  MichaelList_HP_cmp_stdAlloc,  traits_MichaelMap_hash > MichaelMap_HP_cmp_stdAlloc;
-        typedef cc::MichaelHashMap< cds::gc::DHP, MichaelList_DHP_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_DHP_cmp_stdAlloc;
-        typedef cc::MichaelHashMap< cds::gc::nogc, MichaelList_NOGC_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_NOGC_cmp_stdAlloc;
-        typedef cc::MichaelHashMap< rcu_gpi, MichaelList_RCU_GPI_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_RCU_GPI_cmp_stdAlloc;
-        typedef cc::MichaelHashMap< rcu_gpb, MichaelList_RCU_GPB_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_RCU_GPB_cmp_stdAlloc;
-        typedef cc::MichaelHashMap< rcu_gpt, MichaelList_RCU_GPT_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_RCU_GPT_cmp_stdAlloc;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::MichaelHashMap< rcu_shb, MichaelList_RCU_SHB_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_RCU_SHB_cmp_stdAlloc;
-        typedef cc::MichaelHashMap< rcu_sht, MichaelList_RCU_SHT_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_RCU_SHT_cmp_stdAlloc;
-#endif
-
-        typedef cc::MichaelHashMap< cds::gc::HP, MichaelList_HP_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_HP_less_stdAlloc;
-        typedef cc::MichaelHashMap< cds::gc::DHP, MichaelList_DHP_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_DHP_less_stdAlloc;
-        typedef cc::MichaelHashMap< cds::gc::nogc, MichaelList_NOGC_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_NOGC_less_stdAlloc;
-        typedef cc::MichaelHashMap< rcu_gpi, MichaelList_RCU_GPI_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_RCU_GPI_less_stdAlloc;
-        typedef cc::MichaelHashMap< rcu_gpb, MichaelList_RCU_GPB_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_RCU_GPB_less_stdAlloc;
-        typedef cc::MichaelHashMap< rcu_gpt, MichaelList_RCU_GPT_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_RCU_GPT_less_stdAlloc;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::MichaelHashMap< rcu_shb, MichaelList_RCU_SHB_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_RCU_SHB_less_stdAlloc;
-        typedef cc::MichaelHashMap< rcu_sht, MichaelList_RCU_SHT_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_RCU_SHT_less_stdAlloc;
-#endif
-
-        typedef cc::MichaelHashMap< cds::gc::HP, MichaelList_HP_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_HP_cmp_stdAlloc_seqcst;
-        typedef cc::MichaelHashMap< cds::gc::DHP, MichaelList_DHP_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_DHP_cmp_stdAlloc_seqcst;
-        typedef cc::MichaelHashMap< cds::gc::nogc, MichaelList_NOGC_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_NOGC_cmp_stdAlloc_seqcst;
-        typedef cc::MichaelHashMap< rcu_gpi, MichaelList_RCU_GPI_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_GPI_cmp_stdAlloc_seqcst;
-        typedef cc::MichaelHashMap< rcu_gpb, MichaelList_RCU_GPB_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_GPB_cmp_stdAlloc_seqcst;
-        typedef cc::MichaelHashMap< rcu_gpt, MichaelList_RCU_GPT_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_GPT_cmp_stdAlloc_seqcst;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::MichaelHashMap< rcu_shb, MichaelList_RCU_SHB_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_SHB_cmp_stdAlloc_seqcst;
-        typedef cc::MichaelHashMap< rcu_sht, MichaelList_RCU_SHT_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_SHT_cmp_stdAlloc_seqcst;
-#endif
-
-        typedef cc::MichaelHashMap< cds::gc::HP, MichaelList_HP_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_HP_less_stdAlloc_seqcst;
-        typedef cc::MichaelHashMap< cds::gc::DHP, MichaelList_DHP_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_DHP_less_stdAlloc_seqcst;
-        typedef cc::MichaelHashMap< cds::gc::nogc, MichaelList_NOGC_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_NOGC_less_stdAlloc_seqcst;
-        typedef cc::MichaelHashMap< rcu_gpi, MichaelList_RCU_GPI_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_GPI_less_stdAlloc_seqcst;
-        typedef cc::MichaelHashMap< rcu_gpb, MichaelList_RCU_GPB_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_GPB_less_stdAlloc_seqcst;
-        typedef cc::MichaelHashMap< rcu_gpt, MichaelList_RCU_GPT_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_GPT_less_stdAlloc_seqcst;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::MichaelHashMap< rcu_shb, MichaelList_RCU_SHB_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_SHB_less_stdAlloc_seqcst;
-        typedef cc::MichaelHashMap< rcu_sht, MichaelList_RCU_SHT_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_SHT_less_stdAlloc_seqcst;
-#endif
-
-        struct traits_MichaelSet_michaelAlloc :
-            public traits_MichaelMap_hash
-        {
-            typedef memory::MichaelAllocator<int> allocator;
-        };
-        typedef cc::MichaelHashMap< cds::gc::HP, MichaelList_HP_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_HP_cmp_michaelAlloc;
-        typedef cc::MichaelHashMap< cds::gc::DHP, MichaelList_DHP_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_DHP_cmp_michaelAlloc;
-        typedef cc::MichaelHashMap< cds::gc::nogc, MichaelList_NOGC_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_NOGC_cmp_michaelAlloc;
-        typedef cc::MichaelHashMap< rcu_gpi, MichaelList_RCU_GPI_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_RCU_GPI_cmp_michaelAlloc;
-        typedef cc::MichaelHashMap< rcu_gpb, MichaelList_RCU_GPB_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_RCU_GPB_cmp_michaelAlloc;
-        typedef cc::MichaelHashMap< rcu_gpt, MichaelList_RCU_GPT_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_RCU_GPT_cmp_michaelAlloc;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::MichaelHashMap< rcu_shb, MichaelList_RCU_SHB_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_RCU_SHB_cmp_michaelAlloc;
-        typedef cc::MichaelHashMap< rcu_sht, MichaelList_RCU_SHT_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_RCU_SHT_cmp_michaelAlloc;
-#endif
-        typedef cc::MichaelHashMap< cds::gc::HP, MichaelList_HP_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_HP_less_michaelAlloc;
-        typedef cc::MichaelHashMap< cds::gc::DHP, MichaelList_DHP_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_DHP_less_michaelAlloc;
-        typedef cc::MichaelHashMap< cds::gc::nogc, MichaelList_NOGC_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_NOGC_less_michaelAlloc;
-        typedef cc::MichaelHashMap< rcu_gpi, MichaelList_RCU_GPI_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_RCU_GPI_less_michaelAlloc;
-        typedef cc::MichaelHashMap< rcu_gpb, MichaelList_RCU_GPB_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_RCU_GPB_less_michaelAlloc;
-        typedef cc::MichaelHashMap< rcu_gpt, MichaelList_RCU_GPT_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_RCU_GPT_less_michaelAlloc;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::MichaelHashMap< rcu_shb, MichaelList_RCU_SHB_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_RCU_SHB_less_michaelAlloc;
-        typedef cc::MichaelHashMap< rcu_sht, MichaelList_RCU_SHT_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_RCU_SHT_less_michaelAlloc;
-#endif
-
-        // ***************************************************************************
-        // LazyKVList
-
-        struct traits_LazyList_cmp_stdAlloc :
-            public cc::lazy_list::make_traits<
-                co::compare< compare >
-            >::type
-        {};
-        typedef cc::LazyKVList< cds::gc::HP, Key, Value, traits_LazyList_cmp_stdAlloc > LazyList_HP_cmp_stdAlloc;
-        typedef cc::LazyKVList< cds::gc::DHP, Key, Value, traits_LazyList_cmp_stdAlloc > LazyList_DHP_cmp_stdAlloc;
-        typedef cc::LazyKVList< cds::gc::nogc, Key, Value, traits_LazyList_cmp_stdAlloc > LazyList_NOGC_cmp_stdAlloc;
-        typedef cc::LazyKVList< rcu_gpi, Key, Value, traits_LazyList_cmp_stdAlloc > LazyList_RCU_GPI_cmp_stdAlloc;
-        typedef cc::LazyKVList< rcu_gpb, Key, Value, traits_LazyList_cmp_stdAlloc > LazyList_RCU_GPB_cmp_stdAlloc;
-        typedef cc::LazyKVList< rcu_gpt, Key, Value, traits_LazyList_cmp_stdAlloc > LazyList_RCU_GPT_cmp_stdAlloc;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::LazyKVList< rcu_shb, Key, Value, traits_LazyList_cmp_stdAlloc > LazyList_RCU_SHB_cmp_stdAlloc;
-        typedef cc::LazyKVList< rcu_sht, Key, Value, traits_LazyList_cmp_stdAlloc > LazyList_RCU_SHT_cmp_stdAlloc;
-#endif
-
-        struct traits_LazyList_unord_stdAlloc :
-            public cc::lazy_list::make_traits<
-                co::equal_to< equal_to >
-                ,co::sort< false >
-            >::type
-        {};
-        typedef cc::LazyKVList< cds::gc::nogc, Key, Value, traits_LazyList_unord_stdAlloc > LazyList_NOGC_unord_stdAlloc;
-
-        struct traits_LazyList_cmp_stdAlloc_seqcst :
-            public cc::lazy_list::make_traits<
-                co::compare< compare >
-                ,co::memory_model< co::v::sequential_consistent >
-            >::type
-        {};
-        typedef cc::LazyKVList< cds::gc::HP, Key, Value, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_HP_cmp_stdAlloc_seqcst;
-        typedef cc::LazyKVList< cds::gc::DHP, Key, Value, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_DHP_cmp_stdAlloc_seqcst;
-        typedef cc::LazyKVList< cds::gc::nogc, Key, Value, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_NOGC_cmp_stdAlloc_seqcst;
-        typedef cc::LazyKVList< rcu_gpi, Key, Value, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_RCU_GPI_cmp_stdAlloc_seqcst;
-        typedef cc::LazyKVList< rcu_gpb, Key, Value, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_RCU_GPB_cmp_stdAlloc_seqcst;
-        typedef cc::LazyKVList< rcu_gpt, Key, Value, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_RCU_GPT_cmp_stdAlloc_seqcst;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::LazyKVList< rcu_shb, Key, Value, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_RCU_SHB_cmp_stdAlloc_seqcst;
-        typedef cc::LazyKVList< rcu_sht, Key, Value, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_RCU_SHT_cmp_stdAlloc_seqcst;
-#endif
-
-        struct traits_LazyList_cmp_michaelAlloc :
-            public cc::lazy_list::make_traits<
-                co::compare< compare >,
-                co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        {};
-        typedef cc::LazyKVList< cds::gc::HP, Key, Value, traits_LazyList_cmp_michaelAlloc > LazyList_HP_cmp_michaelAlloc;
-        typedef cc::LazyKVList< cds::gc::DHP, Key, Value, traits_LazyList_cmp_michaelAlloc > LazyList_DHP_cmp_michaelAlloc;
-        typedef cc::LazyKVList< cds::gc::nogc, Key, Value, traits_LazyList_cmp_michaelAlloc > LazyList_NOGC_cmp_michaelAlloc;
-        typedef cc::LazyKVList< rcu_gpi, Key, Value, traits_LazyList_cmp_michaelAlloc > LazyList_RCU_GPI_cmp_michaelAlloc;
-        typedef cc::LazyKVList< rcu_gpb, Key, Value, traits_LazyList_cmp_michaelAlloc > LazyList_RCU_GPB_cmp_michaelAlloc;
-        typedef cc::LazyKVList< rcu_gpt, Key, Value, traits_LazyList_cmp_michaelAlloc > LazyList_RCU_GPT_cmp_michaelAlloc;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::LazyKVList< rcu_shb, Key, Value, traits_LazyList_cmp_michaelAlloc > LazyList_RCU_SHB_cmp_michaelAlloc;
-        typedef cc::LazyKVList< rcu_sht, Key, Value, traits_LazyList_cmp_michaelAlloc > LazyList_RCU_SHT_cmp_michaelAlloc;
-#endif
-        struct traits_LazyList_less_stdAlloc :
-            public cc::lazy_list::make_traits<
-                co::less< less >
-            >::type
-        {};
-        typedef cc::LazyKVList< cds::gc::HP, Key, Value, traits_LazyList_less_stdAlloc > LazyList_HP_less_stdAlloc;
-        typedef cc::LazyKVList< cds::gc::DHP, Key, Value, traits_LazyList_less_stdAlloc > LazyList_DHP_less_stdAlloc;
-        typedef cc::LazyKVList< cds::gc::nogc, Key, Value, traits_LazyList_less_stdAlloc > LazyList_NOGC_less_stdAlloc;
-        typedef cc::LazyKVList< rcu_gpi, Key, Value, traits_LazyList_less_stdAlloc > LazyList_RCU_GPI_less_stdAlloc;
-        typedef cc::LazyKVList< rcu_gpb, Key, Value, traits_LazyList_less_stdAlloc > LazyList_RCU_GPB_less_stdAlloc;
-        typedef cc::LazyKVList< rcu_gpt, Key, Value, traits_LazyList_less_stdAlloc > LazyList_RCU_GPT_less_stdAlloc;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::LazyKVList< rcu_shb, Key, Value, traits_LazyList_less_stdAlloc > LazyList_RCU_SHB_less_stdAlloc;
-        typedef cc::LazyKVList< rcu_sht, Key, Value, traits_LazyList_less_stdAlloc > LazyList_RCU_SHT_less_stdAlloc;
-#endif
-
-        struct traits_LazyList_less_stdAlloc_seqcst :
-            public cc::lazy_list::make_traits<
-                co::less< less >
-                ,co::memory_model< co::v::sequential_consistent >
-            >::type
-        {};
-        typedef cc::LazyKVList< cds::gc::HP, Key, Value, traits_LazyList_less_stdAlloc_seqcst > LazyList_HP_less_stdAlloc_seqcst;
-        typedef cc::LazyKVList< cds::gc::DHP, Key, Value, traits_LazyList_less_stdAlloc_seqcst > LazyList_DHP_less_stdAlloc_seqcst;
-        typedef cc::LazyKVList< cds::gc::nogc, Key, Value, traits_LazyList_less_stdAlloc_seqcst > LazyList_NOGC_less_stdAlloc_seqcst;
-        typedef cc::LazyKVList< rcu_gpi, Key, Value, traits_LazyList_less_stdAlloc_seqcst > LazyList_RCU_GPI_less_stdAlloc_seqcst;
-        typedef cc::LazyKVList< rcu_gpb, Key, Value, traits_LazyList_less_stdAlloc_seqcst > LazyList_RCU_GPB_less_stdAlloc_seqcst;
-        typedef cc::LazyKVList< rcu_gpt, Key, Value, traits_LazyList_less_stdAlloc_seqcst > LazyList_RCU_GPT_less_stdAlloc_seqcst;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::LazyKVList< rcu_shb, Key, Value, traits_LazyList_less_stdAlloc_seqcst > LazyList_RCU_SHB_less_stdAlloc_seqcst;
-        typedef cc::LazyKVList< rcu_sht, Key, Value, traits_LazyList_less_stdAlloc_seqcst > LazyList_RCU_SHT_less_stdAlloc_seqcst;
-#endif
-
-        struct traits_LazyList_less_michaelAlloc :
-            public cc::lazy_list::make_traits<
-                co::less< less >,
-                co::allocator< memory::MichaelAllocator<int> >
-            >::type
-        {};
-        typedef cc::LazyKVList< cds::gc::HP, Key, Value, traits_LazyList_less_michaelAlloc > LazyList_HP_less_michaelAlloc;
-        typedef cc::LazyKVList< cds::gc::DHP, Key, Value, traits_LazyList_less_michaelAlloc > LazyList_DHP_less_michaelAlloc;
-        typedef cc::LazyKVList< cds::gc::nogc, Key, Value, traits_LazyList_less_michaelAlloc > LazyList_NOGC_less_michaelAlloc;
-        typedef cc::LazyKVList< rcu_gpi, Key, Value, traits_LazyList_less_michaelAlloc > LazyList_RCU_GPI_less_michaelAlloc;
-        typedef cc::LazyKVList< rcu_gpb, Key, Value, traits_LazyList_less_michaelAlloc > LazyList_RCU_GPB_less_michaelAlloc;
-        typedef cc::LazyKVList< rcu_gpt, Key, Value, traits_LazyList_less_michaelAlloc > LazyList_RCU_GPT_less_michaelAlloc;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::LazyKVList< rcu_shb, Key, Value, traits_LazyList_less_michaelAlloc > LazyList_RCU_SHB_less_michaelAlloc;
-        typedef cc::LazyKVList< rcu_sht, Key, Value, traits_LazyList_less_michaelAlloc > LazyList_RCU_SHT_less_michaelAlloc;
-#endif
-
-        // ***************************************************************************
-        // MichaelHashMap based on LazyKVList
-        typedef cc::MichaelHashMap< cds::gc::HP, LazyList_HP_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_HP_cmp_stdAlloc;
-        typedef cc::MichaelHashMap< cds::gc::DHP, LazyList_DHP_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_DHP_cmp_stdAlloc;
-        typedef cc::MichaelHashMap< cds::gc::nogc, LazyList_NOGC_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_NOGC_cmp_stdAlloc;
-        typedef cc::MichaelHashMap< rcu_gpi, LazyList_RCU_GPI_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPI_cmp_stdAlloc;
-        typedef cc::MichaelHashMap< rcu_gpb, LazyList_RCU_GPB_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPB_cmp_stdAlloc;
-        typedef cc::MichaelHashMap< rcu_gpt, LazyList_RCU_GPT_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPT_cmp_stdAlloc;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::MichaelHashMap< rcu_shb, LazyList_RCU_SHB_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_SHB_cmp_stdAlloc;
-        typedef cc::MichaelHashMap< rcu_sht, LazyList_RCU_SHT_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_SHT_cmp_stdAlloc;
-#endif
-
-        typedef cc::MichaelHashMap< cds::gc::nogc, LazyList_NOGC_unord_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_NOGC_unord_stdAlloc;
-
-        typedef cc::MichaelHashMap< cds::gc::HP, LazyList_HP_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_HP_less_stdAlloc;
-        typedef cc::MichaelHashMap< cds::gc::DHP, LazyList_DHP_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_DHP_less_stdAlloc;
-        typedef cc::MichaelHashMap< cds::gc::nogc, LazyList_NOGC_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_NOGC_less_stdAlloc;
-        typedef cc::MichaelHashMap< rcu_gpi, LazyList_RCU_GPI_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPI_less_stdAlloc;
-        typedef cc::MichaelHashMap< rcu_gpb, LazyList_RCU_GPB_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPB_less_stdAlloc;
-        typedef cc::MichaelHashMap< rcu_gpt, LazyList_RCU_GPT_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPT_less_stdAlloc;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::MichaelHashMap< rcu_shb, LazyList_RCU_SHB_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_SHB_less_stdAlloc;
-        typedef cc::MichaelHashMap< rcu_sht, LazyList_RCU_SHT_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_SHT_less_stdAlloc;
-#endif
-
-        typedef cc::MichaelHashMap< cds::gc::HP, LazyList_HP_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_HP_cmp_stdAlloc_seqcst;
-        typedef cc::MichaelHashMap< cds::gc::DHP, LazyList_DHP_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_DHP_cmp_stdAlloc_seqcst;
-        typedef cc::MichaelHashMap< cds::gc::nogc, LazyList_NOGC_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_NOGC_cmp_stdAlloc_seqcst;
-        typedef cc::MichaelHashMap< rcu_gpi, LazyList_RCU_GPI_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPI_cmp_stdAlloc_seqcst;
-        typedef cc::MichaelHashMap< rcu_gpb, LazyList_RCU_GPB_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPB_cmp_stdAlloc_seqcst;
-        typedef cc::MichaelHashMap< rcu_gpt, LazyList_RCU_GPT_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPT_cmp_stdAlloc_seqcst;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::MichaelHashMap< rcu_shb, LazyList_RCU_SHB_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_SHB_cmp_stdAlloc_seqcst;
-        typedef cc::MichaelHashMap< rcu_sht, LazyList_RCU_SHT_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_SHT_cmp_stdAlloc_seqcst;
-#endif
-
-        typedef cc::MichaelHashMap< cds::gc::HP, LazyList_HP_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_HP_less_stdAlloc_seqcst;
-        typedef cc::MichaelHashMap< cds::gc::DHP, LazyList_DHP_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_DHP_less_stdAlloc_seqcst;
-        typedef cc::MichaelHashMap< cds::gc::nogc, LazyList_NOGC_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_NOGC_less_stdAlloc_seqcst;
-        typedef cc::MichaelHashMap< rcu_gpi, LazyList_RCU_GPI_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPI_less_stdAlloc_seqcst;
-        typedef cc::MichaelHashMap< rcu_gpb, LazyList_RCU_GPB_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPB_less_stdAlloc_seqcst;
-        typedef cc::MichaelHashMap< rcu_gpt, LazyList_RCU_GPT_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPT_less_stdAlloc_seqcst;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::MichaelHashMap< rcu_shb, LazyList_RCU_SHB_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_SHB_less_stdAlloc_seqcst;
-        typedef cc::MichaelHashMap< rcu_sht, LazyList_RCU_SHT_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_SHT_less_stdAlloc_seqcst;
-#endif
-
-        typedef cc::MichaelHashMap< cds::gc::HP, LazyList_HP_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_HP_cmp_michaelAlloc;
-        typedef cc::MichaelHashMap< cds::gc::DHP, LazyList_DHP_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_DHP_cmp_michaelAlloc;
-        typedef cc::MichaelHashMap< cds::gc::nogc, LazyList_NOGC_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_NOGC_cmp_michaelAlloc;
-        typedef cc::MichaelHashMap< rcu_gpi, LazyList_RCU_GPI_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_RCU_GPI_cmp_michaelAlloc;
-        typedef cc::MichaelHashMap< rcu_gpb, LazyList_RCU_GPB_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_RCU_GPB_cmp_michaelAlloc;
-        typedef cc::MichaelHashMap< rcu_gpt, LazyList_RCU_GPT_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_RCU_GPT_cmp_michaelAlloc;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::MichaelHashMap< rcu_shb, LazyList_RCU_SHB_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_RCU_SHB_cmp_michaelAlloc;
-        typedef cc::MichaelHashMap< rcu_sht, LazyList_RCU_SHT_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_RCU_SHT_cmp_michaelAlloc;
-#endif
-        typedef cc::MichaelHashMap< cds::gc::HP, LazyList_HP_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_HP_less_michaelAlloc;
-        typedef cc::MichaelHashMap< cds::gc::DHP, LazyList_DHP_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_DHP_less_michaelAlloc;
-        typedef cc::MichaelHashMap< cds::gc::nogc, LazyList_NOGC_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_NOGC_less_michaelAlloc;
-        typedef cc::MichaelHashMap< rcu_gpi, LazyList_RCU_GPI_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_RCU_GPI_less_michaelAlloc;
-        typedef cc::MichaelHashMap< rcu_gpb, LazyList_RCU_GPB_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_RCU_GPB_less_michaelAlloc;
-        typedef cc::MichaelHashMap< rcu_gpt, LazyList_RCU_GPT_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_RCU_GPT_less_michaelAlloc;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::MichaelHashMap< rcu_shb, LazyList_RCU_SHB_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_RCU_SHB_less_michaelAlloc;
-        typedef cc::MichaelHashMap< rcu_sht, LazyList_RCU_SHT_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_RCU_SHT_less_michaelAlloc;
-#endif
-
-        // ***************************************************************************
-        // SplitListMap based on MichaelList
-
-        // HP
-        struct traits_SplitList_Michael_dyn_cmp: public cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::michael_list_tag>
-                ,co::hash< hash >
-                ,cc::split_list::ordered_list_traits<
-                    typename cc::michael_list::make_traits<
-                        co::compare< compare >
-                    >::type
-                >
-            >::type
-        {};
-        typedef cc::SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_HP_dyn_cmp;
-        typedef cc::SplitListMap< cds::gc::DHP, Key, Value, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_DHP_dyn_cmp;
-        typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value, traits_SplitList_Michael_dyn_cmp >> SplitList_Michael_NOGC_dyn_cmp;
-        typedef cc::SplitListMap< rcu_gpi, Key, Value, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_RCU_GPI_dyn_cmp;
-        typedef cc::SplitListMap< rcu_gpb, Key, Value, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_RCU_GPB_dyn_cmp;
-        typedef cc::SplitListMap< rcu_gpt, Key, Value, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_RCU_GPT_dyn_cmp;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SplitListMap< rcu_shb, Key, Value, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_RCU_SHB_dyn_cmp;
-        typedef cc::SplitListMap< rcu_sht, Key, Value, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_RCU_SHT_dyn_cmp;
-#endif
-
-        struct traits_SplitList_Michael_dyn_cmp_stat : public traits_SplitList_Michael_dyn_cmp
-        {
-            typedef cc::split_list::stat<> stat;
-        };
-        typedef cc::SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_HP_dyn_cmp_stat;
-        typedef cc::SplitListMap< cds::gc::DHP, Key, Value, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_DHP_dyn_cmp_stat;
-        typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value, traits_SplitList_Michael_dyn_cmp_stat >> SplitList_Michael_NOGC_dyn_cmp_stat;
-        typedef cc::SplitListMap< rcu_gpi, Key, Value, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_RCU_GPI_dyn_cmp_stat;
-        typedef cc::SplitListMap< rcu_gpb, Key, Value, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_RCU_GPB_dyn_cmp_stat;
-        typedef cc::SplitListMap< rcu_gpt, Key, Value, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_RCU_GPT_dyn_cmp_stat;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SplitListMap< rcu_shb, Key, Value, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_RCU_SHB_dyn_cmp_stat;
-        typedef cc::SplitListMap< rcu_sht, Key, Value, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_RCU_SHT_dyn_cmp_stat;
-#endif
-
-        struct traits_SplitList_Michael_dyn_cmp_seqcst: public cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::michael_list_tag>
-                ,co::hash< hash >
-                ,co::memory_model< co::v::sequential_consistent >
-                ,cc::split_list::ordered_list_traits<
-                    typename cc::michael_list::make_traits<
-                        co::compare< compare >
-                        ,co::memory_model< co::v::sequential_consistent >
-                    >::type
-                >
-            >::type
-        {};
-        typedef cc::SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_HP_dyn_cmp_seqcst;
-        typedef cc::SplitListMap< cds::gc::DHP, Key, Value, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_DHP_dyn_cmp_seqcst;
-        typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value, traits_SplitList_Michael_dyn_cmp_seqcst >> SplitList_Michael_NOGC_dyn_cmp_seqcst;
-        typedef cc::SplitListMap< rcu_gpi, Key, Value, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_RCU_GPI_dyn_cmp_seqcst;
-        typedef cc::SplitListMap< rcu_gpb, Key, Value, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_RCU_GPB_dyn_cmp_seqcst;
-        typedef cc::SplitListMap< rcu_gpt, Key, Value, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_RCU_GPT_dyn_cmp_seqcst;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SplitListMap< rcu_shb, Key, Value, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_RCU_SHB_dyn_cmp_seqcst;
-        typedef cc::SplitListMap< rcu_sht, Key, Value, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_RCU_SHT_dyn_cmp_seqcst;
-#endif
-
-        struct traits_SplitList_Michael_st_cmp: public cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::michael_list_tag>
-                ,cc::split_list::dynamic_bucket_table< false >
-                ,co::hash< hash >
-                ,cc::split_list::ordered_list_traits<
-                    typename cc::michael_list::make_traits<
-                        co::compare< compare >
-                    >::type
-                >
-            >::type
-        {};
-        typedef cc::SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Michael_st_cmp > SplitList_Michael_HP_st_cmp;
-        typedef cc::SplitListMap< cds::gc::DHP, Key, Value, traits_SplitList_Michael_st_cmp > SplitList_Michael_DHP_st_cmp;
-        typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value, traits_SplitList_Michael_st_cmp >> SplitList_Michael_NOGC_st_cmp;
-        typedef cc::SplitListMap< rcu_gpi, Key, Value, traits_SplitList_Michael_st_cmp > SplitList_Michael_RCU_GPI_st_cmp;
-        typedef cc::SplitListMap< rcu_gpb, Key, Value, traits_SplitList_Michael_st_cmp > SplitList_Michael_RCU_GPB_st_cmp;
-        typedef cc::SplitListMap< rcu_gpt, Key, Value, traits_SplitList_Michael_st_cmp > SplitList_Michael_RCU_GPT_st_cmp;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SplitListMap< rcu_shb, Key, Value, traits_SplitList_Michael_st_cmp > SplitList_Michael_RCU_SHB_st_cmp;
-        typedef cc::SplitListMap< rcu_sht, Key, Value, traits_SplitList_Michael_st_cmp > SplitList_Michael_RCU_SHT_st_cmp;
-#endif
-
-        struct traits_SplitList_Michael_st_cmp_seqcst: public cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::michael_list_tag>
-                ,co::hash< hash >
-                ,cc::split_list::dynamic_bucket_table< false >
-                ,co::memory_model< co::v::sequential_consistent >
-                ,cc::split_list::ordered_list_traits<
-                    typename cc::michael_list::make_traits<
-                        co::compare< compare >
-                        ,co::memory_model< co::v::sequential_consistent >
-                    >::type
-                >
-            >::type
-        {};
-        typedef cc::SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Michael_st_cmp_seqcst > SplitList_Michael_HP_st_cmp_seqcst;
-        typedef cc::SplitListMap< cds::gc::DHP, Key, Value, traits_SplitList_Michael_st_cmp_seqcst > SplitList_Michael_DHP_st_cmp_seqcst;
-        typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value, traits_SplitList_Michael_st_cmp_seqcst >> SplitList_Michael_NOGC_st_cmp_seqcst;
-        typedef cc::SplitListMap< rcu_gpi, Key, Value, traits_SplitList_Michael_st_cmp_seqcst > SplitList_Michael_RCU_GPI_st_cmp_seqcst;
-        typedef cc::SplitListMap< rcu_gpb, Key, Value, traits_SplitList_Michael_st_cmp_seqcst > SplitList_Michael_RCU_GPB_st_cmp_seqcst;
-        typedef cc::SplitListMap< rcu_gpt, Key, Value, traits_SplitList_Michael_st_cmp_seqcst > SplitList_Michael_RCU_GPT_st_cmp_seqcst;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SplitListMap< rcu_shb, Key, Value, traits_SplitList_Michael_st_cmp_seqcst > SplitList_Michael_RCU_SHB_st_cmp_seqcst;
-        typedef cc::SplitListMap< rcu_sht, Key, Value, traits_SplitList_Michael_st_cmp_seqcst > SplitList_Michael_RCU_SHT_st_cmp_seqcst;
-#endif
-
-        //HP + less
-        struct traits_SplitList_Michael_dyn_less: public cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::michael_list_tag>
-                ,co::hash< hash >
-                ,cc::split_list::ordered_list_traits<
-                    typename cc::michael_list::make_traits<
-                        co::less< less >
-                    >::type
-                >
-            >::type
-        {};
-        typedef cc::SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Michael_dyn_less > SplitList_Michael_HP_dyn_less;
-        typedef cc::SplitListMap< cds::gc::DHP, Key, Value, traits_SplitList_Michael_dyn_less > SplitList_Michael_DHP_dyn_less;
-        typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value, traits_SplitList_Michael_dyn_less >> SplitList_Michael_NOGC_dyn_less;
-        typedef cc::SplitListMap< rcu_gpi, Key, Value, traits_SplitList_Michael_dyn_less > SplitList_Michael_RCU_GPI_dyn_less;
-        typedef cc::SplitListMap< rcu_gpb, Key, Value, traits_SplitList_Michael_dyn_less > SplitList_Michael_RCU_GPB_dyn_less;
-        typedef cc::SplitListMap< rcu_gpt, Key, Value, traits_SplitList_Michael_dyn_less > SplitList_Michael_RCU_GPT_dyn_less;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SplitListMap< rcu_shb, Key, Value, traits_SplitList_Michael_dyn_less > SplitList_Michael_RCU_SHB_dyn_less;
-        typedef cc::SplitListMap< rcu_sht, Key, Value, traits_SplitList_Michael_dyn_less > SplitList_Michael_RCU_SHT_dyn_less;
-#endif
-
-
-        struct traits_SplitList_Michael_dyn_less_seqcst: public cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::michael_list_tag>
-                ,co::hash< hash >
-                ,co::memory_model< co::v::sequential_consistent >
-                ,cc::split_list::ordered_list_traits<
-                    typename cc::michael_list::make_traits<
-                        co::less< less >
-                        ,co::memory_model< co::v::sequential_consistent >
-                    >::type
-                >
-            >::type
-        {};
-        typedef cc::SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Michael_dyn_less_seqcst > SplitList_Michael_HP_dyn_less_seqcst;
-        typedef cc::SplitListMap< cds::gc::DHP, Key, Value, traits_SplitList_Michael_dyn_less_seqcst > SplitList_Michael_DHP_dyn_less_seqcst;
-        typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value, traits_SplitList_Michael_dyn_less_seqcst >> SplitList_Michael_NOGC_dyn_less_seqcst;
-        typedef cc::SplitListMap< rcu_gpi, Key, Value, traits_SplitList_Michael_dyn_less_seqcst > SplitList_Michael_RCU_GPI_dyn_less_seqcst;
-        typedef cc::SplitListMap< rcu_gpb, Key, Value, traits_SplitList_Michael_dyn_less_seqcst > SplitList_Michael_RCU_GPB_dyn_less_seqcst;
-        typedef cc::SplitListMap< rcu_gpt, Key, Value, traits_SplitList_Michael_dyn_less_seqcst > SplitList_Michael_RCU_GPT_dyn_less_seqcst;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SplitListMap< rcu_shb, Key, Value, traits_SplitList_Michael_dyn_less_seqcst > SplitList_Michael_RCU_SHB_dyn_less_seqcst;
-        typedef cc::SplitListMap< rcu_sht, Key, Value, traits_SplitList_Michael_dyn_less_seqcst > SplitList_Michael_RCU_SHT_dyn_less_seqcst;
-#endif
-
-        struct traits_SplitList_Michael_st_less: public cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::michael_list_tag>
-                ,cc::split_list::dynamic_bucket_table< false >
-                ,co::hash< hash >
-                ,cc::split_list::ordered_list_traits<
-                    typename cc::michael_list::make_traits<
-                        co::less< less >
-                    >::type
-                >
-            >::type
-        {};
-        typedef cc::SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Michael_st_less > SplitList_Michael_HP_st_less;
-        typedef cc::SplitListMap< cds::gc::DHP, Key, Value, traits_SplitList_Michael_st_less > SplitList_Michael_DHP_st_less;
-        typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value, traits_SplitList_Michael_st_less >> SplitList_Michael_NOGC_st_less;
-        typedef cc::SplitListMap< rcu_gpi, Key, Value, traits_SplitList_Michael_st_less > SplitList_Michael_RCU_GPI_st_less;
-        typedef cc::SplitListMap< rcu_gpb, Key, Value, traits_SplitList_Michael_st_less > SplitList_Michael_RCU_GPB_st_less;
-        typedef cc::SplitListMap< rcu_gpt, Key, Value, traits_SplitList_Michael_st_less > SplitList_Michael_RCU_GPT_st_less;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SplitListMap< rcu_shb, Key, Value, traits_SplitList_Michael_st_less > SplitList_Michael_RCU_SHB_st_less;
-        typedef cc::SplitListMap< rcu_sht, Key, Value, traits_SplitList_Michael_st_less > SplitList_Michael_RCU_SHT_st_less;
-#endif
-
-        struct traits_SplitList_Michael_st_less_stat : traits_SplitList_Michael_st_less
-        {
-            typedef cc::split_list::stat<> stat;
-        };
-        typedef cc::SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Michael_st_less_stat > SplitList_Michael_HP_st_less_stat;
-        typedef cc::SplitListMap< cds::gc::DHP, Key, Value, traits_SplitList_Michael_st_less_stat > SplitList_Michael_DHP_st_less_stat;
-        typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value, traits_SplitList_Michael_st_less_stat >> SplitList_Michael_NOGC_st_less_stat;
-        typedef cc::SplitListMap< rcu_gpi, Key, Value, traits_SplitList_Michael_st_less_stat > SplitList_Michael_RCU_GPI_st_less_stat;
-        typedef cc::SplitListMap< rcu_gpb, Key, Value, traits_SplitList_Michael_st_less_stat > SplitList_Michael_RCU_GPB_st_less_stat;
-        typedef cc::SplitListMap< rcu_gpt, Key, Value, traits_SplitList_Michael_st_less_stat > SplitList_Michael_RCU_GPT_st_less_stat;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SplitListMap< rcu_shb, Key, Value, traits_SplitList_Michael_st_less_stat > SplitList_Michael_RCU_SHB_st_less_stat;
-        typedef cc::SplitListMap< rcu_sht, Key, Value, traits_SplitList_Michael_st_less_stat > SplitList_Michael_RCU_SHT_st_less_stat;
-#endif
-
-
-        class traits_SplitList_Michael_st_less_seqcst: public cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::michael_list_tag>
-                ,co::hash< hash >
-                ,cc::split_list::dynamic_bucket_table< false >
-                ,co::memory_model< co::v::sequential_consistent >
-                ,cc::split_list::ordered_list_traits<
-                    typename cc::michael_list::make_traits<
-                        co::less< less >
-                        ,co::memory_model< co::v::sequential_consistent >
-                    >::type
-                >
-            >::type
-        {};
-        typedef cc::SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Michael_st_less_seqcst > SplitList_Michael_HP_st_less_seqcst;
-        typedef cc::SplitListMap< cds::gc::DHP, Key, Value, traits_SplitList_Michael_st_less_seqcst > SplitList_Michael_DHP_st_less_seqcst;
-        typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value, traits_SplitList_Michael_st_less_seqcst >> SplitList_Michael_NOGC_st_less_seqcst;
-        typedef cc::SplitListMap< rcu_gpi, Key, Value, traits_SplitList_Michael_st_less_seqcst > SplitList_Michael_RCU_GPI_st_less_seqcst;
-        typedef cc::SplitListMap< rcu_gpb, Key, Value, traits_SplitList_Michael_st_less_seqcst > SplitList_Michael_RCU_GPB_st_less_seqcst;
-        typedef cc::SplitListMap< rcu_gpt, Key, Value, traits_SplitList_Michael_st_less_seqcst > SplitList_Michael_RCU_GPT_st_less_seqcst;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SplitListMap< rcu_shb, Key, Value, traits_SplitList_Michael_st_less_seqcst > SplitList_Michael_RCU_SHB_st_less_seqcst;
-        typedef cc::SplitListMap< rcu_sht, Key, Value, traits_SplitList_Michael_st_less_seqcst > SplitList_Michael_RCU_SHT_st_less_seqcst;
-#endif
-
-
-        // ***************************************************************************
-        // SplitListMap based on LazyKVList
-
-        struct SplitList_Lazy_dyn_cmp :
-            public cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::lazy_list_tag>
-                ,co::hash< hash >
-                ,cc::split_list::ordered_list_traits<
-                    typename cc::lazy_list::make_traits<
-                        co::compare< compare >
-                    >::type
-                >
-            >::type
-        {};
-        typedef cc::SplitListMap< cds::gc::HP, Key, Value, SplitList_Lazy_dyn_cmp > SplitList_Lazy_HP_dyn_cmp;
-        typedef cc::SplitListMap< cds::gc::DHP, Key, Value, SplitList_Lazy_dyn_cmp > SplitList_Lazy_DHP_dyn_cmp;
-        typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value, SplitList_Lazy_dyn_cmp >> SplitList_Lazy_NOGC_dyn_cmp;
-        typedef cc::SplitListMap< rcu_gpi, Key, Value, SplitList_Lazy_dyn_cmp > SplitList_Lazy_RCU_GPI_dyn_cmp;
-        typedef cc::SplitListMap< rcu_gpb, Key, Value, SplitList_Lazy_dyn_cmp > SplitList_Lazy_RCU_GPB_dyn_cmp;
-        typedef cc::SplitListMap< rcu_gpt, Key, Value, SplitList_Lazy_dyn_cmp > SplitList_Lazy_RCU_GPT_dyn_cmp;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SplitListMap< rcu_shb, Key, Value, SplitList_Lazy_dyn_cmp > SplitList_Lazy_RCU_SHB_dyn_cmp;
-        typedef cc::SplitListMap< rcu_sht, Key, Value, SplitList_Lazy_dyn_cmp > SplitList_Lazy_RCU_SHT_dyn_cmp;
-#endif
-
-        struct SplitList_Lazy_dyn_cmp_stat : public SplitList_Lazy_dyn_cmp
-        {
-            typedef cc::split_list::stat<> stat;
-        };
-        typedef cc::SplitListMap< cds::gc::HP, Key, Value, SplitList_Lazy_dyn_cmp_stat > SplitList_Lazy_HP_dyn_cmp_stat;
-        typedef cc::SplitListMap< cds::gc::DHP, Key, Value, SplitList_Lazy_dyn_cmp_stat > SplitList_Lazy_DHP_dyn_cmp_stat;
-        typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value, SplitList_Lazy_dyn_cmp_stat >> SplitList_Lazy_NOGC_dyn_cmp_stat;
-        typedef cc::SplitListMap< rcu_gpi, Key, Value, SplitList_Lazy_dyn_cmp_stat > SplitList_Lazy_RCU_GPI_dyn_cmp_stat;
-        typedef cc::SplitListMap< rcu_gpb, Key, Value, SplitList_Lazy_dyn_cmp_stat > SplitList_Lazy_RCU_GPB_dyn_cmp_stat;
-        typedef cc::SplitListMap< rcu_gpt, Key, Value, SplitList_Lazy_dyn_cmp_stat > SplitList_Lazy_RCU_GPT_dyn_cmp_stat;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SplitListMap< rcu_shb, Key, Value, SplitList_Lazy_dyn_cmp_stat > SplitList_Lazy_RCU_SHB_dyn_cmp_stat;
-        typedef cc::SplitListMap< rcu_sht, Key, Value, SplitList_Lazy_dyn_cmp_stat > SplitList_Lazy_RCU_SHT_dyn_cmp_stat;
-#endif
-
-        struct SplitList_Lazy_dyn_cmp_seqcst :
-            public cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::lazy_list_tag>
-                ,co::hash< hash >
-                ,co::memory_model< co::v::sequential_consistent >
-                ,cc::split_list::ordered_list_traits<
-                    typename cc::lazy_list::make_traits<
-                        co::compare< compare >
-                        ,co::memory_model< co::v::sequential_consistent >
-                    >::type
-                >
-            >::type
-        {};
-        typedef cc::SplitListMap< cds::gc::HP, Key, Value, SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_HP_dyn_cmp_seqcst;
-        typedef cc::SplitListMap< cds::gc::DHP, Key, Value, SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_DHP_dyn_cmp_seqcst;
-        typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value, SplitList_Lazy_dyn_cmp_seqcst >> SplitList_Lazy_NOGC_dyn_cmp_seqcst;
-        typedef cc::SplitListMap< rcu_gpi, Key, Value, SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_RCU_GPI_dyn_cmp_seqcst;
-        typedef cc::SplitListMap< rcu_gpb, Key, Value, SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_RCU_GPB_dyn_cmp_seqcst;
-        typedef cc::SplitListMap< rcu_gpt, Key, Value, SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_RCU_GPT_dyn_cmp_seqcst;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SplitListMap< rcu_shb, Key, Value, SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_RCU_SHB_dyn_cmp_seqcst;
-        typedef cc::SplitListMap< rcu_sht, Key, Value, SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_RCU_SHT_dyn_cmp_seqcst;
-#endif
-
-        struct SplitList_Lazy_st_cmp :
-            public cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::lazy_list_tag>
-                ,cc::split_list::dynamic_bucket_table< false >
-                ,co::hash< hash >
-                ,cc::split_list::ordered_list_traits<
-                    typename cc::lazy_list::make_traits<
-                        co::compare< compare >
-                    >::type
-                >
-            >::type
-        {};
-        typedef cc::SplitListMap< cds::gc::HP, Key, Value, SplitList_Lazy_st_cmp > SplitList_Lazy_HP_st_cmp;
-        typedef cc::SplitListMap< cds::gc::DHP, Key, Value, SplitList_Lazy_st_cmp > SplitList_Lazy_DHP_st_cmp;
-        typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value, SplitList_Lazy_st_cmp >> SplitList_Lazy_NOGC_st_cmp;
-        typedef cc::SplitListMap< rcu_gpi, Key, Value, SplitList_Lazy_st_cmp > SplitList_Lazy_RCU_GPI_st_cmp;
-        typedef cc::SplitListMap< rcu_gpb, Key, Value, SplitList_Lazy_st_cmp > SplitList_Lazy_RCU_GPB_st_cmp;
-        typedef cc::SplitListMap< rcu_gpt, Key, Value, SplitList_Lazy_st_cmp > SplitList_Lazy_RCU_GPT_st_cmp;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SplitListMap< rcu_shb, Key, Value, SplitList_Lazy_st_cmp > SplitList_Lazy_RCU_SHB_st_cmp;
-        typedef cc::SplitListMap< rcu_sht, Key, Value, SplitList_Lazy_st_cmp > SplitList_Lazy_RCU_SHT_st_cmp;
-#endif
-
-
-        struct SplitList_Lazy_st_cmp_seqcst :
-            public cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::lazy_list_tag>
-                ,co::hash< hash >
-                ,cc::split_list::dynamic_bucket_table< false >
-                ,co::memory_model< co::v::sequential_consistent >
-                ,cc::split_list::ordered_list_traits<
-                    typename cc::lazy_list::make_traits<
-                        co::compare< compare >
-                        ,co::memory_model< co::v::sequential_consistent >
-                    >::type
-                >
-            >::type
-        {};
-        typedef cc::SplitListMap< cds::gc::HP, Key, Value, SplitList_Lazy_st_cmp_seqcst> SplitList_Lazy_HP_st_cmp_seqcst;
-        typedef cc::SplitListMap< cds::gc::DHP, Key, Value, SplitList_Lazy_st_cmp_seqcst> SplitList_Lazy_DHP_st_cmp_seqcst;
-        typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value, SplitList_Lazy_st_cmp_seqcst >> SplitList_Lazy_NOGC_st_cmp_seqcst;
-        typedef cc::SplitListMap< rcu_gpi, Key, Value, SplitList_Lazy_st_cmp_seqcst> SplitList_Lazy_RCU_GPI_st_cmp_seqcst;
-        typedef cc::SplitListMap< rcu_gpb, Key, Value, SplitList_Lazy_st_cmp_seqcst> SplitList_Lazy_RCU_GPB_st_cmp_seqcst;
-        typedef cc::SplitListMap< rcu_gpt, Key, Value, SplitList_Lazy_st_cmp_seqcst> SplitList_Lazy_RCU_GPT_st_cmp_seqcst;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SplitListMap< rcu_shb, Key, Value, SplitList_Lazy_st_cmp_seqcst> SplitList_Lazy_RCU_SHB_st_cmp_seqcst;
-        typedef cc::SplitListMap< rcu_sht, Key, Value, SplitList_Lazy_st_cmp_seqcst> SplitList_Lazy_RCU_SHT_st_cmp_seqcst;
-#endif
-
-
-        struct SplitList_Lazy_dyn_less :
-            public cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::lazy_list_tag>
-                ,co::hash< hash >
-                ,cc::split_list::ordered_list_traits<
-                    typename cc::lazy_list::make_traits<
-                        co::less< less >
-                    >::type
-                >
-            >::type
-        {};
-        typedef cc::SplitListMap< cds::gc::HP, Key, Value, SplitList_Lazy_dyn_less > SplitList_Lazy_HP_dyn_less;
-        typedef cc::SplitListMap< cds::gc::DHP, Key, Value, SplitList_Lazy_dyn_less > SplitList_Lazy_DHP_dyn_less;
-        typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value, SplitList_Lazy_dyn_less >> SplitList_Lazy_NOGC_dyn_less;
-        typedef cc::SplitListMap< rcu_gpi, Key, Value, SplitList_Lazy_dyn_less > SplitList_Lazy_RCU_GPI_dyn_less;
-        typedef cc::SplitListMap< rcu_gpb, Key, Value, SplitList_Lazy_dyn_less > SplitList_Lazy_RCU_GPB_dyn_less;
-        typedef cc::SplitListMap< rcu_gpt, Key, Value, SplitList_Lazy_dyn_less > SplitList_Lazy_RCU_GPT_dyn_less;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SplitListMap< rcu_shb, Key, Value, SplitList_Lazy_dyn_less > SplitList_Lazy_RCU_SHB_dyn_less;
-        typedef cc::SplitListMap< rcu_sht, Key, Value, SplitList_Lazy_dyn_less > SplitList_Lazy_RCU_SHT_dyn_less;
-#endif
-
-        struct SplitList_Lazy_dyn_less_seqcst:
-            public cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::lazy_list_tag>
-                ,co::hash< hash >
-                ,co::memory_model< co::v::sequential_consistent >
-                ,cc::split_list::ordered_list_traits<
-                    typename cc::lazy_list::make_traits<
-                        co::less< less >
-                        ,co::memory_model< co::v::sequential_consistent >
-                    >::type
-                >
-            >::type
-        {};
-        typedef cc::SplitListMap< cds::gc::HP, Key, Value, SplitList_Lazy_dyn_less_seqcst > SplitList_Lazy_HP_dyn_less_seqcst;
-        typedef cc::SplitListMap< cds::gc::DHP, Key, Value, SplitList_Lazy_dyn_less_seqcst > SplitList_Lazy_DHP_dyn_less_seqcst;
-        typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value, SplitList_Lazy_dyn_less_seqcst >> SplitList_Lazy_NOGC_dyn_less_seqcst;
-        typedef cc::SplitListMap< rcu_gpi, Key, Value, SplitList_Lazy_dyn_less_seqcst > SplitList_Lazy_RCU_GPI_dyn_less_seqcst;
-        typedef cc::SplitListMap< rcu_gpb, Key, Value, SplitList_Lazy_dyn_less_seqcst > SplitList_Lazy_RCU_GPB_dyn_less_seqcst;
-        typedef cc::SplitListMap< rcu_gpt, Key, Value, SplitList_Lazy_dyn_less_seqcst > SplitList_Lazy_RCU_GPT_dyn_less_seqcst;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SplitListMap< rcu_shb, Key, Value, SplitList_Lazy_dyn_less_seqcst > SplitList_Lazy_RCU_SHB_dyn_less_seqcst;
-        typedef cc::SplitListMap< rcu_sht, Key, Value, SplitList_Lazy_dyn_less_seqcst > SplitList_Lazy_RCU_SHT_dyn_less_seqcst;
-#endif
-
-        struct SplitList_Lazy_st_less :
-            public cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::lazy_list_tag>
-                ,cc::split_list::dynamic_bucket_table< false >
-                ,co::hash< hash >
-                ,cc::split_list::ordered_list_traits<
-                    typename cc::lazy_list::make_traits<
-                        co::less< less >
-                    >::type
-                >
-            >::type
-        {};
-        typedef cc::SplitListMap< cds::gc::HP, Key, Value, SplitList_Lazy_st_less > SplitList_Lazy_HP_st_less;
-        typedef cc::SplitListMap< cds::gc::DHP, Key, Value, SplitList_Lazy_st_less > SplitList_Lazy_DHP_st_less;
-        typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value, SplitList_Lazy_st_less >> SplitList_Lazy_NOGC_st_less;
-        typedef cc::SplitListMap< rcu_gpi, Key, Value, SplitList_Lazy_st_less > SplitList_Lazy_RCU_GPI_st_less;
-        typedef cc::SplitListMap< rcu_gpb, Key, Value, SplitList_Lazy_st_less > SplitList_Lazy_RCU_GPB_st_less;
-        typedef cc::SplitListMap< rcu_gpt, Key, Value, SplitList_Lazy_st_less > SplitList_Lazy_RCU_GPT_st_less;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SplitListMap< rcu_shb, Key, Value, SplitList_Lazy_st_less > SplitList_Lazy_RCU_SHB_st_less;
-        typedef cc::SplitListMap< rcu_sht, Key, Value, SplitList_Lazy_st_less > SplitList_Lazy_RCU_SHT_st_less;
-#endif
-
-        struct SplitList_Lazy_st_less_stat : public SplitList_Lazy_st_less
-        {
-            typedef cc::split_list::stat<> stat;
-        };
-        typedef cc::SplitListMap< cds::gc::HP, Key, Value, SplitList_Lazy_st_less_stat > SplitList_Lazy_HP_st_less_stat;
-        typedef cc::SplitListMap< cds::gc::DHP, Key, Value, SplitList_Lazy_st_less_stat > SplitList_Lazy_DHP_st_less_stat;
-        typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value, SplitList_Lazy_st_less_stat >> SplitList_Lazy_NOGC_st_less_stat;
-        typedef cc::SplitListMap< rcu_gpi, Key, Value, SplitList_Lazy_st_less_stat > SplitList_Lazy_RCU_GPI_st_less_stat;
-        typedef cc::SplitListMap< rcu_gpb, Key, Value, SplitList_Lazy_st_less_stat > SplitList_Lazy_RCU_GPB_st_less_stat;
-        typedef cc::SplitListMap< rcu_gpt, Key, Value, SplitList_Lazy_st_less_stat > SplitList_Lazy_RCU_GPT_st_less_stat;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SplitListMap< rcu_shb, Key, Value, SplitList_Lazy_st_less_stat > SplitList_Lazy_RCU_SHB_st_less_stat;
-        typedef cc::SplitListMap< rcu_sht, Key, Value, SplitList_Lazy_st_less_stat > SplitList_Lazy_RCU_SHT_st_less_stat;
-#endif
-
-        struct SplitList_Lazy_st_less_seqcst :
-            public cc::split_list::make_traits<
-                cc::split_list::ordered_list<cc::lazy_list_tag>
-                ,co::hash< hash >
-                ,cc::split_list::dynamic_bucket_table< false >
-                ,co::memory_model< co::v::sequential_consistent >
-                ,cc::split_list::ordered_list_traits<
-                    typename cc::lazy_list::make_traits<
-                        co::less< less >
-                        ,co::memory_model< co::v::sequential_consistent >
-                    >::type
-                >
-            >::type
-        {};
-        typedef cc::SplitListMap< cds::gc::HP, Key, Value, SplitList_Lazy_st_less_seqcst > SplitList_Lazy_HP_st_less_seqcst;
-        typedef cc::SplitListMap< cds::gc::DHP, Key, Value, SplitList_Lazy_st_less_seqcst > SplitList_Lazy_DHP_st_less_seqcst;
-        typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value, SplitList_Lazy_st_less_seqcst >> SplitList_Lazy_NOGC_st_less_seqcst;
-        typedef cc::SplitListMap< rcu_gpi, Key, Value, SplitList_Lazy_st_less_seqcst > SplitList_Lazy_RCU_GPI_st_less_seqcst;
-        typedef cc::SplitListMap< rcu_gpb, Key, Value, SplitList_Lazy_st_less_seqcst > SplitList_Lazy_RCU_GPB_st_less_seqcst;
-        typedef cc::SplitListMap< rcu_gpt, Key, Value, SplitList_Lazy_st_less_seqcst > SplitList_Lazy_RCU_GPT_st_less_seqcst;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SplitListMap< rcu_shb, Key, Value, SplitList_Lazy_st_less_seqcst > SplitList_Lazy_RCU_SHB_st_less_seqcst;
-        typedef cc::SplitListMap< rcu_sht, Key, Value, SplitList_Lazy_st_less_seqcst > SplitList_Lazy_RCU_SHT_st_less_seqcst;
-#endif
-
-
-
-        // ***************************************************************************
-        // StripedHashMap
-
-        // for sequential containers
-        template <class BucketEntry, typename... Options>
-        class StripedHashMap_seq:
-            public cc::StripedMap< BucketEntry,
-                co::mutex_policy< cc::striped_set::striping<> >
-                ,co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
-                , Options...
-            >
-        {
-            typedef cc::StripedMap< BucketEntry,
-                co::mutex_policy< cc::striped_set::striping<> >
-                ,co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
-                , Options...
-            > base_class;
-            typedef typename base_class::resizing_policy resizing_policy_t;
-
-            resizing_policy_t   m_placeHolder;
-        public:
-            StripedHashMap_seq( size_t nCapacity, size_t nLoadFactor )
-                : base_class( nCapacity / nLoadFactor / 16, *(new(&m_placeHolder) resizing_policy_t( nLoadFactor )) )
-            {}
-        };
-
-        // for non-sequential ordered containers
-        template <class BucketEntry, typename... Options>
-        class StripedHashMap_ord:
-            public cc::StripedMap< BucketEntry,
-                co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
-                ,co::mutex_policy< cc::striped_set::striping<> >
-                , Options...
-            >
-        {
-            typedef cc::StripedMap< BucketEntry,
-               co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
-                ,co::mutex_policy< cc::striped_set::striping<> >
-                , Options...
-            > base_class;
-            typedef typename base_class::resizing_policy resizing_policy_t;
-
-            resizing_policy_t   m_placeHolder;
-        public:
-            StripedHashMap_ord( size_t /*nCapacity*/, size_t nLoadFactor )
-                : base_class( 0, *(new(&m_placeHolder) resizing_policy_t( nLoadFactor * 1024 )) )
-            {}
-        };
-
-
-        typedef StripedHashMap_seq<
-            std::list< std::pair< Key const, Value > >
-            , co::hash< hash2 >
-            , co::less< less >
-        > StripedMap_list;
-
-#if (CDS_COMPILER == CDS_COMPILER_MSVC || (CDS_COMPILER == CDS_COMPILER_INTEL && CDS_OS_INTERFACE == CDS_OSI_WINDOWS)) && _MSC_VER < 1600
-        typedef StripedHashMap_ord<
-            stdext::hash_map< Key, Value, stdext::hash_compare<Key, less > >
-            , co::hash< hash2 >
-        > StripedMap_hashmap;
-#else
-        typedef StripedHashMap_ord<
-            std::unordered_map< Key, Value, hash, equal_to >
-            , co::hash< hash2 >
-        > StripedMap_hashmap;
-#endif
-
-        typedef StripedHashMap_ord<
-            std::map< Key, Value, less >
-            , co::hash< hash2 >
-        > StripedMap_map;
-
-        typedef StripedHashMap_ord<
-            boost::unordered_map< Key, Value, hash, equal_to >
-            , co::hash< hash2 >
-        > StripedMap_boost_unordered_map;
-
-#if BOOST_VERSION >= 104800
-        typedef StripedHashMap_seq<
-            boost::container::slist< std::pair< Key const, Value > >
-            , co::hash< hash2 >
-            , co::less< less >
-        > StripedMap_slist;
-
-        typedef StripedHashMap_seq<
-            boost::container::list< std::pair< Key const, Value > >
-            , co::hash< hash2 >
-            , co::less< less >
-        > StripedMap_boost_list;
-
-        typedef StripedHashMap_ord<
-            boost::container::map< Key, Value, less >
-            , co::hash< hash2 >
-        > StripedMap_boost_map;
-
-//#   ifdef CDS_UNIT_MAP_TYPES_ENABLE_BOOST_FLAT_CONTAINERS
-        typedef StripedHashMap_ord<
-            boost::container::flat_map< Key, Value, less >
-            , co::hash< hash2 >
-        > StripedMap_boost_flat_map;
-//#   endif
-#endif  // BOOST_VERSION >= 104800
-
-        // ***************************************************************************
-        // RefinableHashMap
-
-        // for sequential containers
-        template <class BucketEntry, typename... Options>
-        class RefinableHashMap_seq:
-            public cc::StripedMap< BucketEntry,
-                co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
-                ,co::mutex_policy< cc::striped_set::refinable<> >
-                , Options...
-            >
-        {
-            typedef cc::StripedMap< BucketEntry,
-               co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
-                ,co::mutex_policy< cc::striped_set::refinable<> >
-                , Options...
-            > base_class;
-            typedef typename base_class::resizing_policy resizing_policy_t;
-
-            resizing_policy_t   m_placeHolder;
-        public:
-            RefinableHashMap_seq( size_t nCapacity, size_t nLoadFactor )
-                : base_class( nCapacity / nLoadFactor / 16, *(new(&m_placeHolder) resizing_policy_t( nLoadFactor )) )
-            {}
-        };
-
-        // for non-sequential ordered containers
-        template <class BucketEntry, typename... Options>
-        class RefinableHashMap_ord:
-            public cc::StripedMap< BucketEntry,
-                co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
-                ,co::mutex_policy< cc::striped_set::refinable<> >
-                , Options...
-            >
-        {
-            typedef cc::StripedMap< BucketEntry,
-               co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
-                ,co::mutex_policy< cc::striped_set::refinable<> >
-                , Options...
-            > base_class;
-            typedef typename base_class::resizing_policy resizing_policy_t;
-
-            resizing_policy_t   m_placeHolder;
-        public:
-            RefinableHashMap_ord( size_t /*nCapacity*/, size_t nLoadFactor )
-                : base_class( 0, *(new(&m_placeHolder) resizing_policy_t( nLoadFactor * 1024 )) )
-            {}
-        };
-
-
-        typedef RefinableHashMap_seq<
-            std::list< std::pair< Key const, Value > >
-            , co::hash< hash2 >
-            , co::less< less >
-        > RefinableMap_list;
-
-#if BOOST_VERSION >= 104800
-        typedef RefinableHashMap_seq<
-            boost::container::slist< std::pair< Key const, Value > >
-            , co::hash< hash2 >
-            , co::less< less >
-        > RefinableMap_slist;
-#endif
-
-        typedef RefinableHashMap_ord<
-            std::map< Key, Value, less >
-            , co::hash< hash2 >
-        > RefinableMap_map;
-
-        typedef RefinableHashMap_ord<
-            std::unordered_map< Key, Value, hash, equal_to >
-            , co::hash< hash2 >
-        > RefinableMap_hashmap;
-
-        typedef RefinableHashMap_ord<
-            boost::unordered_map< Key, Value, hash, equal_to >
-            , co::hash< hash2 >
-        > RefinableMap_boost_unordered_map;
-
-#if BOOST_VERSION >= 104800
-        typedef RefinableHashMap_seq<
-            boost::container::list< std::pair< Key const, Value > >
-            , co::hash< hash2 >
-            , co::less< less >
-        > RefinableMap_boost_list;
-
-        typedef RefinableHashMap_ord<
-            boost::container::map< Key, Value, less >
-            , co::hash< hash2 >
-        > RefinableMap_boost_map;
-
-        typedef RefinableHashMap_ord<
-            boost::container::flat_map< Key, Value, less >
-            , co::hash< hash2 >
-        > RefinableMap_boost_flat_map;
-#endif // #if BOOST_VERSION >= 104800
-
-
-        // ***************************************************************************
-        // CuckooMap
-
-        template <typename Traits>
-        struct traits_CuckooStripedMap: public Traits
-        {
-            typedef cc::cuckoo::striping<> mutex_policy;
-        };
-        template <typename Traits>
-        struct traits_CuckooRefinableMap : public Traits
-        {
-            typedef cc::cuckoo::refinable<> mutex_policy;
-        };
-
-        struct traits_CuckooMap_list_unord :
-            public cc::cuckoo::make_traits <
-                cc::cuckoo::probeset_type< cc::cuckoo::list >
-                , co::equal_to< equal_to >
-                , co::hash< std::tuple< hash, hash2 > >
-            > ::type
-        {};
-        typedef CuckooMap< Key, Value, traits_CuckooStripedMap<traits_CuckooMap_list_unord>> CuckooStripedMap_list_unord;
-        typedef CuckooMap< Key, Value, traits_CuckooRefinableMap<traits_CuckooMap_list_unord>> CuckooRefinableMap_list_unord;
-
-        struct traits_CuckooMap_list_unord_stat : public traits_CuckooMap_list_unord
-        {
-            typedef cc::cuckoo::stat stat;
-        };
-        typedef CuckooMap< Key, Value, traits_CuckooStripedMap<traits_CuckooMap_list_unord_stat>> CuckooStripedMap_list_unord_stat;
-        typedef CuckooMap< Key, Value, traits_CuckooRefinableMap<traits_CuckooMap_list_unord_stat>> CuckooRefinableMap_list_unord_stat;
-
-        struct traits_CuckooMap_list_unord_storehash : public traits_CuckooMap_list_unord
-        {
-            static CDS_CONSTEXPR const bool store_hash = true;
-        };
-        typedef CuckooMap< Key, Value, traits_CuckooStripedMap<traits_CuckooMap_list_unord_storehash>> CuckooStripedMap_list_unord_storehash;
-        typedef CuckooMap< Key, Value, traits_CuckooRefinableMap<traits_CuckooMap_list_unord_storehash>> CuckooRefinableMap_list_unord_storehash;
-
-        struct traits_CuckooMap_list_ord :
-            public cc::cuckoo::make_traits <
-                cc::cuckoo::probeset_type< cc::cuckoo::list >
-                , co::compare< compare >
-                , co::hash< std::tuple< hash, hash2 > >
-            >::type
-        {};
-        typedef CuckooMap< Key, Value, traits_CuckooStripedMap<traits_CuckooMap_list_ord>> CuckooStripedMap_list_ord;
-        typedef CuckooMap< Key, Value, traits_CuckooRefinableMap<traits_CuckooMap_list_ord>> CuckooRefinableMap_list_ord;
-
-        struct traits_CuckooMap_list_ord_stat : public traits_CuckooMap_list_ord
-        {
-            typedef cc::cuckoo::stat stat;
-        };
-        typedef CuckooMap< Key, Value, traits_CuckooStripedMap<traits_CuckooMap_list_ord_stat>> CuckooStripedMap_list_ord_stat;
-        typedef CuckooMap< Key, Value, traits_CuckooRefinableMap<traits_CuckooMap_list_ord_stat>> CuckooRefinableMap_list_ord_stat;
-
-        struct traits_CuckooMap_list_ord_storehash : public traits_CuckooMap_list_ord
-        {
-            static CDS_CONSTEXPR const bool store_hash = true;
-        };
-        typedef CuckooMap< Key, Value, traits_CuckooStripedMap<traits_CuckooMap_list_ord_storehash>> CuckooStripedMap_list_ord_storehash;
-        typedef CuckooMap< Key, Value, traits_CuckooRefinableMap<traits_CuckooMap_list_ord_storehash>> CuckooRefinableMap_list_ord_storehash;
-
-        struct traits_CuckooMap_vector_unord :
-            public cc::cuckoo::make_traits <
-                cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
-                , co::equal_to< equal_to >
-                , co::hash< std::tuple< hash, hash2 > >
-            >::type
-        {};
-        typedef CuckooMap< Key, Value, traits_CuckooStripedMap<traits_CuckooMap_vector_unord>> CuckooStripedMap_vector_unord;
-        typedef CuckooMap< Key, Value, traits_CuckooRefinableMap<traits_CuckooMap_vector_unord>> CuckooRefinableMap_vector_unord;
-
-        struct traits_CuckooMap_vector_unord_stat : public traits_CuckooMap_vector_unord
-        {
-            typedef cc::cuckoo::stat stat;
-        };
-        typedef CuckooMap< Key, Value, traits_CuckooStripedMap<traits_CuckooMap_vector_unord_stat>> CuckooStripedMap_vector_unord_stat;
-        typedef CuckooMap< Key, Value, traits_CuckooRefinableMap<traits_CuckooMap_vector_unord_stat>> CuckooRefinableMap_vector_unord_stat;
-
-        struct traits_CuckooMap_vector_unord_storehash : public traits_CuckooMap_vector_unord
-        {
-            static CDS_CONSTEXPR const bool store_hash = true;
-        };
-        typedef CuckooMap< Key, Value, traits_CuckooStripedMap<traits_CuckooMap_vector_unord_storehash>> CuckooStripedMap_vector_unord_storehash;
-        typedef CuckooMap< Key, Value, traits_CuckooRefinableMap<traits_CuckooMap_vector_unord_storehash>> CuckooRefinableMap_vector_unord_storehash;
-
-        struct traits_CuckooMap_vector_ord :
-            public cc::cuckoo::make_traits <
-                cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
-                , co::compare< compare >
-                , co::hash< std::tuple< hash, hash2 > >
-            >::type
-        {};
-        typedef CuckooMap< Key, Value, traits_CuckooStripedMap<traits_CuckooMap_vector_ord>> CuckooStripedMap_vector_ord;
-        typedef CuckooMap< Key, Value, traits_CuckooRefinableMap<traits_CuckooMap_vector_ord>> CuckooRefinableMap_vector_ord;
-
-        struct traits_CuckooMap_vector_ord_stat : public traits_CuckooMap_vector_ord
-        {
-            typedef cc::cuckoo::stat stat;
-        };
-        typedef CuckooMap< Key, Value, traits_CuckooStripedMap<traits_CuckooMap_vector_ord_stat>> CuckooStripedMap_vector_ord_stat;
-        typedef CuckooMap< Key, Value, traits_CuckooRefinableMap<traits_CuckooMap_vector_ord_stat>> CuckooRefinableMap_vector_ord_stat;
-
-        struct traits_CuckooMap_vector_ord_storehash : public traits_CuckooMap_vector_ord
-        {
-            static CDS_CONSTEXPR const bool store_hash = true;
-        };
-        typedef CuckooMap< Key, Value, traits_CuckooStripedMap<traits_CuckooMap_vector_ord_storehash>> CuckooStripedMap_vector_ord_storehash;
-        typedef CuckooMap< Key, Value, traits_CuckooRefinableMap<traits_CuckooMap_vector_ord_storehash>> CuckooRefinableMap_vector_ord_storehash;
-
-        // ***************************************************************************
-        // SkipListMap
-
-        class traits_SkipListMap_less_pascal: public cc::skip_list::make_traits <
-                co::less< less >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        {};
-        typedef cc::SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_less_pascal > SkipListMap_hp_less_pascal;
-        typedef cc::SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_less_pascal > SkipListMap_dhp_less_pascal;
-        typedef cc::SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_less_pascal > SkipListMap_nogc_less_pascal;
-        typedef cc::SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_less_pascal > SkipListMap_rcu_gpi_less_pascal;
-        typedef cc::SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_less_pascal > SkipListMap_rcu_gpb_less_pascal;
-        typedef cc::SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_less_pascal > SkipListMap_rcu_gpt_less_pascal;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_less_pascal > SkipListMap_rcu_shb_less_pascal;
-        typedef cc::SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_less_pascal > SkipListMap_rcu_sht_less_pascal;
-#endif
-
-        class traits_SkipListMap_less_pascal_seqcst: public cc::skip_list::make_traits <
-                co::less< less >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-                ,co::memory_model< co::v::sequential_consistent >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        {};
-        typedef cc::SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_less_pascal_seqcst > SkipListMap_hp_less_pascal_seqcst;
-        typedef cc::SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_less_pascal_seqcst > SkipListMap_dhp_less_pascal_seqcst;
-        typedef cc::SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_less_pascal_seqcst > SkipListMap_nogc_less_pascal_seqcst;
-        typedef cc::SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_less_pascal_seqcst > SkipListMap_rcu_gpi_less_pascal_seqcst;
-        typedef cc::SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_less_pascal_seqcst > SkipListMap_rcu_gpb_less_pascal_seqcst;
-        typedef cc::SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_less_pascal_seqcst > SkipListMap_rcu_gpt_less_pascal_seqcst;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_less_pascal_seqcst > SkipListMap_rcu_shb_less_pascal_seqcst;
-        typedef cc::SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_less_pascal_seqcst > SkipListMap_rcu_sht_less_pascal_seqcst;
-#endif
-
-        class traits_SkipListMap_less_pascal_stat: public cc::skip_list::make_traits <
-                co::less< less >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-                ,co::stat< cc::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        {};
-        typedef cc::SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_less_pascal_stat > SkipListMap_hp_less_pascal_stat;
-        typedef cc::SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_less_pascal_stat > SkipListMap_dhp_less_pascal_stat;
-        typedef cc::SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_less_pascal_stat > SkipListMap_nogc_less_pascal_stat;
-        typedef cc::SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_less_pascal_stat > SkipListMap_rcu_gpi_less_pascal_stat;
-        typedef cc::SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_less_pascal_stat > SkipListMap_rcu_gpb_less_pascal_stat;
-        typedef cc::SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_less_pascal_stat > SkipListMap_rcu_gpt_less_pascal_stat;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_less_pascal_stat > SkipListMap_rcu_shb_less_pascal_stat;
-        typedef cc::SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_less_pascal_stat > SkipListMap_rcu_sht_less_pascal_stat;
-#endif
-
-        class traits_SkipListMap_cmp_pascal: public cc::skip_list::make_traits <
-                co::compare< compare >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        {};
-        typedef cc::SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_cmp_pascal > SkipListMap_hp_cmp_pascal;
-        typedef cc::SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_cmp_pascal > SkipListMap_dhp_cmp_pascal;
-        typedef cc::SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_cmp_pascal > SkipListMap_nogc_cmp_pascal;
-        typedef cc::SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_cmp_pascal > SkipListMap_rcu_gpi_cmp_pascal;
-        typedef cc::SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_cmp_pascal > SkipListMap_rcu_gpb_cmp_pascal;
-        typedef cc::SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_cmp_pascal > SkipListMap_rcu_gpt_cmp_pascal;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_cmp_pascal > SkipListMap_rcu_shb_cmp_pascal;
-        typedef cc::SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_cmp_pascal > SkipListMap_rcu_sht_cmp_pascal;
-#endif
-
-        class traits_SkipListMap_cmp_pascal_stat: public cc::skip_list::make_traits <
-                co::compare< compare >
-                ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
-                ,co::stat< cc::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        {};
-        typedef cc::SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_cmp_pascal_stat > SkipListMap_hp_cmp_pascal_stat;
-        typedef cc::SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_cmp_pascal_stat > SkipListMap_dhp_cmp_pascal_stat;
-        typedef cc::SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_cmp_pascal_stat > SkipListMap_nogc_cmp_pascal_stat;
-        typedef cc::SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_cmp_pascal_stat > SkipListMap_rcu_gpi_cmp_pascal_stat;
-        typedef cc::SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_cmp_pascal_stat > SkipListMap_rcu_gpb_cmp_pascal_stat;
-        typedef cc::SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_cmp_pascal_stat > SkipListMap_rcu_gpt_cmp_pascal_stat;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_cmp_pascal_stat > SkipListMap_rcu_shb_cmp_pascal_stat;
-        typedef cc::SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_cmp_pascal_stat > SkipListMap_rcu_sht_cmp_pascal_stat;
-#endif
-
-        class traits_SkipListMap_less_xorshift: public cc::skip_list::make_traits <
-                co::less< less >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        {};
-        typedef cc::SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_less_xorshift > SkipListMap_hp_less_xorshift;
-        typedef cc::SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_less_xorshift > SkipListMap_dhp_less_xorshift;
-        typedef cc::SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_less_xorshift > SkipListMap_nogc_less_xorshift;
-        typedef cc::SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_less_xorshift > SkipListMap_rcu_gpi_less_xorshift;
-        typedef cc::SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_less_xorshift > SkipListMap_rcu_gpb_less_xorshift;
-        typedef cc::SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_less_xorshift > SkipListMap_rcu_gpt_less_xorshift;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_less_xorshift > SkipListMap_rcu_shb_less_xorshift;
-        typedef cc::SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_less_xorshift > SkipListMap_rcu_sht_less_xorshift;
-#endif
-
-        class traits_SkipListMap_less_xorshift_stat: public cc::skip_list::make_traits <
-                co::less< less >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-                ,co::stat< cc::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        {};
-        typedef cc::SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_less_xorshift_stat > SkipListMap_hp_less_xorshift_stat;
-        typedef cc::SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_less_xorshift_stat > SkipListMap_dhp_less_xorshift_stat;
-        typedef cc::SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_less_xorshift_stat > SkipListMap_nogc_less_xorshift_stat;
-        typedef cc::SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_less_xorshift_stat > SkipListMap_rcu_gpi_less_xorshift_stat;
-        typedef cc::SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_less_xorshift_stat > SkipListMap_rcu_gpb_less_xorshift_stat;
-        typedef cc::SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_less_xorshift_stat > SkipListMap_rcu_gpt_less_xorshift_stat;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_less_xorshift_stat > SkipListMap_rcu_shb_less_xorshift_stat;
-        typedef cc::SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_less_xorshift_stat > SkipListMap_rcu_sht_less_xorshift_stat;
-#endif
-
-        class traits_SkipListMap_cmp_xorshift: public cc::skip_list::make_traits <
-                co::compare< compare >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        {};
-        typedef cc::SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_cmp_xorshift > SkipListMap_hp_cmp_xorshift;
-        typedef cc::SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_cmp_xorshift > SkipListMap_dhp_cmp_xorshift;
-        typedef cc::SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_cmp_xorshift > SkipListMap_nogc_cmp_xorshift;
-        typedef cc::SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_cmp_xorshift > SkipListMap_rcu_gpi_cmp_xorshift;
-        typedef cc::SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_cmp_xorshift > SkipListMap_rcu_gpb_cmp_xorshift;
-        typedef cc::SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_cmp_xorshift > SkipListMap_rcu_gpt_cmp_xorshift;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_cmp_xorshift > SkipListMap_rcu_shb_cmp_xorshift;
-        typedef cc::SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_cmp_xorshift > SkipListMap_rcu_sht_cmp_xorshift;
-#endif
-
-        class traits_SkipListMap_cmp_xorshift_stat: public cc::skip_list::make_traits <
-                co::compare< compare >
-                ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
-                ,co::stat< cc::skip_list::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        {};
-        typedef cc::SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_cmp_xorshift_stat > SkipListMap_hp_cmp_xorshift_stat;
-        typedef cc::SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_cmp_xorshift_stat > SkipListMap_dhp_cmp_xorshift_stat;
-        typedef cc::SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_cmp_xorshift_stat > SkipListMap_nogc_cmp_xorshift_stat;
-        typedef cc::SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_cmp_xorshift_stat > SkipListMap_rcu_gpi_cmp_xorshift_stat;
-        typedef cc::SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_cmp_xorshift_stat > SkipListMap_rcu_gpb_cmp_xorshift_stat;
-        typedef cc::SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_cmp_xorshift_stat > SkipListMap_rcu_gpt_cmp_xorshift_stat;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_cmp_xorshift_stat > SkipListMap_rcu_shb_cmp_xorshift_stat;
-        typedef cc::SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_cmp_xorshift_stat > SkipListMap_rcu_sht_cmp_xorshift_stat;
-#endif
-
-
-        // ***************************************************************************
-        // EllenBinTreeMap
-        struct ellen_bintree_props {
-            struct hp_gc {
-                typedef cc::ellen_bintree::map_node<cds::gc::HP, Key, Value>        leaf_node;
-                typedef cc::ellen_bintree::internal_node< Key, leaf_node >          internal_node;
-                typedef cc::ellen_bintree::update_desc< leaf_node, internal_node >  update_desc;
-            };
-            struct dhp_gc {
-                typedef cc::ellen_bintree::map_node<cds::gc::DHP, Key, Value>       leaf_node;
-                typedef cc::ellen_bintree::internal_node< Key, leaf_node >          internal_node;
-                typedef cc::ellen_bintree::update_desc< leaf_node, internal_node >  update_desc;
-            };
-            struct gpi {
-                typedef cc::ellen_bintree::map_node<rcu_gpi, Key, Value>            leaf_node;
-                typedef cc::ellen_bintree::internal_node< Key, leaf_node >          internal_node;
-                typedef cc::ellen_bintree::update_desc< leaf_node, internal_node >  update_desc;
-            };
-            struct gpb {
-                typedef cc::ellen_bintree::map_node<rcu_gpb, Key, Value>            leaf_node;
-                typedef cc::ellen_bintree::internal_node< Key, leaf_node >          internal_node;
-                typedef cc::ellen_bintree::update_desc< leaf_node, internal_node >  update_desc;
-            };
-            struct gpt {
-                typedef cc::ellen_bintree::map_node<rcu_gpt, Key, Value>            leaf_node;
-                typedef cc::ellen_bintree::internal_node< Key, leaf_node >          internal_node;
-                typedef cc::ellen_bintree::update_desc< leaf_node, internal_node >  update_desc;
-            };
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-            struct shb {
-                typedef cc::ellen_bintree::map_node<rcu_shb, Key, Value>            leaf_node;
-                typedef cc::ellen_bintree::internal_node< Key, leaf_node >          internal_node;
-                typedef cc::ellen_bintree::update_desc< leaf_node, internal_node >  update_desc;
-            };
-            struct sht {
-                typedef cc::ellen_bintree::map_node<rcu_sht, Key, Value>            leaf_node;
-                typedef cc::ellen_bintree::internal_node< Key, leaf_node >          internal_node;
-                typedef cc::ellen_bintree::update_desc< leaf_node, internal_node >  update_desc;
-            };
-#endif
-        };
-
-        struct traits_EllenBinTreeMap: public cc::ellen_bintree::make_set_traits<
-                co::less< less >
-                ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        {};
-        struct traits_EllenBinTreeMap_hp : traits_EllenBinTreeMap {
-            typedef cds::memory::pool_allocator< typename ellen_bintree_props::hp_gc::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
-        };
-        typedef cc::EllenBinTreeMap< cds::gc::HP, Key, Value, traits_EllenBinTreeMap_hp >EllenBinTreeMap_hp;
-
-        struct traits_EllenBinTreeMap_dhp : traits_EllenBinTreeMap {
-            typedef cds::memory::pool_allocator< typename ellen_bintree_props::dhp_gc::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
-        };
-        typedef cc::EllenBinTreeMap< cds::gc::DHP, Key, Value, traits_EllenBinTreeMap_dhp >EllenBinTreeMap_dhp;
-
-        struct traits_EllenBinTreeMap_gpi : traits_EllenBinTreeMap {
-            typedef cds::memory::pool_allocator< typename ellen_bintree_props::gpi::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
-        };
-        typedef cc::EllenBinTreeMap< rcu_gpi, Key, Value, traits_EllenBinTreeMap_gpi >EllenBinTreeMap_rcu_gpi;
-
-        struct traits_EllenBinTreeMap_gpb : traits_EllenBinTreeMap {
-            typedef cds::memory::pool_allocator< typename ellen_bintree_props::gpb::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
-        };
-        typedef cc::EllenBinTreeMap< rcu_gpb, Key, Value, traits_EllenBinTreeMap_gpb >EllenBinTreeMap_rcu_gpb;
-
-        struct traits_EllenBinTreeMap_gpt : traits_EllenBinTreeMap {
-            typedef cds::memory::pool_allocator< typename ellen_bintree_props::gpt::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
-        };
-        typedef cc::EllenBinTreeMap< rcu_gpt, Key, Value, traits_EllenBinTreeMap_gpt >EllenBinTreeMap_rcu_gpt;
-
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        struct traits_EllenBinTreeMap_shb : traits_EllenBinTreeMap {
-            typedef cds::memory::pool_allocator< typename ellen_bintree_props::shb::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
-        };
-        typedef cc::EllenBinTreeMap< rcu_shb, Key, Value, traits_EllenBinTreeMap_shb >EllenBinTreeMap_rcu_shb;
-
-        struct traits_EllenBinTreeMap_sht : traits_EllenBinTreeMap {
-            typedef cds::memory::pool_allocator< typename ellen_bintree_props::sht::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
-        };
-        typedef cc::EllenBinTreeMap< rcu_sht, Key, Value, traits_EllenBinTreeMap_sht >EllenBinTreeMap_rcu_sht;
-#endif
-
-        struct traits_EllenBinTreeMap_yield : public traits_EllenBinTreeMap
-        {
-            typedef cds::backoff::yield back_off;
-        };
-        struct traits_EllenBinTreeMap_hp_yield : traits_EllenBinTreeMap_yield {
-            typedef cds::memory::pool_allocator< typename ellen_bintree_props::hp_gc::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
-        };
-        typedef cc::EllenBinTreeMap< cds::gc::HP, Key, Value, traits_EllenBinTreeMap_hp_yield >EllenBinTreeMap_hp_yield;
-
-        struct traits_EllenBinTreeMap_dhp_yield : traits_EllenBinTreeMap_yield {
-            typedef cds::memory::pool_allocator< typename ellen_bintree_props::dhp_gc::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
-        };
-        typedef cc::EllenBinTreeMap< cds::gc::DHP, Key, Value, traits_EllenBinTreeMap_dhp_yield >EllenBinTreeMap_dhp_yield;
-
-        struct traits_EllenBinTreeMap_gpb_yield : traits_EllenBinTreeMap_yield {
-            typedef cds::memory::pool_allocator< typename ellen_bintree_props::gpb::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
-        };
-        typedef cc::EllenBinTreeMap< rcu_gpb, Key, Value, traits_EllenBinTreeMap_gpb_yield >EllenBinTreeMap_rcu_gpb_yield;
-
-
-        struct traits_EllenBinTreeMap_stat: public cc::ellen_bintree::make_set_traits<
-                co::less< less >
-                ,cc::ellen_bintree::update_desc_allocator<
-                    cds::memory::pool_allocator< typename ellen_bintree_props::hp_gc::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
-                >
-                ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
-                ,co::stat< cc::ellen_bintree::stat<> >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        {};
-
-        struct traits_EllenBinTreeMap_stat_hp : public traits_EllenBinTreeMap_stat
-        {
-            typedef cds::memory::pool_allocator< typename ellen_bintree_props::hp_gc::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
-        };
-        typedef cc::EllenBinTreeMap< cds::gc::HP, Key, Value, traits_EllenBinTreeMap_stat_hp > EllenBinTreeMap_hp_stat;
-
-        struct traits_EllenBinTreeMap_stat_dhp : public traits_EllenBinTreeMap_stat
-        {
-            typedef cds::memory::pool_allocator< typename ellen_bintree_props::dhp_gc::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
-        };
-        typedef cc::EllenBinTreeMap< cds::gc::HP, Key, Value, traits_EllenBinTreeMap_stat_dhp > EllenBinTreeMap_dhp_stat;
-
-        struct traits_EllenBinTreeMap_stat_gpi : public traits_EllenBinTreeMap_stat
-        {
-            typedef cds::memory::pool_allocator< typename ellen_bintree_props::gpi::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
-        };
-        typedef cc::EllenBinTreeMap< rcu_gpi, Key, Value, traits_EllenBinTreeMap_stat_gpi > EllenBinTreeMap_rcu_gpi_stat;
-
-        struct traits_EllenBinTreeMap_stat_gpb : public traits_EllenBinTreeMap_stat
-        {
-            typedef cds::memory::pool_allocator< typename ellen_bintree_props::gpb::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
-        };
-        typedef cc::EllenBinTreeMap< rcu_gpb, Key, Value, traits_EllenBinTreeMap_stat_gpb > EllenBinTreeMap_rcu_gpb_stat;
-
-        struct traits_EllenBinTreeMap_stat_gpt : public traits_EllenBinTreeMap_stat
-        {
-            typedef cds::memory::pool_allocator< typename ellen_bintree_props::gpt::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
-        };
-        typedef cc::EllenBinTreeMap< rcu_gpt, Key, Value, traits_EllenBinTreeMap_stat_gpt > EllenBinTreeMap_rcu_gpt_stat;
-
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        struct traits_EllenBinTreeMap_stat_shb : public traits_EllenBinTreeMap_stat
-        {
-            typedef cds::memory::pool_allocator< typename ellen_bintree_props::shb::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
-        };
-        typedef cc::EllenBinTreeMap< rcu_shb, Key, Value, traits_EllenBinTreeMap_stat_shb > EllenBinTreeMap_rcu_shb_stat;
-
-        struct traits_EllenBinTreeMap_stat_sht : public traits_EllenBinTreeMap_stat
-        {
-            typedef cds::memory::pool_allocator< typename ellen_bintree_props::sht::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
-        };
-        typedef cc::EllenBinTreeMap< rcu_sht, Key, Value, traits_EllenBinTreeMap_stat_sht > EllenBinTreeMap_rcu_sht_stat;
-#endif
-
-        // ***************************************************************************
-        // BronsonAVLTreeMap
-        typedef cds::memory::vyukov_queue_pool< std::mutex > BronsonAVLTreeMap_simple_pool;
-        typedef cds::memory::lazy_vyukov_queue_pool< std::mutex > BronsonAVLTreeMap_lazy_pool;
-        typedef cds::memory::bounded_vyukov_queue_pool< std::mutex > BronsonAVLTreeMap_bounded_pool;
-
-        struct BronsonAVLTreeMap_less: public 
-            cc::bronson_avltree::make_traits<
-                co::less< less >
-                ,cc::bronson_avltree::relaxed_insert< false >
-                ,co::item_counter< cds::atomicity::item_counter >
-            >::type
-        {};
-        typedef cc::BronsonAVLTreeMap< rcu_gpi, Key, Value, BronsonAVLTreeMap_less > BronsonAVLTreeMap_rcu_gpi_less;
-        typedef cc::BronsonAVLTreeMap< rcu_gpb, Key, Value, BronsonAVLTreeMap_less > BronsonAVLTreeMap_rcu_gpb_less;
-        typedef cc::BronsonAVLTreeMap< rcu_gpt, Key, Value, BronsonAVLTreeMap_less > BronsonAVLTreeMap_rcu_gpt_less;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::BronsonAVLTreeMap< rcu_shb, Key, Value, BronsonAVLTreeMap_less > BronsonAVLTreeMap_rcu_shb_less;
-        typedef cc::BronsonAVLTreeMap< rcu_sht, Key, Value, BronsonAVLTreeMap_less > BronsonAVLTreeMap_rcu_sht_less;
-#endif
-        struct BronsonAVLTreeMap_cmp_stat: public 
-            cc::bronson_avltree::make_traits<
-                co::compare< compare >
-                ,cc::bronson_avltree::relaxed_insert< false >
-                ,co::item_counter< cds::atomicity::item_counter >
-                ,co::stat< cc::bronson_avltree::stat<>>
-            >::type
-        {};
-        typedef cc::BronsonAVLTreeMap< rcu_gpi, Key, Value, BronsonAVLTreeMap_cmp_stat > BronsonAVLTreeMap_rcu_gpi_cmp_stat;
-        typedef cc::BronsonAVLTreeMap< rcu_gpb, Key, Value, BronsonAVLTreeMap_cmp_stat > BronsonAVLTreeMap_rcu_gpb_cmp_stat;
-        typedef cc::BronsonAVLTreeMap< rcu_gpt, Key, Value, BronsonAVLTreeMap_cmp_stat > BronsonAVLTreeMap_rcu_gpt_cmp_stat;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::BronsonAVLTreeMap< rcu_shb, Key, Value, BronsonAVLTreeMap_cmp_stat > BronsonAVLTreeMap_rcu_shb_cmp_stat;
-        typedef cc::BronsonAVLTreeMap< rcu_sht, Key, Value, BronsonAVLTreeMap_cmp_stat > BronsonAVLTreeMap_rcu_sht_cmp_stat;
-#endif
-
-        struct BronsonAVLTreeMap_less_pool_simple: public BronsonAVLTreeMap_less
-        {
-            typedef cds::sync::pool_monitor<BronsonAVLTreeMap_simple_pool> sync_monitor;
-        };
-        typedef cc::BronsonAVLTreeMap< rcu_gpi, Key, Value, BronsonAVLTreeMap_less_pool_simple > BronsonAVLTreeMap_rcu_gpi_less_pool_simple;
-        typedef cc::BronsonAVLTreeMap< rcu_gpb, Key, Value, BronsonAVLTreeMap_less_pool_simple > BronsonAVLTreeMap_rcu_gpb_less_pool_simple;
-        typedef cc::BronsonAVLTreeMap< rcu_gpt, Key, Value, BronsonAVLTreeMap_less_pool_simple > BronsonAVLTreeMap_rcu_gpt_less_pool_simple;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::BronsonAVLTreeMap< rcu_shb, Key, Value, BronsonAVLTreeMap_less_pool_simple > BronsonAVLTreeMap_rcu_shb_less_pool_simple;
-        typedef cc::BronsonAVLTreeMap< rcu_sht, Key, Value, BronsonAVLTreeMap_less_pool_simple > BronsonAVLTreeMap_rcu_sht_less_pool_simple;
-#endif
-        struct BronsonAVLTreeMap_less_pool_simple_stat : public BronsonAVLTreeMap_less
-        {
-            typedef cc::bronson_avltree::stat<> stat;
-            typedef cds::sync::pool_monitor<BronsonAVLTreeMap_simple_pool, cds::opt::none, true > sync_monitor;
-        };
-        typedef cc::BronsonAVLTreeMap< rcu_gpi, Key, Value, BronsonAVLTreeMap_less_pool_simple_stat > BronsonAVLTreeMap_rcu_gpi_less_pool_simple_stat;
-        typedef cc::BronsonAVLTreeMap< rcu_gpb, Key, Value, BronsonAVLTreeMap_less_pool_simple_stat > BronsonAVLTreeMap_rcu_gpb_less_pool_simple_stat;
-        typedef cc::BronsonAVLTreeMap< rcu_gpt, Key, Value, BronsonAVLTreeMap_less_pool_simple_stat > BronsonAVLTreeMap_rcu_gpt_less_pool_simple_stat;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::BronsonAVLTreeMap< rcu_shb, Key, Value, BronsonAVLTreeMap_less_pool_simple_stat > BronsonAVLTreeMap_rcu_shb_less_pool_simple_stat;
-        typedef cc::BronsonAVLTreeMap< rcu_sht, Key, Value, BronsonAVLTreeMap_less_pool_simple_stat > BronsonAVLTreeMap_rcu_sht_less_pool_simple_stat;
-#endif
-        struct BronsonAVLTreeMap_less_pool_lazy: public BronsonAVLTreeMap_less
-        {
-            typedef cds::sync::pool_monitor<BronsonAVLTreeMap_lazy_pool> sync_monitor;
-            static CDS_CONSTEXPR bool const relaxed_insert = true;
-        };
-        typedef cc::BronsonAVLTreeMap< rcu_gpi, Key, Value, BronsonAVLTreeMap_less_pool_lazy > BronsonAVLTreeMap_rcu_gpi_less_pool_lazy;
-        typedef cc::BronsonAVLTreeMap< rcu_gpb, Key, Value, BronsonAVLTreeMap_less_pool_lazy > BronsonAVLTreeMap_rcu_gpb_less_pool_lazy;
-        typedef cc::BronsonAVLTreeMap< rcu_gpt, Key, Value, BronsonAVLTreeMap_less_pool_lazy > BronsonAVLTreeMap_rcu_gpt_less_pool_lazy;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::BronsonAVLTreeMap< rcu_shb, Key, Value, BronsonAVLTreeMap_less_pool_lazy > BronsonAVLTreeMap_rcu_shb_less_pool_lazy;
-        typedef cc::BronsonAVLTreeMap< rcu_sht, Key, Value, BronsonAVLTreeMap_less_pool_lazy > BronsonAVLTreeMap_rcu_sht_less_pool_lazy;
-#endif
-        struct BronsonAVLTreeMap_less_pool_lazy_stat : public BronsonAVLTreeMap_less
-        {
-            typedef cc::bronson_avltree::stat<> stat;
-            typedef cds::sync::pool_monitor<BronsonAVLTreeMap_lazy_pool, cds::opt::none, true > sync_monitor;
-            static CDS_CONSTEXPR bool const relaxed_insert = true;
-        };
-        typedef cc::BronsonAVLTreeMap< rcu_gpi, Key, Value, BronsonAVLTreeMap_less_pool_lazy_stat > BronsonAVLTreeMap_rcu_gpi_less_pool_lazy_stat;
-        typedef cc::BronsonAVLTreeMap< rcu_gpb, Key, Value, BronsonAVLTreeMap_less_pool_lazy_stat > BronsonAVLTreeMap_rcu_gpb_less_pool_lazy_stat;
-        typedef cc::BronsonAVLTreeMap< rcu_gpt, Key, Value, BronsonAVLTreeMap_less_pool_lazy_stat > BronsonAVLTreeMap_rcu_gpt_less_pool_lazy_stat;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::BronsonAVLTreeMap< rcu_shb, Key, Value, BronsonAVLTreeMap_less_pool_lazy_stat > BronsonAVLTreeMap_rcu_shb_less_pool_lazy_stat;
-        typedef cc::BronsonAVLTreeMap< rcu_sht, Key, Value, BronsonAVLTreeMap_less_pool_lazy_stat > BronsonAVLTreeMap_rcu_sht_less_pool_lazy_stat;
-#endif
-        struct BronsonAVLTreeMap_less_pool_bounded: public BronsonAVLTreeMap_less
-        {
-            typedef cds::sync::pool_monitor<BronsonAVLTreeMap_bounded_pool> sync_monitor;
-            static CDS_CONSTEXPR bool const relaxed_insert = true;
-        };
-        typedef cc::BronsonAVLTreeMap< rcu_gpi, Key, Value, BronsonAVLTreeMap_less_pool_bounded > BronsonAVLTreeMap_rcu_gpi_less_pool_bounded;
-        typedef cc::BronsonAVLTreeMap< rcu_gpb, Key, Value, BronsonAVLTreeMap_less_pool_bounded > BronsonAVLTreeMap_rcu_gpb_less_pool_bounded;
-        typedef cc::BronsonAVLTreeMap< rcu_gpt, Key, Value, BronsonAVLTreeMap_less_pool_bounded > BronsonAVLTreeMap_rcu_gpt_less_pool_bounded;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::BronsonAVLTreeMap< rcu_shb, Key, Value, BronsonAVLTreeMap_less_pool_bounded > BronsonAVLTreeMap_rcu_shb_less_pool_bounded;
-        typedef cc::BronsonAVLTreeMap< rcu_sht, Key, Value, BronsonAVLTreeMap_less_pool_bounded > BronsonAVLTreeMap_rcu_sht_less_pool_bounded;
-#endif
-        struct BronsonAVLTreeMap_less_pool_bounded_stat : public BronsonAVLTreeMap_less
-        {
-            typedef cc::bronson_avltree::stat<> stat;
-            typedef cds::sync::pool_monitor<BronsonAVLTreeMap_bounded_pool, cds::opt::none, true > sync_monitor;
-            static CDS_CONSTEXPR bool const relaxed_insert = true;
-        };
-        typedef cc::BronsonAVLTreeMap< rcu_gpi, Key, Value, BronsonAVLTreeMap_less_pool_bounded_stat > BronsonAVLTreeMap_rcu_gpi_less_pool_bounded_stat;
-        typedef cc::BronsonAVLTreeMap< rcu_gpb, Key, Value, BronsonAVLTreeMap_less_pool_bounded_stat > BronsonAVLTreeMap_rcu_gpb_less_pool_bounded_stat;
-        typedef cc::BronsonAVLTreeMap< rcu_gpt, Key, Value, BronsonAVLTreeMap_less_pool_bounded_stat > BronsonAVLTreeMap_rcu_gpt_less_pool_bounded_stat;
-#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::BronsonAVLTreeMap< rcu_shb, Key, Value, BronsonAVLTreeMap_less_pool_bounded_stat > BronsonAVLTreeMap_rcu_shb_less_pool_bounded_stat;
-        typedef cc::BronsonAVLTreeMap< rcu_sht, Key, Value, BronsonAVLTreeMap_less_pool_bounded_stat > BronsonAVLTreeMap_rcu_sht_less_pool_bounded_stat;
-#endif
-
-        // ***************************************************************************
-        // Standard implementations
-
-        typedef StdMap< Key, Value, cds::sync::spin >     StdMap_Spin;
-        typedef StdMap< Key, Value, lock::NoLock>         StdMap_NoLock;
-
-        typedef StdHashMap< Key, Value, cds::sync::spin > StdHashMap_Spin;
-        typedef StdHashMap< Key, Value, lock::NoLock >    StdHashMap_NoLock;
-
-    };
-
-    template <typename Map>
-    static inline void print_stat( Map const& /*m*/ )
-    {}
-
-    template <typename Map>
-    static inline void check_before_cleanup( Map& /*m*/ )
-    {}
-
-    template <typename Map>
-    static inline void additional_cleanup( Map& /*m*/ )
-    {}
-
-    template <typename Map>
-    static inline void additional_check( Map& /*m*/ )
-    {}
-
-
-    template <typename K, typename T, typename Traits >
-    static inline void print_stat( cc::CuckooMap< K, T, Traits > const& m )
-    {
-        CPPUNIT_MSG( m.statistics() << m.mutex_policy_statistics() );
-    }
-
-    template <typename GC, typename K, typename T, typename Traits >
-    static inline void print_stat( cc::SkipListMap< GC, K, T, Traits > const& m )
-    {
-        CPPUNIT_MSG( m.statistics() );
-    }
-
-    template <typename GC, typename K, typename T, typename Traits >
-    static inline void print_stat( cc::SplitListMap< GC, K, T, Traits > const& m )
-    {
-        CPPUNIT_MSG( m.statistics() );
-    }
-
-    // EllenBinTreeMap
-    template <typename GC, typename Key, typename T, typename Traits>
-    static inline void print_stat( cc::EllenBinTreeMap<GC, Key, T, Traits> const& s )
-    {
-        CPPUNIT_MSG( s.statistics() );
-    }
-    template <typename GC, typename Key, typename T, typename Traits>
-    static inline void additional_cleanup( cc::EllenBinTreeMap<GC, Key, T, Traits>& /*s*/ )
-    {
-        ellen_bintree_pool::internal_node_counter::reset();
-    }
-    namespace ellen_bintree_check {
-        static inline void check_stat( cds::intrusive::ellen_bintree::empty_stat const& /*s*/ )
-        {
-            // This check is not valid for thread-based RCU
-            /*
-            CPPUNIT_CHECK_CURRENT_EX( ellen_bintree_pool::internal_node_counter::m_nAlloc.get() == ellen_bintree_pool::internal_node_counter::m_nFree.get(),
-                "m_nAlloc=" << ellen_bintree_pool::internal_node_counter::m_nAlloc.get()
-                << ", m_nFree=" << ellen_bintree_pool::internal_node_counter::m_nFree.get()
-                );
-            */
-        }
-
-        static inline void check_stat( cds::intrusive::ellen_bintree::stat<> const& stat )
-        {
-            CPPUNIT_CHECK_CURRENT_EX( stat.m_nInternalNodeCreated == stat.m_nInternalNodeDeleted,
-                "m_nInternalNodeCreated=" << stat.m_nInternalNodeCreated
-                << " m_nInternalNodeDeleted=" << stat.m_nInternalNodeDeleted );
-            CPPUNIT_CHECK_CURRENT_EX( stat.m_nUpdateDescCreated == stat.m_nUpdateDescDeleted,
-                "m_nUpdateDescCreated=" << stat.m_nUpdateDescCreated
-                << " m_nUpdateDescDeleted=" << stat.m_nUpdateDescDeleted );
-            CPPUNIT_CHECK_CURRENT_EX( ellen_bintree_pool::internal_node_counter::m_nAlloc.get() == stat.m_nInternalNodeCreated,
-                "allocated=" << ellen_bintree_pool::internal_node_counter::m_nAlloc.get()
-                << "m_nInternalNodeCreated=" << stat.m_nInternalNodeCreated );
-        }
-    }   // namespace ellen_bintree_check
-    template <typename GC, typename Key, typename T, typename Traits>
-    static inline void additional_check( cc::EllenBinTreeMap<GC, Key, T, Traits>& s )
-    {
-        GC::force_dispose();
-        ellen_bintree_check::check_stat( s.statistics() );
-    }
-
-    template <typename GC, typename Key, typename T, typename Traits>
-    static inline void check_before_cleanup( cc::EllenBinTreeMap<GC, Key, T, Traits>& m )
-    {
-        CPPUNIT_MSG( "  Check internal consistency (single-threaded)..." );
-        CPPUNIT_CHECK_CURRENT( m.check_consistency() );
-    }
-
-
-    // BronsonAVLTreeMap
-    template <typename GC, typename Key, typename T, typename Traits>
-    static inline void print_stat( cc::BronsonAVLTreeMap<GC, Key, T, Traits> const& m )
-    {
-        CPPUNIT_MSG( m.statistics() );
-        CPPUNIT_MSG( m.monitor().statistics() );
-    }
-
-    template <typename GC, typename Key, typename T, typename Traits>
-    static inline void check_before_cleanup( cc::BronsonAVLTreeMap<GC, Key, T, Traits>& m )
-    {
-        CPPUNIT_MSG( "  Check internal consistency (single-threaded)..." );
-        bool bOk = m.check_consistency([]( size_t nLevel, size_t hLeft, size_t hRight )
-            { 
-                CPPUNIT_MSG( "Tree violation on level=" << nLevel << ": hLeft=" << hLeft << ", hRight=" << hRight ) 
-            });
-        CPPUNIT_CHECK_CURRENT_EX( bOk, "check_consistency failed");
-    }
-
-    template <typename K, typename V, typename Traits>
-    static inline void print_stat( CuckooMap< K, V, Traits > const& m )
-    {
-        typedef CuckooMap< K, V, Traits > map_type;
-        print_stat( static_cast<typename map_type::cuckoo_base_class const&>(m) );
-    }
-}   // namespace map2
-
-#endif // ifndef CDSUNIT_MAP_TYPES_H