3 #ifndef CDSUNIT_MAP_TYPE_CUCKOO_H
4 #define CDSUNIT_MAP_TYPE_CUCKOO_H
6 #include "map2/map_type.h"
8 #include <cds/container/cuckoo_map.h>
10 #include "print_cuckoo_stat.h"
14 template <typename K, typename V, typename Traits>
16 public cc::CuckooMap< K, V, Traits >
19 typedef cc::CuckooMap< K, V, Traits > cuckoo_base_class;
22 CuckooMap( size_t nCapacity, size_t nLoadFactor )
23 : cuckoo_base_class( nCapacity / (nLoadFactor * 16), (unsigned int) 4 )
26 template <typename Q, typename Pred>
27 bool erase_with( Q const& key, Pred /*pred*/ )
29 return cuckoo_base_class::erase_with( key, typename std::conditional< cuckoo_base_class::c_isSorted, Pred, typename Pred::equal_to>::type() );
33 template <typename Key, typename Value>
34 struct map_type< cds::intrusive::cuckoo::implementation_tag, 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;
39 typedef typename base_class::equal_to equal_to;
40 typedef typename base_class::key_hash key_hash;
41 typedef typename base_class::hash hash;
42 typedef typename base_class::hash2 hash2;
44 template <typename Traits>
45 struct traits_CuckooStripedMap: public Traits
47 typedef cc::cuckoo::striping<> mutex_policy;
49 template <typename Traits>
50 struct traits_CuckooRefinableMap : public Traits
52 typedef cc::cuckoo::refinable<> mutex_policy;
55 struct traits_CuckooMap_list_unord :
56 public cc::cuckoo::make_traits <
57 cc::cuckoo::probeset_type< cc::cuckoo::list >
58 , co::equal_to< equal_to >
59 , co::hash< std::tuple< hash, hash2 > >
62 typedef CuckooMap< Key, Value, traits_CuckooStripedMap<traits_CuckooMap_list_unord>> CuckooStripedMap_list_unord;
63 typedef CuckooMap< Key, Value, traits_CuckooRefinableMap<traits_CuckooMap_list_unord>> CuckooRefinableMap_list_unord;
65 struct traits_CuckooMap_list_unord_stat : public traits_CuckooMap_list_unord
67 typedef cc::cuckoo::stat stat;
69 typedef CuckooMap< Key, Value, traits_CuckooStripedMap<traits_CuckooMap_list_unord_stat>> CuckooStripedMap_list_unord_stat;
70 typedef CuckooMap< Key, Value, traits_CuckooRefinableMap<traits_CuckooMap_list_unord_stat>> CuckooRefinableMap_list_unord_stat;
72 struct traits_CuckooMap_list_unord_storehash : public traits_CuckooMap_list_unord
74 static CDS_CONSTEXPR const bool store_hash = true;
76 typedef CuckooMap< Key, Value, traits_CuckooStripedMap<traits_CuckooMap_list_unord_storehash>> CuckooStripedMap_list_unord_storehash;
77 typedef CuckooMap< Key, Value, traits_CuckooRefinableMap<traits_CuckooMap_list_unord_storehash>> CuckooRefinableMap_list_unord_storehash;
79 struct traits_CuckooMap_list_ord :
80 public cc::cuckoo::make_traits <
81 cc::cuckoo::probeset_type< cc::cuckoo::list >
82 , co::compare< compare >
83 , co::hash< std::tuple< hash, hash2 > >
86 typedef CuckooMap< Key, Value, traits_CuckooStripedMap<traits_CuckooMap_list_ord>> CuckooStripedMap_list_ord;
87 typedef CuckooMap< Key, Value, traits_CuckooRefinableMap<traits_CuckooMap_list_ord>> CuckooRefinableMap_list_ord;
89 struct traits_CuckooMap_list_ord_stat : public traits_CuckooMap_list_ord
91 typedef cc::cuckoo::stat stat;
93 typedef CuckooMap< Key, Value, traits_CuckooStripedMap<traits_CuckooMap_list_ord_stat>> CuckooStripedMap_list_ord_stat;
94 typedef CuckooMap< Key, Value, traits_CuckooRefinableMap<traits_CuckooMap_list_ord_stat>> CuckooRefinableMap_list_ord_stat;
96 struct traits_CuckooMap_list_ord_storehash : public traits_CuckooMap_list_ord
98 static CDS_CONSTEXPR const bool store_hash = true;
100 typedef CuckooMap< Key, Value, traits_CuckooStripedMap<traits_CuckooMap_list_ord_storehash>> CuckooStripedMap_list_ord_storehash;
101 typedef CuckooMap< Key, Value, traits_CuckooRefinableMap<traits_CuckooMap_list_ord_storehash>> CuckooRefinableMap_list_ord_storehash;
103 struct traits_CuckooMap_vector_unord :
104 public cc::cuckoo::make_traits <
105 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
106 , co::equal_to< equal_to >
107 , co::hash< std::tuple< hash, hash2 > >
110 typedef CuckooMap< Key, Value, traits_CuckooStripedMap<traits_CuckooMap_vector_unord>> CuckooStripedMap_vector_unord;
111 typedef CuckooMap< Key, Value, traits_CuckooRefinableMap<traits_CuckooMap_vector_unord>> CuckooRefinableMap_vector_unord;
113 struct traits_CuckooMap_vector_unord_stat : public traits_CuckooMap_vector_unord
115 typedef cc::cuckoo::stat stat;
117 typedef CuckooMap< Key, Value, traits_CuckooStripedMap<traits_CuckooMap_vector_unord_stat>> CuckooStripedMap_vector_unord_stat;
118 typedef CuckooMap< Key, Value, traits_CuckooRefinableMap<traits_CuckooMap_vector_unord_stat>> CuckooRefinableMap_vector_unord_stat;
120 struct traits_CuckooMap_vector_unord_storehash : public traits_CuckooMap_vector_unord
122 static CDS_CONSTEXPR const bool store_hash = true;
124 typedef CuckooMap< Key, Value, traits_CuckooStripedMap<traits_CuckooMap_vector_unord_storehash>> CuckooStripedMap_vector_unord_storehash;
125 typedef CuckooMap< Key, Value, traits_CuckooRefinableMap<traits_CuckooMap_vector_unord_storehash>> CuckooRefinableMap_vector_unord_storehash;
127 struct traits_CuckooMap_vector_ord :
128 public cc::cuckoo::make_traits <
129 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
130 , co::compare< compare >
131 , co::hash< std::tuple< hash, hash2 > >
134 typedef CuckooMap< Key, Value, traits_CuckooStripedMap<traits_CuckooMap_vector_ord>> CuckooStripedMap_vector_ord;
135 typedef CuckooMap< Key, Value, traits_CuckooRefinableMap<traits_CuckooMap_vector_ord>> CuckooRefinableMap_vector_ord;
137 struct traits_CuckooMap_vector_ord_stat : public traits_CuckooMap_vector_ord
139 typedef cc::cuckoo::stat stat;
141 typedef CuckooMap< Key, Value, traits_CuckooStripedMap<traits_CuckooMap_vector_ord_stat>> CuckooStripedMap_vector_ord_stat;
142 typedef CuckooMap< Key, Value, traits_CuckooRefinableMap<traits_CuckooMap_vector_ord_stat>> CuckooRefinableMap_vector_ord_stat;
144 struct traits_CuckooMap_vector_ord_storehash : public traits_CuckooMap_vector_ord
146 static CDS_CONSTEXPR const bool store_hash = true;
148 typedef CuckooMap< Key, Value, traits_CuckooStripedMap<traits_CuckooMap_vector_ord_storehash>> CuckooStripedMap_vector_ord_storehash;
149 typedef CuckooMap< Key, Value, traits_CuckooRefinableMap<traits_CuckooMap_vector_ord_storehash>> CuckooRefinableMap_vector_ord_storehash;
153 template <typename K, typename T, typename Traits >
154 static inline void print_stat( cc::CuckooMap< K, T, Traits > const& m )
156 CPPUNIT_MSG( m.statistics() << m.mutex_policy_statistics() );
159 template <typename K, typename V, typename Traits>
160 static inline void print_stat( CuckooMap< K, V, Traits > const& m )
162 typedef CuckooMap< K, V, Traits > map_type;
163 print_stat( static_cast<typename map_type::cuckoo_base_class const&>(m) );
168 #endif // ifndef CDSUNIT_MAP_TYPE_CUCKOO_H