3 #ifndef _CDSUNIT_SET2_SET_TYPES_H
4 #define _CDSUNIT_SET2_SET_TYPES_H
6 #include <cds/urcu/general_instant.h>
7 #include <cds/urcu/general_buffered.h>
8 #include <cds/urcu/general_threaded.h>
9 #include <cds/urcu/signal_buffered.h>
10 #include <cds/urcu/signal_threaded.h>
12 #include <cds/container/michael_list_hp.h>
13 #include <cds/container/michael_list_dhp.h>
14 #include <cds/container/michael_list_rcu.h>
15 #include <cds/container/lazy_list_hp.h>
16 #include <cds/container/lazy_list_dhp.h>
17 #include <cds/container/lazy_list_rcu.h>
19 #include <cds/container/michael_set.h>
20 #include <cds/container/michael_set_rcu.h>
22 #include <cds/container/split_list_set.h>
23 #include <cds/container/split_list_set_rcu.h>
25 #include <cds/container/cuckoo_set.h>
27 #include <cds/container/skip_list_set_hp.h>
28 #include <cds/container/skip_list_set_dhp.h>
29 #include <cds/container/skip_list_set_rcu.h>
31 #include <cds/container/ellen_bintree_set_rcu.h>
32 #include <cds/container/ellen_bintree_set_hp.h>
33 #include <cds/container/ellen_bintree_set_dhp.h>
35 #include <cds/container/striped_set/std_list.h>
36 #include <cds/container/striped_set/std_vector.h>
37 #include <cds/container/striped_set/std_set.h>
38 #include <cds/container/striped_set/std_hash_set.h>
39 #include <cds/container/striped_set/boost_unordered_set.h>
41 #include <boost/version.hpp>
42 #if BOOST_VERSION >= 104800
43 # include <cds/container/striped_set/boost_slist.h>
44 # include <cds/container/striped_set/boost_list.h>
45 # include <cds/container/striped_set/boost_vector.h>
46 # include <cds/container/striped_set/boost_stable_vector.h>
47 # include <cds/container/striped_set/boost_set.h>
48 # include <cds/container/striped_set/boost_flat_set.h>
50 #include <cds/container/striped_set.h>
52 #include <cds/lock/spinlock.h>
53 #include <boost/functional/hash/hash.hpp>
55 #include "cppunit/cppunit_mini.h"
56 #include "lock/nolock.h"
57 #include "set2/std_set.h"
58 #include "set2/std_hash_set.h"
59 #include "michael_alloc.h"
60 #include "print_cuckoo_stat.h"
61 #include "print_split_list_stat.h"
62 #include "print_skip_list_stat.h"
63 #include "print_ellenbintree_stat.h"
64 #include "ellen_bintree_update_desc_pool.h"
67 namespace cc = cds::container;
68 namespace co = cds::opt;
70 typedef cds::urcu::gc< cds::urcu::general_instant<> > rcu_gpi;
71 typedef cds::urcu::gc< cds::urcu::general_buffered<> > rcu_gpb;
72 typedef cds::urcu::gc< cds::urcu::general_threaded<> > rcu_gpt;
73 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
74 typedef cds::urcu::gc< cds::urcu::signal_buffered<> > rcu_shb;
75 typedef cds::urcu::gc< cds::urcu::signal_threaded<> > rcu_sht;
78 template <typename V, typename... Options>
79 class CuckooStripedSet:
80 public cc::CuckooSet< V,
81 typename cc::cuckoo::make_traits<
82 co::mutex_policy< cc::cuckoo::striping<> >
88 typedef typename cc::cuckoo::make_traits<
89 co::mutex_policy< cc::cuckoo::striping<> >
91 >::type cuckoo_traits;
93 typedef cc::CuckooSet< V, cuckoo_traits > cuckoo_base_class;
96 CuckooStripedSet( size_t nCapacity, size_t nLoadFactor )
97 : cuckoo_base_class( nCapacity / (nLoadFactor * 16), (unsigned int) 4 )
100 template <typename Q, typename Pred>
101 bool erase_with( Q const& key, Pred pred )
103 return cuckoo_base_class::erase_with( key, typename std::conditional< cuckoo_base_class::c_isSorted, Pred, typename Pred::equal_to>::type() );
107 template <typename V, typename... Options>
108 class CuckooRefinableSet:
109 public cc::CuckooSet< V,
110 typename cc::cuckoo::make_traits<
111 co::mutex_policy< cc::cuckoo::refinable<> >
117 typedef typename cc::cuckoo::make_traits<
118 co::mutex_policy< cc::cuckoo::refinable<> >
120 >::type cuckoo_traits;
122 typedef cc::CuckooSet< V, cuckoo_traits > cuckoo_base_class;
125 CuckooRefinableSet( size_t nCapacity, size_t nLoadFactor )
126 : cuckoo_base_class( nCapacity / (nLoadFactor * 16), (unsigned int) 4 )
129 template <typename Q, typename Pred>
130 bool erase_with( Q const& key, Pred pred )
132 return cuckoo_base_class::erase_with( key, typename std::conditional< cuckoo_base_class::c_isSorted, Pred, typename Pred::equal_to>::type() );
136 template <typename Key>
138 int operator ()(Key const& k1, Key const& k2) const
140 if ( std::less<Key>( k1, k2 ) )
142 return std::less<Key>( k2, k1 ) ? 1 : 0;
146 #define CDSUNIT_INT_COMPARE(t) template <> struct cmp<t> { int operator()( t k1, t k2 ){ return (int)(k1 - k2); } }
147 CDSUNIT_INT_COMPARE(char);
148 CDSUNIT_INT_COMPARE(unsigned char);
149 CDSUNIT_INT_COMPARE(int);
150 CDSUNIT_INT_COMPARE(unsigned int);
151 CDSUNIT_INT_COMPARE(long);
152 CDSUNIT_INT_COMPARE(unsigned long);
153 CDSUNIT_INT_COMPARE(long long);
154 CDSUNIT_INT_COMPARE(unsigned long long);
155 #undef CDSUNIT_INT_COMPARE
158 struct cmp<std::string>
160 int operator()(std::string const& s1, std::string const& s2)
162 return s1.compare( s2 );
164 int operator()(std::string const& s1, char const * s2)
166 return s1.compare( s2 );
168 int operator()(char const * s1, std::string const& s2)
170 return -s2.compare( s1 );
174 template <typename Key, typename Value>
177 typedef Key key_type;
178 typedef Value value_type;
184 /*explicit*/ key_val( key_type const& k ): key(k), val() {}
185 key_val( key_type const& k, value_type const& v ): key(k), val(v) {}
187 template <typename K>
188 /*explicit*/ key_val( K const& k ): key(k) {}
190 template <typename K, typename T>
191 key_val( K const& k, T const& v ): key(k), val(v) {}
194 typedef co::v::hash<key_type> key_hash;
195 typedef std::less<key_type> key_less;
196 typedef cmp<key_type> key_compare;
199 bool operator()( key_val const& k1, key_val const& k2 ) const
201 return key_less()( k1.key, k2.key );
203 bool operator()( key_type const& k1, key_val const& k2 ) const
205 return key_less()( k1, k2.key );
207 bool operator()( key_val const& k1, key_type const& k2 ) const
209 return key_less()( k1.key, k2 );
214 int operator()( key_val const& k1, key_val const& k2 ) const
216 return key_compare()( k1.key, k2.key );
218 int operator()( key_type const& k1, key_val const& k2 ) const
220 return key_compare()( k1, k2.key );
222 int operator()( key_val const& k1, key_type const& k2 ) const
224 return key_compare()( k1.key, k2 );
229 bool operator()( key_val const& k1, key_val const& k2 ) const
231 return key_compare()( k1.key, k2.key ) == 0;
233 bool operator()( key_type const& k1, key_val const& k2 ) const
235 return key_compare()( k1, k2.key ) == 0;
237 bool operator()( key_val const& k1, key_type const& k2 ) const
239 return key_compare()( k1.key, k2 ) == 0;
244 struct hash: public key_hash
246 size_t operator()( key_val const& v ) const
248 return key_hash::operator()( v.key );
250 size_t operator()( key_type const& key ) const
252 return key_hash::operator()( key );
254 template <typename Q>
255 size_t operator()( Q const& k ) const
257 return key_hash::operator()( k );
261 struct hash2: public hash
263 size_t operator()( key_val const& k ) const
265 size_t seed = ~hash::operator ()( k );
266 boost::hash_combine( seed, k.key );
269 size_t operator()( key_type const& k ) const
271 size_t seed = ~hash::operator ()( k );
272 boost::hash_combine( seed, k );
275 template <typename Q>
276 size_t operator()( Q const& k ) const
278 return key_hash::operator()( k );
282 // ***************************************************************************
285 struct traits_MichaelList_cmp_stdAlloc:
286 public cc::michael_list::make_traits<
287 co::compare< compare >
290 typedef cc::MichaelList< cds::gc::HP, key_val, traits_MichaelList_cmp_stdAlloc > MichaelList_HP_cmp_stdAlloc;
291 typedef cc::MichaelList< cds::gc::DHP, key_val, traits_MichaelList_cmp_stdAlloc > MichaelList_DHP_cmp_stdAlloc;
292 typedef cc::MichaelList< rcu_gpi, key_val, traits_MichaelList_cmp_stdAlloc > MichaelList_RCU_GPI_cmp_stdAlloc;
293 typedef cc::MichaelList< rcu_gpb, key_val, traits_MichaelList_cmp_stdAlloc > MichaelList_RCU_GPB_cmp_stdAlloc;
294 typedef cc::MichaelList< rcu_gpt, key_val, traits_MichaelList_cmp_stdAlloc > MichaelList_RCU_GPT_cmp_stdAlloc;
295 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
296 typedef cc::MichaelList< rcu_shb, key_val, traits_MichaelList_cmp_stdAlloc > MichaelList_RCU_SHB_cmp_stdAlloc;
297 typedef cc::MichaelList< rcu_sht, key_val, traits_MichaelList_cmp_stdAlloc > MichaelList_RCU_SHT_cmp_stdAlloc;
300 struct traits_MichaelList_cmp_stdAlloc_seqcst : public traits_MichaelList_cmp_stdAlloc
302 typedef co::v::sequential_consistent memory_model;
304 typedef cc::MichaelList< cds::gc::HP, key_val, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_HP_cmp_stdAlloc_seqcst;
305 typedef cc::MichaelList< cds::gc::DHP, key_val, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_DHP_cmp_stdAlloc_seqcst;
306 typedef cc::MichaelList< rcu_gpi, key_val, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_RCU_GPI_cmp_stdAlloc_seqcst;
307 typedef cc::MichaelList< rcu_gpb, key_val, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_RCU_GPB_cmp_stdAlloc_seqcst;
308 typedef cc::MichaelList< rcu_gpt, key_val, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_RCU_GPT_cmp_stdAlloc_seqcst;
309 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
310 typedef cc::MichaelList< rcu_shb, key_val, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_RCU_SHB_cmp_stdAlloc_seqcst;
311 typedef cc::MichaelList< rcu_sht, key_val, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_RCU_SHT_cmp_stdAlloc_seqcst;
314 struct traits_MichaelList_less_stdAlloc :
315 public cc::michael_list::make_traits<
319 typedef cc::MichaelList< cds::gc::HP, key_val, traits_MichaelList_less_stdAlloc > MichaelList_HP_less_stdAlloc;
320 typedef cc::MichaelList< cds::gc::DHP, key_val, traits_MichaelList_less_stdAlloc > MichaelList_DHP_less_stdAlloc;
321 typedef cc::MichaelList< rcu_gpi, key_val, traits_MichaelList_less_stdAlloc > MichaelList_RCU_GPI_less_stdAlloc;
322 typedef cc::MichaelList< rcu_gpb, key_val, traits_MichaelList_less_stdAlloc > MichaelList_RCU_GPB_less_stdAlloc;
323 typedef cc::MichaelList< rcu_gpt, key_val, traits_MichaelList_less_stdAlloc > MichaelList_RCU_GPT_less_stdAlloc;
324 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
325 typedef cc::MichaelList< rcu_shb, key_val, traits_MichaelList_less_stdAlloc > MichaelList_RCU_SHB_less_stdAlloc;
326 typedef cc::MichaelList< rcu_sht, key_val, traits_MichaelList_less_stdAlloc > MichaelList_RCU_SHT_less_stdAlloc;
329 struct traits_MichaelList_less_stdAlloc_seqcst :
330 public cc::michael_list::make_traits<
332 ,co::memory_model< co::v::sequential_consistent >
335 typedef cc::MichaelList< cds::gc::HP, key_val, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_HP_less_stdAlloc_seqcst;
336 typedef cc::MichaelList< cds::gc::DHP, key_val, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_DHP_less_stdAlloc_seqcst;
337 typedef cc::MichaelList< rcu_gpi, key_val, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_RCU_GPI_less_stdAlloc_seqcst;
338 typedef cc::MichaelList< rcu_gpb, key_val, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_RCU_GPB_less_stdAlloc_seqcst;
339 typedef cc::MichaelList< rcu_gpt, key_val, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_RCU_GPT_less_stdAlloc_seqcst;
340 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
341 typedef cc::MichaelList< rcu_shb, key_val, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_RCU_SHB_less_stdAlloc_seqcst;
342 typedef cc::MichaelList< rcu_sht, key_val, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_RCU_SHT_less_stdAlloc_seqcst;
345 struct traits_MichaelList_cmp_michaelAlloc :
346 public cc::michael_list::make_traits<
347 co::compare< compare >,
348 co::allocator< memory::MichaelAllocator<int> >
351 typedef cc::MichaelList< cds::gc::HP, key_val, traits_MichaelList_cmp_michaelAlloc > MichaelList_HP_cmp_michaelAlloc;
352 typedef cc::MichaelList< cds::gc::DHP, key_val, traits_MichaelList_cmp_michaelAlloc > MichaelList_DHP_cmp_michaelAlloc;
353 typedef cc::MichaelList< rcu_gpi, key_val, traits_MichaelList_cmp_michaelAlloc > MichaelList_RCU_GPI_cmp_michaelAlloc;
354 typedef cc::MichaelList< rcu_gpb, key_val, traits_MichaelList_cmp_michaelAlloc > MichaelList_RCU_GPB_cmp_michaelAlloc;
355 typedef cc::MichaelList< rcu_gpt, key_val, traits_MichaelList_cmp_michaelAlloc > MichaelList_RCU_GPT_cmp_michaelAlloc;
356 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
357 typedef cc::MichaelList< rcu_shb, key_val, traits_MichaelList_cmp_michaelAlloc > MichaelList_RCU_SHB_cmp_michaelAlloc;
358 typedef cc::MichaelList< rcu_sht, key_val, traits_MichaelList_cmp_michaelAlloc > MichaelList_RCU_SHT_cmp_michaelAlloc;
361 struct traits_MichaelList_less_michaelAlloc :
362 public cc::michael_list::make_traits<
364 co::allocator< memory::MichaelAllocator<int> >
367 typedef cc::MichaelList< cds::gc::HP, key_val, traits_MichaelList_less_michaelAlloc > MichaelList_HP_less_michaelAlloc;
368 typedef cc::MichaelList< cds::gc::DHP, key_val, traits_MichaelList_less_michaelAlloc > MichaelList_DHP_less_michaelAlloc;
369 typedef cc::MichaelList< rcu_gpi, key_val, traits_MichaelList_less_michaelAlloc > MichaelList_RCU_GPI_less_michaelAlloc;
370 typedef cc::MichaelList< rcu_gpb, key_val, traits_MichaelList_less_michaelAlloc > MichaelList_RCU_GPB_less_michaelAlloc;
371 typedef cc::MichaelList< rcu_gpt, key_val, traits_MichaelList_less_michaelAlloc > MichaelList_RCU_GPT_less_michaelAlloc;
372 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
373 typedef cc::MichaelList< rcu_shb, key_val, traits_MichaelList_less_michaelAlloc > MichaelList_RCU_SHB_less_michaelAlloc;
374 typedef cc::MichaelList< rcu_sht, key_val, traits_MichaelList_less_michaelAlloc > MichaelList_RCU_SHT_less_michaelAlloc;
377 // ***************************************************************************
378 // MichaelHashSet based on MichaelList
380 struct traits_MichaelSet_stdAlloc :
381 public cc::michael_set::make_traits<
385 typedef cc::MichaelHashSet< cds::gc::HP, MichaelList_HP_cmp_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_HP_cmp_stdAlloc;
386 typedef cc::MichaelHashSet< cds::gc::DHP, MichaelList_DHP_cmp_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_DHP_cmp_stdAlloc;
387 typedef cc::MichaelHashSet< rcu_gpi, MichaelList_RCU_GPI_cmp_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_RCU_GPI_cmp_stdAlloc;
388 typedef cc::MichaelHashSet< rcu_gpb, MichaelList_RCU_GPB_cmp_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_RCU_GPB_cmp_stdAlloc;
389 typedef cc::MichaelHashSet< rcu_gpt, MichaelList_RCU_GPT_cmp_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_RCU_GPT_cmp_stdAlloc;
390 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
391 typedef cc::MichaelHashSet< rcu_shb, MichaelList_RCU_SHB_cmp_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_RCU_SHB_cmp_stdAlloc;
392 typedef cc::MichaelHashSet< rcu_sht, MichaelList_RCU_SHT_cmp_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_RCU_SHT_cmp_stdAlloc;
395 typedef cc::MichaelHashSet< cds::gc::HP, MichaelList_HP_less_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_HP_less_stdAlloc;
396 typedef cc::MichaelHashSet< cds::gc::DHP, MichaelList_DHP_less_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_DHP_less_stdAlloc;
397 typedef cc::MichaelHashSet< rcu_gpi, MichaelList_RCU_GPI_less_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_RCU_GPI_less_stdAlloc;
398 typedef cc::MichaelHashSet< rcu_gpb, MichaelList_RCU_GPB_less_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_RCU_GPB_less_stdAlloc;
399 typedef cc::MichaelHashSet< rcu_gpt, MichaelList_RCU_GPT_less_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_RCU_GPT_less_stdAlloc;
400 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
401 typedef cc::MichaelHashSet< rcu_shb, MichaelList_RCU_SHB_less_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_RCU_SHB_less_stdAlloc;
402 typedef cc::MichaelHashSet< rcu_sht, MichaelList_RCU_SHT_less_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_RCU_SHT_less_stdAlloc;
405 typedef cc::MichaelHashSet< cds::gc::HP, MichaelList_HP_less_stdAlloc_seqcst, traits_MichaelSet_stdAlloc > MichaelSet_HP_less_stdAlloc_seqcst;
406 typedef cc::MichaelHashSet< cds::gc::DHP, MichaelList_DHP_less_stdAlloc_seqcst, traits_MichaelSet_stdAlloc > MichaelSet_DHP_less_stdAlloc_seqcst;
407 typedef cc::MichaelHashSet< rcu_gpi, MichaelList_RCU_GPI_less_stdAlloc_seqcst, traits_MichaelSet_stdAlloc > MichaelSet_RCU_GPI_less_stdAlloc_seqcst;
408 typedef cc::MichaelHashSet< rcu_gpb, MichaelList_RCU_GPB_less_stdAlloc_seqcst, traits_MichaelSet_stdAlloc > MichaelSet_RCU_GPB_less_stdAlloc_seqcst;
409 typedef cc::MichaelHashSet< rcu_gpt, MichaelList_RCU_GPT_less_stdAlloc_seqcst, traits_MichaelSet_stdAlloc > MichaelSet_RCU_GPT_less_stdAlloc_seqcst;
410 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
411 typedef cc::MichaelHashSet< rcu_shb, MichaelList_RCU_SHB_less_stdAlloc_seqcst, traits_MichaelSet_stdAlloc > MichaelSet_RCU_SHB_less_stdAlloc_seqcst;
412 typedef cc::MichaelHashSet< rcu_sht, MichaelList_RCU_SHT_less_stdAlloc_seqcst, traits_MichaelSet_stdAlloc > MichaelSet_RCU_SHT_less_stdAlloc_seqcst;
415 struct traits_MichaelSet_michaelAlloc :
416 public cc::michael_set::make_traits<
418 co::allocator< memory::MichaelAllocator<int> >
421 typedef cc::MichaelHashSet< cds::gc::HP, MichaelList_HP_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_HP_cmp_michaelAlloc;
422 typedef cc::MichaelHashSet< cds::gc::DHP, MichaelList_DHP_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_DHP_cmp_michaelAlloc;
423 typedef cc::MichaelHashSet< rcu_gpi, MichaelList_RCU_GPI_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_RCU_GPI_cmp_michaelAlloc;
424 typedef cc::MichaelHashSet< rcu_gpb, MichaelList_RCU_GPB_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_RCU_GPB_cmp_michaelAlloc;
425 typedef cc::MichaelHashSet< rcu_gpt, MichaelList_RCU_GPT_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_RCU_GPT_cmp_michaelAlloc;
426 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
427 typedef cc::MichaelHashSet< rcu_shb, MichaelList_RCU_SHB_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_RCU_SHB_cmp_michaelAlloc;
428 typedef cc::MichaelHashSet< rcu_sht, MichaelList_RCU_SHT_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_RCU_SHT_cmp_michaelAlloc;
431 typedef cc::MichaelHashSet< cds::gc::HP, MichaelList_HP_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_HP_less_michaelAlloc;
432 typedef cc::MichaelHashSet< cds::gc::DHP, MichaelList_DHP_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_DHP_less_michaelAlloc;
433 typedef cc::MichaelHashSet< rcu_gpi, MichaelList_RCU_GPI_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_RCU_GPI_less_michaelAlloc;
434 typedef cc::MichaelHashSet< rcu_gpb, MichaelList_RCU_GPB_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_RCU_GPB_less_michaelAlloc;
435 typedef cc::MichaelHashSet< rcu_gpt, MichaelList_RCU_GPT_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_RCU_GPT_less_michaelAlloc;
436 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
437 typedef cc::MichaelHashSet< rcu_shb, MichaelList_RCU_SHB_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_RCU_SHB_less_michaelAlloc;
438 typedef cc::MichaelHashSet< rcu_sht, MichaelList_RCU_SHT_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_RCU_SHT_less_michaelAlloc;
442 // ***************************************************************************
445 struct traits_LazyList_cmp_stdAlloc :
446 public cc::lazy_list::make_traits<
447 co::compare< compare >
450 typedef cc::LazyList< cds::gc::HP, key_val, traits_LazyList_cmp_stdAlloc > LazyList_HP_cmp_stdAlloc;
451 typedef cc::LazyList< cds::gc::DHP, key_val, traits_LazyList_cmp_stdAlloc > LazyList_DHP_cmp_stdAlloc;
452 typedef cc::LazyList< rcu_gpi, key_val, traits_LazyList_cmp_stdAlloc > LazyList_RCU_GPI_cmp_stdAlloc;
453 typedef cc::LazyList< rcu_gpb, key_val, traits_LazyList_cmp_stdAlloc > LazyList_RCU_GPB_cmp_stdAlloc;
454 typedef cc::LazyList< rcu_gpt, key_val, traits_LazyList_cmp_stdAlloc > LazyList_RCU_GPT_cmp_stdAlloc;
455 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
456 typedef cc::LazyList< rcu_shb, key_val, traits_LazyList_cmp_stdAlloc > LazyList_RCU_SHB_cmp_stdAlloc;
457 typedef cc::LazyList< rcu_sht, key_val, traits_LazyList_cmp_stdAlloc > LazyList_RCU_SHT_cmp_stdAlloc;
459 struct traits_LazyList_cmp_stdAlloc_seqcst :
460 public cc::lazy_list::make_traits<
461 co::compare< compare >
462 ,co::memory_model< co::v::sequential_consistent >
465 typedef cc::LazyList< cds::gc::HP, key_val, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_HP_cmp_stdAlloc_seqcst;
466 typedef cc::LazyList< cds::gc::DHP, key_val, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_DHP_cmp_stdAlloc_seqcst;
467 typedef cc::LazyList< rcu_gpi, key_val, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_RCU_GPI_cmp_stdAlloc_seqcst;
468 typedef cc::LazyList< rcu_gpb, key_val, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_RCU_GPB_cmp_stdAlloc_seqcst;
469 typedef cc::LazyList< rcu_gpt, key_val, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_RCU_GPT_cmp_stdAlloc_seqcst;
470 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
471 typedef cc::LazyList< rcu_shb, key_val, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_RCU_SHB_cmp_stdAlloc_seqcst;
472 typedef cc::LazyList< rcu_sht, key_val, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_RCU_SHT_cmp_stdAlloc_seqcst;
474 struct traits_LazyList_cmp_michaelAlloc :
475 public cc::lazy_list::make_traits<
476 co::compare< compare >,
477 co::allocator< memory::MichaelAllocator<int> >
480 typedef cc::LazyList< cds::gc::HP, key_val, traits_LazyList_cmp_michaelAlloc > LazyList_HP_cmp_michaelAlloc;
481 typedef cc::LazyList< cds::gc::DHP, key_val, traits_LazyList_cmp_michaelAlloc > LazyList_DHP_cmp_michaelAlloc;
482 typedef cc::LazyList< rcu_gpi, key_val, traits_LazyList_cmp_michaelAlloc > LazyList_RCU_GPI_cmp_michaelAlloc;
483 typedef cc::LazyList< rcu_gpb, key_val, traits_LazyList_cmp_michaelAlloc > LazyList_RCU_GPB_cmp_michaelAlloc;
484 typedef cc::LazyList< rcu_gpt, key_val, traits_LazyList_cmp_michaelAlloc > LazyList_RCU_GPT_cmp_michaelAlloc;
485 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
486 typedef cc::LazyList< rcu_shb, key_val, traits_LazyList_cmp_michaelAlloc > LazyList_RCU_SHB_cmp_michaelAlloc;
487 typedef cc::LazyList< rcu_sht, key_val, traits_LazyList_cmp_michaelAlloc > LazyList_RCU_SHT_cmp_michaelAlloc;
490 struct traits_LazyList_less_stdAlloc:
491 public cc::lazy_list::make_traits<
495 typedef cc::LazyList< cds::gc::HP, key_val, traits_LazyList_less_stdAlloc > LazyList_HP_less_stdAlloc;
496 typedef cc::LazyList< cds::gc::DHP, key_val, traits_LazyList_less_stdAlloc > LazyList_DHP_less_stdAlloc;
497 typedef cc::LazyList< rcu_gpi, key_val, traits_LazyList_less_stdAlloc > LazyList_RCU_GPI_less_stdAlloc;
498 typedef cc::LazyList< rcu_gpb, key_val, traits_LazyList_less_stdAlloc > LazyList_RCU_GPB_less_stdAlloc;
499 typedef cc::LazyList< rcu_gpt, key_val, traits_LazyList_less_stdAlloc > LazyList_RCU_GPT_less_stdAlloc;
500 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
501 typedef cc::LazyList< rcu_shb, key_val, traits_LazyList_less_stdAlloc > LazyList_RCU_SHB_less_stdAlloc;
502 typedef cc::LazyList< rcu_sht, key_val, traits_LazyList_less_stdAlloc > LazyList_RCU_SHT_less_stdAlloc;
505 struct traits_LazyList_less_stdAlloc_seqcst :
506 public cc::lazy_list::make_traits<
508 ,co::memory_model< co::v::sequential_consistent >
511 typedef cc::LazyList< cds::gc::HP, key_val, traits_LazyList_less_stdAlloc_seqcst > LazyList_HP_less_stdAlloc_seqcst;
512 typedef cc::LazyList< cds::gc::DHP, key_val, traits_LazyList_less_stdAlloc_seqcst > LazyList_DHP_less_stdAlloc_seqcst;
513 typedef cc::LazyList< rcu_gpi, key_val, traits_LazyList_less_stdAlloc_seqcst > LazyList_RCU_GPI_less_stdAlloc_seqcst;
514 typedef cc::LazyList< rcu_gpb, key_val, traits_LazyList_less_stdAlloc_seqcst > LazyList_RCU_GPB_less_stdAlloc_seqcst;
515 typedef cc::LazyList< rcu_gpt, key_val, traits_LazyList_less_stdAlloc_seqcst > LazyList_RCU_GPT_less_stdAlloc_seqcst;
516 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
517 typedef cc::LazyList< rcu_shb, key_val, traits_LazyList_less_stdAlloc_seqcst > LazyList_RCU_SHB_less_stdAlloc_seqcst;
518 typedef cc::LazyList< rcu_sht, key_val, traits_LazyList_less_stdAlloc_seqcst > LazyList_RCU_SHT_less_stdAlloc_seqcst;
521 struct traits_LazyList_less_michaelAlloc :
522 public cc::lazy_list::make_traits<
524 co::allocator< memory::MichaelAllocator<int> >
527 typedef cc::LazyList< cds::gc::HP, key_val, traits_LazyList_less_michaelAlloc > LazyList_HP_less_michaelAlloc;
528 typedef cc::LazyList< cds::gc::DHP, key_val, traits_LazyList_less_michaelAlloc > LazyList_DHP_less_michaelAlloc;
529 typedef cc::LazyList< rcu_gpi, key_val, traits_LazyList_less_michaelAlloc > LazyList_RCU_GPI_less_michaelAlloc;
530 typedef cc::LazyList< rcu_gpb, key_val, traits_LazyList_less_michaelAlloc > LazyList_RCU_GPB_less_michaelAlloc;
531 typedef cc::LazyList< rcu_gpt, key_val, traits_LazyList_less_michaelAlloc > LazyList_RCU_GPT_less_michaelAlloc;
532 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
533 typedef cc::LazyList< rcu_shb, key_val, traits_LazyList_less_michaelAlloc > LazyList_RCU_SHB_less_michaelAlloc;
534 typedef cc::LazyList< rcu_sht, key_val, traits_LazyList_less_michaelAlloc > LazyList_RCU_SHT_less_michaelAlloc;
537 // ***************************************************************************
538 // MichaelHashSet based on LazyList
540 typedef cc::MichaelHashSet< cds::gc::HP, LazyList_HP_cmp_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_HP_cmp_stdAlloc;
541 typedef cc::MichaelHashSet< cds::gc::DHP, LazyList_DHP_cmp_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_DHP_cmp_stdAlloc;
542 typedef cc::MichaelHashSet< rcu_gpi, LazyList_RCU_GPI_cmp_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_GPI_cmp_stdAlloc;
543 typedef cc::MichaelHashSet< rcu_gpb, LazyList_RCU_GPB_cmp_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_GPB_cmp_stdAlloc;
544 typedef cc::MichaelHashSet< rcu_gpt, LazyList_RCU_GPT_cmp_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_GPT_cmp_stdAlloc;
545 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
546 typedef cc::MichaelHashSet< rcu_shb, LazyList_RCU_SHB_cmp_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_SHB_cmp_stdAlloc;
547 typedef cc::MichaelHashSet< rcu_sht, LazyList_RCU_SHT_cmp_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_SHT_cmp_stdAlloc;
550 typedef cc::MichaelHashSet< cds::gc::HP, LazyList_HP_less_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_HP_less_stdAlloc;
551 typedef cc::MichaelHashSet< cds::gc::DHP, LazyList_DHP_less_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_DHP_less_stdAlloc;
552 typedef cc::MichaelHashSet< rcu_gpi, LazyList_RCU_GPI_less_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_GPI_less_stdAlloc;
553 typedef cc::MichaelHashSet< rcu_gpb, LazyList_RCU_GPB_less_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_GPB_less_stdAlloc;
554 typedef cc::MichaelHashSet< rcu_gpt, LazyList_RCU_GPT_less_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_GPT_less_stdAlloc;
555 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
556 typedef cc::MichaelHashSet< rcu_shb, LazyList_RCU_SHB_less_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_SHB_less_stdAlloc;
557 typedef cc::MichaelHashSet< rcu_sht, LazyList_RCU_SHT_less_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_SHT_less_stdAlloc;
560 typedef cc::MichaelHashSet< cds::gc::HP, LazyList_HP_less_stdAlloc_seqcst, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_HP_less_stdAlloc_seqcst;
561 typedef cc::MichaelHashSet< cds::gc::DHP, LazyList_DHP_less_stdAlloc_seqcst, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_DHP_less_stdAlloc_seqcst;
562 typedef cc::MichaelHashSet< rcu_gpi, LazyList_RCU_GPI_less_stdAlloc_seqcst, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_GPI_less_stdAlloc_seqcst;
563 typedef cc::MichaelHashSet< rcu_gpb, LazyList_RCU_GPB_less_stdAlloc_seqcst, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_GPB_less_stdAlloc_seqcst;
564 typedef cc::MichaelHashSet< rcu_gpt, LazyList_RCU_GPT_less_stdAlloc_seqcst, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_GPT_less_stdAlloc_seqcst;
565 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
566 typedef cc::MichaelHashSet< rcu_shb, LazyList_RCU_SHB_less_stdAlloc_seqcst, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_SHB_less_stdAlloc_seqcst;
567 typedef cc::MichaelHashSet< rcu_sht, LazyList_RCU_SHT_less_stdAlloc_seqcst, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_SHT_less_stdAlloc_seqcst;
570 typedef cc::MichaelHashSet< cds::gc::HP, LazyList_HP_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_Lazy_HP_cmp_michaelAlloc;
571 typedef cc::MichaelHashSet< cds::gc::DHP, LazyList_DHP_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_Lazy_DHP_cmp_michaelAlloc;
572 typedef cc::MichaelHashSet< rcu_gpi, LazyList_RCU_GPI_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_Lazy_RCU_GPI_cmp_michaelAlloc;
573 typedef cc::MichaelHashSet< rcu_gpb, LazyList_RCU_GPB_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_Lazy_RCU_GPB_cmp_michaelAlloc;
574 typedef cc::MichaelHashSet< rcu_gpt, LazyList_RCU_GPT_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_Lazy_RCU_GPT_cmp_michaelAlloc;
575 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
576 typedef cc::MichaelHashSet< rcu_shb, LazyList_RCU_SHB_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_Lazy_RCU_SHB_cmp_michaelAlloc;
577 typedef cc::MichaelHashSet< rcu_sht, LazyList_RCU_SHT_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_Lazy_RCU_SHT_cmp_michaelAlloc;
580 typedef cc::MichaelHashSet< cds::gc::HP, LazyList_HP_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_Lazy_HP_less_michaelAlloc;
581 typedef cc::MichaelHashSet< cds::gc::DHP, LazyList_DHP_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_Lazy_DHP_less_michaelAlloc;
582 typedef cc::MichaelHashSet< rcu_gpi, LazyList_RCU_GPI_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_Lazy_RCU_GPI_less_michaelAlloc;
583 typedef cc::MichaelHashSet< rcu_gpb, LazyList_RCU_GPB_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_Lazy_RCU_GPB_less_michaelAlloc;
584 typedef cc::MichaelHashSet< rcu_gpt, LazyList_RCU_GPT_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_Lazy_RCU_GPT_less_michaelAlloc;
585 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
586 typedef cc::MichaelHashSet< rcu_shb, LazyList_RCU_SHB_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_Lazy_RCU_SHB_less_michaelAlloc;
587 typedef cc::MichaelHashSet< rcu_sht, LazyList_RCU_SHT_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_Lazy_RCU_SHT_less_michaelAlloc;
590 // ***************************************************************************
591 // SplitListSet based on MichaelList
593 struct traits_SplitList_Michael_dyn_cmp :
594 public cc::split_list::make_traits<
595 cc::split_list::ordered_list<cc::michael_list_tag>
597 ,cc::split_list::ordered_list_traits<
598 typename cc::michael_list::make_traits<
599 co::compare< compare >
604 typedef cc::SplitListSet< cds::gc::HP, key_val, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_HP_dyn_cmp;
605 typedef cc::SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_DHP_dyn_cmp;
606 typedef cc::SplitListSet< rcu_gpi, key_val, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_RCU_GPI_dyn_cmp;
607 typedef cc::SplitListSet< rcu_gpb, key_val, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_RCU_GPB_dyn_cmp;
608 typedef cc::SplitListSet< rcu_gpt, key_val, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_RCU_GPT_dyn_cmp;
609 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
610 typedef cc::SplitListSet< rcu_shb, key_val, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_RCU_SHB_dyn_cmp;
611 typedef cc::SplitListSet< rcu_sht, key_val, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_RCU_SHT_dyn_cmp;
614 struct traits_SplitList_Michael_dyn_cmp_stat :
615 public cc::split_list::make_traits<
616 cc::split_list::ordered_list<cc::michael_list_tag>
618 ,co::stat< cc::split_list::stat<> >
619 ,cc::split_list::ordered_list_traits<
620 typename cc::michael_list::make_traits<
621 co::compare< compare >
626 typedef cc::SplitListSet< cds::gc::HP, key_val, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_HP_dyn_cmp_stat;
627 typedef cc::SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_DHP_dyn_cmp_stat;
628 typedef cc::SplitListSet< rcu_gpi, key_val, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_RCU_GPI_dyn_cmp_stat;
629 typedef cc::SplitListSet< rcu_gpb, key_val, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_RCU_GPB_dyn_cmp_stat;
630 typedef cc::SplitListSet< rcu_gpt, key_val, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_RCU_GPT_dyn_cmp_stat;
631 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
632 typedef cc::SplitListSet< rcu_shb, key_val, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_RCU_SHB_dyn_cmp_stat;
633 typedef cc::SplitListSet< rcu_sht, key_val, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_RCU_SHT_dyn_cmp_stat;
636 struct traits_SplitList_Michael_dyn_cmp_seqcst :
637 public cc::split_list::make_traits<
638 cc::split_list::ordered_list<cc::michael_list_tag>
640 ,co::memory_model< co::v::sequential_consistent >
641 ,cc::split_list::ordered_list_traits<
642 typename cc::michael_list::make_traits<
643 co::compare< compare >
644 ,co::memory_model< co::v::sequential_consistent >
649 typedef cc::SplitListSet< cds::gc::HP, key_val, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_HP_dyn_cmp_seqcst;
650 typedef cc::SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_DHP_dyn_cmp_seqcst;
651 typedef cc::SplitListSet< rcu_gpi, key_val, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_RCU_GPI_dyn_cmp_seqcst;
652 typedef cc::SplitListSet< rcu_gpb, key_val, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_RCU_GPB_dyn_cmp_seqcst;
653 typedef cc::SplitListSet< rcu_gpt, key_val, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_RCU_GPT_dyn_cmp_seqcst;
654 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
655 typedef cc::SplitListSet< rcu_shb, key_val, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_RCU_SHB_dyn_cmp_seqcst;
656 typedef cc::SplitListSet< rcu_sht, key_val, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_RCU_SHT_dyn_cmp_seqcst;
659 struct traits_SplitList_Michael_st_cmp :
660 public cc::split_list::make_traits<
661 cc::split_list::ordered_list<cc::michael_list_tag>
662 ,cc::split_list::dynamic_bucket_table< false >
664 ,cc::split_list::ordered_list_traits<
665 typename cc::michael_list::make_traits<
666 co::compare< compare >
671 typedef cc::SplitListSet< cds::gc::HP, key_val, traits_SplitList_Michael_st_cmp > SplitList_Michael_HP_st_cmp;
672 typedef cc::SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Michael_st_cmp > SplitList_Michael_DHP_st_cmp;
673 typedef cc::SplitListSet< rcu_gpi, key_val, traits_SplitList_Michael_st_cmp > SplitList_Michael_RCU_GPI_st_cmp;
674 typedef cc::SplitListSet< rcu_gpb, key_val, traits_SplitList_Michael_st_cmp > SplitList_Michael_RCU_GPB_st_cmp;
675 typedef cc::SplitListSet< rcu_gpt, key_val, traits_SplitList_Michael_st_cmp > SplitList_Michael_RCU_GPT_st_cmp;
676 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
677 typedef cc::SplitListSet< rcu_shb, key_val, traits_SplitList_Michael_st_cmp > SplitList_Michael_RCU_SHB_st_cmp;
678 typedef cc::SplitListSet< rcu_sht, key_val, traits_SplitList_Michael_st_cmp > SplitList_Michael_RCU_SHT_st_cmp;
681 struct traits_SplitList_Michael_st_cmp_seqcst :
682 public cc::split_list::make_traits<
683 cc::split_list::ordered_list<cc::michael_list_tag>
685 ,cc::split_list::dynamic_bucket_table< false >
686 ,co::memory_model< co::v::sequential_consistent >
687 ,cc::split_list::ordered_list_traits<
688 typename cc::michael_list::make_traits<
689 co::compare< compare >
690 ,co::memory_model< co::v::sequential_consistent >
695 typedef cc::SplitListSet< cds::gc::HP, key_val, traits_SplitList_Michael_st_cmp_seqcst> SplitList_Michael_HP_st_cmp_seqcst;
696 typedef cc::SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Michael_st_cmp_seqcst> SplitList_Michael_DHP_st_cmp_seqcst;
697 typedef cc::SplitListSet< rcu_gpi, key_val, traits_SplitList_Michael_st_cmp_seqcst> SplitList_Michael_RCU_GPI_st_cmp_seqcst;
698 typedef cc::SplitListSet< rcu_gpb, key_val, traits_SplitList_Michael_st_cmp_seqcst> SplitList_Michael_RCU_GPB_st_cmp_seqcst;
699 typedef cc::SplitListSet< rcu_gpt, key_val, traits_SplitList_Michael_st_cmp_seqcst> SplitList_Michael_RCU_GPT_st_cmp_seqcst;
700 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
701 typedef cc::SplitListSet< rcu_shb, key_val, traits_SplitList_Michael_st_cmp_seqcst> SplitList_Michael_RCU_SHB_st_cmp_seqcst;
702 typedef cc::SplitListSet< rcu_sht, key_val, traits_SplitList_Michael_st_cmp_seqcst> SplitList_Michael_RCU_SHT_st_cmp_seqcst;
706 struct traits_SplitList_Michael_dyn_less :
707 public cc::split_list::make_traits<
708 cc::split_list::ordered_list<cc::michael_list_tag>
710 ,cc::split_list::ordered_list_traits<
711 typename cc::michael_list::make_traits<
717 typedef cc::SplitListSet< cds::gc::HP, key_val, traits_SplitList_Michael_dyn_less > SplitList_Michael_HP_dyn_less;
718 typedef cc::SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Michael_dyn_less > SplitList_Michael_DHP_dyn_less;
719 typedef cc::SplitListSet< rcu_gpi, key_val, traits_SplitList_Michael_dyn_less > SplitList_Michael_RCU_GPI_dyn_less;
720 typedef cc::SplitListSet< rcu_gpb, key_val, traits_SplitList_Michael_dyn_less > SplitList_Michael_RCU_GPB_dyn_less;
721 typedef cc::SplitListSet< rcu_gpt, key_val, traits_SplitList_Michael_dyn_less > SplitList_Michael_RCU_GPT_dyn_less;
722 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
723 typedef cc::SplitListSet< rcu_shb, key_val, traits_SplitList_Michael_dyn_less > SplitList_Michael_RCU_SHB_dyn_less;
724 typedef cc::SplitListSet< rcu_sht, key_val, traits_SplitList_Michael_dyn_less > SplitList_Michael_RCU_SHT_dyn_less;
727 struct traits_SplitList_Michael_dyn_less_seqcst :
728 public cc::split_list::make_traits<
729 cc::split_list::ordered_list<cc::michael_list_tag>
731 ,co::memory_model< co::v::sequential_consistent >
732 ,cc::split_list::ordered_list_traits<
733 typename cc::michael_list::make_traits<
735 ,co::memory_model< co::v::sequential_consistent >
740 typedef cc::SplitListSet< cds::gc::HP, key_val, traits_SplitList_Michael_dyn_less_seqcst > SplitList_Michael_HP_dyn_less_seqcst;
741 typedef cc::SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Michael_dyn_less_seqcst > SplitList_Michael_DHP_dyn_less_seqcst;
742 typedef cc::SplitListSet< rcu_gpi, key_val, traits_SplitList_Michael_dyn_less_seqcst > SplitList_Michael_RCU_GPI_dyn_less_seqcst;
743 typedef cc::SplitListSet< rcu_gpb, key_val, traits_SplitList_Michael_dyn_less_seqcst > SplitList_Michael_RCU_GPB_dyn_less_seqcst;
744 typedef cc::SplitListSet< rcu_gpt, key_val, traits_SplitList_Michael_dyn_less_seqcst > SplitList_Michael_RCU_GPT_dyn_less_seqcst;
745 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
746 typedef cc::SplitListSet< rcu_shb, key_val, traits_SplitList_Michael_dyn_less_seqcst > SplitList_Michael_RCU_SHB_dyn_less_seqcst;
747 typedef cc::SplitListSet< rcu_sht, key_val, traits_SplitList_Michael_dyn_less_seqcst > SplitList_Michael_RCU_SHT_dyn_less_seqcst;
750 struct traits_SplitList_Michael_st_less :
751 public cc::split_list::make_traits<
752 cc::split_list::ordered_list<cc::michael_list_tag>
753 ,cc::split_list::dynamic_bucket_table< false >
755 ,cc::split_list::ordered_list_traits<
756 typename cc::michael_list::make_traits<
762 typedef cc::SplitListSet< cds::gc::HP, key_val, traits_SplitList_Michael_st_less > SplitList_Michael_HP_st_less;
763 typedef cc::SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Michael_st_less > SplitList_Michael_DHP_st_less;
764 typedef cc::SplitListSet< rcu_gpi, key_val, traits_SplitList_Michael_st_less > SplitList_Michael_RCU_GPI_st_less;
765 typedef cc::SplitListSet< rcu_gpb, key_val, traits_SplitList_Michael_st_less > SplitList_Michael_RCU_GPB_st_less;
766 typedef cc::SplitListSet< rcu_gpt, key_val, traits_SplitList_Michael_st_less > SplitList_Michael_RCU_GPT_st_less;
767 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
768 typedef cc::SplitListSet< rcu_shb, key_val, traits_SplitList_Michael_st_less > SplitList_Michael_RCU_SHB_st_less;
769 typedef cc::SplitListSet< rcu_sht, key_val, traits_SplitList_Michael_st_less > SplitList_Michael_RCU_SHT_st_less;
772 struct traits_SplitList_Michael_st_less_stat :
773 public cc::split_list::make_traits<
774 cc::split_list::ordered_list<cc::michael_list_tag>
775 ,cc::split_list::dynamic_bucket_table< false >
777 ,co::stat< cc::split_list::stat<>>
778 ,cc::split_list::ordered_list_traits<
779 typename cc::michael_list::make_traits<
785 typedef cc::SplitListSet< cds::gc::HP, key_val, traits_SplitList_Michael_st_less_stat > SplitList_Michael_HP_st_less_stat;
786 typedef cc::SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Michael_st_less_stat > SplitList_Michael_DHP_st_less_stat;
787 typedef cc::SplitListSet< rcu_gpi, key_val, traits_SplitList_Michael_st_less_stat > SplitList_Michael_RCU_GPI_st_less_stat;
788 typedef cc::SplitListSet< rcu_gpb, key_val, traits_SplitList_Michael_st_less_stat > SplitList_Michael_RCU_GPB_st_less_stat;
789 typedef cc::SplitListSet< rcu_gpt, key_val, traits_SplitList_Michael_st_less_stat > SplitList_Michael_RCU_GPT_st_less_stat;
790 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
791 typedef cc::SplitListSet< rcu_shb, key_val, traits_SplitList_Michael_st_less_stat > SplitList_Michael_RCU_SHB_st_less_stat;
792 typedef cc::SplitListSet< rcu_sht, key_val, traits_SplitList_Michael_st_less_stat > SplitList_Michael_RCU_SHT_st_less_stat;
795 struct traits_SplitList_Michael_st_less_seqcst :
796 public cc::split_list::make_traits<
797 cc::split_list::ordered_list<cc::michael_list_tag>
799 ,cc::split_list::dynamic_bucket_table< false >
800 ,co::memory_model< co::v::sequential_consistent >
801 ,cc::split_list::ordered_list_traits<
802 typename cc::michael_list::make_traits<
804 ,co::memory_model< co::v::sequential_consistent >
809 typedef cc::SplitListSet< cds::gc::HP, key_val, traits_SplitList_Michael_st_less_seqcst > SplitList_Michael_HP_st_less_seqcst;
810 typedef cc::SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Michael_st_less_seqcst > SplitList_Michael_DHP_st_less_seqcst;
811 typedef cc::SplitListSet< rcu_gpi, key_val, traits_SplitList_Michael_st_less_seqcst > SplitList_Michael_RCU_GPI_st_less_seqcst;
812 typedef cc::SplitListSet< rcu_gpb, key_val, traits_SplitList_Michael_st_less_seqcst > SplitList_Michael_RCU_GPB_st_less_seqcst;
813 typedef cc::SplitListSet< rcu_gpt, key_val, traits_SplitList_Michael_st_less_seqcst > SplitList_Michael_RCU_GPT_st_less_seqcst;
814 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
815 typedef cc::SplitListSet< rcu_shb, key_val, traits_SplitList_Michael_st_less_seqcst > SplitList_Michael_RCU_SHB_st_less_seqcst;
816 typedef cc::SplitListSet< rcu_sht, key_val, traits_SplitList_Michael_st_less_seqcst > SplitList_Michael_RCU_SHT_st_less_seqcst;
819 // ***************************************************************************
820 // SplitListSet based on LazyList
822 struct traits_SplitList_Lazy_dyn_cmp :
823 public cc::split_list::make_traits<
824 cc::split_list::ordered_list<cc::lazy_list_tag>
826 ,cc::split_list::ordered_list_traits<
827 typename cc::lazy_list::make_traits<
828 co::compare< compare >
833 typedef cc::SplitListSet< cds::gc::HP, key_val, traits_SplitList_Lazy_dyn_cmp > SplitList_Lazy_HP_dyn_cmp;
834 typedef cc::SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Lazy_dyn_cmp > SplitList_Lazy_DHP_dyn_cmp;
835 typedef cc::SplitListSet< rcu_gpi, key_val, traits_SplitList_Lazy_dyn_cmp > SplitList_Lazy_RCU_GPI_dyn_cmp;
836 typedef cc::SplitListSet< rcu_gpb, key_val, traits_SplitList_Lazy_dyn_cmp > SplitList_Lazy_RCU_GPB_dyn_cmp;
837 typedef cc::SplitListSet< rcu_gpt, key_val, traits_SplitList_Lazy_dyn_cmp > SplitList_Lazy_RCU_GPT_dyn_cmp;
838 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
839 typedef cc::SplitListSet< rcu_shb, key_val, traits_SplitList_Lazy_dyn_cmp > SplitList_Lazy_RCU_SHB_dyn_cmp;
840 typedef cc::SplitListSet< rcu_sht, key_val, traits_SplitList_Lazy_dyn_cmp > SplitList_Lazy_RCU_SHT_dyn_cmp;
843 struct traits_SplitList_Lazy_dyn_cmp_stat : public traits_SplitList_Lazy_dyn_cmp
845 typedef cc::split_list::stat<> stat;
847 typedef cc::SplitListSet< cds::gc::HP, key_val, traits_SplitList_Lazy_dyn_cmp_stat > SplitList_Lazy_HP_dyn_cmp_stat;
848 typedef cc::SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Lazy_dyn_cmp_stat > SplitList_Lazy_DHP_dyn_cmp_stat;
849 typedef cc::SplitListSet< rcu_gpi, key_val, traits_SplitList_Lazy_dyn_cmp_stat > SplitList_Lazy_RCU_GPI_dyn_cmp_stat;
850 typedef cc::SplitListSet< rcu_gpb, key_val, traits_SplitList_Lazy_dyn_cmp_stat > SplitList_Lazy_RCU_GPB_dyn_cmp_stat;
851 typedef cc::SplitListSet< rcu_gpt, key_val, traits_SplitList_Lazy_dyn_cmp_stat > SplitList_Lazy_RCU_GPT_dyn_cmp_stat;
852 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
853 typedef cc::SplitListSet< rcu_shb, key_val, traits_SplitList_Lazy_dyn_cmp > SplitList_Lazy_RCU_SHB_dyn_cmp_stat;
854 typedef cc::SplitListSet< rcu_sht, key_val, traits_SplitList_Lazy_dyn_cmp > SplitList_Lazy_RCU_SHT_dyn_cmp_stat;
857 struct traits_SplitList_Lazy_dyn_cmp_seqcst :
858 public cc::split_list::make_traits<
859 cc::split_list::ordered_list<cc::lazy_list_tag>
861 ,co::memory_model< co::v::sequential_consistent >
862 ,cc::split_list::ordered_list_traits<
863 typename cc::lazy_list::make_traits<
864 co::compare< compare >
865 ,co::memory_model< co::v::sequential_consistent >
870 typedef cc::SplitListSet< cds::gc::HP, key_val, traits_SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_HP_dyn_cmp_seqcst;
871 typedef cc::SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_DHP_dyn_cmp_seqcst;
872 typedef cc::SplitListSet< rcu_gpi, key_val, traits_SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_RCU_GPI_dyn_cmp_seqcst;
873 typedef cc::SplitListSet< rcu_gpb, key_val, traits_SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_RCU_GPB_dyn_cmp_seqcst;
874 typedef cc::SplitListSet< rcu_gpt, key_val, traits_SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_RCU_GPT_dyn_cmp_seqcst;
875 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
876 typedef cc::SplitListSet< rcu_shb, key_val, traits_SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_RCU_SHB_dyn_cmp_seqcst;
877 typedef cc::SplitListSet< rcu_sht, key_val, traits_SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_RCU_SHT_dyn_cmp_seqcst;
880 struct traits_SplitList_Lazy_st_cmp :
881 public cc::split_list::make_traits<
882 cc::split_list::ordered_list<cc::lazy_list_tag>
883 ,cc::split_list::dynamic_bucket_table< false >
885 ,cc::split_list::ordered_list_traits<
886 typename cc::lazy_list::make_traits<
887 co::compare< compare >
892 typedef cc::SplitListSet< cds::gc::HP, key_val, traits_SplitList_Lazy_st_cmp > SplitList_Lazy_HP_st_cmp;
893 typedef cc::SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Lazy_st_cmp > SplitList_Lazy_DHP_st_cmp;
894 typedef cc::SplitListSet< rcu_gpi, key_val, traits_SplitList_Lazy_st_cmp > SplitList_Lazy_RCU_GPI_st_cmp;
895 typedef cc::SplitListSet< rcu_gpb, key_val, traits_SplitList_Lazy_st_cmp > SplitList_Lazy_RCU_GPB_st_cmp;
896 typedef cc::SplitListSet< rcu_gpt, key_val, traits_SplitList_Lazy_st_cmp > SplitList_Lazy_RCU_GPT_st_cmp;
897 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
898 typedef cc::SplitListSet< rcu_shb, key_val, traits_SplitList_Lazy_st_cmp > SplitList_Lazy_RCU_SHB_st_cmp;
899 typedef cc::SplitListSet< rcu_sht, key_val, traits_SplitList_Lazy_st_cmp > SplitList_Lazy_RCU_SHT_st_cmp;
902 struct traits_SplitList_Lazy_st_cmp_seqcst :
903 public cc::split_list::make_traits<
904 cc::split_list::ordered_list<cc::lazy_list_tag>
906 ,cc::split_list::dynamic_bucket_table< false >
907 ,co::memory_model< co::v::sequential_consistent >
908 ,cc::split_list::ordered_list_traits<
909 typename cc::lazy_list::make_traits<
910 co::compare< compare >
911 ,co::memory_model< co::v::sequential_consistent >
916 typedef cc::SplitListSet< cds::gc::HP, key_val, traits_SplitList_Lazy_st_cmp_seqcst > SplitList_Lazy_HP_st_cmp_seqcst;
917 typedef cc::SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Lazy_st_cmp_seqcst > SplitList_Lazy_DHP_st_cmp_seqcst;
918 typedef cc::SplitListSet< rcu_gpi, key_val, traits_SplitList_Lazy_st_cmp_seqcst > SplitList_Lazy_RCU_GPI_st_cmp_seqcst;
919 typedef cc::SplitListSet< rcu_gpb, key_val, traits_SplitList_Lazy_st_cmp_seqcst > SplitList_Lazy_RCU_GPB_st_cmp_seqcst;
920 typedef cc::SplitListSet< rcu_gpt, key_val, traits_SplitList_Lazy_st_cmp_seqcst > SplitList_Lazy_RCU_GPT_st_cmp_seqcst;
921 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
922 typedef cc::SplitListSet< rcu_shb, key_val, traits_SplitList_Lazy_st_cmp_seqcst > SplitList_Lazy_RCU_SHB_st_cmp_seqcst;
923 typedef cc::SplitListSet< rcu_sht, key_val, traits_SplitList_Lazy_st_cmp_seqcst > SplitList_Lazy_RCU_SHT_st_cmp_seqcst;
926 struct traits_SplitList_Lazy_dyn_less :
927 public cc::split_list::make_traits<
928 cc::split_list::ordered_list<cc::lazy_list_tag>
930 ,cc::split_list::ordered_list_traits<
931 typename cc::lazy_list::make_traits<
937 typedef cc::SplitListSet< cds::gc::HP, key_val, traits_SplitList_Lazy_dyn_less > SplitList_Lazy_HP_dyn_less;
938 typedef cc::SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Lazy_dyn_less > SplitList_Lazy_DHP_dyn_less;
939 typedef cc::SplitListSet< rcu_gpi, key_val, traits_SplitList_Lazy_dyn_less > SplitList_Lazy_RCU_GPI_dyn_less;
940 typedef cc::SplitListSet< rcu_gpb, key_val, traits_SplitList_Lazy_dyn_less > SplitList_Lazy_RCU_GPB_dyn_less;
941 typedef cc::SplitListSet< rcu_gpt, key_val, traits_SplitList_Lazy_dyn_less > SplitList_Lazy_RCU_GPT_dyn_less;
942 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
943 typedef cc::SplitListSet< rcu_shb, key_val, traits_SplitList_Lazy_dyn_less > SplitList_Lazy_RCU_SHB_dyn_less;
944 typedef cc::SplitListSet< rcu_sht, key_val, traits_SplitList_Lazy_dyn_less > SplitList_Lazy_RCU_SHT_dyn_less;
947 struct traits_SplitList_Lazy_dyn_less_seqcst :
948 public cc::split_list::make_traits<
949 cc::split_list::ordered_list<cc::lazy_list_tag>
951 ,co::memory_model< co::v::sequential_consistent >
952 ,cc::split_list::ordered_list_traits<
953 typename cc::lazy_list::make_traits<
955 ,co::memory_model< co::v::sequential_consistent >
960 typedef cc::SplitListSet< cds::gc::HP, key_val, traits_SplitList_Lazy_dyn_less_seqcst > SplitList_Lazy_HP_dyn_less_seqcst;
961 typedef cc::SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Lazy_dyn_less_seqcst > SplitList_Lazy_DHP_dyn_less_seqcst;
962 typedef cc::SplitListSet< rcu_gpi, key_val, traits_SplitList_Lazy_dyn_less_seqcst > SplitList_Lazy_RCU_GPI_dyn_less_seqcst;
963 typedef cc::SplitListSet< rcu_gpb, key_val, traits_SplitList_Lazy_dyn_less_seqcst > SplitList_Lazy_RCU_GPB_dyn_less_seqcst;
964 typedef cc::SplitListSet< rcu_gpt, key_val, traits_SplitList_Lazy_dyn_less_seqcst > SplitList_Lazy_RCU_GPT_dyn_less_seqcst;
965 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
966 typedef cc::SplitListSet< rcu_shb, key_val, traits_SplitList_Lazy_dyn_less_seqcst > SplitList_Lazy_RCU_SHB_dyn_less_seqcst;
967 typedef cc::SplitListSet< rcu_sht, key_val, traits_SplitList_Lazy_dyn_less_seqcst > SplitList_Lazy_RCU_SHT_dyn_less_seqcst;
970 struct traits_SplitList_Lazy_st_less :
971 public cc::split_list::make_traits<
972 cc::split_list::ordered_list<cc::lazy_list_tag>
973 ,cc::split_list::dynamic_bucket_table< false >
975 ,cc::split_list::ordered_list_traits<
976 typename cc::lazy_list::make_traits<
982 typedef cc::SplitListSet< cds::gc::HP, key_val, traits_SplitList_Lazy_st_less > SplitList_Lazy_HP_st_less;
983 typedef cc::SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Lazy_st_less > SplitList_Lazy_DHP_st_less;
984 typedef cc::SplitListSet< rcu_gpi, key_val, traits_SplitList_Lazy_st_less > SplitList_Lazy_RCU_GPI_st_less;
985 typedef cc::SplitListSet< rcu_gpb, key_val, traits_SplitList_Lazy_st_less > SplitList_Lazy_RCU_GPB_st_less;
986 typedef cc::SplitListSet< rcu_gpt, key_val, traits_SplitList_Lazy_st_less > SplitList_Lazy_RCU_GPT_st_less;
987 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
988 typedef cc::SplitListSet< rcu_shb, key_val, traits_SplitList_Lazy_st_less > SplitList_Lazy_RCU_SHB_st_less;
989 typedef cc::SplitListSet< rcu_sht, key_val, traits_SplitList_Lazy_st_less > SplitList_Lazy_RCU_SHT_st_less;
992 struct traits_SplitList_Lazy_st_less_seqcst :
993 public cc::split_list::make_traits<
994 cc::split_list::ordered_list<cc::lazy_list_tag>
996 ,cc::split_list::dynamic_bucket_table< false >
997 ,co::memory_model< co::v::sequential_consistent >
998 ,cc::split_list::ordered_list_traits<
999 typename cc::lazy_list::make_traits<
1001 ,co::memory_model< co::v::sequential_consistent >
1006 typedef cc::SplitListSet< cds::gc::HP, key_val, traits_SplitList_Lazy_st_less_seqcst > SplitList_Lazy_HP_st_less_seqcst;
1007 typedef cc::SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Lazy_st_less_seqcst > SplitList_Lazy_DHP_st_less_seqcst;
1008 typedef cc::SplitListSet< rcu_gpi, key_val, traits_SplitList_Lazy_st_less_seqcst > SplitList_Lazy_RCU_GPI_st_less_seqcst;
1009 typedef cc::SplitListSet< rcu_gpb, key_val, traits_SplitList_Lazy_st_less_seqcst > SplitList_Lazy_RCU_GPB_st_less_seqcst;
1010 typedef cc::SplitListSet< rcu_gpt, key_val, traits_SplitList_Lazy_st_less_seqcst > SplitList_Lazy_RCU_GPT_st_less_seqcst;
1011 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
1012 typedef cc::SplitListSet< rcu_shb, key_val, traits_SplitList_Lazy_st_less_seqcst > SplitList_Lazy_RCU_SHB_st_less_seqcst;
1013 typedef cc::SplitListSet< rcu_sht, key_val, traits_SplitList_Lazy_st_less_seqcst > SplitList_Lazy_RCU_SHT_st_less_seqcst;
1016 struct traits_SplitList_Lazy_st_less_stat : public traits_SplitList_Lazy_st_less
1018 typedef cc::split_list::stat<> stat;
1020 typedef cc::SplitListSet< cds::gc::HP, key_val, traits_SplitList_Lazy_st_less_stat > SplitList_Lazy_HP_st_less_stat;
1021 typedef cc::SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Lazy_st_less_stat > SplitList_Lazy_DHP_st_less_stat;
1022 typedef cc::SplitListSet< rcu_gpi, key_val, traits_SplitList_Lazy_st_less_stat > SplitList_Lazy_RCU_GPI_st_less_stat;
1023 typedef cc::SplitListSet< rcu_gpb, key_val, traits_SplitList_Lazy_st_less_stat > SplitList_Lazy_RCU_GPB_st_less_stat;
1024 typedef cc::SplitListSet< rcu_gpt, key_val, traits_SplitList_Lazy_st_less_stat > SplitList_Lazy_RCU_GPT_st_less_stat;
1025 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
1026 typedef cc::SplitListSet< rcu_shb, key_val, traits_SplitList_Lazy_st_less_stat > SplitList_Lazy_RCU_SHB_st_less_stat;
1027 typedef cc::SplitListSet< rcu_sht, key_val, traits_SplitList_Lazy_st_less_stat > SplitList_Lazy_RCU_SHT_st_less_stat;
1031 // ***************************************************************************
1034 // for sequential containers
1035 template <class BucketEntry, typename... Options>
1036 class StripedHashSet_seq:
1037 public cc::StripedSet< BucketEntry,
1038 co::mutex_policy< cc::striped_set::striping<> >
1039 ,co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
1043 typedef cc::StripedSet< BucketEntry,
1044 co::mutex_policy< cc::striped_set::striping<> >
1045 ,co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
1048 typedef typename base_class::resizing_policy resizing_policy_t;
1050 resizing_policy_t m_placeHolder;
1052 StripedHashSet_seq( size_t nCapacity, size_t nLoadFactor )
1053 : base_class( nCapacity / nLoadFactor / 16, *(new(&m_placeHolder) resizing_policy_t( nLoadFactor )) )
1056 template <typename Q, typename Less>
1057 bool erase_with( Q const& v, Less pred )
1059 return base_class::erase( v );
1063 // for non-sequential ordered containers
1064 template <class BucketEntry, typename... Options>
1065 class StripedHashSet_ord:
1066 public cc::StripedSet< BucketEntry,
1067 co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
1068 ,co::mutex_policy< cc::striped_set::striping<> >
1072 typedef cc::StripedSet< BucketEntry,
1073 co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
1074 ,co::mutex_policy< cc::striped_set::striping<> >
1077 typedef typename base_class::resizing_policy resizing_policy_t;
1079 resizing_policy_t m_placeHolder;
1081 StripedHashSet_ord( size_t nCapacity, size_t nLoadFactor )
1082 : base_class( 0, *(new(&m_placeHolder) resizing_policy_t( nLoadFactor * 1024 )) )
1085 template <typename Q, typename Less>
1086 bool erase_with( Q const& v, Less pred )
1088 return base_class::erase( v );
1092 typedef StripedHashSet_seq<
1093 std::list< key_val >
1098 typedef StripedHashSet_seq<
1099 std::vector< key_val >
1102 > StripedSet_vector;
1104 #if BOOST_VERSION >= 104800
1105 typedef StripedHashSet_seq<
1106 boost::container::slist< key_val >
1109 > StripedSet_boost_slist;
1111 typedef StripedHashSet_seq<
1112 boost::container::list< key_val >
1115 > StripedSet_boost_list;
1117 typedef StripedHashSet_seq<
1118 boost::container::vector< key_val >
1121 > StripedSet_boost_vector;
1123 typedef StripedHashSet_seq<
1124 boost::container::stable_vector< key_val >
1127 > StripedSet_boost_stable_vector;
1130 typedef StripedHashSet_ord<
1131 std::set< key_val, less >
1135 typedef StripedHashSet_ord<
1136 std::unordered_set< key_val, hash, equal_to >
1138 > StripedSet_hashset;
1140 #if BOOST_VERSION >= 104800
1141 typedef StripedHashSet_ord<
1142 boost::container::set< key_val, less >
1144 > StripedSet_boost_set;
1146 typedef StripedHashSet_ord<
1147 boost::container::flat_set< key_val, less >
1149 > StripedSet_boost_flat_set;
1152 typedef StripedHashSet_ord<
1153 boost::unordered_set< key_val, hash, equal_to >
1155 > StripedSet_boost_unordered_set;
1159 // ***************************************************************************
1162 // for sequential containers
1163 template <class BucketEntry, typename... Options>
1164 class RefinableHashSet_seq:
1165 public cc::StripedSet< BucketEntry,
1166 co::mutex_policy< cc::striped_set::refinable<> >
1167 ,co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
1171 typedef cc::StripedSet< BucketEntry,
1172 co::mutex_policy< cc::striped_set::refinable<> >
1173 ,co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
1176 typedef typename base_class::resizing_policy resizing_policy_t;
1178 resizing_policy_t m_placeHolder;
1180 RefinableHashSet_seq( size_t nCapacity, size_t nLoadFactor )
1181 : base_class( nCapacity / nLoadFactor / 16, *(new(&m_placeHolder) resizing_policy_t( nLoadFactor )) )
1184 template <typename Q, typename Less>
1185 bool erase_with( Q const& v, Less pred )
1187 return base_class::erase( v );
1191 // for non-sequential ordered containers
1192 template <class BucketEntry, typename... Options>
1193 class RefinableHashSet_ord:
1194 public cc::StripedSet< BucketEntry,
1195 co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
1196 ,co::mutex_policy< cc::striped_set::refinable<> >
1200 typedef cc::StripedSet< BucketEntry,
1201 co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
1202 ,co::mutex_policy< cc::striped_set::refinable<> >
1205 typedef typename base_class::resizing_policy resizing_policy_t;
1207 resizing_policy_t m_placeHolder;
1209 RefinableHashSet_ord( size_t nCapacity, size_t nLoadFactor )
1210 : base_class( 0, *(new(&m_placeHolder) resizing_policy_t( nLoadFactor * 1024 )) )
1213 template <typename Q, typename Less>
1214 bool erase_with( Q const& v, Less pred )
1216 return base_class::erase( v );
1220 typedef RefinableHashSet_seq<
1221 std::list< key_val >
1224 > RefinableSet_list;
1226 typedef RefinableHashSet_seq<
1227 std::vector< key_val >
1230 > RefinableSet_vector;
1232 #if BOOST_VERSION >= 104800
1233 typedef RefinableHashSet_seq<
1234 boost::container::slist< key_val >
1237 > RefinableSet_boost_slist;
1239 typedef RefinableHashSet_seq<
1240 boost::container::list< key_val >
1243 > RefinableSet_boost_list;
1245 typedef RefinableHashSet_seq<
1246 boost::container::vector< key_val >
1249 > RefinableSet_boost_vector;
1251 typedef RefinableHashSet_seq<
1252 boost::container::stable_vector< key_val >
1255 > RefinableSet_boost_stable_vector;
1258 typedef RefinableHashSet_ord<
1259 std::set< key_val, less >
1263 typedef RefinableHashSet_ord<
1264 std::unordered_set< key_val, hash, equal_to >
1266 > RefinableSet_hashset;
1268 #if BOOST_VERSION >= 104800
1269 typedef RefinableHashSet_ord<
1270 boost::container::set< key_val, less >
1272 > RefinableSet_boost_set;
1274 typedef RefinableHashSet_ord<
1275 boost::container::flat_set< key_val, less >
1277 > RefinableSet_boost_flat_set;
1280 typedef RefinableHashSet_ord<
1281 boost::unordered_set< key_val, hash, equal_to >
1283 > RefinableSet_boost_unordered_set;
1285 // ***************************************************************************
1288 typedef CuckooStripedSet< key_val,
1289 cc::cuckoo::probeset_type< cc::cuckoo::list >
1290 ,co::equal_to< equal_to >
1291 ,co::hash< std::tuple< hash, hash2 > >
1292 > CuckooStripedSet_list_unord;
1294 typedef CuckooStripedSet< key_val,
1295 cc::cuckoo::probeset_type< cc::cuckoo::list >
1296 ,co::equal_to< equal_to >
1297 ,co::hash< std::tuple< hash, hash2 > >
1298 ,co::stat< cc::cuckoo::stat >
1299 > CuckooStripedSet_list_unord_stat;
1301 typedef CuckooStripedSet< key_val,
1302 cc::cuckoo::probeset_type< cc::cuckoo::list >
1303 ,co::equal_to< equal_to >
1304 ,co::hash< std::tuple< hash, hash2 > >
1305 ,cc::cuckoo::store_hash< true >
1306 > CuckooStripedSet_list_unord_storehash;
1308 typedef CuckooStripedSet< key_val,
1309 cc::cuckoo::probeset_type< cc::cuckoo::list >
1310 ,co::compare< compare >
1311 ,co::hash< std::tuple< hash, hash2 > >
1312 > CuckooStripedSet_list_ord;
1314 typedef CuckooStripedSet< key_val,
1315 cc::cuckoo::probeset_type< cc::cuckoo::list >
1316 ,co::compare< compare >
1317 ,co::hash< std::tuple< hash, hash2 > >
1318 ,co::stat< cc::cuckoo::stat >
1319 > CuckooStripedSet_list_ord_stat;
1321 typedef CuckooStripedSet< key_val,
1322 cc::cuckoo::probeset_type< cc::cuckoo::list >
1323 ,co::compare< compare >
1324 ,co::hash< std::tuple< hash, hash2 > >
1325 ,cc::cuckoo::store_hash< true >
1326 > CuckooStripedSet_list_ord_storehash;
1328 typedef CuckooStripedSet< key_val,
1329 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
1330 ,co::equal_to< equal_to >
1331 ,co::hash< std::tuple< hash, hash2 > >
1332 > CuckooStripedSet_vector_unord;
1334 typedef CuckooStripedSet< key_val,
1335 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
1336 ,co::equal_to< equal_to >
1337 ,co::hash< std::tuple< hash, hash2 > >
1338 ,co::stat< cc::cuckoo::stat >
1339 > CuckooStripedSet_vector_unord_stat;
1341 typedef CuckooStripedSet< key_val,
1342 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
1343 ,co::equal_to< equal_to >
1344 ,co::hash< std::tuple< hash, hash2 > >
1345 ,cc::cuckoo::store_hash< true >
1346 > CuckooStripedSet_vector_unord_storehash;
1348 typedef CuckooStripedSet< key_val,
1349 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
1350 ,co::compare< compare >
1351 ,co::hash< std::tuple< hash, hash2 > >
1352 > CuckooStripedSet_vector_ord;
1354 typedef CuckooStripedSet< key_val,
1355 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
1356 ,co::compare< compare >
1357 ,co::hash< std::tuple< hash, hash2 > >
1358 ,co::stat< cc::cuckoo::stat >
1359 > CuckooStripedSet_vector_ord_stat;
1361 typedef CuckooStripedSet< key_val,
1362 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
1363 ,co::compare< compare >
1364 ,co::hash< std::tuple< hash, hash2 > >
1365 ,cc::cuckoo::store_hash< true >
1366 > CuckooStripedSet_vector_ord_storehash;
1368 typedef CuckooRefinableSet< key_val,
1369 cc::cuckoo::probeset_type< cc::cuckoo::list >
1370 ,co::equal_to< equal_to >
1371 ,co::hash< std::tuple< hash, hash2 > >
1372 > CuckooRefinableSet_list_unord;
1374 typedef CuckooRefinableSet< key_val,
1375 cc::cuckoo::probeset_type< cc::cuckoo::list >
1376 ,co::equal_to< equal_to >
1377 ,co::hash< std::tuple< hash, hash2 > >
1378 ,co::stat< cc::cuckoo::stat >
1379 > CuckooRefinableSet_list_unord_stat;
1381 typedef CuckooRefinableSet< key_val,
1382 cc::cuckoo::probeset_type< cc::cuckoo::list >
1383 ,co::equal_to< equal_to >
1384 ,co::hash< std::tuple< hash, hash2 > >
1385 ,cc::cuckoo::store_hash< true >
1386 > CuckooRefinableSet_list_unord_storehash;
1388 typedef CuckooRefinableSet< key_val,
1389 cc::cuckoo::probeset_type< cc::cuckoo::list >
1390 ,co::compare< compare >
1391 ,co::hash< std::tuple< hash, hash2 > >
1392 > CuckooRefinableSet_list_ord;
1394 typedef CuckooRefinableSet< key_val,
1395 cc::cuckoo::probeset_type< cc::cuckoo::list >
1396 ,co::compare< compare >
1397 ,co::hash< std::tuple< hash, hash2 > >
1398 ,co::stat< cc::cuckoo::stat >
1399 > CuckooRefinableSet_list_ord_stat;
1401 typedef CuckooRefinableSet< key_val,
1402 cc::cuckoo::probeset_type< cc::cuckoo::list >
1403 ,co::compare< compare >
1404 ,co::hash< std::tuple< hash, hash2 > >
1405 ,cc::cuckoo::store_hash< true >
1406 > CuckooRefinableSet_list_ord_storehash;
1408 typedef CuckooRefinableSet< key_val,
1409 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
1410 ,co::equal_to< equal_to >
1411 ,co::hash< std::tuple< hash, hash2 > >
1412 > CuckooRefinableSet_vector_unord;
1414 typedef CuckooRefinableSet< key_val,
1415 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
1416 ,co::equal_to< equal_to >
1417 ,co::hash< std::tuple< hash, hash2 > >
1418 ,co::stat< cc::cuckoo::stat >
1419 > CuckooRefinableSet_vector_unord_stat;
1421 typedef CuckooRefinableSet< key_val,
1422 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
1423 ,co::equal_to< equal_to >
1424 ,co::hash< std::tuple< hash, hash2 > >
1425 ,cc::cuckoo::store_hash< true >
1426 > CuckooRefinableSet_vector_unord_storehash;
1428 typedef CuckooRefinableSet< key_val,
1429 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
1430 ,co::compare< compare >
1431 ,co::hash< std::tuple< hash, hash2 > >
1432 > CuckooRefinableSet_vector_ord;
1434 typedef CuckooRefinableSet< key_val,
1435 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
1436 ,co::compare< compare >
1437 ,co::hash< std::tuple< hash, hash2 > >
1438 ,co::stat< cc::cuckoo::stat >
1439 > CuckooRefinableSet_vector_ord_stat;
1441 typedef CuckooRefinableSet< key_val,
1442 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
1443 ,co::compare< compare >
1444 ,co::hash< std::tuple< hash, hash2 > >
1445 ,cc::cuckoo::store_hash< true >
1446 > CuckooRefinableSet_vector_ord_storehash;
1449 // ***************************************************************************
1452 class traits_SkipListSet_less_pascal: public cc::skip_list::make_traits <
1454 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
1455 ,co::item_counter< cds::atomicity::item_counter >
1458 typedef cc::SkipListSet< cds::gc::HP, key_val, traits_SkipListSet_less_pascal > SkipListSet_hp_less_pascal;
1459 typedef cc::SkipListSet< cds::gc::DHP, key_val, traits_SkipListSet_less_pascal > SkipListSet_dhp_less_pascal;
1460 typedef cc::SkipListSet< rcu_gpi, key_val, traits_SkipListSet_less_pascal > SkipListSet_rcu_gpi_less_pascal;
1461 typedef cc::SkipListSet< rcu_gpb, key_val, traits_SkipListSet_less_pascal > SkipListSet_rcu_gpb_less_pascal;
1462 typedef cc::SkipListSet< rcu_gpt, key_val, traits_SkipListSet_less_pascal > SkipListSet_rcu_gpt_less_pascal;
1463 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
1464 typedef cc::SkipListSet< rcu_shb, key_val, traits_SkipListSet_less_pascal > SkipListSet_rcu_shb_less_pascal;
1465 typedef cc::SkipListSet< rcu_sht, key_val, traits_SkipListSet_less_pascal > SkipListSet_rcu_sht_less_pascal;
1468 class traits_SkipListSet_less_pascal_seqcst: public cc::skip_list::make_traits <
1470 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
1471 ,co::memory_model< co::v::sequential_consistent >
1472 ,co::item_counter< cds::atomicity::item_counter >
1475 typedef cc::SkipListSet< cds::gc::HP, key_val, traits_SkipListSet_less_pascal_seqcst > SkipListSet_hp_less_pascal_seqcst;
1476 typedef cc::SkipListSet< cds::gc::DHP, key_val, traits_SkipListSet_less_pascal_seqcst > SkipListSet_dhp_less_pascal_seqcst;
1477 typedef cc::SkipListSet< rcu_gpi, key_val, traits_SkipListSet_less_pascal_seqcst > SkipListSet_rcu_gpi_less_pascal_seqcst;
1478 typedef cc::SkipListSet< rcu_gpb, key_val, traits_SkipListSet_less_pascal_seqcst > SkipListSet_rcu_gpb_less_pascal_seqcst;
1479 typedef cc::SkipListSet< rcu_gpt, key_val, traits_SkipListSet_less_pascal_seqcst > SkipListSet_rcu_gpt_less_pascal_seqcst;
1480 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
1481 typedef cc::SkipListSet< rcu_shb, key_val, traits_SkipListSet_less_pascal_seqcst > SkipListSet_rcu_shb_less_pascal_seqcst;
1482 typedef cc::SkipListSet< rcu_sht, key_val, traits_SkipListSet_less_pascal_seqcst > SkipListSet_rcu_sht_less_pascal_seqcst;
1485 class traits_SkipListSet_less_pascal_stat: public cc::skip_list::make_traits <
1487 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
1488 ,co::stat< cc::skip_list::stat<> >
1489 ,co::item_counter< cds::atomicity::item_counter >
1492 typedef cc::SkipListSet< cds::gc::HP, key_val, traits_SkipListSet_less_pascal_stat > SkipListSet_hp_less_pascal_stat;
1493 typedef cc::SkipListSet< cds::gc::DHP, key_val, traits_SkipListSet_less_pascal_stat > SkipListSet_dhp_less_pascal_stat;
1494 typedef cc::SkipListSet< rcu_gpi, key_val, traits_SkipListSet_less_pascal_stat > SkipListSet_rcu_gpi_less_pascal_stat;
1495 typedef cc::SkipListSet< rcu_gpb, key_val, traits_SkipListSet_less_pascal_stat > SkipListSet_rcu_gpb_less_pascal_stat;
1496 typedef cc::SkipListSet< rcu_gpt, key_val, traits_SkipListSet_less_pascal_stat > SkipListSet_rcu_gpt_less_pascal_stat;
1497 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
1498 typedef cc::SkipListSet< rcu_shb, key_val, traits_SkipListSet_less_pascal_stat > SkipListSet_rcu_shb_less_pascal_stat;
1499 typedef cc::SkipListSet< rcu_sht, key_val, traits_SkipListSet_less_pascal_stat > SkipListSet_rcu_sht_less_pascal_stat;
1502 class traits_SkipListSet_cmp_pascal: public cc::skip_list::make_traits <
1503 co::compare< compare >
1504 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
1505 ,co::item_counter< cds::atomicity::item_counter >
1508 typedef cc::SkipListSet< cds::gc::HP, key_val, traits_SkipListSet_cmp_pascal > SkipListSet_hp_cmp_pascal;
1509 typedef cc::SkipListSet< cds::gc::DHP, key_val, traits_SkipListSet_cmp_pascal > SkipListSet_dhp_cmp_pascal;
1510 typedef cc::SkipListSet< rcu_gpi, key_val, traits_SkipListSet_cmp_pascal > SkipListSet_rcu_gpi_cmp_pascal;
1511 typedef cc::SkipListSet< rcu_gpb, key_val, traits_SkipListSet_cmp_pascal > SkipListSet_rcu_gpb_cmp_pascal;
1512 typedef cc::SkipListSet< rcu_gpt, key_val, traits_SkipListSet_cmp_pascal > SkipListSet_rcu_gpt_cmp_pascal;
1513 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
1514 typedef cc::SkipListSet< rcu_shb, key_val, traits_SkipListSet_cmp_pascal > SkipListSet_rcu_shb_cmp_pascal;
1515 typedef cc::SkipListSet< rcu_sht, key_val, traits_SkipListSet_cmp_pascal > SkipListSet_rcu_sht_cmp_pascal;
1518 class traits_SkipListSet_cmp_pascal_stat: public cc::skip_list::make_traits <
1519 co::compare< compare >
1520 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
1521 ,co::stat< cc::skip_list::stat<> >
1522 ,co::item_counter< cds::atomicity::item_counter >
1525 typedef cc::SkipListSet< cds::gc::HP, key_val, traits_SkipListSet_cmp_pascal_stat > SkipListSet_hp_cmp_pascal_stat;
1526 typedef cc::SkipListSet< cds::gc::DHP, key_val, traits_SkipListSet_cmp_pascal_stat > SkipListSet_dhp_cmp_pascal_stat;
1527 typedef cc::SkipListSet< rcu_gpi, key_val, traits_SkipListSet_cmp_pascal_stat > SkipListSet_rcu_gpi_cmp_pascal_stat;
1528 typedef cc::SkipListSet< rcu_gpb, key_val, traits_SkipListSet_cmp_pascal_stat > SkipListSet_rcu_gpb_cmp_pascal_stat;
1529 typedef cc::SkipListSet< rcu_gpt, key_val, traits_SkipListSet_cmp_pascal_stat > SkipListSet_rcu_gpt_cmp_pascal_stat;
1530 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
1531 typedef cc::SkipListSet< rcu_shb, key_val, traits_SkipListSet_cmp_pascal_stat > SkipListSet_rcu_shb_cmp_pascal_stat;
1532 typedef cc::SkipListSet< rcu_sht, key_val, traits_SkipListSet_cmp_pascal_stat > SkipListSet_rcu_sht_cmp_pascal_stat;
1535 class traits_SkipListSet_less_xorshift: public cc::skip_list::make_traits <
1537 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
1538 ,co::item_counter< cds::atomicity::item_counter >
1541 typedef cc::SkipListSet< cds::gc::HP, key_val, traits_SkipListSet_less_xorshift > SkipListSet_hp_less_xorshift;
1542 typedef cc::SkipListSet< cds::gc::DHP, key_val, traits_SkipListSet_less_xorshift > SkipListSet_dhp_less_xorshift;
1543 typedef cc::SkipListSet< rcu_gpi, key_val, traits_SkipListSet_less_xorshift > SkipListSet_rcu_gpi_less_xorshift;
1544 typedef cc::SkipListSet< rcu_gpb, key_val, traits_SkipListSet_less_xorshift > SkipListSet_rcu_gpb_less_xorshift;
1545 typedef cc::SkipListSet< rcu_gpt, key_val, traits_SkipListSet_less_xorshift > SkipListSet_rcu_gpt_less_xorshift;
1546 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
1547 typedef cc::SkipListSet< rcu_shb, key_val, traits_SkipListSet_less_xorshift > SkipListSet_rcu_shb_less_xorshift;
1548 typedef cc::SkipListSet< rcu_sht, key_val, traits_SkipListSet_less_xorshift > SkipListSet_rcu_sht_less_xorshift;
1551 class traits_SkipListSet_less_xorshift_stat: public cc::skip_list::make_traits <
1553 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
1554 ,co::stat< cc::skip_list::stat<> >
1555 ,co::item_counter< cds::atomicity::item_counter >
1558 typedef cc::SkipListSet< cds::gc::HP, key_val, traits_SkipListSet_less_xorshift_stat > SkipListSet_hp_less_xorshift_stat;
1559 typedef cc::SkipListSet< cds::gc::DHP, key_val, traits_SkipListSet_less_xorshift_stat > SkipListSet_dhp_less_xorshift_stat;
1560 typedef cc::SkipListSet< rcu_gpi, key_val, traits_SkipListSet_less_xorshift_stat > SkipListSet_rcu_gpi_less_xorshift_stat;
1561 typedef cc::SkipListSet< rcu_gpb, key_val, traits_SkipListSet_less_xorshift_stat > SkipListSet_rcu_gpb_less_xorshift_stat;
1562 typedef cc::SkipListSet< rcu_gpt, key_val, traits_SkipListSet_less_xorshift_stat > SkipListSet_rcu_gpt_less_xorshift_stat;
1563 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
1564 typedef cc::SkipListSet< rcu_shb, key_val, traits_SkipListSet_less_xorshift_stat > SkipListSet_rcu_shb_less_xorshift_stat;
1565 typedef cc::SkipListSet< rcu_sht, key_val, traits_SkipListSet_less_xorshift_stat > SkipListSet_rcu_sht_less_xorshift_stat;
1568 class traits_SkipListSet_cmp_xorshift: public cc::skip_list::make_traits <
1569 co::compare< compare >
1570 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
1571 ,co::item_counter< cds::atomicity::item_counter >
1574 typedef cc::SkipListSet< cds::gc::HP, key_val, traits_SkipListSet_cmp_xorshift > SkipListSet_hp_cmp_xorshift;
1575 typedef cc::SkipListSet< cds::gc::DHP, key_val, traits_SkipListSet_cmp_xorshift > SkipListSet_dhp_cmp_xorshift;
1576 typedef cc::SkipListSet< rcu_gpi, key_val, traits_SkipListSet_cmp_xorshift > SkipListSet_rcu_gpi_cmp_xorshift;
1577 typedef cc::SkipListSet< rcu_gpb, key_val, traits_SkipListSet_cmp_xorshift > SkipListSet_rcu_gpb_cmp_xorshift;
1578 typedef cc::SkipListSet< rcu_gpt, key_val, traits_SkipListSet_cmp_xorshift > SkipListSet_rcu_gpt_cmp_xorshift;
1579 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
1580 typedef cc::SkipListSet< rcu_shb, key_val, traits_SkipListSet_cmp_xorshift > SkipListSet_rcu_shb_cmp_xorshift;
1581 typedef cc::SkipListSet< rcu_sht, key_val, traits_SkipListSet_cmp_xorshift > SkipListSet_rcu_sht_cmp_xorshift;
1584 class traits_SkipListSet_cmp_xorshift_stat: public cc::skip_list::make_traits <
1585 co::compare< compare >
1586 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
1587 ,co::stat< cc::skip_list::stat<> >
1588 ,co::item_counter< cds::atomicity::item_counter >
1591 typedef cc::SkipListSet< cds::gc::HP, key_val, traits_SkipListSet_cmp_xorshift_stat > SkipListSet_hp_cmp_xorshift_stat;
1592 typedef cc::SkipListSet< cds::gc::DHP, key_val, traits_SkipListSet_cmp_xorshift_stat > SkipListSet_dhp_cmp_xorshift_stat;
1593 typedef cc::SkipListSet< rcu_gpi, key_val, traits_SkipListSet_cmp_xorshift_stat > SkipListSet_rcu_gpi_cmp_xorshift_stat;
1594 typedef cc::SkipListSet< rcu_gpb, key_val, traits_SkipListSet_cmp_xorshift_stat > SkipListSet_rcu_gpb_cmp_xorshift_stat;
1595 typedef cc::SkipListSet< rcu_gpt, key_val, traits_SkipListSet_cmp_xorshift_stat > SkipListSet_rcu_gpt_cmp_xorshift_stat;
1596 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
1597 typedef cc::SkipListSet< rcu_shb, key_val, traits_SkipListSet_cmp_xorshift_stat > SkipListSet_rcu_shb_cmp_xorshift_stat;
1598 typedef cc::SkipListSet< rcu_sht, key_val, traits_SkipListSet_cmp_xorshift_stat > SkipListSet_rcu_sht_cmp_xorshift_stat;
1602 // ***************************************************************************
1604 struct ellen_bintree_props {
1605 struct key_extractor {
1606 void operator()( key_type& dest, key_val const& src ) const
1613 bool operator()( key_val const& v1, key_val const& v2 ) const
1615 return key_less()( v1.key, v2.key );
1617 bool operator()( key_type const& k, key_val const& v ) const
1619 return key_less()( k, v.key );
1621 bool operator()( key_val const& v, key_type const& k ) const
1623 return key_less()( v.key, k );
1625 bool operator()( key_type const& k1, key_type const& k2 ) const
1627 return key_less()( k1, k2 );
1632 typedef cc::ellen_bintree::node<cds::gc::HP, key_val> leaf_node;
1633 typedef cc::ellen_bintree::internal_node< key_type, leaf_node > internal_node;
1634 typedef cc::ellen_bintree::update_desc< leaf_node, internal_node > update_desc;
1638 typedef cc::ellen_bintree::node<cds::gc::DHP, key_val> leaf_node;
1639 typedef cc::ellen_bintree::internal_node< key_type, leaf_node > internal_node;
1640 typedef cc::ellen_bintree::update_desc< leaf_node, internal_node > update_desc;
1644 typedef cc::ellen_bintree::node<rcu_gpi, key_val> leaf_node;
1645 typedef cc::ellen_bintree::internal_node< key_type, leaf_node > internal_node;
1646 typedef cc::ellen_bintree::update_desc< leaf_node, internal_node > update_desc;
1649 typedef cc::ellen_bintree::node<rcu_gpb, key_val> leaf_node;
1650 typedef cc::ellen_bintree::internal_node< key_type, leaf_node > internal_node;
1651 typedef cc::ellen_bintree::update_desc< leaf_node, internal_node > update_desc;
1654 typedef cc::ellen_bintree::node<rcu_gpt, key_val> leaf_node;
1655 typedef cc::ellen_bintree::internal_node< key_type, leaf_node > internal_node;
1656 typedef cc::ellen_bintree::update_desc< leaf_node, internal_node > update_desc;
1658 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
1660 typedef cc::ellen_bintree::node<rcu_shb, key_val> leaf_node;
1661 typedef cc::ellen_bintree::internal_node< key_type, leaf_node > internal_node;
1662 typedef cc::ellen_bintree::update_desc< leaf_node, internal_node > update_desc;
1665 typedef cc::ellen_bintree::node<rcu_sht, key_val> leaf_node;
1666 typedef cc::ellen_bintree::internal_node< key_type, leaf_node > internal_node;
1667 typedef cc::ellen_bintree::update_desc< leaf_node, internal_node > update_desc;
1672 struct traits_EllenBinTreeSet: public cc::ellen_bintree::make_set_traits<
1673 cc::ellen_bintree::key_extractor< typename ellen_bintree_props::key_extractor >
1674 ,co::less< typename ellen_bintree_props::less >
1675 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
1679 struct traits_EllenBinTreeSet_hp : public traits_EllenBinTreeSet
1681 typedef cds::memory::pool_allocator< typename ellen_bintree_props::hp_gc::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
1683 typedef cc::EllenBinTreeSet< cds::gc::HP, key_type, key_val, traits_EllenBinTreeSet_hp > EllenBinTreeSet_hp;
1685 struct traits_EllenBinTreeSet_dhp : public traits_EllenBinTreeSet
1687 typedef cds::memory::pool_allocator< typename ellen_bintree_props::dhp_gc::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
1689 typedef cc::EllenBinTreeSet< cds::gc::DHP, key_type, key_val, traits_EllenBinTreeSet_dhp > EllenBinTreeSet_dhp;
1691 struct traits_EllenBinTreeSet_gpi : public traits_EllenBinTreeSet
1693 typedef cds::memory::pool_allocator< typename ellen_bintree_props::gpi::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
1695 typedef cc::EllenBinTreeSet< rcu_gpi, key_type, key_val, traits_EllenBinTreeSet_gpi > EllenBinTreeSet_rcu_gpi;
1697 struct traits_EllenBinTreeSet_gpb : public traits_EllenBinTreeSet
1699 typedef cds::memory::pool_allocator< typename ellen_bintree_props::gpb::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
1701 typedef cc::EllenBinTreeSet< rcu_gpb, key_type, key_val, traits_EllenBinTreeSet_gpb > EllenBinTreeSet_rcu_gpb;
1703 struct traits_EllenBinTreeSet_gpt : public traits_EllenBinTreeSet
1705 typedef cds::memory::pool_allocator< typename ellen_bintree_props::gpt::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
1707 typedef cc::EllenBinTreeSet< rcu_gpt, key_type, key_val, traits_EllenBinTreeSet_gpt > EllenBinTreeSet_rcu_gpt;
1709 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
1710 struct traits_EllenBinTreeSet_shb : public traits_EllenBinTreeSet
1712 typedef cds::memory::pool_allocator< typename ellen_bintree_props::shb::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
1714 typedef cc::EllenBinTreeSet< rcu_shb, key_type, key_val, traits_EllenBinTreeSet_shb > EllenBinTreeSet_rcu_shb;
1716 struct traits_EllenBinTreeSet_sht : public traits_EllenBinTreeSet
1718 typedef cds::memory::pool_allocator< typename ellen_bintree_props::sht::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
1720 typedef cc::EllenBinTreeSet< rcu_sht, key_type, key_val, traits_EllenBinTreeSet_sht > EllenBinTreeSet_rcu_sht;
1723 struct traits_EllenBinTreeSet_stat: public cc::ellen_bintree::make_set_traits<
1724 cc::ellen_bintree::key_extractor< typename ellen_bintree_props::key_extractor >
1725 ,co::less< typename ellen_bintree_props::less >
1726 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
1727 ,co::stat< cc::ellen_bintree::stat<> >
1731 struct traits_EllenBinTreeSet_stat_hp : public traits_EllenBinTreeSet_stat
1733 typedef cds::memory::pool_allocator< typename ellen_bintree_props::hp_gc::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
1735 typedef cc::EllenBinTreeSet< cds::gc::HP, key_type, key_val, traits_EllenBinTreeSet_stat_hp > EllenBinTreeSet_hp_stat;
1737 struct traits_EllenBinTreeSet_stat_dhp : public traits_EllenBinTreeSet_stat
1739 typedef cds::memory::pool_allocator< typename ellen_bintree_props::dhp_gc::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
1741 typedef cc::EllenBinTreeSet< cds::gc::DHP, key_type, key_val, traits_EllenBinTreeSet_stat_dhp > EllenBinTreeSet_dhp_stat;
1743 struct traits_EllenBinTreeSet_stat_gpi : public traits_EllenBinTreeSet_stat
1745 typedef cds::memory::pool_allocator< typename ellen_bintree_props::gpi::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
1747 typedef cc::EllenBinTreeSet< rcu_gpi, key_type, key_val, traits_EllenBinTreeSet_stat_gpi > EllenBinTreeSet_rcu_gpi_stat;
1749 struct traits_EllenBinTreeSet_stat_gpb : public traits_EllenBinTreeSet_stat
1751 typedef cds::memory::pool_allocator< typename ellen_bintree_props::gpb::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
1753 typedef cc::EllenBinTreeSet< rcu_gpb, key_type, key_val, traits_EllenBinTreeSet_stat_gpb > EllenBinTreeSet_rcu_gpb_stat;
1755 struct traits_EllenBinTreeSet_stat_gpt : public traits_EllenBinTreeSet_stat
1757 typedef cds::memory::pool_allocator< typename ellen_bintree_props::gpt::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
1759 typedef cc::EllenBinTreeSet< rcu_gpt, key_type, key_val, traits_EllenBinTreeSet_stat_gpt > EllenBinTreeSet_rcu_gpt_stat;
1761 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
1762 struct traits_EllenBinTreeSet_stat_shb : public traits_EllenBinTreeSet_stat
1764 typedef cds::memory::pool_allocator< typename ellen_bintree_props::shb::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
1766 typedef cc::EllenBinTreeSet< rcu_shb, key_type, key_val, traits_EllenBinTreeSet_stat_shb > EllenBinTreeSet_rcu_shb_stat;
1768 struct traits_EllenBinTreeSet_stat_sht : public traits_EllenBinTreeSet_stat
1770 typedef cds::memory::pool_allocator< typename ellen_bintree_props::sht::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
1772 typedef cc::EllenBinTreeSet< rcu_sht, key_type, key_val, traits_EllenBinTreeSet_stat_sht > EllenBinTreeSet_rcu_sht_stat;
1775 // ***************************************************************************
1776 // Standard implementations
1778 typedef StdSet< key_val, less, cds::SpinLock > StdSet_Spin;
1779 typedef StdSet< key_val, less, lock::NoLock> StdSet_NoLock;
1781 typedef StdHashSet< key_val, hash, less, equal_to, cds::SpinLock > StdHashSet_Spin;
1782 typedef StdHashSet< key_val, hash, less, equal_to, lock::NoLock > StdHashSet_NoLock;
1787 // *************************************************
1789 // *************************************************
1791 template <typename Set>
1792 static inline void print_stat( Set const& s )
1795 template <typename GC, typename T, typename Traits>
1796 static inline void print_stat( cc::SplitListSet<GC, T, Traits> const& s )
1798 CPPUNIT_MSG( s.statistics() );
1801 template <typename GC, typename T, typename Traits>
1802 static inline void print_stat( cc::SkipListSet<GC, T, Traits> const& s )
1804 CPPUNIT_MSG( s.statistics() );
1807 template <typename GC, typename Key, typename T, typename Traits>
1808 static inline void print_stat( cc::EllenBinTreeSet<GC, Key, T, Traits> const& s )
1810 CPPUNIT_MSG( s.statistics() );
1813 template <typename T, typename Traits >
1814 static inline void print_stat( cc::CuckooSet< T, Traits > const& s )
1816 CPPUNIT_MSG( s.statistics() << s.mutex_policy_statistics() );
1819 template <typename V, typename... Options>
1820 static inline void print_stat( CuckooStripedSet< V, Options... > const& s )
1822 typedef CuckooStripedSet< V, Options... > set_type;
1823 print_stat( static_cast<typename set_type::cuckoo_base_class const&>(s) );
1826 template <typename V, typename... Options>
1827 static inline void print_stat( CuckooRefinableSet< V, Options... > const& s )
1829 typedef CuckooRefinableSet< V, Options... > set_type;
1830 print_stat( static_cast<typename set_type::cuckoo_base_class const&>(s) );
1835 //*******************************************************
1837 //*******************************************************
1839 template <typename Set>
1840 static inline void additional_check( Set& set )
1843 template <typename Set>
1844 static inline void additional_cleanup( Set& set )
1847 namespace ellen_bintree_check {
1848 static inline void check_stat( cds::intrusive::ellen_bintree::empty_stat const& s )
1850 // Not true for threaded RCU
1852 CPPUNIT_CHECK_CURRENT_EX( ellen_bintree_pool::internal_node_counter::m_nAlloc.get() == ellen_bintree_pool::internal_node_counter::m_nFree.get(),
1853 "m_nAlloc=" << ellen_bintree_pool::internal_node_counter::m_nAlloc.get()
1854 << ", m_nFree=" << ellen_bintree_pool::internal_node_counter::m_nFree.get()
1859 static inline void check_stat( cds::intrusive::ellen_bintree::stat<> const& stat )
1861 CPPUNIT_CHECK_CURRENT( stat.m_nInternalNodeCreated == stat.m_nInternalNodeDeleted );
1862 CPPUNIT_CHECK_CURRENT( stat.m_nUpdateDescCreated == stat.m_nUpdateDescDeleted );
1863 //CPPUNIT_CHECK_CURRENT( ellen_bintree_pool::internal_node_counter::m_nAlloc.get() == ellen_bintree_pool::internal_node_counter::m_nFree.get() );
1864 CPPUNIT_CHECK_CURRENT( ellen_bintree_pool::internal_node_counter::m_nAlloc.get() == stat.m_nInternalNodeCreated );
1865 // true if RCU is not threaded
1866 //CPPUNIT_CHECK_CURRENT( stat.m_nInternalNodeDeleted == ellen_bintree_pool::internal_node_counter::m_nFree.get() );
1868 } // namespace ellen_bintree_check
1870 template <typename GC, typename Key, typename T, typename Traits>
1871 static inline void additional_check( cc::EllenBinTreeSet<GC, Key, T, Traits>& s )
1873 GC::force_dispose();
1874 ellen_bintree_check::check_stat( s.statistics() );
1877 template <typename GC, typename Key, typename T, typename Traits>
1878 static inline void additional_cleanup( cc::EllenBinTreeSet<GC, Key, T, Traits>& s )
1880 ellen_bintree_pool::internal_node_counter::reset();
1885 #endif // ifndef _CDSUNIT_SET2_SET_TYPES_H