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 template <typename Config>
21 CuckooSet( Config const& cfg )
23 cfg.c_nCuckooInitialSize,
24 static_cast<unsigned int>( cfg.c_nCuckooProbesetSize ),
25 static_cast<unsigned int>( cfg.c_nCuckooProbesetThreshold )
29 template <typename Q, typename Pred>
30 bool erase_with( Q const& key, Pred /*pred*/ )
32 return cuckoo_base_class::erase_with( key, typename std::conditional< cuckoo_base_class::c_isSorted, Pred, typename Pred::equal_to>::type() );
36 static CDS_CONSTEXPR bool const c_bExtractSupported = false;
37 static CDS_CONSTEXPR bool const c_bLoadFactorDepended = false;
38 static CDS_CONSTEXPR bool const c_bEraseExactKey = false;
43 template <typename Key, typename Val>
44 struct set_type< tag_CuckooSet, Key, Val >: public set_type_base< Key, Val >
46 typedef set_type_base< Key, Val > base_class;
47 typedef typename base_class::key_val key_val;
48 typedef typename base_class::compare compare;
49 typedef typename base_class::equal_to equal_to;
50 typedef typename base_class::less less;
51 typedef typename base_class::hash hash;
52 typedef typename base_class::hash2 hash2;
54 // ***************************************************************************
57 template <typename Traits>
58 struct traits_CuckooStripedSet : public Traits
60 typedef cc::cuckoo::striping<> mutex_policy;
62 template <typename Traits>
63 struct traits_CuckooRefinableSet : public Traits
65 typedef cc::cuckoo::refinable<> mutex_policy;
68 struct traits_CuckooSet_list_unord :
69 public cc::cuckoo::make_traits <
70 cc::cuckoo::probeset_type< cc::cuckoo::list >
71 , co::equal_to< equal_to >
72 , co::hash< std::tuple< hash, hash2 > >
75 typedef CuckooSet< key_val, traits_CuckooStripedSet<traits_CuckooSet_list_unord>> CuckooStripedSet_list_unord;
76 typedef CuckooSet< key_val, traits_CuckooRefinableSet<traits_CuckooSet_list_unord>> CuckooRefinableSet_list_unord;
78 struct traits_CuckooSet_list_unord_stat : public traits_CuckooSet_list_unord
80 typedef cc::cuckoo::stat stat;
82 typedef CuckooSet< key_val, traits_CuckooStripedSet<traits_CuckooSet_list_unord_stat>> CuckooStripedSet_list_unord_stat;
83 typedef CuckooSet< key_val, traits_CuckooRefinableSet<traits_CuckooSet_list_unord_stat>> CuckooRefinableSet_list_unord_stat;
85 struct traits_CuckooSet_list_unord_storehash : public traits_CuckooSet_list_unord
87 static CDS_CONSTEXPR const bool store_hash = true;
89 typedef CuckooSet< key_val, traits_CuckooStripedSet<traits_CuckooSet_list_unord_storehash>> CuckooStripedSet_list_unord_storehash;
90 typedef CuckooSet< key_val, traits_CuckooRefinableSet<traits_CuckooSet_list_unord_storehash>> CuckooRefinableSet_list_unord_storehash;
92 struct traits_CuckooSet_list_ord :
93 public cc::cuckoo::make_traits <
94 cc::cuckoo::probeset_type< cc::cuckoo::list >
95 , co::compare< compare >
96 , co::hash< std::tuple< hash, hash2 > >
99 typedef CuckooSet< key_val, traits_CuckooStripedSet<traits_CuckooSet_list_ord>> CuckooStripedSet_list_ord;
100 typedef CuckooSet< key_val, traits_CuckooRefinableSet<traits_CuckooSet_list_ord>> CuckooRefinableSet_list_ord;
102 struct traits_CuckooSet_list_ord_stat : public traits_CuckooSet_list_ord
104 typedef cc::cuckoo::stat stat;
106 typedef CuckooSet< key_val, traits_CuckooStripedSet<traits_CuckooSet_list_ord_stat>> CuckooStripedSet_list_ord_stat;
107 typedef CuckooSet< key_val, traits_CuckooRefinableSet<traits_CuckooSet_list_ord_stat>> CuckooRefinableSet_list_ord_stat;
109 struct traits_CuckooSet_list_ord_storehash : public traits_CuckooSet_list_ord
111 static CDS_CONSTEXPR const bool store_hash = true;
113 typedef CuckooSet< key_val, traits_CuckooStripedSet<traits_CuckooSet_list_ord_storehash>> CuckooStripedSet_list_ord_storehash;
114 typedef CuckooSet< key_val, traits_CuckooRefinableSet<traits_CuckooSet_list_ord_storehash>> CuckooRefinableSet_list_ord_storehash;
117 struct traits_CuckooSet_vector_unord :
118 public cc::cuckoo::make_traits <
119 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
120 , co::equal_to< equal_to >
121 , co::hash< std::tuple< hash, hash2 > >
124 typedef CuckooSet< key_val, traits_CuckooStripedSet<traits_CuckooSet_vector_unord>> CuckooStripedSet_vector_unord;
125 typedef CuckooSet< key_val, traits_CuckooRefinableSet<traits_CuckooSet_vector_unord>> CuckooRefinableSet_vector_unord;
127 struct traits_CuckooSet_vector_unord_stat : public traits_CuckooSet_vector_unord
129 typedef cc::cuckoo::stat stat;
131 typedef CuckooSet< key_val, traits_CuckooStripedSet<traits_CuckooSet_vector_unord_stat>> CuckooStripedSet_vector_unord_stat;
132 typedef CuckooSet< key_val, traits_CuckooRefinableSet<traits_CuckooSet_vector_unord_stat>> CuckooRefinableSet_vector_unord_stat;
134 struct traits_CuckooSet_vector_unord_storehash : public traits_CuckooSet_vector_unord
136 static CDS_CONSTEXPR const bool store_hash = true;
138 typedef CuckooSet< key_val, traits_CuckooStripedSet<traits_CuckooSet_vector_unord_storehash>> CuckooStripedSet_vector_unord_storehash;
139 typedef CuckooSet< key_val, traits_CuckooRefinableSet<traits_CuckooSet_vector_unord_storehash>> CuckooRefinableSet_vector_unord_storehash;
141 struct traits_CuckooSet_vector_ord :
142 public cc::cuckoo::make_traits <
143 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
144 , co::compare< compare >
145 , co::hash< std::tuple< hash, hash2 > >
148 typedef CuckooSet< key_val, traits_CuckooStripedSet<traits_CuckooSet_vector_ord>> CuckooStripedSet_vector_ord;
149 typedef CuckooSet< key_val, traits_CuckooRefinableSet<traits_CuckooSet_vector_ord>> CuckooRefinableSet_vector_ord;
151 struct traits_CuckooSet_vector_ord_stat : public traits_CuckooSet_vector_ord
153 typedef cc::cuckoo::stat stat;
155 typedef CuckooSet< key_val, traits_CuckooStripedSet<traits_CuckooSet_vector_ord_stat>> CuckooStripedSet_vector_ord_stat;
156 typedef CuckooSet< key_val, traits_CuckooRefinableSet<traits_CuckooSet_vector_ord_stat>> CuckooRefinableSet_vector_ord_stat;
158 struct traits_CuckooSet_vector_ord_storehash : public traits_CuckooSet_vector_ord
160 static CDS_CONSTEXPR const bool store_hash = true;
162 typedef CuckooSet< key_val, traits_CuckooStripedSet<traits_CuckooSet_vector_ord_storehash>> CuckooStripedSet_vector_ord_storehash;
163 typedef CuckooSet< key_val, traits_CuckooRefinableSet<traits_CuckooSet_vector_ord_storehash>> CuckooRefinableSet_vector_ord_storehash;
167 template <typename T, typename Traits >
168 static inline void print_stat( cc::CuckooSet< T, Traits > const& s )
170 CPPUNIT_MSG( s.statistics() << s.mutex_policy_statistics() );
173 template <typename V, typename Traits>
174 static inline void print_stat( CuckooSet< V, Traits > const& s )
176 typedef CuckooSet< V, Traits > set_type;
177 print_stat( static_cast<typename set_type::cuckoo_base_class const&>(s) );
182 #endif // #ifndef CDSUNIT_SET_TYPE_CUCKOO_H