3 #ifndef CDSUNIT_MAP_TYPE_MULTILEVEL_HASHMAP_H
4 #define CDSUNIT_MAP_TYPE_MULTILEVEL_HASHMAP_H
6 #include "map2/map_type.h"
8 #include <cds/container/multilevel_hashmap_hp.h>
9 #include <cds/container/multilevel_hashmap_dhp.h>
11 #include "print_multilevel_hashset_stat.h"
12 #include "hashing/hash_func.h"
16 template <class GC, typename Key, typename T, typename Traits = cc::multilevel_hashmap::traits>
17 class MultiLevelHashMap : public cc::MultiLevelHashMap< GC, Key, T, Traits >
19 typedef cc::MultiLevelHashMap< GC, Key, T, Traits > base_class;
21 template <typename Config>
22 MultiLevelHashMap( Config const& cfg)
23 : base_class( cfg.c_nMultiLevelMap_HeadBits, cfg.c_nMultiLevelMap_ArrayBits )
27 static CDS_CONSTEXPR bool const c_bExtractSupported = true;
28 static CDS_CONSTEXPR bool const c_bLoadFactorDepended = false;
31 struct tag_MultiLevelHashMap;
33 template <typename Key, typename Value>
34 struct map_type< tag_MultiLevelHashMap, Key, Value >: public map_type_base< Key, Value >
36 typedef map_type_base< Key, Value > base_class;
37 typedef typename base_class::compare compare;
38 typedef typename base_class::less less;
40 typedef MultiLevelHashMap< cds::gc::HP, Key, Value > MultiLevelHashMap_hp_stdhash;
41 typedef MultiLevelHashMap< cds::gc::DHP, Key, Value > MultiLevelHashMap_dhp_stdhash;
43 struct traits_MultiLevelHashMap_stat: public cc::multilevel_hashmap::make_traits<
44 co::stat< cc::multilevel_hashmap::stat<>>
48 typedef MultiLevelHashMap< cds::gc::HP, Key, Value, traits_MultiLevelHashMap_stat > MultiLevelHashMap_hp_stdhash_stat;
49 typedef MultiLevelHashMap< cds::gc::DHP, Key, Value, traits_MultiLevelHashMap_stat > MultiLevelHashMap_dhp_stdhash_stat;
52 struct traits_MultiLevelHashMap_sha256 : public cc::multilevel_hashmap::traits
54 typedef ::hashing::sha256 hash;
56 typedef MultiLevelHashMap< cds::gc::HP, Key, Value, traits_MultiLevelHashMap_sha256 > MultiLevelHashMap_hp_sha256;
57 typedef MultiLevelHashMap< cds::gc::DHP, Key, Value, traits_MultiLevelHashMap_sha256 > MultiLevelHashMap_dhp_sha256;
59 struct traits_MultiLevelHashMap_sha256_stat : public traits_MultiLevelHashMap_sha256
61 typedef cc::multilevel_hashmap::stat<> stat;
63 typedef MultiLevelHashMap< cds::gc::HP, Key, Value, traits_MultiLevelHashMap_sha256_stat > MultiLevelHashMap_hp_sha256_stat;
64 typedef MultiLevelHashMap< cds::gc::DHP, Key, Value, traits_MultiLevelHashMap_sha256_stat > MultiLevelHashMap_dhp_sha256_stat;
67 struct traits_MultiLevelHashMap_md5 : public cc::multilevel_hashmap::traits
69 typedef ::hashing::md5 hash;
71 typedef MultiLevelHashMap< cds::gc::HP, Key, Value, traits_MultiLevelHashMap_md5 > MultiLevelHashMap_hp_md5;
72 typedef MultiLevelHashMap< cds::gc::DHP, Key, Value, traits_MultiLevelHashMap_md5 > MultiLevelHashMap_dhp_md5;
74 struct traits_MultiLevelHashMap_md5_stat : public traits_MultiLevelHashMap_md5
76 typedef cc::multilevel_hashmap::stat<> stat;
78 typedef MultiLevelHashMap< cds::gc::HP, Key, Value, traits_MultiLevelHashMap_md5_stat > MultiLevelHashMap_hp_md5_stat;
79 typedef MultiLevelHashMap< cds::gc::DHP, Key, Value, traits_MultiLevelHashMap_md5_stat > MultiLevelHashMap_dhp_md5_stat;
82 #if CDS_BUILD_BITS == 64
83 struct traits_MultiLevelHashMap_city64 : public cc::multilevel_hashmap::traits
85 typedef ::hashing::city64 hash;
86 typedef ::hashing::city64::less less;
88 typedef MultiLevelHashMap< cds::gc::HP, Key, Value, traits_MultiLevelHashMap_city64 > MultiLevelHashMap_hp_city64;
89 typedef MultiLevelHashMap< cds::gc::DHP, Key, Value, traits_MultiLevelHashMap_city64 > MultiLevelHashMap_dhp_city64;
91 struct traits_MultiLevelHashMap_city64_stat : public traits_MultiLevelHashMap_city64
93 typedef cc::multilevel_hashmap::stat<> stat;
95 typedef MultiLevelHashMap< cds::gc::HP, Key, Value, traits_MultiLevelHashMap_city64_stat > MultiLevelHashMap_hp_city64_stat;
96 typedef MultiLevelHashMap< cds::gc::DHP, Key, Value, traits_MultiLevelHashMap_city64_stat > MultiLevelHashMap_dhp_city64_stat;
98 struct traits_MultiLevelHashMap_city128 : public cc::multilevel_hashmap::traits
100 typedef ::hashing::city128 hash;
101 typedef ::hashing::city128::less less;
103 typedef MultiLevelHashMap< cds::gc::HP, Key, Value, traits_MultiLevelHashMap_city128 > MultiLevelHashMap_hp_city128;
104 typedef MultiLevelHashMap< cds::gc::DHP, Key, Value, traits_MultiLevelHashMap_city128 > MultiLevelHashMap_dhp_city128;
106 struct traits_MultiLevelHashMap_city128_stat : public traits_MultiLevelHashMap_city128
108 typedef cc::multilevel_hashmap::stat<> stat;
110 typedef MultiLevelHashMap< cds::gc::HP, Key, Value, traits_MultiLevelHashMap_city128_stat > MultiLevelHashMap_hp_city128_stat;
111 typedef MultiLevelHashMap< cds::gc::DHP, Key, Value, traits_MultiLevelHashMap_city128_stat > MultiLevelHashMap_dhp_city128_stat;
112 #endif // CDS_BUILD_BITS == 64
115 template <typename GC, typename K, typename T, typename Traits >
116 static inline void print_stat( MultiLevelHashMap< GC, K, T, Traits > const& m )
118 CPPUNIT_MSG( m.statistics() );
123 #endif // #ifndef CDSUNIT_MAP_TYPE_MULTILEVEL_HASHMAP_H