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_ptb.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_skip_list_stat.h"
62 #include "print_ellenbintree_stat.h"
63 #include "ellen_bintree_update_desc_pool.h"
66 namespace cc = cds::container;
67 namespace co = cds::opt;
69 typedef cds::urcu::gc< cds::urcu::general_instant<> > rcu_gpi;
70 typedef cds::urcu::gc< cds::urcu::general_buffered<> > rcu_gpb;
71 typedef cds::urcu::gc< cds::urcu::general_threaded<> > rcu_gpt;
72 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
73 typedef cds::urcu::gc< cds::urcu::signal_buffered<> > rcu_shb;
74 typedef cds::urcu::gc< cds::urcu::signal_threaded<> > rcu_sht;
77 template <typename V, typename... Options>
78 class CuckooStripedSet:
79 public cc::CuckooSet< V,
80 typename cc::cuckoo::make_traits<
81 co::mutex_policy< cc::cuckoo::striping<> >
87 typedef typename cc::cuckoo::make_traits<
88 co::mutex_policy< cc::cuckoo::striping<> >
90 >::type cuckoo_traits;
92 typedef cc::CuckooSet< V, cuckoo_traits > cuckoo_base_class;
95 CuckooStripedSet( size_t nCapacity, size_t nLoadFactor )
96 : cuckoo_base_class( nCapacity / (nLoadFactor * 16), (unsigned int) 4 )
99 template <typename Q, typename Pred>
100 bool erase_with( Q const& key, Pred pred )
102 return cuckoo_base_class::erase_with( key, typename std::conditional< cuckoo_base_class::c_isSorted, Pred, typename Pred::equal_to>::type() );
106 template <typename V, typename... Options>
107 class CuckooRefinableSet:
108 public cc::CuckooSet< V,
109 typename cc::cuckoo::make_traits<
110 co::mutex_policy< cc::cuckoo::refinable<> >
116 typedef typename cc::cuckoo::make_traits<
117 co::mutex_policy< cc::cuckoo::refinable<> >
119 >::type cuckoo_traits;
121 typedef cc::CuckooSet< V, cuckoo_traits > cuckoo_base_class;
124 CuckooRefinableSet( size_t nCapacity, size_t nLoadFactor )
125 : cuckoo_base_class( nCapacity / (nLoadFactor * 16), (unsigned int) 4 )
128 template <typename Q, typename Pred>
129 bool erase_with( Q const& key, Pred pred )
131 return cuckoo_base_class::erase_with( key, typename std::conditional< cuckoo_base_class::c_isSorted, Pred, typename Pred::equal_to>::type() );
135 template <typename Key>
137 int operator ()(Key const& k1, Key const& k2) const
139 if ( std::less<Key>( k1, k2 ) )
141 return std::less<Key>( k2, k1 ) ? 1 : 0;
145 #define CDSUNIT_INT_COMPARE(t) template <> struct cmp<t> { int operator()( t k1, t k2 ){ return (int)(k1 - k2); } }
146 CDSUNIT_INT_COMPARE(char);
147 CDSUNIT_INT_COMPARE(unsigned char);
148 CDSUNIT_INT_COMPARE(int);
149 CDSUNIT_INT_COMPARE(unsigned int);
150 CDSUNIT_INT_COMPARE(long);
151 CDSUNIT_INT_COMPARE(unsigned long);
152 CDSUNIT_INT_COMPARE(long long);
153 CDSUNIT_INT_COMPARE(unsigned long long);
154 #undef CDSUNIT_INT_COMPARE
157 struct cmp<std::string>
159 int operator()(std::string const& s1, std::string const& s2)
161 return s1.compare( s2 );
163 int operator()(std::string const& s1, char const * s2)
165 return s1.compare( s2 );
167 int operator()(char const * s1, std::string const& s2)
169 return -s2.compare( s1 );
173 template <typename Key, typename Value>
176 typedef Key key_type;
177 typedef Value value_type;
183 /*explicit*/ key_val( key_type const& k ): key(k), val() {}
184 key_val( key_type const& k, value_type const& v ): key(k), val(v) {}
186 template <typename K>
187 /*explicit*/ key_val( K const& k ): key(k) {}
189 template <typename K, typename T>
190 key_val( K const& k, T const& v ): key(k), val(v) {}
193 typedef co::v::hash<key_type> key_hash;
194 typedef std::less<key_type> key_less;
195 typedef cmp<key_type> key_compare;
198 bool operator()( key_val const& k1, key_val const& k2 ) const
200 return key_less()( k1.key, k2.key );
202 bool operator()( key_type const& k1, key_val const& k2 ) const
204 return key_less()( k1, k2.key );
206 bool operator()( key_val const& k1, key_type const& k2 ) const
208 return key_less()( k1.key, k2 );
213 int operator()( key_val const& k1, key_val const& k2 ) const
215 return key_compare()( k1.key, k2.key );
217 int operator()( key_type const& k1, key_val const& k2 ) const
219 return key_compare()( k1, k2.key );
221 int operator()( key_val const& k1, key_type const& k2 ) const
223 return key_compare()( k1.key, k2 );
228 bool operator()( key_val const& k1, key_val const& k2 ) const
230 return key_compare()( k1.key, k2.key ) == 0;
232 bool operator()( key_type const& k1, key_val const& k2 ) const
234 return key_compare()( k1, k2.key ) == 0;
236 bool operator()( key_val const& k1, key_type const& k2 ) const
238 return key_compare()( k1.key, k2 ) == 0;
243 struct hash: public key_hash
245 size_t operator()( key_val const& v ) const
247 return key_hash::operator()( v.key );
249 size_t operator()( key_type const& key ) const
251 return key_hash::operator()( key );
253 template <typename Q>
254 size_t operator()( Q const& k ) const
256 return key_hash::operator()( k );
260 struct hash2: public hash
262 size_t operator()( key_val const& k ) const
264 size_t seed = ~hash::operator ()( k );
265 boost::hash_combine( seed, k.key );
268 size_t operator()( key_type const& k ) const
270 size_t seed = ~hash::operator ()( k );
271 boost::hash_combine( seed, k );
274 template <typename Q>
275 size_t operator()( Q const& k ) const
277 return key_hash::operator()( k );
281 #if (CDS_COMPILER == CDS_COMPILER_MSVC || (CDS_COMPILER == CDS_COMPILER_INTEL && CDS_OS_INTERFACE == CDS_OSI_WINDOWS)) && _MSC_VER < 1600
282 struct hash_less: public stdext::hash_compare< key_type, std::less<key_type> >
284 typedef stdext::hash_compare< key_type, std::less<key_type> > base_class;
285 size_t operator()(const key_val& kv) const
289 size_t operator()(const key_type& k ) const
294 bool operator()(const key_val& kv1, const key_val& kv2) const
296 return less()( kv1, kv2 );
298 bool operator()(const key_type& k1, const key_val& kv2) const
300 return less()( k1, kv2 );
302 bool operator()(const key_val& kv1, const key_type& k2) const
304 return less()( kv1, k2 );
309 // ***************************************************************************
312 struct traits_MichaelList_cmp_stdAlloc:
313 public cc::michael_list::make_traits<
314 co::compare< compare >
317 typedef cc::MichaelList< cds::gc::HP, key_val, traits_MichaelList_cmp_stdAlloc > MichaelList_HP_cmp_stdAlloc;
318 typedef cc::MichaelList< cds::gc::DHP, key_val, traits_MichaelList_cmp_stdAlloc > MichaelList_DHP_cmp_stdAlloc;
319 typedef cc::MichaelList< rcu_gpi, key_val, traits_MichaelList_cmp_stdAlloc > MichaelList_RCU_GPI_cmp_stdAlloc;
320 typedef cc::MichaelList< rcu_gpb, key_val, traits_MichaelList_cmp_stdAlloc > MichaelList_RCU_GPB_cmp_stdAlloc;
321 typedef cc::MichaelList< rcu_gpt, key_val, traits_MichaelList_cmp_stdAlloc > MichaelList_RCU_GPT_cmp_stdAlloc;
322 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
323 typedef cc::MichaelList< rcu_shb, key_val, traits_MichaelList_cmp_stdAlloc > MichaelList_RCU_SHB_cmp_stdAlloc;
324 typedef cc::MichaelList< rcu_sht, key_val, traits_MichaelList_cmp_stdAlloc > MichaelList_RCU_SHT_cmp_stdAlloc;
327 struct traits_MichaelList_cmp_stdAlloc_seqcst : public traits_MichaelList_cmp_stdAlloc
329 typedef co::v::sequential_consistent memory_model;
331 typedef cc::MichaelList< cds::gc::HP, key_val, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_HP_cmp_stdAlloc_seqcst;
332 typedef cc::MichaelList< cds::gc::DHP, key_val, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_DHP_cmp_stdAlloc_seqcst;
333 typedef cc::MichaelList< rcu_gpi, key_val, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_RCU_GPI_cmp_stdAlloc_seqcst;
334 typedef cc::MichaelList< rcu_gpb, key_val, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_RCU_GPB_cmp_stdAlloc_seqcst;
335 typedef cc::MichaelList< rcu_gpt, key_val, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_RCU_GPT_cmp_stdAlloc_seqcst;
336 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
337 typedef cc::MichaelList< rcu_shb, key_val, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_RCU_SHB_cmp_stdAlloc_seqcst;
338 typedef cc::MichaelList< rcu_sht, key_val, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_RCU_SHT_cmp_stdAlloc_seqcst;
341 struct traits_MichaelList_less_stdAlloc :
342 public cc::michael_list::make_traits<
346 typedef cc::MichaelList< cds::gc::HP, key_val, traits_MichaelList_less_stdAlloc > MichaelList_HP_less_stdAlloc;
347 typedef cc::MichaelList< cds::gc::DHP, key_val, traits_MichaelList_less_stdAlloc > MichaelList_DHP_less_stdAlloc;
348 typedef cc::MichaelList< rcu_gpi, key_val, traits_MichaelList_less_stdAlloc > MichaelList_RCU_GPI_less_stdAlloc;
349 typedef cc::MichaelList< rcu_gpb, key_val, traits_MichaelList_less_stdAlloc > MichaelList_RCU_GPB_less_stdAlloc;
350 typedef cc::MichaelList< rcu_gpt, key_val, traits_MichaelList_less_stdAlloc > MichaelList_RCU_GPT_less_stdAlloc;
351 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
352 typedef cc::MichaelList< rcu_shb, key_val, traits_MichaelList_less_stdAlloc > MichaelList_RCU_SHB_less_stdAlloc;
353 typedef cc::MichaelList< rcu_sht, key_val, traits_MichaelList_less_stdAlloc > MichaelList_RCU_SHT_less_stdAlloc;
356 struct traits_MichaelList_less_stdAlloc_seqcst :
357 public cc::michael_list::make_traits<
359 ,co::memory_model< co::v::sequential_consistent >
362 typedef cc::MichaelList< cds::gc::HP, key_val, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_HP_less_stdAlloc_seqcst;
363 typedef cc::MichaelList< cds::gc::DHP, key_val, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_DHP_less_stdAlloc_seqcst;
364 typedef cc::MichaelList< rcu_gpi, key_val, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_RCU_GPI_less_stdAlloc_seqcst;
365 typedef cc::MichaelList< rcu_gpb, key_val, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_RCU_GPB_less_stdAlloc_seqcst;
366 typedef cc::MichaelList< rcu_gpt, key_val, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_RCU_GPT_less_stdAlloc_seqcst;
367 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
368 typedef cc::MichaelList< rcu_shb, key_val, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_RCU_SHB_less_stdAlloc_seqcst;
369 typedef cc::MichaelList< rcu_sht, key_val, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_RCU_SHT_less_stdAlloc_seqcst;
372 struct traits_MichaelList_cmp_michaelAlloc :
373 public cc::michael_list::make_traits<
374 co::compare< compare >,
375 co::allocator< memory::MichaelAllocator<int> >
378 typedef cc::MichaelList< cds::gc::HP, key_val, traits_MichaelList_cmp_michaelAlloc > MichaelList_HP_cmp_michaelAlloc;
379 typedef cc::MichaelList< cds::gc::DHP, key_val, traits_MichaelList_cmp_michaelAlloc > MichaelList_DHP_cmp_michaelAlloc;
380 typedef cc::MichaelList< rcu_gpi, key_val, traits_MichaelList_cmp_michaelAlloc > MichaelList_RCU_GPI_cmp_michaelAlloc;
381 typedef cc::MichaelList< rcu_gpb, key_val, traits_MichaelList_cmp_michaelAlloc > MichaelList_RCU_GPB_cmp_michaelAlloc;
382 typedef cc::MichaelList< rcu_gpt, key_val, traits_MichaelList_cmp_michaelAlloc > MichaelList_RCU_GPT_cmp_michaelAlloc;
383 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
384 typedef cc::MichaelList< rcu_shb, key_val, traits_MichaelList_cmp_michaelAlloc > MichaelList_RCU_SHB_cmp_michaelAlloc;
385 typedef cc::MichaelList< rcu_sht, key_val, traits_MichaelList_cmp_michaelAlloc > MichaelList_RCU_SHT_cmp_michaelAlloc;
388 struct traits_MichaelList_less_michaelAlloc :
389 public cc::michael_list::make_traits<
391 co::allocator< memory::MichaelAllocator<int> >
394 typedef cc::MichaelList< cds::gc::HP, key_val, traits_MichaelList_less_michaelAlloc > MichaelList_HP_less_michaelAlloc;
395 typedef cc::MichaelList< cds::gc::DHP, key_val, traits_MichaelList_less_michaelAlloc > MichaelList_DHP_less_michaelAlloc;
396 typedef cc::MichaelList< rcu_gpi, key_val, traits_MichaelList_less_michaelAlloc > MichaelList_RCU_GPI_less_michaelAlloc;
397 typedef cc::MichaelList< rcu_gpb, key_val, traits_MichaelList_less_michaelAlloc > MichaelList_RCU_GPB_less_michaelAlloc;
398 typedef cc::MichaelList< rcu_gpt, key_val, traits_MichaelList_less_michaelAlloc > MichaelList_RCU_GPT_less_michaelAlloc;
399 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
400 typedef cc::MichaelList< rcu_shb, key_val, traits_MichaelList_less_michaelAlloc > MichaelList_RCU_SHB_less_michaelAlloc;
401 typedef cc::MichaelList< rcu_sht, key_val, traits_MichaelList_less_michaelAlloc > MichaelList_RCU_SHT_less_michaelAlloc;
404 // ***************************************************************************
405 // MichaelHashSet based on MichaelList
407 struct traits_MichaelSet_stdAlloc :
408 public cc::michael_set::make_traits<
412 typedef cc::MichaelHashSet< cds::gc::HP, MichaelList_HP_cmp_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_HP_cmp_stdAlloc;
413 typedef cc::MichaelHashSet< cds::gc::DHP, MichaelList_DHP_cmp_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_DHP_cmp_stdAlloc;
414 typedef cc::MichaelHashSet< rcu_gpi, MichaelList_RCU_GPI_cmp_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_RCU_GPI_cmp_stdAlloc;
415 typedef cc::MichaelHashSet< rcu_gpb, MichaelList_RCU_GPB_cmp_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_RCU_GPB_cmp_stdAlloc;
416 typedef cc::MichaelHashSet< rcu_gpt, MichaelList_RCU_GPT_cmp_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_RCU_GPT_cmp_stdAlloc;
417 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
418 typedef cc::MichaelHashSet< rcu_shb, MichaelList_RCU_SHB_cmp_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_RCU_SHB_cmp_stdAlloc;
419 typedef cc::MichaelHashSet< rcu_sht, MichaelList_RCU_SHT_cmp_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_RCU_SHT_cmp_stdAlloc;
422 typedef cc::MichaelHashSet< cds::gc::HP, MichaelList_HP_less_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_HP_less_stdAlloc;
423 typedef cc::MichaelHashSet< cds::gc::DHP, MichaelList_DHP_less_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_DHP_less_stdAlloc;
424 typedef cc::MichaelHashSet< rcu_gpi, MichaelList_RCU_GPI_less_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_RCU_GPI_less_stdAlloc;
425 typedef cc::MichaelHashSet< rcu_gpb, MichaelList_RCU_GPB_less_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_RCU_GPB_less_stdAlloc;
426 typedef cc::MichaelHashSet< rcu_gpt, MichaelList_RCU_GPT_less_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_RCU_GPT_less_stdAlloc;
427 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
428 typedef cc::MichaelHashSet< rcu_shb, MichaelList_RCU_SHB_less_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_RCU_SHB_less_stdAlloc;
429 typedef cc::MichaelHashSet< rcu_sht, MichaelList_RCU_SHT_less_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_RCU_SHT_less_stdAlloc;
432 typedef cc::MichaelHashSet< cds::gc::HP, MichaelList_HP_less_stdAlloc_seqcst, traits_MichaelSet_stdAlloc > MichaelSet_HP_less_stdAlloc_seqcst;
433 typedef cc::MichaelHashSet< cds::gc::DHP, MichaelList_DHP_less_stdAlloc_seqcst, traits_MichaelSet_stdAlloc > MichaelSet_DHP_less_stdAlloc_seqcst;
434 typedef cc::MichaelHashSet< rcu_gpi, MichaelList_RCU_GPI_less_stdAlloc_seqcst, traits_MichaelSet_stdAlloc > MichaelSet_RCU_GPI_less_stdAlloc_seqcst;
435 typedef cc::MichaelHashSet< rcu_gpb, MichaelList_RCU_GPB_less_stdAlloc_seqcst, traits_MichaelSet_stdAlloc > MichaelSet_RCU_GPB_less_stdAlloc_seqcst;
436 typedef cc::MichaelHashSet< rcu_gpt, MichaelList_RCU_GPT_less_stdAlloc_seqcst, traits_MichaelSet_stdAlloc > MichaelSet_RCU_GPT_less_stdAlloc_seqcst;
437 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
438 typedef cc::MichaelHashSet< rcu_shb, MichaelList_RCU_SHB_less_stdAlloc_seqcst, traits_MichaelSet_stdAlloc > MichaelSet_RCU_SHB_less_stdAlloc_seqcst;
439 typedef cc::MichaelHashSet< rcu_sht, MichaelList_RCU_SHT_less_stdAlloc_seqcst, traits_MichaelSet_stdAlloc > MichaelSet_RCU_SHT_less_stdAlloc_seqcst;
442 struct traits_MichaelSet_michaelAlloc :
443 public cc::michael_set::make_traits<
445 co::allocator< memory::MichaelAllocator<int> >
448 typedef cc::MichaelHashSet< cds::gc::HP, MichaelList_HP_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_HP_cmp_michaelAlloc;
449 typedef cc::MichaelHashSet< cds::gc::DHP, MichaelList_DHP_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_DHP_cmp_michaelAlloc;
450 typedef cc::MichaelHashSet< rcu_gpi, MichaelList_RCU_GPI_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_RCU_GPI_cmp_michaelAlloc;
451 typedef cc::MichaelHashSet< rcu_gpb, MichaelList_RCU_GPB_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_RCU_GPB_cmp_michaelAlloc;
452 typedef cc::MichaelHashSet< rcu_gpt, MichaelList_RCU_GPT_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_RCU_GPT_cmp_michaelAlloc;
453 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
454 typedef cc::MichaelHashSet< rcu_shb, MichaelList_RCU_SHB_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_RCU_SHB_cmp_michaelAlloc;
455 typedef cc::MichaelHashSet< rcu_sht, MichaelList_RCU_SHT_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_RCU_SHT_cmp_michaelAlloc;
458 typedef cc::MichaelHashSet< cds::gc::HP, MichaelList_HP_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_HP_less_michaelAlloc;
459 typedef cc::MichaelHashSet< cds::gc::DHP, MichaelList_DHP_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_DHP_less_michaelAlloc;
460 typedef cc::MichaelHashSet< rcu_gpi, MichaelList_RCU_GPI_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_RCU_GPI_less_michaelAlloc;
461 typedef cc::MichaelHashSet< rcu_gpb, MichaelList_RCU_GPB_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_RCU_GPB_less_michaelAlloc;
462 typedef cc::MichaelHashSet< rcu_gpt, MichaelList_RCU_GPT_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_RCU_GPT_less_michaelAlloc;
463 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
464 typedef cc::MichaelHashSet< rcu_shb, MichaelList_RCU_SHB_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_RCU_SHB_less_michaelAlloc;
465 typedef cc::MichaelHashSet< rcu_sht, MichaelList_RCU_SHT_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_RCU_SHT_less_michaelAlloc;
469 // ***************************************************************************
472 struct traits_LazyList_cmp_stdAlloc :
473 public cc::lazy_list::make_traits<
474 co::compare< compare >
477 typedef cc::LazyList< cds::gc::HP, key_val, traits_LazyList_cmp_stdAlloc > LazyList_HP_cmp_stdAlloc;
478 typedef cc::LazyList< cds::gc::DHP, key_val, traits_LazyList_cmp_stdAlloc > LazyList_DHP_cmp_stdAlloc;
479 typedef cc::LazyList< rcu_gpi, key_val, traits_LazyList_cmp_stdAlloc > LazyList_RCU_GPI_cmp_stdAlloc;
480 typedef cc::LazyList< rcu_gpb, key_val, traits_LazyList_cmp_stdAlloc > LazyList_RCU_GPB_cmp_stdAlloc;
481 typedef cc::LazyList< rcu_gpt, key_val, traits_LazyList_cmp_stdAlloc > LazyList_RCU_GPT_cmp_stdAlloc;
482 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
483 typedef cc::LazyList< rcu_shb, key_val, traits_LazyList_cmp_stdAlloc > LazyList_RCU_SHB_cmp_stdAlloc;
484 typedef cc::LazyList< rcu_sht, key_val, traits_LazyList_cmp_stdAlloc > LazyList_RCU_SHT_cmp_stdAlloc;
486 struct traits_LazyList_cmp_stdAlloc_seqcst :
487 public cc::lazy_list::make_traits<
488 co::compare< compare >
489 ,co::memory_model< co::v::sequential_consistent >
492 typedef cc::LazyList< cds::gc::HP, key_val, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_HP_cmp_stdAlloc_seqcst;
493 typedef cc::LazyList< cds::gc::DHP, key_val, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_DHP_cmp_stdAlloc_seqcst;
494 typedef cc::LazyList< rcu_gpi, key_val, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_RCU_GPI_cmp_stdAlloc_seqcst;
495 typedef cc::LazyList< rcu_gpb, key_val, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_RCU_GPB_cmp_stdAlloc_seqcst;
496 typedef cc::LazyList< rcu_gpt, key_val, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_RCU_GPT_cmp_stdAlloc_seqcst;
497 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
498 typedef cc::LazyList< rcu_shb, key_val, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_RCU_SHB_cmp_stdAlloc_seqcst;
499 typedef cc::LazyList< rcu_sht, key_val, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_RCU_SHT_cmp_stdAlloc_seqcst;
501 struct traits_LazyList_cmp_michaelAlloc :
502 public cc::lazy_list::make_traits<
503 co::compare< compare >,
504 co::allocator< memory::MichaelAllocator<int> >
507 typedef cc::LazyList< cds::gc::HP, key_val, traits_LazyList_cmp_michaelAlloc > LazyList_HP_cmp_michaelAlloc;
508 typedef cc::LazyList< cds::gc::DHP, key_val, traits_LazyList_cmp_michaelAlloc > LazyList_DHP_cmp_michaelAlloc;
509 typedef cc::LazyList< rcu_gpi, key_val, traits_LazyList_cmp_michaelAlloc > LazyList_RCU_GPI_cmp_michaelAlloc;
510 typedef cc::LazyList< rcu_gpb, key_val, traits_LazyList_cmp_michaelAlloc > LazyList_RCU_GPB_cmp_michaelAlloc;
511 typedef cc::LazyList< rcu_gpt, key_val, traits_LazyList_cmp_michaelAlloc > LazyList_RCU_GPT_cmp_michaelAlloc;
512 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
513 typedef cc::LazyList< rcu_shb, key_val, traits_LazyList_cmp_michaelAlloc > LazyList_RCU_SHB_cmp_michaelAlloc;
514 typedef cc::LazyList< rcu_sht, key_val, traits_LazyList_cmp_michaelAlloc > LazyList_RCU_SHT_cmp_michaelAlloc;
517 struct traits_LazyList_less_stdAlloc:
518 public cc::lazy_list::make_traits<
522 typedef cc::LazyList< cds::gc::HP, key_val, traits_LazyList_less_stdAlloc > LazyList_HP_less_stdAlloc;
523 typedef cc::LazyList< cds::gc::DHP, key_val, traits_LazyList_less_stdAlloc > LazyList_DHP_less_stdAlloc;
524 typedef cc::LazyList< rcu_gpi, key_val, traits_LazyList_less_stdAlloc > LazyList_RCU_GPI_less_stdAlloc;
525 typedef cc::LazyList< rcu_gpb, key_val, traits_LazyList_less_stdAlloc > LazyList_RCU_GPB_less_stdAlloc;
526 typedef cc::LazyList< rcu_gpt, key_val, traits_LazyList_less_stdAlloc > LazyList_RCU_GPT_less_stdAlloc;
527 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
528 typedef cc::LazyList< rcu_shb, key_val, traits_LazyList_less_stdAlloc > LazyList_RCU_SHB_less_stdAlloc;
529 typedef cc::LazyList< rcu_sht, key_val, traits_LazyList_less_stdAlloc > LazyList_RCU_SHT_less_stdAlloc;
532 struct traits_LazyList_less_stdAlloc_seqcst :
533 public cc::lazy_list::make_traits<
535 ,co::memory_model< co::v::sequential_consistent >
538 typedef cc::LazyList< cds::gc::HP, key_val, traits_LazyList_less_stdAlloc_seqcst > LazyList_HP_less_stdAlloc_seqcst;
539 typedef cc::LazyList< cds::gc::DHP, key_val, traits_LazyList_less_stdAlloc_seqcst > LazyList_DHP_less_stdAlloc_seqcst;
540 typedef cc::LazyList< rcu_gpi, key_val, traits_LazyList_less_stdAlloc_seqcst > LazyList_RCU_GPI_less_stdAlloc_seqcst;
541 typedef cc::LazyList< rcu_gpb, key_val, traits_LazyList_less_stdAlloc_seqcst > LazyList_RCU_GPB_less_stdAlloc_seqcst;
542 typedef cc::LazyList< rcu_gpt, key_val, traits_LazyList_less_stdAlloc_seqcst > LazyList_RCU_GPT_less_stdAlloc_seqcst;
543 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
544 typedef cc::LazyList< rcu_shb, key_val, traits_LazyList_less_stdAlloc_seqcst > LazyList_RCU_SHB_less_stdAlloc_seqcst;
545 typedef cc::LazyList< rcu_sht, key_val, traits_LazyList_less_stdAlloc_seqcst > LazyList_RCU_SHT_less_stdAlloc_seqcst;
548 struct traits_LazyList_less_michaelAlloc :
549 public cc::lazy_list::make_traits<
551 co::allocator< memory::MichaelAllocator<int> >
554 typedef cc::LazyList< cds::gc::HP, key_val, traits_LazyList_less_michaelAlloc > LazyList_HP_less_michaelAlloc;
555 typedef cc::LazyList< cds::gc::DHP, key_val, traits_LazyList_less_michaelAlloc > LazyList_DHP_less_michaelAlloc;
556 typedef cc::LazyList< rcu_gpi, key_val, traits_LazyList_less_michaelAlloc > LazyList_RCU_GPI_less_michaelAlloc;
557 typedef cc::LazyList< rcu_gpb, key_val, traits_LazyList_less_michaelAlloc > LazyList_RCU_GPB_less_michaelAlloc;
558 typedef cc::LazyList< rcu_gpt, key_val, traits_LazyList_less_michaelAlloc > LazyList_RCU_GPT_less_michaelAlloc;
559 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
560 typedef cc::LazyList< rcu_shb, key_val, traits_LazyList_less_michaelAlloc > LazyList_RCU_SHB_less_michaelAlloc;
561 typedef cc::LazyList< rcu_sht, key_val, traits_LazyList_less_michaelAlloc > LazyList_RCU_SHT_less_michaelAlloc;
564 // ***************************************************************************
565 // MichaelHashSet based on LazyList
567 typedef cc::MichaelHashSet< cds::gc::HP, LazyList_HP_cmp_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_HP_cmp_stdAlloc;
568 typedef cc::MichaelHashSet< cds::gc::DHP, LazyList_DHP_cmp_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_DHP_cmp_stdAlloc;
569 typedef cc::MichaelHashSet< rcu_gpi, LazyList_RCU_GPI_cmp_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_GPI_cmp_stdAlloc;
570 typedef cc::MichaelHashSet< rcu_gpb, LazyList_RCU_GPB_cmp_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_GPB_cmp_stdAlloc;
571 typedef cc::MichaelHashSet< rcu_gpt, LazyList_RCU_GPT_cmp_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_GPT_cmp_stdAlloc;
572 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
573 typedef cc::MichaelHashSet< rcu_shb, LazyList_RCU_SHB_cmp_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_SHB_cmp_stdAlloc;
574 typedef cc::MichaelHashSet< rcu_sht, LazyList_RCU_SHT_cmp_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_SHT_cmp_stdAlloc;
577 typedef cc::MichaelHashSet< cds::gc::HP, LazyList_HP_less_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_HP_less_stdAlloc;
578 typedef cc::MichaelHashSet< cds::gc::DHP, LazyList_DHP_less_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_DHP_less_stdAlloc;
579 typedef cc::MichaelHashSet< rcu_gpi, LazyList_RCU_GPI_less_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_GPI_less_stdAlloc;
580 typedef cc::MichaelHashSet< rcu_gpb, LazyList_RCU_GPB_less_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_GPB_less_stdAlloc;
581 typedef cc::MichaelHashSet< rcu_gpt, LazyList_RCU_GPT_less_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_GPT_less_stdAlloc;
582 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
583 typedef cc::MichaelHashSet< rcu_shb, LazyList_RCU_SHB_less_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_SHB_less_stdAlloc;
584 typedef cc::MichaelHashSet< rcu_sht, LazyList_RCU_SHT_less_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_SHT_less_stdAlloc;
587 typedef cc::MichaelHashSet< cds::gc::HP, LazyList_HP_less_stdAlloc_seqcst, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_HP_less_stdAlloc_seqcst;
588 typedef cc::MichaelHashSet< cds::gc::DHP, LazyList_DHP_less_stdAlloc_seqcst, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_DHP_less_stdAlloc_seqcst;
589 typedef cc::MichaelHashSet< rcu_gpi, LazyList_RCU_GPI_less_stdAlloc_seqcst, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_GPI_less_stdAlloc_seqcst;
590 typedef cc::MichaelHashSet< rcu_gpb, LazyList_RCU_GPB_less_stdAlloc_seqcst, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_GPB_less_stdAlloc_seqcst;
591 typedef cc::MichaelHashSet< rcu_gpt, LazyList_RCU_GPT_less_stdAlloc_seqcst, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_GPT_less_stdAlloc_seqcst;
592 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
593 typedef cc::MichaelHashSet< rcu_shb, LazyList_RCU_SHB_less_stdAlloc_seqcst, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_SHB_less_stdAlloc_seqcst;
594 typedef cc::MichaelHashSet< rcu_sht, LazyList_RCU_SHT_less_stdAlloc_seqcst, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_SHT_less_stdAlloc_seqcst;
597 typedef cc::MichaelHashSet< cds::gc::HP, LazyList_HP_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_Lazy_HP_cmp_michaelAlloc;
598 typedef cc::MichaelHashSet< cds::gc::DHP, LazyList_DHP_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_Lazy_DHP_cmp_michaelAlloc;
599 typedef cc::MichaelHashSet< rcu_gpi, LazyList_RCU_GPI_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_Lazy_RCU_GPI_cmp_michaelAlloc;
600 typedef cc::MichaelHashSet< rcu_gpb, LazyList_RCU_GPB_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_Lazy_RCU_GPB_cmp_michaelAlloc;
601 typedef cc::MichaelHashSet< rcu_gpt, LazyList_RCU_GPT_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_Lazy_RCU_GPT_cmp_michaelAlloc;
602 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
603 typedef cc::MichaelHashSet< rcu_shb, LazyList_RCU_SHB_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_Lazy_RCU_SHB_cmp_michaelAlloc;
604 typedef cc::MichaelHashSet< rcu_sht, LazyList_RCU_SHT_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_Lazy_RCU_SHT_cmp_michaelAlloc;
607 typedef cc::MichaelHashSet< cds::gc::HP, LazyList_HP_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_Lazy_HP_less_michaelAlloc;
608 typedef cc::MichaelHashSet< cds::gc::DHP, LazyList_DHP_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_Lazy_DHP_less_michaelAlloc;
609 typedef cc::MichaelHashSet< rcu_gpi, LazyList_RCU_GPI_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_Lazy_RCU_GPI_less_michaelAlloc;
610 typedef cc::MichaelHashSet< rcu_gpb, LazyList_RCU_GPB_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_Lazy_RCU_GPB_less_michaelAlloc;
611 typedef cc::MichaelHashSet< rcu_gpt, LazyList_RCU_GPT_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_Lazy_RCU_GPT_less_michaelAlloc;
612 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
613 typedef cc::MichaelHashSet< rcu_shb, LazyList_RCU_SHB_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_Lazy_RCU_SHB_less_michaelAlloc;
614 typedef cc::MichaelHashSet< rcu_sht, LazyList_RCU_SHT_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_Lazy_RCU_SHT_less_michaelAlloc;
617 // ***************************************************************************
618 // SplitListSet based on MichaelList
621 typedef cc::SplitListSet< cds::gc::HP, key_val,
622 typename cc::split_list::make_traits<
623 cc::split_list::ordered_list<cc::michael_list_tag>
625 ,cc::split_list::ordered_list_traits<
626 typename cc::michael_list::make_traits<
627 co::compare< compare >
631 > SplitList_Michael_HP_dyn_cmp;
633 typedef cc::SplitListSet< cds::gc::HP, key_val,
634 typename cc::split_list::make_traits<
635 cc::split_list::ordered_list<cc::michael_list_tag>
637 ,co::memory_model< co::v::sequential_consistent >
638 ,cc::split_list::ordered_list_traits<
639 typename cc::michael_list::make_traits<
640 co::compare< compare >
641 ,co::memory_model< co::v::sequential_consistent >
645 > SplitList_Michael_HP_dyn_cmp_seqcst;
647 typedef cc::SplitListSet< cds::gc::HP, key_val,
648 typename cc::split_list::make_traits<
649 cc::split_list::ordered_list<cc::michael_list_tag>
650 ,cc::split_list::dynamic_bucket_table< false >
652 ,cc::split_list::ordered_list_traits<
653 typename cc::michael_list::make_traits<
654 co::compare< compare >
658 > SplitList_Michael_HP_st_cmp;
660 typedef cc::SplitListSet< cds::gc::HP, key_val,
661 typename cc::split_list::make_traits<
662 cc::split_list::ordered_list<cc::michael_list_tag>
664 ,cc::split_list::dynamic_bucket_table< false >
665 ,co::memory_model< co::v::sequential_consistent >
666 ,cc::split_list::ordered_list_traits<
667 typename cc::michael_list::make_traits<
668 co::compare< compare >
669 ,co::memory_model< co::v::sequential_consistent >
673 > SplitList_Michael_HP_st_cmp_seqcst;
676 typedef cc::SplitListSet< cds::gc::HP, key_val,
677 typename cc::split_list::make_traits<
678 cc::split_list::ordered_list<cc::michael_list_tag>
680 ,cc::split_list::ordered_list_traits<
681 typename cc::michael_list::make_traits<
686 > SplitList_Michael_HP_dyn_less;
688 typedef cc::SplitListSet< cds::gc::HP, key_val,
689 typename cc::split_list::make_traits<
690 cc::split_list::ordered_list<cc::michael_list_tag>
692 ,co::memory_model< co::v::sequential_consistent >
693 ,cc::split_list::ordered_list_traits<
694 typename cc::michael_list::make_traits<
696 ,co::memory_model< co::v::sequential_consistent >
700 > SplitList_Michael_HP_dyn_less_seqcst;
702 typedef cc::SplitListSet< cds::gc::HP, key_val,
703 typename cc::split_list::make_traits<
704 cc::split_list::ordered_list<cc::michael_list_tag>
705 ,cc::split_list::dynamic_bucket_table< false >
707 ,cc::split_list::ordered_list_traits<
708 typename cc::michael_list::make_traits<
713 > SplitList_Michael_HP_st_less;
715 typedef cc::SplitListSet< cds::gc::HP, key_val,
716 typename cc::split_list::make_traits<
717 cc::split_list::ordered_list<cc::michael_list_tag>
719 ,cc::split_list::dynamic_bucket_table< false >
720 ,co::memory_model< co::v::sequential_consistent >
721 ,cc::split_list::ordered_list_traits<
722 typename cc::michael_list::make_traits<
724 ,co::memory_model< co::v::sequential_consistent >
728 > SplitList_Michael_HP_st_less_seqcst;
731 typedef cc::SplitListSet< cds::gc::DHP, key_val,
732 typename cc::split_list::make_traits<
733 cc::split_list::ordered_list<cc::michael_list_tag>
735 ,cc::split_list::ordered_list_traits<
736 typename cc::michael_list::make_traits<
737 co::compare< compare >
741 > SplitList_Michael_DHP_dyn_cmp;
743 typedef cc::SplitListSet< cds::gc::DHP, key_val,
744 typename cc::split_list::make_traits<
745 cc::split_list::ordered_list<cc::michael_list_tag>
747 ,co::memory_model< co::v::sequential_consistent >
748 ,cc::split_list::ordered_list_traits<
749 typename cc::michael_list::make_traits<
750 co::compare< compare >
751 ,co::memory_model< co::v::sequential_consistent >
755 > SplitList_Michael_DHP_dyn_cmp_seqcst;
757 typedef cc::SplitListSet< cds::gc::DHP, key_val,
758 typename cc::split_list::make_traits<
759 cc::split_list::ordered_list<cc::michael_list_tag>
760 ,cc::split_list::dynamic_bucket_table< false >
762 ,cc::split_list::ordered_list_traits<
763 typename cc::michael_list::make_traits<
764 co::compare< compare >
768 > SplitList_Michael_DHP_st_cmp;
770 typedef cc::SplitListSet< cds::gc::DHP, key_val,
771 typename cc::split_list::make_traits<
772 cc::split_list::ordered_list<cc::michael_list_tag>
774 ,cc::split_list::dynamic_bucket_table< false >
775 ,co::memory_model< co::v::sequential_consistent >
776 ,cc::split_list::ordered_list_traits<
777 typename cc::michael_list::make_traits<
778 co::compare< compare >
779 ,co::memory_model< co::v::sequential_consistent >
783 > SplitList_Michael_DHP_st_cmp_seqcst;
786 typedef cc::SplitListSet< cds::gc::DHP, key_val,
787 typename cc::split_list::make_traits<
788 cc::split_list::ordered_list<cc::michael_list_tag>
790 ,cc::split_list::ordered_list_traits<
791 typename cc::michael_list::make_traits<
796 > SplitList_Michael_DHP_dyn_less;
798 typedef cc::SplitListSet< cds::gc::DHP, key_val,
799 typename cc::split_list::make_traits<
800 cc::split_list::ordered_list<cc::michael_list_tag>
802 ,co::memory_model< co::v::sequential_consistent >
803 ,cc::split_list::ordered_list_traits<
804 typename cc::michael_list::make_traits<
806 ,co::memory_model< co::v::sequential_consistent >
810 > SplitList_Michael_DHP_dyn_less_seqcst;
812 typedef cc::SplitListSet< cds::gc::DHP, key_val,
813 typename cc::split_list::make_traits<
814 cc::split_list::ordered_list<cc::michael_list_tag>
815 ,cc::split_list::dynamic_bucket_table< false >
817 ,cc::split_list::ordered_list_traits<
818 typename cc::michael_list::make_traits<
823 > SplitList_Michael_DHP_st_less;
825 typedef cc::SplitListSet< cds::gc::DHP, key_val,
826 typename cc::split_list::make_traits<
827 cc::split_list::ordered_list<cc::michael_list_tag>
829 ,cc::split_list::dynamic_bucket_table< false >
830 ,co::memory_model< co::v::sequential_consistent >
831 ,cc::split_list::ordered_list_traits<
832 typename cc::michael_list::make_traits<
834 ,co::memory_model< co::v::sequential_consistent >
838 > SplitList_Michael_DHP_st_less_seqcst;
841 typedef cc::SplitListSet< rcu_gpi, key_val,
842 typename cc::split_list::make_traits<
843 cc::split_list::ordered_list<cc::michael_list_tag>
845 ,cc::split_list::ordered_list_traits<
846 typename cc::michael_list::make_traits<
847 co::compare< compare >
851 > SplitList_Michael_RCU_GPI_dyn_cmp;
853 typedef cc::SplitListSet< rcu_gpi, key_val,
854 typename cc::split_list::make_traits<
855 cc::split_list::ordered_list<cc::michael_list_tag>
857 ,co::memory_model< co::v::sequential_consistent >
858 ,cc::split_list::ordered_list_traits<
859 typename cc::michael_list::make_traits<
860 co::compare< compare >
861 ,co::memory_model< co::v::sequential_consistent >
865 > SplitList_Michael_RCU_GPI_dyn_cmp_seqcst;
867 typedef cc::SplitListSet< rcu_gpi, key_val,
868 typename cc::split_list::make_traits<
869 cc::split_list::ordered_list<cc::michael_list_tag>
870 ,cc::split_list::dynamic_bucket_table< false >
872 ,cc::split_list::ordered_list_traits<
873 typename cc::michael_list::make_traits<
874 co::compare< compare >
878 > SplitList_Michael_RCU_GPI_st_cmp;
880 typedef cc::SplitListSet< rcu_gpi, key_val,
881 typename cc::split_list::make_traits<
882 cc::split_list::ordered_list<cc::michael_list_tag>
884 ,cc::split_list::dynamic_bucket_table< false >
885 ,co::memory_model< co::v::sequential_consistent >
886 ,cc::split_list::ordered_list_traits<
887 typename cc::michael_list::make_traits<
888 co::compare< compare >
889 ,co::memory_model< co::v::sequential_consistent >
893 > SplitList_Michael_RCU_GPI_st_cmp_seqcst;
896 typedef cc::SplitListSet< rcu_gpi, key_val,
897 typename cc::split_list::make_traits<
898 cc::split_list::ordered_list<cc::michael_list_tag>
900 ,cc::split_list::ordered_list_traits<
901 typename cc::michael_list::make_traits<
906 > SplitList_Michael_RCU_GPI_dyn_less;
908 typedef cc::SplitListSet< rcu_gpi, key_val,
909 typename cc::split_list::make_traits<
910 cc::split_list::ordered_list<cc::michael_list_tag>
912 ,co::memory_model< co::v::sequential_consistent >
913 ,cc::split_list::ordered_list_traits<
914 typename cc::michael_list::make_traits<
916 ,co::memory_model< co::v::sequential_consistent >
920 > SplitList_Michael_RCU_GPI_dyn_less_seqcst;
922 typedef cc::SplitListSet< rcu_gpi, key_val,
923 typename cc::split_list::make_traits<
924 cc::split_list::ordered_list<cc::michael_list_tag>
925 ,cc::split_list::dynamic_bucket_table< false >
927 ,cc::split_list::ordered_list_traits<
928 typename cc::michael_list::make_traits<
933 > SplitList_Michael_RCU_GPI_st_less;
935 typedef cc::SplitListSet< rcu_gpi, key_val,
936 typename cc::split_list::make_traits<
937 cc::split_list::ordered_list<cc::michael_list_tag>
939 ,cc::split_list::dynamic_bucket_table< false >
940 ,co::memory_model< co::v::sequential_consistent >
941 ,cc::split_list::ordered_list_traits<
942 typename cc::michael_list::make_traits<
944 ,co::memory_model< co::v::sequential_consistent >
948 > SplitList_Michael_RCU_GPI_st_less_seqcst;
952 typedef cc::SplitListSet< rcu_gpb, key_val,
953 typename cc::split_list::make_traits<
954 cc::split_list::ordered_list<cc::michael_list_tag>
956 ,cc::split_list::ordered_list_traits<
957 typename cc::michael_list::make_traits<
958 co::compare< compare >
962 > SplitList_Michael_RCU_GPB_dyn_cmp;
964 typedef cc::SplitListSet< rcu_gpb, key_val,
965 typename cc::split_list::make_traits<
966 cc::split_list::ordered_list<cc::michael_list_tag>
968 ,co::memory_model< co::v::sequential_consistent >
969 ,cc::split_list::ordered_list_traits<
970 typename cc::michael_list::make_traits<
971 co::compare< compare >
972 ,co::memory_model< co::v::sequential_consistent >
976 > SplitList_Michael_RCU_GPB_dyn_cmp_seqcst;
978 typedef cc::SplitListSet< rcu_gpb, key_val,
979 typename cc::split_list::make_traits<
980 cc::split_list::ordered_list<cc::michael_list_tag>
981 ,cc::split_list::dynamic_bucket_table< false >
983 ,cc::split_list::ordered_list_traits<
984 typename cc::michael_list::make_traits<
985 co::compare< compare >
989 > SplitList_Michael_RCU_GPB_st_cmp;
991 typedef cc::SplitListSet< rcu_gpb, key_val,
992 typename cc::split_list::make_traits<
993 cc::split_list::ordered_list<cc::michael_list_tag>
995 ,cc::split_list::dynamic_bucket_table< false >
996 ,co::memory_model< co::v::sequential_consistent >
997 ,cc::split_list::ordered_list_traits<
998 typename cc::michael_list::make_traits<
999 co::compare< compare >
1000 ,co::memory_model< co::v::sequential_consistent >
1004 > SplitList_Michael_RCU_GPB_st_cmp_seqcst;
1007 typedef cc::SplitListSet< rcu_gpb, key_val,
1008 typename cc::split_list::make_traits<
1009 cc::split_list::ordered_list<cc::michael_list_tag>
1011 ,cc::split_list::ordered_list_traits<
1012 typename cc::michael_list::make_traits<
1017 > SplitList_Michael_RCU_GPB_dyn_less;
1019 typedef cc::SplitListSet< rcu_gpb, key_val,
1020 typename cc::split_list::make_traits<
1021 cc::split_list::ordered_list<cc::michael_list_tag>
1023 ,co::memory_model< co::v::sequential_consistent >
1024 ,cc::split_list::ordered_list_traits<
1025 typename cc::michael_list::make_traits<
1027 ,co::memory_model< co::v::sequential_consistent >
1031 > SplitList_Michael_RCU_GPB_dyn_less_seqcst;
1033 typedef cc::SplitListSet< rcu_gpb, key_val,
1034 typename cc::split_list::make_traits<
1035 cc::split_list::ordered_list<cc::michael_list_tag>
1036 ,cc::split_list::dynamic_bucket_table< false >
1038 ,cc::split_list::ordered_list_traits<
1039 typename cc::michael_list::make_traits<
1044 > SplitList_Michael_RCU_GPB_st_less;
1046 typedef cc::SplitListSet< rcu_gpb, key_val,
1047 typename cc::split_list::make_traits<
1048 cc::split_list::ordered_list<cc::michael_list_tag>
1050 ,cc::split_list::dynamic_bucket_table< false >
1051 ,co::memory_model< co::v::sequential_consistent >
1052 ,cc::split_list::ordered_list_traits<
1053 typename cc::michael_list::make_traits<
1055 ,co::memory_model< co::v::sequential_consistent >
1059 > SplitList_Michael_RCU_GPB_st_less_seqcst;
1062 typedef cc::SplitListSet< rcu_gpt, key_val,
1063 typename cc::split_list::make_traits<
1064 cc::split_list::ordered_list<cc::michael_list_tag>
1066 ,cc::split_list::ordered_list_traits<
1067 typename cc::michael_list::make_traits<
1068 co::compare< compare >
1072 > SplitList_Michael_RCU_GPT_dyn_cmp;
1074 typedef cc::SplitListSet< rcu_gpt, key_val,
1075 typename cc::split_list::make_traits<
1076 cc::split_list::ordered_list<cc::michael_list_tag>
1078 ,co::memory_model< co::v::sequential_consistent >
1079 ,cc::split_list::ordered_list_traits<
1080 typename cc::michael_list::make_traits<
1081 co::compare< compare >
1082 ,co::memory_model< co::v::sequential_consistent >
1086 > SplitList_Michael_RCU_GPT_dyn_cmp_seqcst;
1088 typedef cc::SplitListSet< rcu_gpt, key_val,
1089 typename cc::split_list::make_traits<
1090 cc::split_list::ordered_list<cc::michael_list_tag>
1091 ,cc::split_list::dynamic_bucket_table< false >
1093 ,cc::split_list::ordered_list_traits<
1094 typename cc::michael_list::make_traits<
1095 co::compare< compare >
1099 > SplitList_Michael_RCU_GPT_st_cmp;
1101 typedef cc::SplitListSet< rcu_gpt, key_val,
1102 typename cc::split_list::make_traits<
1103 cc::split_list::ordered_list<cc::michael_list_tag>
1105 ,cc::split_list::dynamic_bucket_table< false >
1106 ,co::memory_model< co::v::sequential_consistent >
1107 ,cc::split_list::ordered_list_traits<
1108 typename cc::michael_list::make_traits<
1109 co::compare< compare >
1110 ,co::memory_model< co::v::sequential_consistent >
1114 > SplitList_Michael_RCU_GPT_st_cmp_seqcst;
1117 typedef cc::SplitListSet< rcu_gpt, key_val,
1118 typename cc::split_list::make_traits<
1119 cc::split_list::ordered_list<cc::michael_list_tag>
1121 ,cc::split_list::ordered_list_traits<
1122 typename cc::michael_list::make_traits<
1127 > SplitList_Michael_RCU_GPT_dyn_less;
1129 typedef cc::SplitListSet< rcu_gpt, key_val,
1130 typename cc::split_list::make_traits<
1131 cc::split_list::ordered_list<cc::michael_list_tag>
1133 ,co::memory_model< co::v::sequential_consistent >
1134 ,cc::split_list::ordered_list_traits<
1135 typename cc::michael_list::make_traits<
1137 ,co::memory_model< co::v::sequential_consistent >
1141 > SplitList_Michael_RCU_GPT_dyn_less_seqcst;
1143 typedef cc::SplitListSet< rcu_gpt, key_val,
1144 typename cc::split_list::make_traits<
1145 cc::split_list::ordered_list<cc::michael_list_tag>
1146 ,cc::split_list::dynamic_bucket_table< false >
1148 ,cc::split_list::ordered_list_traits<
1149 typename cc::michael_list::make_traits<
1154 > SplitList_Michael_RCU_GPT_st_less;
1156 typedef cc::SplitListSet< rcu_gpt, key_val,
1157 typename cc::split_list::make_traits<
1158 cc::split_list::ordered_list<cc::michael_list_tag>
1160 ,cc::split_list::dynamic_bucket_table< false >
1161 ,co::memory_model< co::v::sequential_consistent >
1162 ,cc::split_list::ordered_list_traits<
1163 typename cc::michael_list::make_traits<
1165 ,co::memory_model< co::v::sequential_consistent >
1169 > SplitList_Michael_RCU_GPT_st_less_seqcst;
1171 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
1172 typedef cc::SplitListSet< rcu_shb, key_val,
1173 typename cc::split_list::make_traits<
1174 cc::split_list::ordered_list<cc::michael_list_tag>
1176 ,cc::split_list::ordered_list_traits<
1177 typename cc::michael_list::make_traits<
1178 co::compare< compare >
1182 > SplitList_Michael_RCU_SHB_dyn_cmp;
1184 typedef cc::SplitListSet< rcu_shb, key_val,
1185 typename cc::split_list::make_traits<
1186 cc::split_list::ordered_list<cc::michael_list_tag>
1188 ,co::memory_model< co::v::sequential_consistent >
1189 ,cc::split_list::ordered_list_traits<
1190 typename cc::michael_list::make_traits<
1191 co::compare< compare >
1192 ,co::memory_model< co::v::sequential_consistent >
1196 > SplitList_Michael_RCU_SHB_dyn_cmp_seqcst;
1198 typedef cc::SplitListSet< rcu_shb, key_val,
1199 typename cc::split_list::make_traits<
1200 cc::split_list::ordered_list<cc::michael_list_tag>
1201 ,cc::split_list::dynamic_bucket_table< false >
1203 ,cc::split_list::ordered_list_traits<
1204 typename cc::michael_list::make_traits<
1205 co::compare< compare >
1209 > SplitList_Michael_RCU_SHB_st_cmp;
1211 typedef cc::SplitListSet< rcu_shb, key_val,
1212 typename cc::split_list::make_traits<
1213 cc::split_list::ordered_list<cc::michael_list_tag>
1215 ,cc::split_list::dynamic_bucket_table< false >
1216 ,co::memory_model< co::v::sequential_consistent >
1217 ,cc::split_list::ordered_list_traits<
1218 typename cc::michael_list::make_traits<
1219 co::compare< compare >
1220 ,co::memory_model< co::v::sequential_consistent >
1224 > SplitList_Michael_RCU_SHB_st_cmp_seqcst;
1227 typedef cc::SplitListSet< rcu_shb, key_val,
1228 typename cc::split_list::make_traits<
1229 cc::split_list::ordered_list<cc::michael_list_tag>
1231 ,cc::split_list::ordered_list_traits<
1232 typename cc::michael_list::make_traits<
1237 > SplitList_Michael_RCU_SHB_dyn_less;
1239 typedef cc::SplitListSet< rcu_shb, key_val,
1240 typename cc::split_list::make_traits<
1241 cc::split_list::ordered_list<cc::michael_list_tag>
1243 ,co::memory_model< co::v::sequential_consistent >
1244 ,cc::split_list::ordered_list_traits<
1245 typename cc::michael_list::make_traits<
1247 ,co::memory_model< co::v::sequential_consistent >
1251 > SplitList_Michael_RCU_SHB_dyn_less_seqcst;
1253 typedef cc::SplitListSet< rcu_shb, key_val,
1254 typename cc::split_list::make_traits<
1255 cc::split_list::ordered_list<cc::michael_list_tag>
1256 ,cc::split_list::dynamic_bucket_table< false >
1258 ,cc::split_list::ordered_list_traits<
1259 typename cc::michael_list::make_traits<
1264 > SplitList_Michael_RCU_SHB_st_less;
1266 typedef cc::SplitListSet< rcu_shb, key_val,
1267 typename cc::split_list::make_traits<
1268 cc::split_list::ordered_list<cc::michael_list_tag>
1270 ,cc::split_list::dynamic_bucket_table< false >
1271 ,co::memory_model< co::v::sequential_consistent >
1272 ,cc::split_list::ordered_list_traits<
1273 typename cc::michael_list::make_traits<
1275 ,co::memory_model< co::v::sequential_consistent >
1279 > SplitList_Michael_RCU_SHB_st_less_seqcst;
1282 typedef cc::SplitListSet< rcu_sht, key_val,
1283 typename cc::split_list::make_traits<
1284 cc::split_list::ordered_list<cc::michael_list_tag>
1286 ,cc::split_list::ordered_list_traits<
1287 typename cc::michael_list::make_traits<
1288 co::compare< compare >
1292 > SplitList_Michael_RCU_SHT_dyn_cmp;
1294 typedef cc::SplitListSet< rcu_sht, key_val,
1295 typename cc::split_list::make_traits<
1296 cc::split_list::ordered_list<cc::michael_list_tag>
1298 ,co::memory_model< co::v::sequential_consistent >
1299 ,cc::split_list::ordered_list_traits<
1300 typename cc::michael_list::make_traits<
1301 co::compare< compare >
1302 ,co::memory_model< co::v::sequential_consistent >
1306 > SplitList_Michael_RCU_SHT_dyn_cmp_seqcst;
1308 typedef cc::SplitListSet< rcu_sht, key_val,
1309 typename cc::split_list::make_traits<
1310 cc::split_list::ordered_list<cc::michael_list_tag>
1311 ,cc::split_list::dynamic_bucket_table< false >
1313 ,cc::split_list::ordered_list_traits<
1314 typename cc::michael_list::make_traits<
1315 co::compare< compare >
1319 > SplitList_Michael_RCU_SHT_st_cmp;
1321 typedef cc::SplitListSet< rcu_sht, key_val,
1322 typename cc::split_list::make_traits<
1323 cc::split_list::ordered_list<cc::michael_list_tag>
1325 ,cc::split_list::dynamic_bucket_table< false >
1326 ,co::memory_model< co::v::sequential_consistent >
1327 ,cc::split_list::ordered_list_traits<
1328 typename cc::michael_list::make_traits<
1329 co::compare< compare >
1330 ,co::memory_model< co::v::sequential_consistent >
1334 > SplitList_Michael_RCU_SHT_st_cmp_seqcst;
1337 typedef cc::SplitListSet< rcu_sht, key_val,
1338 typename cc::split_list::make_traits<
1339 cc::split_list::ordered_list<cc::michael_list_tag>
1341 ,cc::split_list::ordered_list_traits<
1342 typename cc::michael_list::make_traits<
1347 > SplitList_Michael_RCU_SHT_dyn_less;
1349 typedef cc::SplitListSet< rcu_sht, key_val,
1350 typename cc::split_list::make_traits<
1351 cc::split_list::ordered_list<cc::michael_list_tag>
1353 ,co::memory_model< co::v::sequential_consistent >
1354 ,cc::split_list::ordered_list_traits<
1355 typename cc::michael_list::make_traits<
1357 ,co::memory_model< co::v::sequential_consistent >
1361 > SplitList_Michael_RCU_SHT_dyn_less_seqcst;
1363 typedef cc::SplitListSet< rcu_sht, key_val,
1364 typename cc::split_list::make_traits<
1365 cc::split_list::ordered_list<cc::michael_list_tag>
1366 ,cc::split_list::dynamic_bucket_table< false >
1368 ,cc::split_list::ordered_list_traits<
1369 typename cc::michael_list::make_traits<
1374 > SplitList_Michael_RCU_SHT_st_less;
1376 typedef cc::SplitListSet< rcu_sht, key_val,
1377 typename cc::split_list::make_traits<
1378 cc::split_list::ordered_list<cc::michael_list_tag>
1380 ,cc::split_list::dynamic_bucket_table< false >
1381 ,co::memory_model< co::v::sequential_consistent >
1382 ,cc::split_list::ordered_list_traits<
1383 typename cc::michael_list::make_traits<
1385 ,co::memory_model< co::v::sequential_consistent >
1389 > SplitList_Michael_RCU_SHT_st_less_seqcst;
1392 // ***************************************************************************
1393 // SplitListSet based on LazyList
1396 typedef cc::SplitListSet< cds::gc::HP, key_val,
1397 typename cc::split_list::make_traits<
1398 cc::split_list::ordered_list<cc::lazy_list_tag>
1400 ,cc::split_list::ordered_list_traits<
1401 typename cc::lazy_list::make_traits<
1402 co::compare< compare >
1406 > SplitList_Lazy_HP_dyn_cmp;
1408 typedef cc::SplitListSet< cds::gc::HP, key_val,
1409 typename cc::split_list::make_traits<
1410 cc::split_list::ordered_list<cc::lazy_list_tag>
1412 ,co::memory_model< co::v::sequential_consistent >
1413 ,cc::split_list::ordered_list_traits<
1414 typename cc::lazy_list::make_traits<
1415 co::compare< compare >
1416 ,co::memory_model< co::v::sequential_consistent >
1420 > SplitList_Lazy_HP_dyn_cmp_seqcst;
1422 typedef cc::SplitListSet< cds::gc::HP, key_val,
1423 typename cc::split_list::make_traits<
1424 cc::split_list::ordered_list<cc::lazy_list_tag>
1425 ,cc::split_list::dynamic_bucket_table< false >
1427 ,cc::split_list::ordered_list_traits<
1428 typename cc::lazy_list::make_traits<
1429 co::compare< compare >
1433 > SplitList_Lazy_HP_st_cmp;
1435 typedef cc::SplitListSet< cds::gc::HP, key_val,
1436 typename cc::split_list::make_traits<
1437 cc::split_list::ordered_list<cc::lazy_list_tag>
1439 ,cc::split_list::dynamic_bucket_table< false >
1440 ,co::memory_model< co::v::sequential_consistent >
1441 ,cc::split_list::ordered_list_traits<
1442 typename cc::lazy_list::make_traits<
1443 co::compare< compare >
1444 ,co::memory_model< co::v::sequential_consistent >
1448 > SplitList_Lazy_HP_st_cmp_seqcst;
1452 typedef cc::SplitListSet< cds::gc::HP, key_val,
1453 typename cc::split_list::make_traits<
1454 cc::split_list::ordered_list<cc::lazy_list_tag>
1456 ,cc::split_list::ordered_list_traits<
1457 typename cc::lazy_list::make_traits<
1462 > SplitList_Lazy_HP_dyn_less;
1464 typedef cc::SplitListSet< cds::gc::HP, key_val,
1465 typename cc::split_list::make_traits<
1466 cc::split_list::ordered_list<cc::lazy_list_tag>
1468 ,co::memory_model< co::v::sequential_consistent >
1469 ,cc::split_list::ordered_list_traits<
1470 typename cc::lazy_list::make_traits<
1472 ,co::memory_model< co::v::sequential_consistent >
1476 > SplitList_Lazy_HP_dyn_less_seqcst;
1478 typedef cc::SplitListSet< cds::gc::HP, key_val,
1479 typename cc::split_list::make_traits<
1480 cc::split_list::ordered_list<cc::lazy_list_tag>
1481 ,cc::split_list::dynamic_bucket_table< false >
1483 ,cc::split_list::ordered_list_traits<
1484 typename cc::lazy_list::make_traits<
1489 > SplitList_Lazy_HP_st_less;
1491 typedef cc::SplitListSet< cds::gc::HP, key_val,
1492 typename cc::split_list::make_traits<
1493 cc::split_list::ordered_list<cc::lazy_list_tag>
1495 ,cc::split_list::dynamic_bucket_table< false >
1496 ,co::memory_model< co::v::sequential_consistent >
1497 ,cc::split_list::ordered_list_traits<
1498 typename cc::lazy_list::make_traits<
1500 ,co::memory_model< co::v::sequential_consistent >
1504 > SplitList_Lazy_HP_st_less_seqcst;
1507 typedef cc::SplitListSet< cds::gc::DHP, key_val,
1508 typename cc::split_list::make_traits<
1509 cc::split_list::ordered_list<cc::lazy_list_tag>
1511 ,cc::split_list::ordered_list_traits<
1512 typename cc::lazy_list::make_traits<
1513 co::compare< compare >
1517 > SplitList_Lazy_DHP_dyn_cmp;
1519 typedef cc::SplitListSet< cds::gc::DHP, key_val,
1520 typename cc::split_list::make_traits<
1521 cc::split_list::ordered_list<cc::lazy_list_tag>
1523 ,co::memory_model< co::v::sequential_consistent >
1524 ,cc::split_list::ordered_list_traits<
1525 typename cc::lazy_list::make_traits<
1526 co::compare< compare >
1527 ,co::memory_model< co::v::sequential_consistent >
1531 > SplitList_Lazy_DHP_dyn_cmp_seqcst;
1533 typedef cc::SplitListSet< cds::gc::DHP, key_val,
1534 typename cc::split_list::make_traits<
1535 cc::split_list::ordered_list<cc::lazy_list_tag>
1536 ,cc::split_list::dynamic_bucket_table< false >
1538 ,cc::split_list::ordered_list_traits<
1539 typename cc::lazy_list::make_traits<
1540 co::compare< compare >
1544 > SplitList_Lazy_DHP_st_cmp;
1546 typedef cc::SplitListSet< cds::gc::DHP, key_val,
1547 typename cc::split_list::make_traits<
1548 cc::split_list::ordered_list<cc::lazy_list_tag>
1550 ,cc::split_list::dynamic_bucket_table< false >
1551 ,co::memory_model< co::v::sequential_consistent >
1552 ,cc::split_list::ordered_list_traits<
1553 typename cc::lazy_list::make_traits<
1554 co::compare< compare >
1555 ,co::memory_model< co::v::sequential_consistent >
1559 > SplitList_Lazy_DHP_st_cmp_seqcst;
1562 typedef cc::SplitListSet< cds::gc::DHP, key_val,
1563 typename cc::split_list::make_traits<
1564 cc::split_list::ordered_list<cc::lazy_list_tag>
1566 ,cc::split_list::ordered_list_traits<
1567 typename cc::lazy_list::make_traits<
1572 > SplitList_Lazy_DHP_dyn_less;
1574 typedef cc::SplitListSet< cds::gc::DHP, key_val,
1575 typename cc::split_list::make_traits<
1576 cc::split_list::ordered_list<cc::lazy_list_tag>
1578 ,co::memory_model< co::v::sequential_consistent >
1579 ,cc::split_list::ordered_list_traits<
1580 typename cc::lazy_list::make_traits<
1582 ,co::memory_model< co::v::sequential_consistent >
1586 > SplitList_Lazy_DHP_dyn_less_seqcst;
1588 typedef cc::SplitListSet< cds::gc::DHP, key_val,
1589 typename cc::split_list::make_traits<
1590 cc::split_list::ordered_list<cc::lazy_list_tag>
1591 ,cc::split_list::dynamic_bucket_table< false >
1593 ,cc::split_list::ordered_list_traits<
1594 typename cc::lazy_list::make_traits<
1599 > SplitList_Lazy_DHP_st_less;
1601 typedef cc::SplitListSet< cds::gc::DHP, key_val,
1602 typename cc::split_list::make_traits<
1603 cc::split_list::ordered_list<cc::lazy_list_tag>
1605 ,cc::split_list::dynamic_bucket_table< false >
1606 ,co::memory_model< co::v::sequential_consistent >
1607 ,cc::split_list::ordered_list_traits<
1608 typename cc::lazy_list::make_traits<
1610 ,co::memory_model< co::v::sequential_consistent >
1614 > SplitList_Lazy_DHP_st_less_seqcst;
1618 typedef cc::SplitListSet< rcu_gpi, key_val,
1619 typename cc::split_list::make_traits<
1620 cc::split_list::ordered_list<cc::lazy_list_tag>
1622 ,cc::split_list::ordered_list_traits<
1623 typename cc::lazy_list::make_traits<
1624 co::compare< compare >
1628 > SplitList_Lazy_RCU_GPI_dyn_cmp;
1630 typedef cc::SplitListSet< rcu_gpi, key_val,
1631 typename cc::split_list::make_traits<
1632 cc::split_list::ordered_list<cc::lazy_list_tag>
1634 ,co::memory_model< co::v::sequential_consistent >
1635 ,cc::split_list::ordered_list_traits<
1636 typename cc::lazy_list::make_traits<
1637 co::compare< compare >
1638 ,co::memory_model< co::v::sequential_consistent >
1642 > SplitList_Lazy_RCU_GPI_dyn_cmp_seqcst;
1644 typedef cc::SplitListSet< rcu_gpi, key_val,
1645 typename cc::split_list::make_traits<
1646 cc::split_list::ordered_list<cc::lazy_list_tag>
1647 ,cc::split_list::dynamic_bucket_table< false >
1649 ,cc::split_list::ordered_list_traits<
1650 typename cc::lazy_list::make_traits<
1651 co::compare< compare >
1655 > SplitList_Lazy_RCU_GPI_st_cmp;
1657 typedef cc::SplitListSet< rcu_gpi, key_val,
1658 typename cc::split_list::make_traits<
1659 cc::split_list::ordered_list<cc::lazy_list_tag>
1661 ,cc::split_list::dynamic_bucket_table< false >
1662 ,co::memory_model< co::v::sequential_consistent >
1663 ,cc::split_list::ordered_list_traits<
1664 typename cc::lazy_list::make_traits<
1665 co::compare< compare >
1666 ,co::memory_model< co::v::sequential_consistent >
1670 > SplitList_Lazy_RCU_GPI_st_cmp_seqcst;
1673 typedef cc::SplitListSet< rcu_gpi, key_val,
1674 typename cc::split_list::make_traits<
1675 cc::split_list::ordered_list<cc::lazy_list_tag>
1677 ,cc::split_list::ordered_list_traits<
1678 typename cc::lazy_list::make_traits<
1683 > SplitList_Lazy_RCU_GPI_dyn_less;
1685 typedef cc::SplitListSet< rcu_gpi, key_val,
1686 typename cc::split_list::make_traits<
1687 cc::split_list::ordered_list<cc::lazy_list_tag>
1689 ,co::memory_model< co::v::sequential_consistent >
1690 ,cc::split_list::ordered_list_traits<
1691 typename cc::lazy_list::make_traits<
1693 ,co::memory_model< co::v::sequential_consistent >
1697 > SplitList_Lazy_RCU_GPI_dyn_less_seqcst;
1699 typedef cc::SplitListSet< rcu_gpi, key_val,
1700 typename cc::split_list::make_traits<
1701 cc::split_list::ordered_list<cc::lazy_list_tag>
1702 ,cc::split_list::dynamic_bucket_table< false >
1704 ,cc::split_list::ordered_list_traits<
1705 typename cc::lazy_list::make_traits<
1710 > SplitList_Lazy_RCU_GPI_st_less;
1712 typedef cc::SplitListSet< rcu_gpi, key_val,
1713 typename cc::split_list::make_traits<
1714 cc::split_list::ordered_list<cc::lazy_list_tag>
1716 ,cc::split_list::dynamic_bucket_table< false >
1717 ,co::memory_model< co::v::sequential_consistent >
1718 ,cc::split_list::ordered_list_traits<
1719 typename cc::lazy_list::make_traits<
1721 ,co::memory_model< co::v::sequential_consistent >
1725 > SplitList_Lazy_RCU_GPI_st_less_seqcst;
1728 typedef cc::SplitListSet< rcu_gpb, key_val,
1729 typename cc::split_list::make_traits<
1730 cc::split_list::ordered_list<cc::lazy_list_tag>
1732 ,cc::split_list::ordered_list_traits<
1733 typename cc::lazy_list::make_traits<
1734 co::compare< compare >
1738 > SplitList_Lazy_RCU_GPB_dyn_cmp;
1740 typedef cc::SplitListSet< rcu_gpb, key_val,
1741 typename cc::split_list::make_traits<
1742 cc::split_list::ordered_list<cc::lazy_list_tag>
1744 ,co::memory_model< co::v::sequential_consistent >
1745 ,cc::split_list::ordered_list_traits<
1746 typename cc::lazy_list::make_traits<
1747 co::compare< compare >
1748 ,co::memory_model< co::v::sequential_consistent >
1752 > SplitList_Lazy_RCU_GPB_dyn_cmp_seqcst;
1754 typedef cc::SplitListSet< rcu_gpb, key_val,
1755 typename cc::split_list::make_traits<
1756 cc::split_list::ordered_list<cc::lazy_list_tag>
1757 ,cc::split_list::dynamic_bucket_table< false >
1759 ,cc::split_list::ordered_list_traits<
1760 typename cc::lazy_list::make_traits<
1761 co::compare< compare >
1765 > SplitList_Lazy_RCU_GPB_st_cmp;
1767 typedef cc::SplitListSet< rcu_gpb, key_val,
1768 typename cc::split_list::make_traits<
1769 cc::split_list::ordered_list<cc::lazy_list_tag>
1771 ,cc::split_list::dynamic_bucket_table< false >
1772 ,co::memory_model< co::v::sequential_consistent >
1773 ,cc::split_list::ordered_list_traits<
1774 typename cc::lazy_list::make_traits<
1775 co::compare< compare >
1776 ,co::memory_model< co::v::sequential_consistent >
1780 > SplitList_Lazy_RCU_GPB_st_cmp_seqcst;
1783 typedef cc::SplitListSet< rcu_gpb, key_val,
1784 typename cc::split_list::make_traits<
1785 cc::split_list::ordered_list<cc::lazy_list_tag>
1787 ,cc::split_list::ordered_list_traits<
1788 typename cc::lazy_list::make_traits<
1793 > SplitList_Lazy_RCU_GPB_dyn_less;
1795 typedef cc::SplitListSet< rcu_gpb, key_val,
1796 typename cc::split_list::make_traits<
1797 cc::split_list::ordered_list<cc::lazy_list_tag>
1799 ,co::memory_model< co::v::sequential_consistent >
1800 ,cc::split_list::ordered_list_traits<
1801 typename cc::lazy_list::make_traits<
1803 ,co::memory_model< co::v::sequential_consistent >
1807 > SplitList_Lazy_RCU_GPB_dyn_less_seqcst;
1809 typedef cc::SplitListSet< rcu_gpb, key_val,
1810 typename cc::split_list::make_traits<
1811 cc::split_list::ordered_list<cc::lazy_list_tag>
1812 ,cc::split_list::dynamic_bucket_table< false >
1814 ,cc::split_list::ordered_list_traits<
1815 typename cc::lazy_list::make_traits<
1820 > SplitList_Lazy_RCU_GPB_st_less;
1822 typedef cc::SplitListSet< rcu_gpb, key_val,
1823 typename cc::split_list::make_traits<
1824 cc::split_list::ordered_list<cc::lazy_list_tag>
1826 ,cc::split_list::dynamic_bucket_table< false >
1827 ,co::memory_model< co::v::sequential_consistent >
1828 ,cc::split_list::ordered_list_traits<
1829 typename cc::lazy_list::make_traits<
1831 ,co::memory_model< co::v::sequential_consistent >
1835 > SplitList_Lazy_RCU_GPB_st_less_seqcst;
1838 typedef cc::SplitListSet< rcu_gpt, key_val,
1839 typename cc::split_list::make_traits<
1840 cc::split_list::ordered_list<cc::lazy_list_tag>
1842 ,cc::split_list::ordered_list_traits<
1843 typename cc::lazy_list::make_traits<
1844 co::compare< compare >
1848 > SplitList_Lazy_RCU_GPT_dyn_cmp;
1850 typedef cc::SplitListSet< rcu_gpt, key_val,
1851 typename cc::split_list::make_traits<
1852 cc::split_list::ordered_list<cc::lazy_list_tag>
1854 ,co::memory_model< co::v::sequential_consistent >
1855 ,cc::split_list::ordered_list_traits<
1856 typename cc::lazy_list::make_traits<
1857 co::compare< compare >
1858 ,co::memory_model< co::v::sequential_consistent >
1862 > SplitList_Lazy_RCU_GPT_dyn_cmp_seqcst;
1864 typedef cc::SplitListSet< rcu_gpt, key_val,
1865 typename cc::split_list::make_traits<
1866 cc::split_list::ordered_list<cc::lazy_list_tag>
1867 ,cc::split_list::dynamic_bucket_table< false >
1869 ,cc::split_list::ordered_list_traits<
1870 typename cc::lazy_list::make_traits<
1871 co::compare< compare >
1875 > SplitList_Lazy_RCU_GPT_st_cmp;
1877 typedef cc::SplitListSet< rcu_gpt, key_val,
1878 typename cc::split_list::make_traits<
1879 cc::split_list::ordered_list<cc::lazy_list_tag>
1881 ,cc::split_list::dynamic_bucket_table< false >
1882 ,co::memory_model< co::v::sequential_consistent >
1883 ,cc::split_list::ordered_list_traits<
1884 typename cc::lazy_list::make_traits<
1885 co::compare< compare >
1886 ,co::memory_model< co::v::sequential_consistent >
1890 > SplitList_Lazy_RCU_GPT_st_cmp_seqcst;
1893 typedef cc::SplitListSet< rcu_gpt, key_val,
1894 typename cc::split_list::make_traits<
1895 cc::split_list::ordered_list<cc::lazy_list_tag>
1897 ,cc::split_list::ordered_list_traits<
1898 typename cc::lazy_list::make_traits<
1903 > SplitList_Lazy_RCU_GPT_dyn_less;
1905 typedef cc::SplitListSet< rcu_gpt, key_val,
1906 typename cc::split_list::make_traits<
1907 cc::split_list::ordered_list<cc::lazy_list_tag>
1909 ,co::memory_model< co::v::sequential_consistent >
1910 ,cc::split_list::ordered_list_traits<
1911 typename cc::lazy_list::make_traits<
1913 ,co::memory_model< co::v::sequential_consistent >
1917 > SplitList_Lazy_RCU_GPT_dyn_less_seqcst;
1919 typedef cc::SplitListSet< rcu_gpt, key_val,
1920 typename cc::split_list::make_traits<
1921 cc::split_list::ordered_list<cc::lazy_list_tag>
1922 ,cc::split_list::dynamic_bucket_table< false >
1924 ,cc::split_list::ordered_list_traits<
1925 typename cc::lazy_list::make_traits<
1930 > SplitList_Lazy_RCU_GPT_st_less;
1932 typedef cc::SplitListSet< rcu_gpt, key_val,
1933 typename cc::split_list::make_traits<
1934 cc::split_list::ordered_list<cc::lazy_list_tag>
1936 ,cc::split_list::dynamic_bucket_table< false >
1937 ,co::memory_model< co::v::sequential_consistent >
1938 ,cc::split_list::ordered_list_traits<
1939 typename cc::lazy_list::make_traits<
1941 ,co::memory_model< co::v::sequential_consistent >
1945 > SplitList_Lazy_RCU_GPT_st_less_seqcst;
1947 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
1948 typedef cc::SplitListSet< rcu_shb, key_val,
1949 typename cc::split_list::make_traits<
1950 cc::split_list::ordered_list<cc::lazy_list_tag>
1952 ,cc::split_list::ordered_list_traits<
1953 typename cc::lazy_list::make_traits<
1954 co::compare< compare >
1958 > SplitList_Lazy_RCU_SHB_dyn_cmp;
1960 typedef cc::SplitListSet< rcu_shb, key_val,
1961 typename cc::split_list::make_traits<
1962 cc::split_list::ordered_list<cc::lazy_list_tag>
1964 ,co::memory_model< co::v::sequential_consistent >
1965 ,cc::split_list::ordered_list_traits<
1966 typename cc::lazy_list::make_traits<
1967 co::compare< compare >
1968 ,co::memory_model< co::v::sequential_consistent >
1972 > SplitList_Lazy_RCU_SHB_dyn_cmp_seqcst;
1974 typedef cc::SplitListSet< rcu_shb, key_val,
1975 typename cc::split_list::make_traits<
1976 cc::split_list::ordered_list<cc::lazy_list_tag>
1977 ,cc::split_list::dynamic_bucket_table< false >
1979 ,cc::split_list::ordered_list_traits<
1980 typename cc::lazy_list::make_traits<
1981 co::compare< compare >
1985 > SplitList_Lazy_RCU_SHB_st_cmp;
1987 typedef cc::SplitListSet< rcu_shb, key_val,
1988 typename cc::split_list::make_traits<
1989 cc::split_list::ordered_list<cc::lazy_list_tag>
1991 ,cc::split_list::dynamic_bucket_table< false >
1992 ,co::memory_model< co::v::sequential_consistent >
1993 ,cc::split_list::ordered_list_traits<
1994 typename cc::lazy_list::make_traits<
1995 co::compare< compare >
1996 ,co::memory_model< co::v::sequential_consistent >
2000 > SplitList_Lazy_RCU_SHB_st_cmp_seqcst;
2003 typedef cc::SplitListSet< rcu_shb, key_val,
2004 typename cc::split_list::make_traits<
2005 cc::split_list::ordered_list<cc::lazy_list_tag>
2007 ,cc::split_list::ordered_list_traits<
2008 typename cc::lazy_list::make_traits<
2013 > SplitList_Lazy_RCU_SHB_dyn_less;
2015 typedef cc::SplitListSet< rcu_shb, key_val,
2016 typename cc::split_list::make_traits<
2017 cc::split_list::ordered_list<cc::lazy_list_tag>
2019 ,co::memory_model< co::v::sequential_consistent >
2020 ,cc::split_list::ordered_list_traits<
2021 typename cc::lazy_list::make_traits<
2023 ,co::memory_model< co::v::sequential_consistent >
2027 > SplitList_Lazy_RCU_SHB_dyn_less_seqcst;
2029 typedef cc::SplitListSet< rcu_shb, key_val,
2030 typename cc::split_list::make_traits<
2031 cc::split_list::ordered_list<cc::lazy_list_tag>
2032 ,cc::split_list::dynamic_bucket_table< false >
2034 ,cc::split_list::ordered_list_traits<
2035 typename cc::lazy_list::make_traits<
2040 > SplitList_Lazy_RCU_SHB_st_less;
2042 typedef cc::SplitListSet< rcu_shb, key_val,
2043 typename cc::split_list::make_traits<
2044 cc::split_list::ordered_list<cc::lazy_list_tag>
2046 ,cc::split_list::dynamic_bucket_table< false >
2047 ,co::memory_model< co::v::sequential_consistent >
2048 ,cc::split_list::ordered_list_traits<
2049 typename cc::lazy_list::make_traits<
2051 ,co::memory_model< co::v::sequential_consistent >
2055 > SplitList_Lazy_RCU_SHB_st_less_seqcst;
2058 typedef cc::SplitListSet< rcu_sht, key_val,
2059 typename cc::split_list::make_traits<
2060 cc::split_list::ordered_list<cc::lazy_list_tag>
2062 ,cc::split_list::ordered_list_traits<
2063 typename cc::lazy_list::make_traits<
2064 co::compare< compare >
2068 > SplitList_Lazy_RCU_SHT_dyn_cmp;
2070 typedef cc::SplitListSet< rcu_sht, key_val,
2071 typename cc::split_list::make_traits<
2072 cc::split_list::ordered_list<cc::lazy_list_tag>
2074 ,co::memory_model< co::v::sequential_consistent >
2075 ,cc::split_list::ordered_list_traits<
2076 typename cc::lazy_list::make_traits<
2077 co::compare< compare >
2078 ,co::memory_model< co::v::sequential_consistent >
2082 > SplitList_Lazy_RCU_SHT_dyn_cmp_seqcst;
2084 typedef cc::SplitListSet< rcu_sht, key_val,
2085 typename cc::split_list::make_traits<
2086 cc::split_list::ordered_list<cc::lazy_list_tag>
2087 ,cc::split_list::dynamic_bucket_table< false >
2089 ,cc::split_list::ordered_list_traits<
2090 typename cc::lazy_list::make_traits<
2091 co::compare< compare >
2095 > SplitList_Lazy_RCU_SHT_st_cmp;
2097 typedef cc::SplitListSet< rcu_sht, key_val,
2098 typename cc::split_list::make_traits<
2099 cc::split_list::ordered_list<cc::lazy_list_tag>
2101 ,cc::split_list::dynamic_bucket_table< false >
2102 ,co::memory_model< co::v::sequential_consistent >
2103 ,cc::split_list::ordered_list_traits<
2104 typename cc::lazy_list::make_traits<
2105 co::compare< compare >
2106 ,co::memory_model< co::v::sequential_consistent >
2110 > SplitList_Lazy_RCU_SHT_st_cmp_seqcst;
2113 typedef cc::SplitListSet< rcu_sht, key_val,
2114 typename cc::split_list::make_traits<
2115 cc::split_list::ordered_list<cc::lazy_list_tag>
2117 ,cc::split_list::ordered_list_traits<
2118 typename cc::lazy_list::make_traits<
2123 > SplitList_Lazy_RCU_SHT_dyn_less;
2125 typedef cc::SplitListSet< rcu_sht, key_val,
2126 typename cc::split_list::make_traits<
2127 cc::split_list::ordered_list<cc::lazy_list_tag>
2129 ,co::memory_model< co::v::sequential_consistent >
2130 ,cc::split_list::ordered_list_traits<
2131 typename cc::lazy_list::make_traits<
2133 ,co::memory_model< co::v::sequential_consistent >
2137 > SplitList_Lazy_RCU_SHT_dyn_less_seqcst;
2139 typedef cc::SplitListSet< rcu_sht, key_val,
2140 typename cc::split_list::make_traits<
2141 cc::split_list::ordered_list<cc::lazy_list_tag>
2142 ,cc::split_list::dynamic_bucket_table< false >
2144 ,cc::split_list::ordered_list_traits<
2145 typename cc::lazy_list::make_traits<
2150 > SplitList_Lazy_RCU_SHT_st_less;
2152 typedef cc::SplitListSet< rcu_sht, key_val,
2153 typename cc::split_list::make_traits<
2154 cc::split_list::ordered_list<cc::lazy_list_tag>
2156 ,cc::split_list::dynamic_bucket_table< false >
2157 ,co::memory_model< co::v::sequential_consistent >
2158 ,cc::split_list::ordered_list_traits<
2159 typename cc::lazy_list::make_traits<
2161 ,co::memory_model< co::v::sequential_consistent >
2165 > SplitList_Lazy_RCU_SHT_st_less_seqcst;
2168 // ***************************************************************************
2171 // for sequential containers
2172 template <class BucketEntry, typename... Options>
2173 class StripedHashSet_seq:
2174 public cc::StripedSet< BucketEntry,
2175 co::mutex_policy< cc::striped_set::striping<> >
2176 ,co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
2180 typedef cc::StripedSet< BucketEntry,
2181 co::mutex_policy< cc::striped_set::striping<> >
2182 ,co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
2185 typedef typename base_class::resizing_policy resizing_policy_t;
2187 resizing_policy_t m_placeHolder;
2189 StripedHashSet_seq( size_t nCapacity, size_t nLoadFactor )
2190 : base_class( nCapacity / nLoadFactor / 16, *(new(&m_placeHolder) resizing_policy_t( nLoadFactor )) )
2193 template <typename Q, typename Less>
2194 bool erase_with( Q const& v, Less pred )
2196 return base_class::erase( v );
2200 // for non-sequential ordered containers
2201 template <class BucketEntry, typename... Options>
2202 class StripedHashSet_ord:
2203 public cc::StripedSet< BucketEntry,
2204 co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
2205 ,co::mutex_policy< cc::striped_set::striping<> >
2209 typedef cc::StripedSet< BucketEntry,
2210 co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
2211 ,co::mutex_policy< cc::striped_set::striping<> >
2214 typedef typename base_class::resizing_policy resizing_policy_t;
2216 resizing_policy_t m_placeHolder;
2218 StripedHashSet_ord( size_t nCapacity, size_t nLoadFactor )
2219 : base_class( 0, *(new(&m_placeHolder) resizing_policy_t( nLoadFactor * 1024 )) )
2222 template <typename Q, typename Less>
2223 bool erase_with( Q const& v, Less pred )
2225 return base_class::erase( v );
2229 typedef StripedHashSet_seq<
2230 std::list< key_val >
2235 typedef StripedHashSet_seq<
2236 std::vector< key_val >
2239 > StripedSet_vector;
2241 #if BOOST_VERSION >= 104800
2242 typedef StripedHashSet_seq<
2243 boost::container::slist< key_val >
2246 > StripedSet_boost_slist;
2248 typedef StripedHashSet_seq<
2249 boost::container::list< key_val >
2252 > StripedSet_boost_list;
2254 typedef StripedHashSet_seq<
2255 boost::container::vector< key_val >
2258 > StripedSet_boost_vector;
2260 typedef StripedHashSet_seq<
2261 boost::container::stable_vector< key_val >
2264 > StripedSet_boost_stable_vector;
2267 typedef StripedHashSet_ord<
2268 std::set< key_val, less >
2272 #if (CDS_COMPILER == CDS_COMPILER_MSVC || (CDS_COMPILER == CDS_COMPILER_INTEL && CDS_OS_INTERFACE == CDS_OSI_WINDOWS)) && _MSC_VER < 1600
2273 typedef StripedHashSet_ord<
2274 stdext::hash_set< key_val, hash_less >
2276 > StripedSet_hashset;
2278 typedef StripedHashSet_ord<
2279 std::unordered_set< key_val, hash, equal_to >
2281 > StripedSet_hashset;
2284 #if BOOST_VERSION >= 104800
2285 typedef StripedHashSet_ord<
2286 boost::container::set< key_val, less >
2288 > StripedSet_boost_set;
2290 typedef StripedHashSet_ord<
2291 boost::container::flat_set< key_val, less >
2293 > StripedSet_boost_flat_set;
2296 typedef StripedHashSet_ord<
2297 boost::unordered_set< key_val, hash, equal_to >
2299 > StripedSet_boost_unordered_set;
2303 // ***************************************************************************
2306 // for sequential containers
2307 template <class BucketEntry, typename... Options>
2308 class RefinableHashSet_seq:
2309 public cc::StripedSet< BucketEntry,
2310 co::mutex_policy< cc::striped_set::refinable<> >
2311 ,co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
2315 typedef cc::StripedSet< BucketEntry,
2316 co::mutex_policy< cc::striped_set::refinable<> >
2317 ,co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
2320 typedef typename base_class::resizing_policy resizing_policy_t;
2322 resizing_policy_t m_placeHolder;
2324 RefinableHashSet_seq( size_t nCapacity, size_t nLoadFactor )
2325 : base_class( nCapacity / nLoadFactor / 16, *(new(&m_placeHolder) resizing_policy_t( nLoadFactor )) )
2328 template <typename Q, typename Less>
2329 bool erase_with( Q const& v, Less pred )
2331 return base_class::erase( v );
2335 // for non-sequential ordered containers
2336 template <class BucketEntry, typename... Options>
2337 class RefinableHashSet_ord:
2338 public cc::StripedSet< BucketEntry,
2339 co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
2340 ,co::mutex_policy< cc::striped_set::refinable<> >
2344 typedef cc::StripedSet< BucketEntry,
2345 co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
2346 ,co::mutex_policy< cc::striped_set::refinable<> >
2349 typedef typename base_class::resizing_policy resizing_policy_t;
2351 resizing_policy_t m_placeHolder;
2353 RefinableHashSet_ord( size_t nCapacity, size_t nLoadFactor )
2354 : base_class( 0, *(new(&m_placeHolder) resizing_policy_t( nLoadFactor * 1024 )) )
2357 template <typename Q, typename Less>
2358 bool erase_with( Q const& v, Less pred )
2360 return base_class::erase( v );
2364 typedef RefinableHashSet_seq<
2365 std::list< key_val >
2368 > RefinableSet_list;
2370 typedef RefinableHashSet_seq<
2371 std::vector< key_val >
2374 > RefinableSet_vector;
2376 #if BOOST_VERSION >= 104800
2377 typedef RefinableHashSet_seq<
2378 boost::container::slist< key_val >
2381 > RefinableSet_boost_slist;
2383 typedef RefinableHashSet_seq<
2384 boost::container::list< key_val >
2387 > RefinableSet_boost_list;
2389 typedef RefinableHashSet_seq<
2390 boost::container::vector< key_val >
2393 > RefinableSet_boost_vector;
2395 typedef RefinableHashSet_seq<
2396 boost::container::stable_vector< key_val >
2399 > RefinableSet_boost_stable_vector;
2402 typedef RefinableHashSet_ord<
2403 std::set< key_val, less >
2407 #if (CDS_COMPILER == CDS_COMPILER_MSVC || (CDS_COMPILER == CDS_COMPILER_INTEL && CDS_OS_INTERFACE == CDS_OSI_WINDOWS)) && _MSC_VER < 1600
2408 typedef RefinableHashSet_ord<
2409 stdext::hash_set< key_val, hash_less >
2411 > RefinableSet_hashset;
2413 typedef RefinableHashSet_ord<
2414 std::unordered_set< key_val, hash, equal_to >
2416 > RefinableSet_hashset;
2419 #if BOOST_VERSION >= 104800
2420 typedef RefinableHashSet_ord<
2421 boost::container::set< key_val, less >
2423 > RefinableSet_boost_set;
2425 typedef RefinableHashSet_ord<
2426 boost::container::flat_set< key_val, less >
2428 > RefinableSet_boost_flat_set;
2431 typedef RefinableHashSet_ord<
2432 boost::unordered_set< key_val, hash, equal_to >
2434 > RefinableSet_boost_unordered_set;
2438 // ***************************************************************************
2441 typedef CuckooStripedSet< key_val,
2442 cc::cuckoo::probeset_type< cc::cuckoo::list >
2443 ,co::equal_to< equal_to >
2444 ,co::hash< std::tuple< hash, hash2 > >
2445 > CuckooStripedSet_list_unord;
2447 typedef CuckooStripedSet< key_val,
2448 cc::cuckoo::probeset_type< cc::cuckoo::list >
2449 ,co::equal_to< equal_to >
2450 ,co::hash< std::tuple< hash, hash2 > >
2451 ,co::stat< cc::cuckoo::stat >
2452 > CuckooStripedSet_list_unord_stat;
2454 typedef CuckooStripedSet< key_val,
2455 cc::cuckoo::probeset_type< cc::cuckoo::list >
2456 ,co::equal_to< equal_to >
2457 ,co::hash< std::tuple< hash, hash2 > >
2458 ,cc::cuckoo::store_hash< true >
2459 > CuckooStripedSet_list_unord_storehash;
2461 typedef CuckooStripedSet< key_val,
2462 cc::cuckoo::probeset_type< cc::cuckoo::list >
2463 ,co::compare< compare >
2464 ,co::hash< std::tuple< hash, hash2 > >
2465 > CuckooStripedSet_list_ord;
2467 typedef CuckooStripedSet< key_val,
2468 cc::cuckoo::probeset_type< cc::cuckoo::list >
2469 ,co::compare< compare >
2470 ,co::hash< std::tuple< hash, hash2 > >
2471 ,co::stat< cc::cuckoo::stat >
2472 > CuckooStripedSet_list_ord_stat;
2474 typedef CuckooStripedSet< key_val,
2475 cc::cuckoo::probeset_type< cc::cuckoo::list >
2476 ,co::compare< compare >
2477 ,co::hash< std::tuple< hash, hash2 > >
2478 ,cc::cuckoo::store_hash< true >
2479 > CuckooStripedSet_list_ord_storehash;
2481 typedef CuckooStripedSet< key_val,
2482 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
2483 ,co::equal_to< equal_to >
2484 ,co::hash< std::tuple< hash, hash2 > >
2485 > CuckooStripedSet_vector_unord;
2487 typedef CuckooStripedSet< key_val,
2488 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
2489 ,co::equal_to< equal_to >
2490 ,co::hash< std::tuple< hash, hash2 > >
2491 ,co::stat< cc::cuckoo::stat >
2492 > CuckooStripedSet_vector_unord_stat;
2494 typedef CuckooStripedSet< key_val,
2495 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
2496 ,co::equal_to< equal_to >
2497 ,co::hash< std::tuple< hash, hash2 > >
2498 ,cc::cuckoo::store_hash< true >
2499 > CuckooStripedSet_vector_unord_storehash;
2501 typedef CuckooStripedSet< key_val,
2502 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
2503 ,co::compare< compare >
2504 ,co::hash< std::tuple< hash, hash2 > >
2505 > CuckooStripedSet_vector_ord;
2507 typedef CuckooStripedSet< key_val,
2508 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
2509 ,co::compare< compare >
2510 ,co::hash< std::tuple< hash, hash2 > >
2511 ,co::stat< cc::cuckoo::stat >
2512 > CuckooStripedSet_vector_ord_stat;
2514 typedef CuckooStripedSet< key_val,
2515 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
2516 ,co::compare< compare >
2517 ,co::hash< std::tuple< hash, hash2 > >
2518 ,cc::cuckoo::store_hash< true >
2519 > CuckooStripedSet_vector_ord_storehash;
2521 typedef CuckooRefinableSet< key_val,
2522 cc::cuckoo::probeset_type< cc::cuckoo::list >
2523 ,co::equal_to< equal_to >
2524 ,co::hash< std::tuple< hash, hash2 > >
2525 > CuckooRefinableSet_list_unord;
2527 typedef CuckooRefinableSet< key_val,
2528 cc::cuckoo::probeset_type< cc::cuckoo::list >
2529 ,co::equal_to< equal_to >
2530 ,co::hash< std::tuple< hash, hash2 > >
2531 ,co::stat< cc::cuckoo::stat >
2532 > CuckooRefinableSet_list_unord_stat;
2534 typedef CuckooRefinableSet< key_val,
2535 cc::cuckoo::probeset_type< cc::cuckoo::list >
2536 ,co::equal_to< equal_to >
2537 ,co::hash< std::tuple< hash, hash2 > >
2538 ,cc::cuckoo::store_hash< true >
2539 > CuckooRefinableSet_list_unord_storehash;
2541 typedef CuckooRefinableSet< key_val,
2542 cc::cuckoo::probeset_type< cc::cuckoo::list >
2543 ,co::compare< compare >
2544 ,co::hash< std::tuple< hash, hash2 > >
2545 > CuckooRefinableSet_list_ord;
2547 typedef CuckooRefinableSet< key_val,
2548 cc::cuckoo::probeset_type< cc::cuckoo::list >
2549 ,co::compare< compare >
2550 ,co::hash< std::tuple< hash, hash2 > >
2551 ,co::stat< cc::cuckoo::stat >
2552 > CuckooRefinableSet_list_ord_stat;
2554 typedef CuckooRefinableSet< key_val,
2555 cc::cuckoo::probeset_type< cc::cuckoo::list >
2556 ,co::compare< compare >
2557 ,co::hash< std::tuple< hash, hash2 > >
2558 ,cc::cuckoo::store_hash< true >
2559 > CuckooRefinableSet_list_ord_storehash;
2561 typedef CuckooRefinableSet< key_val,
2562 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
2563 ,co::equal_to< equal_to >
2564 ,co::hash< std::tuple< hash, hash2 > >
2565 > CuckooRefinableSet_vector_unord;
2567 typedef CuckooRefinableSet< key_val,
2568 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
2569 ,co::equal_to< equal_to >
2570 ,co::hash< std::tuple< hash, hash2 > >
2571 ,co::stat< cc::cuckoo::stat >
2572 > CuckooRefinableSet_vector_unord_stat;
2574 typedef CuckooRefinableSet< key_val,
2575 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
2576 ,co::equal_to< equal_to >
2577 ,co::hash< std::tuple< hash, hash2 > >
2578 ,cc::cuckoo::store_hash< true >
2579 > CuckooRefinableSet_vector_unord_storehash;
2581 typedef CuckooRefinableSet< key_val,
2582 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
2583 ,co::compare< compare >
2584 ,co::hash< std::tuple< hash, hash2 > >
2585 > CuckooRefinableSet_vector_ord;
2587 typedef CuckooRefinableSet< key_val,
2588 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
2589 ,co::compare< compare >
2590 ,co::hash< std::tuple< hash, hash2 > >
2591 ,co::stat< cc::cuckoo::stat >
2592 > CuckooRefinableSet_vector_ord_stat;
2594 typedef CuckooRefinableSet< key_val,
2595 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
2596 ,co::compare< compare >
2597 ,co::hash< std::tuple< hash, hash2 > >
2598 ,cc::cuckoo::store_hash< true >
2599 > CuckooRefinableSet_vector_ord_storehash;
2602 // ***************************************************************************
2605 class traits_SkipListSet_hp_less_pascal: public cc::skip_list::make_traits <
2607 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
2608 ,co::item_counter< cds::atomicity::item_counter >
2611 typedef cc::SkipListSet< cds::gc::HP, key_val, traits_SkipListSet_hp_less_pascal > SkipListSet_hp_less_pascal;
2613 class traits_SkipListSet_hp_less_pascal_seqcst: public cc::skip_list::make_traits <
2615 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
2616 ,co::memory_model< co::v::sequential_consistent >
2617 ,co::item_counter< cds::atomicity::item_counter >
2620 typedef cc::SkipListSet< cds::gc::HP, key_val, traits_SkipListSet_hp_less_pascal_seqcst > SkipListSet_hp_less_pascal_seqcst;
2622 class traits_SkipListSet_hp_less_pascal_stat: public cc::skip_list::make_traits <
2624 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
2625 ,co::stat< cc::skip_list::stat<> >
2626 ,co::item_counter< cds::atomicity::item_counter >
2629 typedef cc::SkipListSet< cds::gc::HP, key_val, traits_SkipListSet_hp_less_pascal_stat > SkipListSet_hp_less_pascal_stat;
2631 class traits_SkipListSet_hp_cmp_pascal: public cc::skip_list::make_traits <
2632 co::compare< compare >
2633 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
2634 ,co::item_counter< cds::atomicity::item_counter >
2637 typedef cc::SkipListSet< cds::gc::HP, key_val, traits_SkipListSet_hp_cmp_pascal > SkipListSet_hp_cmp_pascal;
2639 class traits_SkipListSet_hp_cmp_pascal_stat: public cc::skip_list::make_traits <
2640 co::compare< compare >
2641 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
2642 ,co::stat< cc::skip_list::stat<> >
2643 ,co::item_counter< cds::atomicity::item_counter >
2646 typedef cc::SkipListSet< cds::gc::HP, key_val, traits_SkipListSet_hp_cmp_pascal_stat > SkipListSet_hp_cmp_pascal_stat;
2648 class traits_SkipListSet_hp_less_xorshift: public cc::skip_list::make_traits <
2650 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
2651 ,co::item_counter< cds::atomicity::item_counter >
2654 typedef cc::SkipListSet< cds::gc::HP, key_val, traits_SkipListSet_hp_less_xorshift > SkipListSet_hp_less_xorshift;
2656 class traits_SkipListSet_hp_less_xorshift_stat: public cc::skip_list::make_traits <
2658 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
2659 ,co::stat< cc::skip_list::stat<> >
2660 ,co::item_counter< cds::atomicity::item_counter >
2663 typedef cc::SkipListSet< cds::gc::HP, key_val, traits_SkipListSet_hp_less_xorshift_stat > SkipListSet_hp_less_xorshift_stat;
2665 class traits_SkipListSet_hp_cmp_xorshift: public cc::skip_list::make_traits <
2666 co::compare< compare >
2667 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
2668 ,co::item_counter< cds::atomicity::item_counter >
2671 typedef cc::SkipListSet< cds::gc::HP, key_val, traits_SkipListSet_hp_cmp_xorshift > SkipListSet_hp_cmp_xorshift;
2673 class traits_SkipListSet_hp_cmp_xorshift_stat: public cc::skip_list::make_traits <
2674 co::compare< compare >
2675 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
2676 ,co::stat< cc::skip_list::stat<> >
2677 ,co::item_counter< cds::atomicity::item_counter >
2680 typedef cc::SkipListSet< cds::gc::HP, key_val, traits_SkipListSet_hp_cmp_xorshift_stat > SkipListSet_hp_cmp_xorshift_stat;
2682 // ***************************************************************************
2683 // SkipListSet - DHP
2685 class traits_SkipListSet_ptb_less_pascal: public cc::skip_list::make_traits <
2687 ,co::item_counter< cds::atomicity::item_counter >
2688 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
2691 typedef cc::SkipListSet< cds::gc::DHP, key_val, traits_SkipListSet_ptb_less_pascal > SkipListSet_ptb_less_pascal;
2693 class traits_SkipListSet_ptb_less_pascal_seqcst: public cc::skip_list::make_traits <
2695 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
2696 ,co::memory_model< co::v::sequential_consistent >
2697 ,co::item_counter< cds::atomicity::item_counter >
2700 typedef cc::SkipListSet< cds::gc::DHP, key_val, traits_SkipListSet_ptb_less_pascal_seqcst > SkipListSet_ptb_less_pascal_seqcst;
2702 class traits_SkipListSet_ptb_less_pascal_stat: public cc::skip_list::make_traits <
2704 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
2705 ,co::stat< cc::skip_list::stat<> >
2706 ,co::item_counter< cds::atomicity::item_counter >
2709 typedef cc::SkipListSet< cds::gc::DHP, key_val, traits_SkipListSet_ptb_less_pascal_stat > SkipListSet_ptb_less_pascal_stat;
2711 class traits_SkipListSet_ptb_cmp_pascal: public cc::skip_list::make_traits <
2712 co::compare< compare >
2713 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
2714 ,co::item_counter< cds::atomicity::item_counter >
2717 typedef cc::SkipListSet< cds::gc::DHP, key_val, traits_SkipListSet_ptb_cmp_pascal > SkipListSet_ptb_cmp_pascal;
2719 class traits_SkipListSet_ptb_cmp_pascal_stat: public cc::skip_list::make_traits <
2720 co::compare< compare >
2721 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
2722 ,co::stat< cc::skip_list::stat<> >
2723 ,co::item_counter< cds::atomicity::item_counter >
2726 typedef cc::SkipListSet< cds::gc::DHP, key_val, traits_SkipListSet_ptb_cmp_pascal_stat > SkipListSet_ptb_cmp_pascal_stat;
2728 class traits_SkipListSet_ptb_less_xorshift: public cc::skip_list::make_traits <
2730 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
2731 ,co::item_counter< cds::atomicity::item_counter >
2734 typedef cc::SkipListSet< cds::gc::DHP, key_val, traits_SkipListSet_ptb_less_xorshift > SkipListSet_ptb_less_xorshift;
2736 class traits_SkipListSet_ptb_less_xorshift_stat: public cc::skip_list::make_traits <
2738 ,co::item_counter< cds::atomicity::item_counter >
2739 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
2740 ,co::stat< cc::skip_list::stat<> >
2743 typedef cc::SkipListSet< cds::gc::DHP, key_val, traits_SkipListSet_ptb_less_xorshift_stat > SkipListSet_ptb_less_xorshift_stat;
2745 class traits_SkipListSet_ptb_cmp_xorshift: public cc::skip_list::make_traits <
2746 co::compare< compare >
2747 ,co::item_counter< cds::atomicity::item_counter >
2748 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
2751 typedef cc::SkipListSet< cds::gc::DHP, key_val, traits_SkipListSet_ptb_cmp_xorshift> SkipListSet_ptb_cmp_xorshift;
2753 class traits_SkipListSet_ptb_cmp_xorshift_stat: public cc::skip_list::make_traits <
2754 co::compare< compare >
2755 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
2756 ,co::stat< cc::skip_list::stat<> >
2757 ,co::item_counter< cds::atomicity::item_counter >
2760 typedef cc::SkipListSet< cds::gc::DHP, key_val, traits_SkipListSet_ptb_cmp_xorshift_stat > SkipListSet_ptb_cmp_xorshift_stat;
2763 // ***************************************************************************
2764 // SkipListSet - RCU general_instant
2766 class traits_SkipListSet_rcu_gpi_less_pascal: public cc::skip_list::make_traits <
2768 ,co::item_counter< cds::atomicity::item_counter >
2769 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
2772 typedef cc::SkipListSet< rcu_gpi, key_val, traits_SkipListSet_rcu_gpi_less_pascal > SkipListSet_rcu_gpi_less_pascal;
2774 class traits_SkipListSet_rcu_gpi_less_pascal_seqcst: public cc::skip_list::make_traits <
2776 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
2777 ,co::memory_model< co::v::sequential_consistent >
2778 ,co::item_counter< cds::atomicity::item_counter >
2781 typedef cc::SkipListSet< rcu_gpi, key_val, traits_SkipListSet_rcu_gpi_less_pascal_seqcst > SkipListSet_rcu_gpi_less_pascal_seqcst;
2783 class traits_SkipListSet_rcu_gpi_less_pascal_stat: public cc::skip_list::make_traits <
2785 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
2786 ,co::stat< cc::skip_list::stat<> >
2787 ,co::item_counter< cds::atomicity::item_counter >
2790 typedef cc::SkipListSet< rcu_gpi, key_val, traits_SkipListSet_rcu_gpi_less_pascal_stat > SkipListSet_rcu_gpi_less_pascal_stat;
2792 class traits_SkipListSet_rcu_gpi_cmp_pascal: public cc::skip_list::make_traits <
2793 co::compare< compare >
2794 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
2795 ,co::item_counter< cds::atomicity::item_counter >
2798 typedef cc::SkipListSet< rcu_gpi, key_val, traits_SkipListSet_rcu_gpi_cmp_pascal > SkipListSet_rcu_gpi_cmp_pascal;
2800 class traits_SkipListSet_rcu_gpi_cmp_pascal_stat: public cc::skip_list::make_traits <
2801 co::compare< compare >
2802 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
2803 ,co::stat< cc::skip_list::stat<> >
2804 ,co::item_counter< cds::atomicity::item_counter >
2807 typedef cc::SkipListSet< rcu_gpi, key_val, traits_SkipListSet_rcu_gpi_cmp_pascal_stat > SkipListSet_rcu_gpi_cmp_pascal_stat;
2809 class traits_SkipListSet_rcu_gpi_less_xorshift: public cc::skip_list::make_traits <
2811 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
2812 ,co::item_counter< cds::atomicity::item_counter >
2815 typedef cc::SkipListSet< rcu_gpi, key_val, traits_SkipListSet_rcu_gpi_less_xorshift > SkipListSet_rcu_gpi_less_xorshift;
2817 class traits_SkipListSet_rcu_gpi_less_xorshift_stat: public cc::skip_list::make_traits <
2819 ,co::item_counter< cds::atomicity::item_counter >
2820 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
2821 ,co::stat< cc::skip_list::stat<> >
2824 typedef cc::SkipListSet< rcu_gpi, key_val, traits_SkipListSet_rcu_gpi_less_xorshift_stat > SkipListSet_rcu_gpi_less_xorshift_stat;
2826 class traits_SkipListSet_rcu_gpi_cmp_xorshift: public cc::skip_list::make_traits <
2827 co::compare< compare >
2828 ,co::item_counter< cds::atomicity::item_counter >
2829 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
2832 typedef cc::SkipListSet< rcu_gpi, key_val, traits_SkipListSet_rcu_gpi_cmp_xorshift > SkipListSet_rcu_gpi_cmp_xorshift;
2834 class traits_SkipListSet_rcu_gpi_cmp_xorshift_stat: public cc::skip_list::make_traits <
2835 co::compare< compare >
2836 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
2837 ,co::stat< cc::skip_list::stat<> >
2838 ,co::item_counter< cds::atomicity::item_counter >
2841 typedef cc::SkipListSet< rcu_gpi, key_val, traits_SkipListSet_rcu_gpi_cmp_xorshift_stat > SkipListSet_rcu_gpi_cmp_xorshift_stat;
2844 // ***************************************************************************
2845 // SkipListSet - RCU general_buffered
2847 class traits_SkipListSet_rcu_gpb_less_pascal: public cc::skip_list::make_traits <
2849 ,co::item_counter< cds::atomicity::item_counter >
2850 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
2853 typedef cc::SkipListSet< rcu_gpb, key_val, traits_SkipListSet_rcu_gpb_less_pascal > SkipListSet_rcu_gpb_less_pascal;
2855 class traits_SkipListSet_rcu_gpb_less_pascal_seqcst: public cc::skip_list::make_traits <
2857 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
2858 ,co::memory_model< co::v::sequential_consistent >
2859 ,co::item_counter< cds::atomicity::item_counter >
2862 typedef cc::SkipListSet< rcu_gpb, key_val, traits_SkipListSet_rcu_gpb_less_pascal_seqcst > SkipListSet_rcu_gpb_less_pascal_seqcst;
2864 class traits_SkipListSet_rcu_gpb_less_pascal_stat: public cc::skip_list::make_traits <
2866 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
2867 ,co::stat< cc::skip_list::stat<> >
2868 ,co::item_counter< cds::atomicity::item_counter >
2871 typedef cc::SkipListSet< rcu_gpb, key_val, traits_SkipListSet_rcu_gpb_less_pascal_stat > SkipListSet_rcu_gpb_less_pascal_stat;
2873 class traits_SkipListSet_rcu_gpb_cmp_pascal: public cc::skip_list::make_traits <
2874 co::compare< compare >
2875 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
2876 ,co::item_counter< cds::atomicity::item_counter >
2879 typedef cc::SkipListSet< rcu_gpb, key_val, traits_SkipListSet_rcu_gpb_cmp_pascal > SkipListSet_rcu_gpb_cmp_pascal;
2881 class traits_SkipListSet_rcu_gpb_cmp_pascal_stat: public cc::skip_list::make_traits <
2882 co::compare< compare >
2883 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
2884 ,co::stat< cc::skip_list::stat<> >
2885 ,co::item_counter< cds::atomicity::item_counter >
2888 typedef cc::SkipListSet< rcu_gpb, key_val, traits_SkipListSet_rcu_gpb_cmp_pascal_stat > SkipListSet_rcu_gpb_cmp_pascal_stat;
2890 class traits_SkipListSet_rcu_gpb_less_xorshift: public cc::skip_list::make_traits <
2892 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
2893 ,co::item_counter< cds::atomicity::item_counter >
2896 typedef cc::SkipListSet< rcu_gpb, key_val, traits_SkipListSet_rcu_gpb_less_xorshift > SkipListSet_rcu_gpb_less_xorshift;
2898 class traits_SkipListSet_rcu_gpb_less_xorshift_stat: public cc::skip_list::make_traits <
2900 ,co::item_counter< cds::atomicity::item_counter >
2901 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
2902 ,co::stat< cc::skip_list::stat<> >
2905 typedef cc::SkipListSet< rcu_gpb, key_val, traits_SkipListSet_rcu_gpb_less_xorshift_stat > SkipListSet_rcu_gpb_less_xorshift_stat;
2907 class traits_SkipListSet_rcu_gpb_cmp_xorshift: public cc::skip_list::make_traits <
2908 co::compare< compare >
2909 ,co::item_counter< cds::atomicity::item_counter >
2910 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
2913 typedef cc::SkipListSet< rcu_gpb, key_val, traits_SkipListSet_rcu_gpb_cmp_xorshift > SkipListSet_rcu_gpb_cmp_xorshift;
2915 class traits_SkipListSet_rcu_gpb_cmp_xorshift_stat: public cc::skip_list::make_traits <
2916 co::compare< compare >
2917 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
2918 ,co::stat< cc::skip_list::stat<> >
2919 ,co::item_counter< cds::atomicity::item_counter >
2922 typedef cc::SkipListSet< rcu_gpb, key_val, traits_SkipListSet_rcu_gpb_cmp_xorshift_stat > SkipListSet_rcu_gpb_cmp_xorshift_stat;
2924 // ***************************************************************************
2925 // SkipListSet - RCU general_threaded
2927 class traits_SkipListSet_rcu_gpt_less_pascal: public cc::skip_list::make_traits <
2929 ,co::item_counter< cds::atomicity::item_counter >
2930 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
2933 typedef cc::SkipListSet< rcu_gpt, key_val, traits_SkipListSet_rcu_gpt_less_pascal > SkipListSet_rcu_gpt_less_pascal;
2935 class traits_SkipListSet_rcu_gpt_less_pascal_seqcst: public cc::skip_list::make_traits <
2937 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
2938 ,co::memory_model< co::v::sequential_consistent >
2939 ,co::item_counter< cds::atomicity::item_counter >
2942 typedef cc::SkipListSet< rcu_gpt, key_val, traits_SkipListSet_rcu_gpt_less_pascal_seqcst > SkipListSet_rcu_gpt_less_pascal_seqcst;
2944 class traits_SkipListSet_rcu_gpt_less_pascal_stat: public cc::skip_list::make_traits <
2946 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
2947 ,co::stat< cc::skip_list::stat<> >
2948 ,co::item_counter< cds::atomicity::item_counter >
2951 typedef cc::SkipListSet< rcu_gpt, key_val, traits_SkipListSet_rcu_gpt_less_pascal_stat > SkipListSet_rcu_gpt_less_pascal_stat;
2953 class traits_SkipListSet_rcu_gpt_cmp_pascal: public cc::skip_list::make_traits <
2954 co::compare< compare >
2955 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
2956 ,co::item_counter< cds::atomicity::item_counter >
2959 typedef cc::SkipListSet< rcu_gpt, key_val, traits_SkipListSet_rcu_gpt_cmp_pascal > SkipListSet_rcu_gpt_cmp_pascal;
2961 class traits_SkipListSet_rcu_gpt_cmp_pascal_stat: public cc::skip_list::make_traits <
2962 co::compare< compare >
2963 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
2964 ,co::stat< cc::skip_list::stat<> >
2965 ,co::item_counter< cds::atomicity::item_counter >
2968 typedef cc::SkipListSet< rcu_gpt, key_val, traits_SkipListSet_rcu_gpt_cmp_pascal_stat > SkipListSet_rcu_gpt_cmp_pascal_stat;
2970 class traits_SkipListSet_rcu_gpt_less_xorshift: public cc::skip_list::make_traits <
2972 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
2973 ,co::item_counter< cds::atomicity::item_counter >
2976 typedef cc::SkipListSet< rcu_gpt, key_val, traits_SkipListSet_rcu_gpt_less_xorshift > SkipListSet_rcu_gpt_less_xorshift;
2978 class traits_SkipListSet_rcu_gpt_less_xorshift_stat: public cc::skip_list::make_traits <
2980 ,co::item_counter< cds::atomicity::item_counter >
2981 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
2982 ,co::stat< cc::skip_list::stat<> >
2985 typedef cc::SkipListSet< rcu_gpt, key_val, traits_SkipListSet_rcu_gpt_less_xorshift_stat > SkipListSet_rcu_gpt_less_xorshift_stat;
2987 class traits_SkipListSet_rcu_gpt_cmp_xorshift: public cc::skip_list::make_traits <
2988 co::compare< compare >
2989 ,co::item_counter< cds::atomicity::item_counter >
2990 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
2993 typedef cc::SkipListSet< rcu_gpt, key_val, traits_SkipListSet_rcu_gpt_cmp_xorshift > SkipListSet_rcu_gpt_cmp_xorshift;
2995 class traits_SkipListSet_rcu_gpt_cmp_xorshift_stat: public cc::skip_list::make_traits <
2996 co::compare< compare >
2997 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
2998 ,co::stat< cc::skip_list::stat<> >
2999 ,co::item_counter< cds::atomicity::item_counter >
3002 typedef cc::SkipListSet< rcu_gpt, key_val, traits_SkipListSet_rcu_gpt_cmp_xorshift_stat > SkipListSet_rcu_gpt_cmp_xorshift_stat;
3004 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
3005 // ***************************************************************************
3006 // SkipListSet - RCU signal_buffered
3008 class traits_SkipListSet_rcu_shb_less_pascal: public cc::skip_list::make_traits <
3010 ,co::item_counter< cds::atomicity::item_counter >
3011 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3014 typedef cc::SkipListSet< rcu_shb, key_val, traits_SkipListSet_rcu_shb_less_pascal > SkipListSet_rcu_shb_less_pascal;
3016 class traits_SkipListSet_rcu_shb_less_pascal_seqcst: public cc::skip_list::make_traits <
3018 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3019 ,co::memory_model< co::v::sequential_consistent >
3020 ,co::item_counter< cds::atomicity::item_counter >
3023 typedef cc::SkipListSet< rcu_shb, key_val, traits_SkipListSet_rcu_shb_less_pascal_seqcst > SkipListSet_rcu_shb_less_pascal_seqcst;
3025 class traits_SkipListSet_rcu_shb_less_pascal_stat: public cc::skip_list::make_traits <
3027 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3028 ,co::stat< cc::skip_list::stat<> >
3029 ,co::item_counter< cds::atomicity::item_counter >
3032 typedef cc::SkipListSet< rcu_shb, key_val, traits_SkipListSet_rcu_shb_less_pascal_stat > SkipListSet_rcu_shb_less_pascal_stat;
3034 class traits_SkipListSet_rcu_shb_cmp_pascal: public cc::skip_list::make_traits <
3035 co::compare< compare >
3036 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3037 ,co::item_counter< cds::atomicity::item_counter >
3040 typedef cc::SkipListSet< rcu_shb, key_val, traits_SkipListSet_rcu_shb_cmp_pascal > SkipListSet_rcu_shb_cmp_pascal;
3042 class traits_SkipListSet_rcu_shb_cmp_pascal_stat: public cc::skip_list::make_traits <
3043 co::compare< compare >
3044 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3045 ,co::stat< cc::skip_list::stat<> >
3046 ,co::item_counter< cds::atomicity::item_counter >
3049 typedef cc::SkipListSet< rcu_shb, key_val, traits_SkipListSet_rcu_shb_cmp_pascal_stat > SkipListSet_rcu_shb_cmp_pascal_stat;
3051 class traits_SkipListSet_rcu_shb_less_xorshift: public cc::skip_list::make_traits <
3053 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3054 ,co::item_counter< cds::atomicity::item_counter >
3057 typedef cc::SkipListSet< rcu_shb, key_val, traits_SkipListSet_rcu_shb_less_xorshift > SkipListSet_rcu_shb_less_xorshift;
3059 class traits_SkipListSet_rcu_shb_less_xorshift_stat: public cc::skip_list::make_traits <
3061 ,co::item_counter< cds::atomicity::item_counter >
3062 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3063 ,co::stat< cc::skip_list::stat<> >
3066 typedef cc::SkipListSet< rcu_shb, key_val, traits_SkipListSet_rcu_shb_less_xorshift_stat > SkipListSet_rcu_shb_less_xorshift_stat;
3068 class traits_SkipListSet_rcu_shb_cmp_xorshift: public cc::skip_list::make_traits <
3069 co::compare< compare >
3070 ,co::item_counter< cds::atomicity::item_counter >
3071 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3074 typedef cc::SkipListSet< rcu_shb, key_val, traits_SkipListSet_rcu_shb_cmp_xorshift > SkipListSet_rcu_shb_cmp_xorshift;
3076 class traits_SkipListSet_rcu_shb_cmp_xorshift_stat: public cc::skip_list::make_traits <
3077 co::compare< compare >
3078 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3079 ,co::stat< cc::skip_list::stat<> >
3080 ,co::item_counter< cds::atomicity::item_counter >
3083 typedef cc::SkipListSet< rcu_shb, key_val, traits_SkipListSet_rcu_shb_cmp_xorshift_stat > SkipListSet_rcu_shb_cmp_xorshift_stat;
3085 // ***************************************************************************
3086 // SkipListSet - RCU signal_threaded
3088 class traits_SkipListSet_rcu_sht_less_pascal: public cc::skip_list::make_traits <
3090 ,co::item_counter< cds::atomicity::item_counter >
3091 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3094 typedef cc::SkipListSet< rcu_sht, key_val, traits_SkipListSet_rcu_sht_less_pascal > SkipListSet_rcu_sht_less_pascal;
3096 class traits_SkipListSet_rcu_sht_less_pascal_seqcst: public cc::skip_list::make_traits <
3098 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3099 ,co::memory_model< co::v::sequential_consistent >
3100 ,co::item_counter< cds::atomicity::item_counter >
3103 typedef cc::SkipListSet< rcu_sht, key_val, traits_SkipListSet_rcu_sht_less_pascal_seqcst > SkipListSet_rcu_sht_less_pascal_seqcst;
3105 class traits_SkipListSet_rcu_sht_less_pascal_stat: public cc::skip_list::make_traits <
3107 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3108 ,co::stat< cc::skip_list::stat<> >
3109 ,co::item_counter< cds::atomicity::item_counter >
3112 typedef cc::SkipListSet< rcu_sht, key_val, traits_SkipListSet_rcu_sht_less_pascal_stat > SkipListSet_rcu_sht_less_pascal_stat;
3114 class traits_SkipListSet_rcu_sht_cmp_pascal: public cc::skip_list::make_traits <
3115 co::compare< compare >
3116 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3117 ,co::item_counter< cds::atomicity::item_counter >
3120 typedef cc::SkipListSet< rcu_sht, key_val, traits_SkipListSet_rcu_sht_cmp_pascal > SkipListSet_rcu_sht_cmp_pascal;
3122 class traits_SkipListSet_rcu_sht_cmp_pascal_stat: public cc::skip_list::make_traits <
3123 co::compare< compare >
3124 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3125 ,co::stat< cc::skip_list::stat<> >
3126 ,co::item_counter< cds::atomicity::item_counter >
3129 typedef cc::SkipListSet< rcu_sht, key_val, traits_SkipListSet_rcu_sht_cmp_pascal_stat > SkipListSet_rcu_sht_cmp_pascal_stat;
3131 class traits_SkipListSet_rcu_sht_less_xorshift: public cc::skip_list::make_traits <
3133 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3134 ,co::item_counter< cds::atomicity::item_counter >
3137 typedef cc::SkipListSet< rcu_sht, key_val, traits_SkipListSet_rcu_sht_less_xorshift > SkipListSet_rcu_sht_less_xorshift;
3139 class traits_SkipListSet_rcu_sht_less_xorshift_stat: public cc::skip_list::make_traits <
3141 ,co::item_counter< cds::atomicity::item_counter >
3142 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3143 ,co::stat< cc::skip_list::stat<> >
3146 typedef cc::SkipListSet< rcu_sht, key_val, traits_SkipListSet_rcu_sht_less_xorshift_stat > SkipListSet_rcu_sht_less_xorshift_stat;
3148 class traits_SkipListSet_rcu_sht_cmp_xorshift: public cc::skip_list::make_traits <
3149 co::compare< compare >
3150 ,co::item_counter< cds::atomicity::item_counter >
3151 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3154 typedef cc::SkipListSet< rcu_sht, key_val, traits_SkipListSet_rcu_sht_cmp_xorshift > SkipListSet_rcu_sht_cmp_xorshift;
3156 class traits_SkipListSet_rcu_sht_cmp_xorshift_stat: public cc::skip_list::make_traits <
3157 co::compare< compare >
3158 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3159 ,co::stat< cc::skip_list::stat<> >
3160 ,co::item_counter< cds::atomicity::item_counter >
3163 typedef cc::SkipListSet< rcu_sht, key_val, traits_SkipListSet_rcu_sht_cmp_xorshift_stat > SkipListSet_rcu_sht_cmp_xorshift_stat;
3166 // ***************************************************************************
3168 struct ellen_bintree_props {
3169 struct key_extractor {
3170 void operator()( key_type& dest, key_val const& src ) const
3177 bool operator()( key_val const& v1, key_val const& v2 ) const
3179 return key_less()( v1.key, v2.key );
3181 bool operator()( key_type const& k, key_val const& v ) const
3183 return key_less()( k, v.key );
3185 bool operator()( key_val const& v, key_type const& k ) const
3187 return key_less()( v.key, k );
3189 bool operator()( key_type const& k1, key_type const& k2 ) const
3191 return key_less()( k1, k2 );
3196 typedef cc::ellen_bintree::node<cds::gc::HP, key_val> leaf_node;
3197 typedef cc::ellen_bintree::internal_node< key_type, leaf_node > internal_node;
3198 typedef cc::ellen_bintree::update_desc< leaf_node, internal_node > update_desc;
3202 typedef cc::ellen_bintree::node<cds::gc::DHP, key_val> leaf_node;
3203 typedef cc::ellen_bintree::internal_node< key_type, leaf_node > internal_node;
3204 typedef cc::ellen_bintree::update_desc< leaf_node, internal_node > update_desc;
3208 typedef cc::ellen_bintree::node<rcu_gpi, key_val> leaf_node;
3209 typedef cc::ellen_bintree::internal_node< key_type, leaf_node > internal_node;
3210 typedef cc::ellen_bintree::update_desc< leaf_node, internal_node > update_desc;
3213 typedef cc::ellen_bintree::node<rcu_gpb, key_val> leaf_node;
3214 typedef cc::ellen_bintree::internal_node< key_type, leaf_node > internal_node;
3215 typedef cc::ellen_bintree::update_desc< leaf_node, internal_node > update_desc;
3218 typedef cc::ellen_bintree::node<rcu_gpt, key_val> leaf_node;
3219 typedef cc::ellen_bintree::internal_node< key_type, leaf_node > internal_node;
3220 typedef cc::ellen_bintree::update_desc< leaf_node, internal_node > update_desc;
3222 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
3224 typedef cc::ellen_bintree::node<rcu_shb, key_val> leaf_node;
3225 typedef cc::ellen_bintree::internal_node< key_type, leaf_node > internal_node;
3226 typedef cc::ellen_bintree::update_desc< leaf_node, internal_node > update_desc;
3229 typedef cc::ellen_bintree::node<rcu_sht, key_val> leaf_node;
3230 typedef cc::ellen_bintree::internal_node< key_type, leaf_node > internal_node;
3231 typedef cc::ellen_bintree::update_desc< leaf_node, internal_node > update_desc;
3237 // ***************************************************************************
3238 // EllenBinTreeSet - HP
3240 class traits_EllenBinTreeSet_hp: public cc::ellen_bintree::make_set_traits<
3241 cc::ellen_bintree::key_extractor< typename ellen_bintree_props::key_extractor >
3242 ,co::less< typename ellen_bintree_props::less >
3243 ,cc::ellen_bintree::update_desc_allocator<
3244 cds::memory::pool_allocator< typename ellen_bintree_props::hp_gc::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
3246 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
3249 typedef cc::EllenBinTreeSet< cds::gc::HP, key_type, key_val, traits_EllenBinTreeSet_hp > EllenBinTreeSet_hp;
3251 class traits_EllenBinTreeSet_hp_stat: public cc::ellen_bintree::make_set_traits<
3252 cc::ellen_bintree::key_extractor< typename ellen_bintree_props::key_extractor >
3253 ,co::less< typename ellen_bintree_props::less >
3254 ,cc::ellen_bintree::update_desc_allocator<
3255 cds::memory::pool_allocator< typename ellen_bintree_props::hp_gc::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
3257 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
3258 ,co::stat< cc::ellen_bintree::stat<> >
3261 typedef cc::EllenBinTreeSet< cds::gc::HP, key_type, key_val, traits_EllenBinTreeSet_hp_stat > EllenBinTreeSet_hp_stat;
3263 // ***************************************************************************
3264 // EllenBinTreeSet - DHP
3266 class traits_EllenBinTreeSet_ptb: public cc::ellen_bintree::make_set_traits<
3267 cc::ellen_bintree::key_extractor< typename ellen_bintree_props::key_extractor >
3268 ,co::less< typename ellen_bintree_props::less >
3269 ,cc::ellen_bintree::update_desc_allocator<
3270 cds::memory::pool_allocator< typename ellen_bintree_props::ptb_gc::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
3272 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
3275 typedef cc::EllenBinTreeSet< cds::gc::DHP, key_type, key_val, traits_EllenBinTreeSet_ptb > EllenBinTreeSet_ptb;
3277 class traits_EllenBinTreeSet_ptb_stat: public cc::ellen_bintree::make_set_traits<
3278 cc::ellen_bintree::key_extractor< typename ellen_bintree_props::key_extractor >
3279 ,co::less< typename ellen_bintree_props::less >
3280 ,cc::ellen_bintree::update_desc_allocator<
3281 cds::memory::pool_allocator< typename ellen_bintree_props::ptb_gc::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
3283 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
3284 ,co::stat< cc::ellen_bintree::stat<> >
3287 typedef cc::EllenBinTreeSet< cds::gc::DHP, key_type, key_val, traits_EllenBinTreeSet_ptb_stat > EllenBinTreeSet_ptb_stat;
3290 // ***************************************************************************
3291 // EllenBinTreeSet - RCU
3293 class traits_EllenBinTreeSet_rcu_gpi: public cc::ellen_bintree::make_set_traits<
3294 cc::ellen_bintree::key_extractor< typename ellen_bintree_props::key_extractor >
3295 ,co::less< typename ellen_bintree_props::less >
3296 ,cc::ellen_bintree::update_desc_allocator<
3297 cds::memory::pool_allocator< typename ellen_bintree_props::gpi::update_desc, ellen_bintree_pool::bounded_update_desc_pool_accessor >
3299 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
3302 typedef cc::EllenBinTreeSet< rcu_gpi, key_type, key_val, traits_EllenBinTreeSet_rcu_gpi > EllenBinTreeSet_rcu_gpi;
3304 class traits_EllenBinTreeSet_rcu_gpi_stat: public cc::ellen_bintree::make_set_traits<
3305 cc::ellen_bintree::key_extractor< typename ellen_bintree_props::key_extractor >
3306 ,co::less< typename ellen_bintree_props::less >
3307 ,cc::ellen_bintree::update_desc_allocator<
3308 cds::memory::pool_allocator< typename ellen_bintree_props::gpi::update_desc, ellen_bintree_pool::bounded_update_desc_pool_accessor >
3310 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
3311 ,co::stat< cc::ellen_bintree::stat<> >
3314 typedef cc::EllenBinTreeSet< rcu_gpi, key_type, key_val, traits_EllenBinTreeSet_rcu_gpi_stat > EllenBinTreeSet_rcu_gpi_stat;
3316 class traits_EllenBinTreeSet_rcu_gpb: public cc::ellen_bintree::make_set_traits<
3317 cc::ellen_bintree::key_extractor< typename ellen_bintree_props::key_extractor >
3318 ,co::less< typename ellen_bintree_props::less >
3319 ,cc::ellen_bintree::update_desc_allocator<
3320 cds::memory::pool_allocator< typename ellen_bintree_props::gpb::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
3322 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
3325 typedef cc::EllenBinTreeSet< rcu_gpb, key_type, key_val, traits_EllenBinTreeSet_rcu_gpb > EllenBinTreeSet_rcu_gpb;
3327 class traits_EllenBinTreeSet_rcu_gpb_stat: public cc::ellen_bintree::make_set_traits<
3328 cc::ellen_bintree::key_extractor< typename ellen_bintree_props::key_extractor >
3329 ,co::less< typename ellen_bintree_props::less >
3330 ,cc::ellen_bintree::update_desc_allocator<
3331 cds::memory::pool_allocator< typename ellen_bintree_props::gpb::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
3333 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
3334 ,co::stat< cc::ellen_bintree::stat<> >
3337 typedef cc::EllenBinTreeSet< rcu_gpb, key_type, key_val, traits_EllenBinTreeSet_rcu_gpb_stat > EllenBinTreeSet_rcu_gpb_stat;
3339 class traits_EllenBinTreeSet_rcu_gpt: public cc::ellen_bintree::make_set_traits<
3340 cc::ellen_bintree::key_extractor< typename ellen_bintree_props::key_extractor >
3341 ,co::less< typename ellen_bintree_props::less >
3342 ,cc::ellen_bintree::update_desc_allocator<
3343 cds::memory::pool_allocator< typename ellen_bintree_props::gpt::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
3345 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
3348 typedef cc::EllenBinTreeSet< rcu_gpt, key_type, key_val, traits_EllenBinTreeSet_rcu_gpt > EllenBinTreeSet_rcu_gpt;
3350 class traits_EllenBinTreeSet_rcu_gpt_stat: public cc::ellen_bintree::make_set_traits<
3351 cc::ellen_bintree::key_extractor< typename ellen_bintree_props::key_extractor >
3352 ,co::less< typename ellen_bintree_props::less >
3353 ,cc::ellen_bintree::update_desc_allocator<
3354 cds::memory::pool_allocator< typename ellen_bintree_props::gpt::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
3356 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
3357 ,co::stat< cc::ellen_bintree::stat<> >
3360 typedef cc::EllenBinTreeSet< rcu_gpt, key_type, key_val, traits_EllenBinTreeSet_rcu_gpt_stat > EllenBinTreeSet_rcu_gpt_stat;
3362 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
3363 class traits_EllenBinTreeSet_rcu_shb: public cc::ellen_bintree::make_set_traits<
3364 cc::ellen_bintree::key_extractor< typename ellen_bintree_props::key_extractor >
3365 ,co::less< typename ellen_bintree_props::less >
3366 ,cc::ellen_bintree::update_desc_allocator<
3367 cds::memory::pool_allocator< typename ellen_bintree_props::shb::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
3369 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
3372 typedef cc::EllenBinTreeSet< rcu_shb, key_type, key_val, traits_EllenBinTreeSet_rcu_shb > EllenBinTreeSet_rcu_shb;
3374 class traits_EllenBinTreeSet_rcu_shb_stat: public cc::ellen_bintree::make_set_traits<
3375 cc::ellen_bintree::key_extractor< typename ellen_bintree_props::key_extractor >
3376 ,co::less< typename ellen_bintree_props::less >
3377 ,cc::ellen_bintree::update_desc_allocator<
3378 cds::memory::pool_allocator< typename ellen_bintree_props::shb::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
3380 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
3381 ,co::stat< cc::ellen_bintree::stat<> >
3384 typedef cc::EllenBinTreeSet< rcu_shb, key_type, key_val, traits_EllenBinTreeSet_rcu_shb_stat > EllenBinTreeSet_rcu_shb_stat;
3386 class traits_EllenBinTreeSet_rcu_sht: public cc::ellen_bintree::make_set_traits<
3387 cc::ellen_bintree::key_extractor< typename ellen_bintree_props::key_extractor >
3388 ,co::less< typename ellen_bintree_props::less >
3389 ,cc::ellen_bintree::update_desc_allocator<
3390 cds::memory::pool_allocator< typename ellen_bintree_props::sht::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
3392 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
3395 typedef cc::EllenBinTreeSet< rcu_sht, key_type, key_val, traits_EllenBinTreeSet_rcu_sht > EllenBinTreeSet_rcu_sht;
3397 class traits_EllenBinTreeSet_rcu_sht_stat: public cc::ellen_bintree::make_set_traits<
3398 cc::ellen_bintree::key_extractor< typename ellen_bintree_props::key_extractor >
3399 ,co::less< typename ellen_bintree_props::less >
3400 ,cc::ellen_bintree::update_desc_allocator<
3401 cds::memory::pool_allocator< typename ellen_bintree_props::sht::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
3403 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
3404 ,co::stat< cc::ellen_bintree::stat<> >
3407 typedef cc::EllenBinTreeSet< rcu_sht, key_type, key_val, traits_EllenBinTreeSet_rcu_sht_stat > EllenBinTreeSet_rcu_sht_stat;
3411 // ***************************************************************************
3412 // Standard implementations
3414 typedef StdSet< key_val, less, cds::SpinLock > StdSet_Spin;
3415 typedef StdSet< key_val, less, lock::NoLock> StdSet_NoLock;
3417 typedef StdHashSet< key_val, hash, less, equal_to, cds::SpinLock > StdHashSet_Spin;
3418 typedef StdHashSet< key_val, hash, less, equal_to, lock::NoLock > StdHashSet_NoLock;
3423 // *************************************************
3425 // *************************************************
3427 template <typename Set>
3428 static inline void print_stat( Set const& s )
3431 template <typename GC, typename T, typename Traits>
3432 static inline void print_stat( cc::SkipListSet<GC, T, Traits> const& s )
3434 CPPUNIT_MSG( s.statistics() );
3437 template <typename GC, typename Key, typename T, typename Traits>
3438 static inline void print_stat( cc::EllenBinTreeSet<GC, Key, T, Traits> const& s )
3440 CPPUNIT_MSG( s.statistics() );
3443 template <typename T, typename Traits >
3444 static inline void print_stat( cc::CuckooSet< T, Traits > const& s )
3446 CPPUNIT_MSG( s.statistics() << s.mutex_policy_statistics() );
3449 template <typename V, typename... Options>
3450 static inline void print_stat( CuckooStripedSet< V, Options... > const& s )
3452 typedef CuckooStripedSet< V, Options... > set_type;
3453 print_stat( static_cast<typename set_type::cuckoo_base_class const&>(s) );
3456 template <typename V, typename... Options>
3457 static inline void print_stat( CuckooRefinableSet< V, Options... > const& s )
3459 typedef CuckooRefinableSet< V, Options... > set_type;
3460 print_stat( static_cast<typename set_type::cuckoo_base_class const&>(s) );
3465 //*******************************************************
3467 //*******************************************************
3469 template <typename Set>
3470 static inline void additional_check( Set& set )
3473 template <typename Set>
3474 static inline void additional_cleanup( Set& set )
3477 namespace ellen_bintree_check {
3478 static inline void check_stat( cds::intrusive::ellen_bintree::empty_stat const& s )
3480 // Not true for threaded RCU
3482 CPPUNIT_CHECK_CURRENT_EX( ellen_bintree_pool::internal_node_counter::m_nAlloc.get() == ellen_bintree_pool::internal_node_counter::m_nFree.get(),
3483 "m_nAlloc=" << ellen_bintree_pool::internal_node_counter::m_nAlloc.get()
3484 << ", m_nFree=" << ellen_bintree_pool::internal_node_counter::m_nFree.get()
3489 static inline void check_stat( cds::intrusive::ellen_bintree::stat<> const& stat )
3491 CPPUNIT_CHECK_CURRENT( stat.m_nInternalNodeCreated == stat.m_nInternalNodeDeleted );
3492 CPPUNIT_CHECK_CURRENT( stat.m_nUpdateDescCreated == stat.m_nUpdateDescDeleted );
3493 //CPPUNIT_CHECK_CURRENT( ellen_bintree_pool::internal_node_counter::m_nAlloc.get() == ellen_bintree_pool::internal_node_counter::m_nFree.get() );
3494 CPPUNIT_CHECK_CURRENT( ellen_bintree_pool::internal_node_counter::m_nAlloc.get() == stat.m_nInternalNodeCreated );
3495 // true if RCU is not threaded
3496 //CPPUNIT_CHECK_CURRENT( stat.m_nInternalNodeDeleted == ellen_bintree_pool::internal_node_counter::m_nFree.get() );
3498 } // namespace ellen_bintree_check
3500 template <typename GC, typename Key, typename T, typename Traits>
3501 static inline void additional_check( cc::EllenBinTreeSet<GC, Key, T, Traits>& s )
3503 GC::force_dispose();
3504 ellen_bintree_check::check_stat( s.statistics() );
3507 template <typename GC, typename Key, typename T, typename Traits>
3508 static inline void additional_cleanup( cc::EllenBinTreeSet<GC, Key, T, Traits>& s )
3510 ellen_bintree_pool::internal_node_counter::reset();
3515 #endif // ifndef _CDSUNIT_SET2_SET_TYPES_H