3 #ifndef CDSUNIT_SET_TYPE_CUCKOO_H
4 #define CDSUNIT_SET_TYPE_CUCKOO_H
6 #include "set2/set_type.h"
8 #include <cds/container/cuckoo_set.h>
9 #include "print_cuckoo_stat.h"
13 template <typename V, typename Traits>
14 class CuckooSet : public cc::CuckooSet< V, Traits >
17 typedef cc::CuckooSet< V, Traits > cuckoo_base_class;
20 CuckooSet( size_t nCapacity, size_t nLoadFactor )
21 : cuckoo_base_class( nCapacity / (nLoadFactor * 16), (unsigned int)4 )
24 template <typename Q, typename Pred>
25 bool erase_with( Q const& key, Pred /*pred*/ )
27 return cuckoo_base_class::erase_with( key, typename std::conditional< cuckoo_base_class::c_isSorted, Pred, typename Pred::equal_to>::type() );
32 template <typename Key, typename Val>
33 struct set_type< cds::intrusive::cuckoo::implementation_tag, Key, Val >: public set_type_base< Key, Val >
35 typedef set_type_base< Key, Val > base_class;
36 typedef typename base_class::key_val key_val;
37 typedef typename base_class::compare compare;
38 typedef typename base_class::equal_to equal_to;
39 typedef typename base_class::less less;
40 typedef typename base_class::hash hash;
41 typedef typename base_class::hash2 hash2;
43 // ***************************************************************************
46 template <typename Traits>
47 struct traits_CuckooStripedSet : public Traits
49 typedef cc::cuckoo::striping<> mutex_policy;
51 template <typename Traits>
52 struct traits_CuckooRefinableSet : public Traits
54 typedef cc::cuckoo::refinable<> mutex_policy;
57 struct traits_CuckooSet_list_unord :
58 public cc::cuckoo::make_traits <
59 cc::cuckoo::probeset_type< cc::cuckoo::list >
60 , co::equal_to< equal_to >
61 , co::hash< std::tuple< hash, hash2 > >
64 typedef CuckooSet< key_val, traits_CuckooStripedSet<traits_CuckooSet_list_unord>> CuckooStripedSet_list_unord;
65 typedef CuckooSet< key_val, traits_CuckooRefinableSet<traits_CuckooSet_list_unord>> CuckooRefinableSet_list_unord;
67 struct traits_CuckooSet_list_unord_stat : public traits_CuckooSet_list_unord
69 typedef cc::cuckoo::stat stat;
71 typedef CuckooSet< key_val, traits_CuckooStripedSet<traits_CuckooSet_list_unord_stat>> CuckooStripedSet_list_unord_stat;
72 typedef CuckooSet< key_val, traits_CuckooRefinableSet<traits_CuckooSet_list_unord_stat>> CuckooRefinableSet_list_unord_stat;
74 struct traits_CuckooSet_list_unord_storehash : public traits_CuckooSet_list_unord
76 static CDS_CONSTEXPR const bool store_hash = true;
78 typedef CuckooSet< key_val, traits_CuckooStripedSet<traits_CuckooSet_list_unord_storehash>> CuckooStripedSet_list_unord_storehash;
79 typedef CuckooSet< key_val, traits_CuckooRefinableSet<traits_CuckooSet_list_unord_storehash>> CuckooRefinableSet_list_unord_storehash;
81 struct traits_CuckooSet_list_ord :
82 public cc::cuckoo::make_traits <
83 cc::cuckoo::probeset_type< cc::cuckoo::list >
84 , co::compare< compare >
85 , co::hash< std::tuple< hash, hash2 > >
88 typedef CuckooSet< key_val, traits_CuckooStripedSet<traits_CuckooSet_list_ord>> CuckooStripedSet_list_ord;
89 typedef CuckooSet< key_val, traits_CuckooRefinableSet<traits_CuckooSet_list_ord>> CuckooRefinableSet_list_ord;
91 struct traits_CuckooSet_list_ord_stat : public traits_CuckooSet_list_ord
93 typedef cc::cuckoo::stat stat;
95 typedef CuckooSet< key_val, traits_CuckooStripedSet<traits_CuckooSet_list_ord_stat>> CuckooStripedSet_list_ord_stat;
96 typedef CuckooSet< key_val, traits_CuckooRefinableSet<traits_CuckooSet_list_ord_stat>> CuckooRefinableSet_list_ord_stat;
98 struct traits_CuckooSet_list_ord_storehash : public traits_CuckooSet_list_ord
100 static CDS_CONSTEXPR const bool store_hash = true;
102 typedef CuckooSet< key_val, traits_CuckooStripedSet<traits_CuckooSet_list_ord_storehash>> CuckooStripedSet_list_ord_storehash;
103 typedef CuckooSet< key_val, traits_CuckooRefinableSet<traits_CuckooSet_list_ord_storehash>> CuckooRefinableSet_list_ord_storehash;
106 struct traits_CuckooSet_vector_unord :
107 public cc::cuckoo::make_traits <
108 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
109 , co::equal_to< equal_to >
110 , co::hash< std::tuple< hash, hash2 > >
113 typedef CuckooSet< key_val, traits_CuckooStripedSet<traits_CuckooSet_vector_unord>> CuckooStripedSet_vector_unord;
114 typedef CuckooSet< key_val, traits_CuckooRefinableSet<traits_CuckooSet_vector_unord>> CuckooRefinableSet_vector_unord;
116 struct traits_CuckooSet_vector_unord_stat : public traits_CuckooSet_vector_unord
118 typedef cc::cuckoo::stat stat;
120 typedef CuckooSet< key_val, traits_CuckooStripedSet<traits_CuckooSet_vector_unord_stat>> CuckooStripedSet_vector_unord_stat;
121 typedef CuckooSet< key_val, traits_CuckooRefinableSet<traits_CuckooSet_vector_unord_stat>> CuckooRefinableSet_vector_unord_stat;
123 struct traits_CuckooSet_vector_unord_storehash : public traits_CuckooSet_vector_unord
125 static CDS_CONSTEXPR const bool store_hash = true;
127 typedef CuckooSet< key_val, traits_CuckooStripedSet<traits_CuckooSet_vector_unord_storehash>> CuckooStripedSet_vector_unord_storehash;
128 typedef CuckooSet< key_val, traits_CuckooRefinableSet<traits_CuckooSet_vector_unord_storehash>> CuckooRefinableSet_vector_unord_storehash;
130 struct traits_CuckooSet_vector_ord :
131 public cc::cuckoo::make_traits <
132 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
133 , co::compare< compare >
134 , co::hash< std::tuple< hash, hash2 > >
137 typedef CuckooSet< key_val, traits_CuckooStripedSet<traits_CuckooSet_vector_ord>> CuckooStripedSet_vector_ord;
138 typedef CuckooSet< key_val, traits_CuckooRefinableSet<traits_CuckooSet_vector_ord>> CuckooRefinableSet_vector_ord;
140 struct traits_CuckooSet_vector_ord_stat : public traits_CuckooSet_vector_ord
142 typedef cc::cuckoo::stat stat;
144 typedef CuckooSet< key_val, traits_CuckooStripedSet<traits_CuckooSet_vector_ord_stat>> CuckooStripedSet_vector_ord_stat;
145 typedef CuckooSet< key_val, traits_CuckooRefinableSet<traits_CuckooSet_vector_ord_stat>> CuckooRefinableSet_vector_ord_stat;
147 struct traits_CuckooSet_vector_ord_storehash : public traits_CuckooSet_vector_ord
149 static CDS_CONSTEXPR const bool store_hash = true;
151 typedef CuckooSet< key_val, traits_CuckooStripedSet<traits_CuckooSet_vector_ord_storehash>> CuckooStripedSet_vector_ord_storehash;
152 typedef CuckooSet< key_val, traits_CuckooRefinableSet<traits_CuckooSet_vector_ord_storehash>> CuckooRefinableSet_vector_ord_storehash;
156 template <typename T, typename Traits >
157 static inline void print_stat( cc::CuckooSet< T, Traits > const& s )
159 CPPUNIT_MSG( s.statistics() << s.mutex_policy_statistics() );
162 template <typename V, typename Traits>
163 static inline void print_stat( CuckooSet< V, Traits > const& s )
165 typedef CuckooSet< V, Traits > set_type;
166 print_stat( static_cast<typename set_type::cuckoo_base_class const&>(s) );
171 #endif // #ifndef CDSUNIT_SET_TYPE_CUCKOO_H