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 typedef cc::MichaelList< cds::gc::HP, key_val,
313 typename cc::michael_list::make_traits<
314 co::compare< compare >
316 > MichaelList_HP_cmp_stdAlloc;
318 typedef cc::MichaelList< cds::gc::HP, key_val,
319 typename cc::michael_list::make_traits<
320 co::compare< compare >
321 ,co::memory_model< co::v::sequential_consistent >
323 > MichaelList_HP_cmp_stdAlloc_seqcst;
325 typedef cc::MichaelList< cds::gc::HP, key_val,
326 typename cc::michael_list::make_traits<
327 co::compare< compare >,
328 co::allocator< memory::MichaelAllocator<int> >
330 > MichaelList_HP_cmp_michaelAlloc;
332 typedef cc::MichaelList< cds::gc::HP, key_val,
333 typename cc::michael_list::make_traits<
336 > MichaelList_HP_less_stdAlloc;
338 typedef cc::MichaelList< cds::gc::HP, key_val,
339 typename cc::michael_list::make_traits<
341 ,co::memory_model< co::v::sequential_consistent >
343 > MichaelList_HP_less_stdAlloc_seqcst;
345 typedef cc::MichaelList< cds::gc::HP, key_val,
346 typename cc::michael_list::make_traits<
348 co::allocator< memory::MichaelAllocator<int> >
350 > MichaelList_HP_less_michaelAlloc;
352 typedef cc::MichaelList< cds::gc::DHP, key_val,
353 typename cc::michael_list::make_traits<
354 co::compare< compare >
356 > MichaelList_DHP_cmp_stdAlloc;
358 typedef cc::MichaelList< cds::gc::DHP, key_val,
359 typename cc::michael_list::make_traits<
360 co::compare< compare >
361 ,co::memory_model< co::v::sequential_consistent >
363 > MichaelList_DHP_cmp_stdAlloc_seqcst;
365 typedef cc::MichaelList< cds::gc::DHP, key_val,
366 typename cc::michael_list::make_traits<
367 co::compare< compare >,
368 co::allocator< memory::MichaelAllocator<int> >
370 > MichaelList_DHP_cmp_michaelAlloc;
372 typedef cc::MichaelList< cds::gc::DHP, key_val,
373 typename cc::michael_list::make_traits<
376 > MichaelList_DHP_less_stdAlloc;
378 typedef cc::MichaelList< cds::gc::DHP, key_val,
379 typename cc::michael_list::make_traits<
381 ,co::memory_model< co::v::sequential_consistent >
383 > MichaelList_DHP_less_stdAlloc_seqcst;
385 typedef cc::MichaelList< cds::gc::DHP, key_val,
386 typename cc::michael_list::make_traits<
388 co::allocator< memory::MichaelAllocator<int> >
390 > MichaelList_DHP_less_michaelAlloc;
393 typedef cc::MichaelList< rcu_gpi, key_val,
394 typename cc::michael_list::make_traits<
395 co::compare< compare >
397 > MichaelList_RCU_GPI_cmp_stdAlloc;
399 typedef cc::MichaelList< rcu_gpi, key_val,
400 typename cc::michael_list::make_traits<
401 co::compare< compare >
402 ,co::memory_model< co::v::sequential_consistent >
404 > MichaelList_RCU_GPI_cmp_stdAlloc_seqcst;
406 typedef cc::MichaelList< rcu_gpi, key_val,
407 typename cc::michael_list::make_traits<
408 co::compare< compare >,
409 co::allocator< memory::MichaelAllocator<int> >
411 > MichaelList_RCU_GPI_cmp_michaelAlloc;
413 typedef cc::MichaelList< rcu_gpi, key_val,
414 typename cc::michael_list::make_traits<
417 > MichaelList_RCU_GPI_less_stdAlloc;
419 typedef cc::MichaelList< rcu_gpi, key_val,
420 typename cc::michael_list::make_traits<
422 ,co::memory_model< co::v::sequential_consistent >
424 > MichaelList_RCU_GPI_less_stdAlloc_seqcst;
426 typedef cc::MichaelList< rcu_gpi, key_val,
427 typename cc::michael_list::make_traits<
429 co::allocator< memory::MichaelAllocator<int> >
431 > MichaelList_RCU_GPI_less_michaelAlloc;
434 typedef cc::MichaelList< rcu_gpb, key_val,
435 typename cc::michael_list::make_traits<
436 co::compare< compare >
438 > MichaelList_RCU_GPB_cmp_stdAlloc;
440 typedef cc::MichaelList< rcu_gpb, key_val,
441 typename cc::michael_list::make_traits<
442 co::compare< compare >
443 ,co::memory_model< co::v::sequential_consistent >
445 > MichaelList_RCU_GPB_cmp_stdAlloc_seqcst;
447 typedef cc::MichaelList< rcu_gpb, key_val,
448 typename cc::michael_list::make_traits<
449 co::compare< compare >,
450 co::allocator< memory::MichaelAllocator<int> >
452 > MichaelList_RCU_GPB_cmp_michaelAlloc;
454 typedef cc::MichaelList< rcu_gpb, key_val,
455 typename cc::michael_list::make_traits<
458 > MichaelList_RCU_GPB_less_stdAlloc;
460 typedef cc::MichaelList< rcu_gpb, key_val,
461 typename cc::michael_list::make_traits<
463 ,co::memory_model< co::v::sequential_consistent >
465 > MichaelList_RCU_GPB_less_stdAlloc_seqcst;
467 typedef cc::MichaelList< rcu_gpb, key_val,
468 typename cc::michael_list::make_traits<
470 co::allocator< memory::MichaelAllocator<int> >
472 > MichaelList_RCU_GPB_less_michaelAlloc;
475 typedef cc::MichaelList< rcu_gpt, key_val,
476 typename cc::michael_list::make_traits<
477 co::compare< compare >
479 > MichaelList_RCU_GPT_cmp_stdAlloc;
481 typedef cc::MichaelList< rcu_gpt, key_val,
482 typename cc::michael_list::make_traits<
483 co::compare< compare >
484 ,co::memory_model< co::v::sequential_consistent >
486 > MichaelList_RCU_GPT_cmp_stdAlloc_seqcst;
488 typedef cc::MichaelList< rcu_gpt, key_val,
489 typename cc::michael_list::make_traits<
490 co::compare< compare >,
491 co::allocator< memory::MichaelAllocator<int> >
493 > MichaelList_RCU_GPT_cmp_michaelAlloc;
495 typedef cc::MichaelList< rcu_gpt, key_val,
496 typename cc::michael_list::make_traits<
499 > MichaelList_RCU_GPT_less_stdAlloc;
501 typedef cc::MichaelList< rcu_gpt, key_val,
502 typename cc::michael_list::make_traits<
504 ,co::memory_model< co::v::sequential_consistent >
506 > MichaelList_RCU_GPT_less_stdAlloc_seqcst;
508 typedef cc::MichaelList< rcu_gpt, key_val,
509 typename cc::michael_list::make_traits<
511 co::allocator< memory::MichaelAllocator<int> >
513 > MichaelList_RCU_GPT_less_michaelAlloc;
515 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
516 typedef cc::MichaelList< rcu_shb, key_val,
517 typename cc::michael_list::make_traits<
518 co::compare< compare >
520 > MichaelList_RCU_SHB_cmp_stdAlloc;
522 typedef cc::MichaelList< rcu_shb, key_val,
523 typename cc::michael_list::make_traits<
524 co::compare< compare >
525 ,co::memory_model< co::v::sequential_consistent >
527 > MichaelList_RCU_SHB_cmp_stdAlloc_seqcst;
529 typedef cc::MichaelList< rcu_shb, key_val,
530 typename cc::michael_list::make_traits<
531 co::compare< compare >,
532 co::allocator< memory::MichaelAllocator<int> >
534 > MichaelList_RCU_SHB_cmp_michaelAlloc;
536 typedef cc::MichaelList< rcu_shb, key_val,
537 typename cc::michael_list::make_traits<
540 > MichaelList_RCU_SHB_less_stdAlloc;
542 typedef cc::MichaelList< rcu_shb, key_val,
543 typename cc::michael_list::make_traits<
545 ,co::memory_model< co::v::sequential_consistent >
547 > MichaelList_RCU_SHB_less_stdAlloc_seqcst;
549 typedef cc::MichaelList< rcu_shb, key_val,
550 typename cc::michael_list::make_traits<
552 co::allocator< memory::MichaelAllocator<int> >
554 > MichaelList_RCU_SHB_less_michaelAlloc;
557 typedef cc::MichaelList< rcu_sht, key_val,
558 typename cc::michael_list::make_traits<
559 co::compare< compare >
561 > MichaelList_RCU_SHT_cmp_stdAlloc;
563 typedef cc::MichaelList< rcu_sht, key_val,
564 typename cc::michael_list::make_traits<
565 co::compare< compare >
566 ,co::memory_model< co::v::sequential_consistent >
568 > MichaelList_RCU_SHT_cmp_stdAlloc_seqcst;
570 typedef cc::MichaelList< rcu_sht, key_val,
571 typename cc::michael_list::make_traits<
572 co::compare< compare >,
573 co::allocator< memory::MichaelAllocator<int> >
575 > MichaelList_RCU_SHT_cmp_michaelAlloc;
577 typedef cc::MichaelList< rcu_sht, key_val,
578 typename cc::michael_list::make_traits<
581 > MichaelList_RCU_SHT_less_stdAlloc;
583 typedef cc::MichaelList< rcu_sht, key_val,
584 typename cc::michael_list::make_traits<
586 ,co::memory_model< co::v::sequential_consistent >
588 > MichaelList_RCU_SHT_less_stdAlloc_seqcst;
590 typedef cc::MichaelList< rcu_sht, key_val,
591 typename cc::michael_list::make_traits<
593 co::allocator< memory::MichaelAllocator<int> >
595 > MichaelList_RCU_SHT_less_michaelAlloc;
598 // ***************************************************************************
599 // MichaelHashSet based on MichaelList
601 typedef cc::MichaelHashSet< cds::gc::HP, MichaelList_HP_cmp_stdAlloc,
602 typename cc::michael_set::make_traits<
605 > MichaelSet_HP_cmp_stdAlloc;
607 typedef cc::MichaelHashSet< cds::gc::HP, MichaelList_HP_cmp_stdAlloc_seqcst,
608 typename cc::michael_set::make_traits<
611 > MichaelSet_HP_cmp_stdAlloc_seqcst;
613 typedef cc::MichaelHashSet< cds::gc::HP, MichaelList_HP_cmp_michaelAlloc,
614 typename cc::michael_set::make_traits<
616 co::allocator< memory::MichaelAllocator<int> >
618 > MichaelSet_HP_cmp_michaelAlloc;
620 typedef cc::MichaelHashSet< cds::gc::HP, MichaelList_HP_less_stdAlloc,
621 typename cc::michael_set::make_traits<
624 > MichaelSet_HP_less_stdAlloc;
626 typedef cc::MichaelHashSet< cds::gc::HP, MichaelList_HP_less_stdAlloc_seqcst,
627 typename cc::michael_set::make_traits<
630 > MichaelSet_HP_less_stdAlloc_seqcst;
632 typedef cc::MichaelHashSet< cds::gc::HP, MichaelList_HP_less_michaelAlloc,
633 typename cc::michael_set::make_traits<
635 co::allocator< memory::MichaelAllocator<int> >
637 > MichaelSet_HP_less_michaelAlloc;
639 typedef cc::MichaelHashSet< cds::gc::DHP, MichaelList_DHP_cmp_stdAlloc,
640 typename cc::michael_set::make_traits<
643 > MichaelSet_DHP_cmp_stdAlloc;
645 typedef cc::MichaelHashSet< cds::gc::DHP, MichaelList_DHP_cmp_stdAlloc_seqcst,
646 typename cc::michael_set::make_traits<
649 > MichaelSet_DHP_cmp_stdAlloc_seqcst;
651 typedef cc::MichaelHashSet< cds::gc::DHP, MichaelList_DHP_cmp_michaelAlloc,
652 typename cc::michael_set::make_traits<
654 co::allocator< memory::MichaelAllocator<int> >
656 > MichaelSet_DHP_cmp_michaelAlloc;
658 typedef cc::MichaelHashSet< cds::gc::DHP, MichaelList_DHP_less_stdAlloc,
659 typename cc::michael_set::make_traits<
662 > MichaelSet_DHP_less_stdAlloc;
664 typedef cc::MichaelHashSet< cds::gc::DHP, MichaelList_DHP_less_stdAlloc_seqcst,
665 typename cc::michael_set::make_traits<
668 > MichaelSet_DHP_less_stdAlloc_seqcst;
670 typedef cc::MichaelHashSet< cds::gc::DHP, MichaelList_DHP_less_michaelAlloc,
671 typename cc::michael_set::make_traits<
673 co::allocator< memory::MichaelAllocator<int> >
675 > MichaelSet_DHP_less_michaelAlloc;
677 // general_instant RCU
678 typedef cc::MichaelHashSet< rcu_gpi, MichaelList_RCU_GPI_cmp_stdAlloc,
679 typename cc::michael_set::make_traits<
682 > MichaelSet_RCU_GPI_cmp_stdAlloc;
684 typedef cc::MichaelHashSet< rcu_gpi, MichaelList_RCU_GPI_cmp_stdAlloc_seqcst,
685 typename cc::michael_set::make_traits<
688 > MichaelSet_RCU_GPI_cmp_stdAlloc_seqcst;
690 typedef cc::MichaelHashSet< rcu_gpi, MichaelList_RCU_GPI_cmp_michaelAlloc,
691 typename cc::michael_set::make_traits<
693 co::allocator< memory::MichaelAllocator<int> >
695 > MichaelSet_RCU_GPI_cmp_michaelAlloc;
697 typedef cc::MichaelHashSet< rcu_gpi, MichaelList_RCU_GPI_less_stdAlloc,
698 typename cc::michael_set::make_traits<
701 > MichaelSet_RCU_GPI_less_stdAlloc;
703 typedef cc::MichaelHashSet< rcu_gpi, MichaelList_RCU_GPI_less_stdAlloc_seqcst,
704 typename cc::michael_set::make_traits<
707 > MichaelSet_RCU_GPI_less_stdAlloc_seqcst;
709 typedef cc::MichaelHashSet< rcu_gpi, MichaelList_RCU_GPI_less_michaelAlloc,
710 typename cc::michael_set::make_traits<
712 co::allocator< memory::MichaelAllocator<int> >
714 > MichaelSet_RCU_GPI_less_michaelAlloc;
716 // general_buffered RCU
717 typedef cc::MichaelHashSet< rcu_gpb, MichaelList_RCU_GPB_cmp_stdAlloc,
718 typename cc::michael_set::make_traits<
721 > MichaelSet_RCU_GPB_cmp_stdAlloc;
723 typedef cc::MichaelHashSet< rcu_gpb, MichaelList_RCU_GPB_cmp_stdAlloc_seqcst,
724 typename cc::michael_set::make_traits<
727 > MichaelSet_RCU_GPB_cmp_stdAlloc_seqcst;
729 typedef cc::MichaelHashSet< rcu_gpb, MichaelList_RCU_GPB_cmp_michaelAlloc,
730 typename cc::michael_set::make_traits<
732 co::allocator< memory::MichaelAllocator<int> >
734 > MichaelSet_RCU_GPB_cmp_michaelAlloc;
736 typedef cc::MichaelHashSet< rcu_gpb, MichaelList_RCU_GPB_less_stdAlloc,
737 typename cc::michael_set::make_traits<
740 > MichaelSet_RCU_GPB_less_stdAlloc;
742 typedef cc::MichaelHashSet< rcu_gpb, MichaelList_RCU_GPB_less_stdAlloc_seqcst,
743 typename cc::michael_set::make_traits<
746 > MichaelSet_RCU_GPB_less_stdAlloc_seqcst;
748 typedef cc::MichaelHashSet< rcu_gpb, MichaelList_RCU_GPB_less_michaelAlloc,
749 typename cc::michael_set::make_traits<
751 co::allocator< memory::MichaelAllocator<int> >
753 > MichaelSet_RCU_GPB_less_michaelAlloc;
755 // general_threaded RCU
756 typedef cc::MichaelHashSet< rcu_gpt, MichaelList_RCU_GPT_cmp_stdAlloc,
757 typename cc::michael_set::make_traits<
760 > MichaelSet_RCU_GPT_cmp_stdAlloc;
762 typedef cc::MichaelHashSet< rcu_gpt, MichaelList_RCU_GPT_cmp_stdAlloc_seqcst,
763 typename cc::michael_set::make_traits<
766 > MichaelSet_RCU_GPT_cmp_stdAlloc_seqcst;
768 typedef cc::MichaelHashSet< rcu_gpt, MichaelList_RCU_GPT_cmp_michaelAlloc,
769 typename cc::michael_set::make_traits<
771 co::allocator< memory::MichaelAllocator<int> >
773 > MichaelSet_RCU_GPT_cmp_michaelAlloc;
775 typedef cc::MichaelHashSet< rcu_gpt, MichaelList_RCU_GPT_less_stdAlloc,
776 typename cc::michael_set::make_traits<
779 > MichaelSet_RCU_GPT_less_stdAlloc;
781 typedef cc::MichaelHashSet< rcu_gpt, MichaelList_RCU_GPT_less_stdAlloc_seqcst,
782 typename cc::michael_set::make_traits<
785 > MichaelSet_RCU_GPT_less_stdAlloc_seqcst;
787 typedef cc::MichaelHashSet< rcu_gpt, MichaelList_RCU_GPT_less_michaelAlloc,
788 typename cc::michael_set::make_traits<
790 co::allocator< memory::MichaelAllocator<int> >
792 > MichaelSet_RCU_GPT_less_michaelAlloc;
794 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
795 // signal_buffered RCU
796 typedef cc::MichaelHashSet< rcu_shb, MichaelList_RCU_SHB_cmp_stdAlloc,
797 typename cc::michael_set::make_traits<
800 > MichaelSet_RCU_SHB_cmp_stdAlloc;
802 typedef cc::MichaelHashSet< rcu_shb, MichaelList_RCU_SHB_cmp_stdAlloc_seqcst,
803 typename cc::michael_set::make_traits<
806 > MichaelSet_RCU_SHB_cmp_stdAlloc_seqcst;
808 typedef cc::MichaelHashSet< rcu_shb, MichaelList_RCU_SHB_cmp_michaelAlloc,
809 typename cc::michael_set::make_traits<
811 co::allocator< memory::MichaelAllocator<int> >
813 > MichaelSet_RCU_SHB_cmp_michaelAlloc;
815 typedef cc::MichaelHashSet< rcu_shb, MichaelList_RCU_SHB_less_stdAlloc,
816 typename cc::michael_set::make_traits<
819 > MichaelSet_RCU_SHB_less_stdAlloc;
821 typedef cc::MichaelHashSet< rcu_shb, MichaelList_RCU_SHB_less_stdAlloc_seqcst,
822 typename cc::michael_set::make_traits<
825 > MichaelSet_RCU_SHB_less_stdAlloc_seqcst;
827 typedef cc::MichaelHashSet< rcu_shb, MichaelList_RCU_SHB_less_michaelAlloc,
828 typename cc::michael_set::make_traits<
830 co::allocator< memory::MichaelAllocator<int> >
832 > MichaelSet_RCU_SHB_less_michaelAlloc;
834 // signal_threaded RCU
835 typedef cc::MichaelHashSet< rcu_sht, MichaelList_RCU_SHT_cmp_stdAlloc,
836 typename cc::michael_set::make_traits<
839 > MichaelSet_RCU_SHT_cmp_stdAlloc;
841 typedef cc::MichaelHashSet< rcu_sht, MichaelList_RCU_SHT_cmp_stdAlloc_seqcst,
842 typename cc::michael_set::make_traits<
845 > MichaelSet_RCU_SHT_cmp_stdAlloc_seqcst;
847 typedef cc::MichaelHashSet< rcu_sht, MichaelList_RCU_SHT_cmp_michaelAlloc,
848 typename cc::michael_set::make_traits<
850 co::allocator< memory::MichaelAllocator<int> >
852 > MichaelSet_RCU_SHT_cmp_michaelAlloc;
854 typedef cc::MichaelHashSet< rcu_sht, MichaelList_RCU_SHT_less_stdAlloc,
855 typename cc::michael_set::make_traits<
858 > MichaelSet_RCU_SHT_less_stdAlloc;
860 typedef cc::MichaelHashSet< rcu_sht, MichaelList_RCU_SHT_less_stdAlloc_seqcst,
861 typename cc::michael_set::make_traits<
864 > MichaelSet_RCU_SHT_less_stdAlloc_seqcst;
866 typedef cc::MichaelHashSet< rcu_sht, MichaelList_RCU_SHT_less_michaelAlloc,
867 typename cc::michael_set::make_traits<
869 co::allocator< memory::MichaelAllocator<int> >
871 > MichaelSet_RCU_SHT_less_michaelAlloc;
875 // ***************************************************************************
878 typedef cc::LazyList< cds::gc::HP, key_val,
879 typename cc::lazy_list::make_traits<
880 co::compare< compare >
882 > LazyList_HP_cmp_stdAlloc;
884 typedef cc::LazyList< cds::gc::HP, key_val,
885 typename cc::lazy_list::make_traits<
886 co::compare< compare >
887 ,co::memory_model< co::v::sequential_consistent >
889 > LazyList_HP_cmp_stdAlloc_seqcst;
891 typedef cc::LazyList< cds::gc::HP, key_val,
892 typename cc::lazy_list::make_traits<
893 co::compare< compare >,
894 co::allocator< memory::MichaelAllocator<int> >
896 > LazyList_HP_cmp_michaelAlloc;
898 typedef cc::LazyList< cds::gc::HP, key_val,
899 typename cc::lazy_list::make_traits<
902 > LazyList_HP_less_stdAlloc;
904 typedef cc::LazyList< cds::gc::HP, key_val,
905 typename cc::lazy_list::make_traits<
907 ,co::memory_model< co::v::sequential_consistent >
909 > LazyList_HP_less_stdAlloc_seqcst;
911 typedef cc::LazyList< cds::gc::HP, key_val,
912 typename cc::lazy_list::make_traits<
914 co::allocator< memory::MichaelAllocator<int> >
916 > LazyList_HP_less_michaelAlloc;
918 typedef cc::LazyList< cds::gc::DHP, key_val,
919 typename cc::lazy_list::make_traits<
920 co::compare< compare >
922 > LazyList_DHP_cmp_stdAlloc;
924 typedef cc::LazyList< cds::gc::DHP, key_val,
925 typename cc::lazy_list::make_traits<
926 co::compare< compare >
927 ,co::memory_model< co::v::sequential_consistent >
929 > LazyList_DHP_cmp_stdAlloc_seqcst;
931 typedef cc::LazyList< cds::gc::DHP, key_val,
932 typename cc::lazy_list::make_traits<
933 co::compare< compare >,
934 co::allocator< memory::MichaelAllocator<int> >
936 > LazyList_DHP_cmp_michaelAlloc;
938 typedef cc::LazyList< cds::gc::DHP, key_val,
939 typename cc::lazy_list::make_traits<
942 > LazyList_DHP_less_stdAlloc;
944 typedef cc::LazyList< cds::gc::DHP, key_val,
945 typename cc::lazy_list::make_traits<
947 ,co::memory_model< co::v::sequential_consistent >
949 > LazyList_DHP_less_stdAlloc_seqcst;
951 typedef cc::LazyList< cds::gc::DHP, key_val,
952 typename cc::lazy_list::make_traits<
954 co::allocator< memory::MichaelAllocator<int> >
956 > LazyList_DHP_less_michaelAlloc;
959 typedef cc::LazyList< rcu_gpi, key_val,
960 typename cc::lazy_list::make_traits<
961 co::compare< compare >
963 > LazyList_RCU_GPI_cmp_stdAlloc;
965 typedef cc::LazyList< rcu_gpi, key_val,
966 typename cc::lazy_list::make_traits<
967 co::compare< compare >
968 ,co::memory_model< co::v::sequential_consistent >
970 > LazyList_RCU_GPI_cmp_stdAlloc_seqcst;
972 typedef cc::LazyList< rcu_gpi, key_val,
973 typename cc::lazy_list::make_traits<
974 co::compare< compare >,
975 co::allocator< memory::MichaelAllocator<int> >
977 > LazyList_RCU_GPI_cmp_michaelAlloc;
979 typedef cc::LazyList< rcu_gpi, key_val,
980 typename cc::lazy_list::make_traits<
983 > LazyList_RCU_GPI_less_stdAlloc;
985 typedef cc::LazyList< rcu_gpi, key_val,
986 typename cc::lazy_list::make_traits<
988 ,co::memory_model< co::v::sequential_consistent >
990 > LazyList_RCU_GPI_less_stdAlloc_seqcst;
992 typedef cc::LazyList< rcu_gpi, key_val,
993 typename cc::lazy_list::make_traits<
995 co::allocator< memory::MichaelAllocator<int> >
997 > LazyList_RCU_GPI_less_michaelAlloc;
999 typedef cc::LazyList< rcu_gpb, key_val,
1000 typename cc::lazy_list::make_traits<
1001 co::compare< compare >
1003 > LazyList_RCU_GPB_cmp_stdAlloc;
1005 typedef cc::LazyList< rcu_gpb, key_val,
1006 typename cc::lazy_list::make_traits<
1007 co::compare< compare >
1008 ,co::memory_model< co::v::sequential_consistent >
1010 > LazyList_RCU_GPB_cmp_stdAlloc_seqcst;
1012 typedef cc::LazyList< rcu_gpb, key_val,
1013 typename cc::lazy_list::make_traits<
1014 co::compare< compare >,
1015 co::allocator< memory::MichaelAllocator<int> >
1017 > LazyList_RCU_GPB_cmp_michaelAlloc;
1019 typedef cc::LazyList< rcu_gpb, key_val,
1020 typename cc::lazy_list::make_traits<
1023 > LazyList_RCU_GPB_less_stdAlloc;
1025 typedef cc::LazyList< rcu_gpb, key_val,
1026 typename cc::lazy_list::make_traits<
1028 ,co::memory_model< co::v::sequential_consistent >
1030 > LazyList_RCU_GPB_less_stdAlloc_seqcst;
1032 typedef cc::LazyList< rcu_gpb, key_val,
1033 typename cc::lazy_list::make_traits<
1035 co::allocator< memory::MichaelAllocator<int> >
1037 > LazyList_RCU_GPB_less_michaelAlloc;
1040 typedef cc::LazyList< rcu_gpt, key_val,
1041 typename cc::lazy_list::make_traits<
1042 co::compare< compare >
1044 > LazyList_RCU_GPT_cmp_stdAlloc;
1046 typedef cc::LazyList< rcu_gpt, key_val,
1047 typename cc::lazy_list::make_traits<
1048 co::compare< compare >
1049 ,co::memory_model< co::v::sequential_consistent >
1051 > LazyList_RCU_GPT_cmp_stdAlloc_seqcst;
1053 typedef cc::LazyList< rcu_gpt, key_val,
1054 typename cc::lazy_list::make_traits<
1055 co::compare< compare >,
1056 co::allocator< memory::MichaelAllocator<int> >
1058 > LazyList_RCU_GPT_cmp_michaelAlloc;
1060 typedef cc::LazyList< rcu_gpt, key_val,
1061 typename cc::lazy_list::make_traits<
1064 > LazyList_RCU_GPT_less_stdAlloc;
1066 typedef cc::LazyList< rcu_gpt, key_val,
1067 typename cc::lazy_list::make_traits<
1069 ,co::memory_model< co::v::sequential_consistent >
1071 > LazyList_RCU_GPT_less_stdAlloc_seqcst;
1073 typedef cc::LazyList< rcu_gpt, key_val,
1074 typename cc::lazy_list::make_traits<
1076 co::allocator< memory::MichaelAllocator<int> >
1078 > LazyList_RCU_GPT_less_michaelAlloc;
1080 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
1081 typedef cc::LazyList< rcu_shb, key_val,
1082 typename cc::lazy_list::make_traits<
1083 co::compare< compare >
1085 > LazyList_RCU_SHB_cmp_stdAlloc;
1087 typedef cc::LazyList< rcu_shb, key_val,
1088 typename cc::lazy_list::make_traits<
1089 co::compare< compare >
1090 ,co::memory_model< co::v::sequential_consistent >
1092 > LazyList_RCU_SHB_cmp_stdAlloc_seqcst;
1094 typedef cc::LazyList< rcu_shb, key_val,
1095 typename cc::lazy_list::make_traits<
1096 co::compare< compare >,
1097 co::allocator< memory::MichaelAllocator<int> >
1099 > LazyList_RCU_SHB_cmp_michaelAlloc;
1101 typedef cc::LazyList< rcu_shb, key_val,
1102 typename cc::lazy_list::make_traits<
1105 > LazyList_RCU_SHB_less_stdAlloc;
1107 typedef cc::LazyList< rcu_shb, key_val,
1108 typename cc::lazy_list::make_traits<
1110 ,co::memory_model< co::v::sequential_consistent >
1112 > LazyList_RCU_SHB_less_stdAlloc_seqcst;
1114 typedef cc::LazyList< rcu_shb, key_val,
1115 typename cc::lazy_list::make_traits<
1117 co::allocator< memory::MichaelAllocator<int> >
1119 > LazyList_RCU_SHB_less_michaelAlloc;
1122 typedef cc::LazyList< rcu_sht, key_val,
1123 typename cc::lazy_list::make_traits<
1124 co::compare< compare >
1126 > LazyList_RCU_SHT_cmp_stdAlloc;
1128 typedef cc::LazyList< rcu_sht, key_val,
1129 typename cc::lazy_list::make_traits<
1130 co::compare< compare >
1131 ,co::memory_model< co::v::sequential_consistent >
1133 > LazyList_RCU_SHT_cmp_stdAlloc_seqcst;
1135 typedef cc::LazyList< rcu_sht, key_val,
1136 typename cc::lazy_list::make_traits<
1137 co::compare< compare >,
1138 co::allocator< memory::MichaelAllocator<int> >
1140 > LazyList_RCU_SHT_cmp_michaelAlloc;
1142 typedef cc::LazyList< rcu_sht, key_val,
1143 typename cc::lazy_list::make_traits<
1146 > LazyList_RCU_SHT_less_stdAlloc;
1148 typedef cc::LazyList< rcu_sht, key_val,
1149 typename cc::lazy_list::make_traits<
1151 ,co::memory_model< co::v::sequential_consistent >
1153 > LazyList_RCU_SHT_less_stdAlloc_seqcst;
1155 typedef cc::LazyList< rcu_sht, key_val,
1156 typename cc::lazy_list::make_traits<
1158 co::allocator< memory::MichaelAllocator<int> >
1160 > LazyList_RCU_SHT_less_michaelAlloc;
1164 // ***************************************************************************
1165 // MichaelHashSet based on LazyList
1167 typedef cc::MichaelHashSet< cds::gc::HP, LazyList_HP_cmp_stdAlloc,
1168 typename cc::michael_set::make_traits<
1171 > MichaelSet_Lazy_HP_cmp_stdAlloc;
1173 typedef cc::MichaelHashSet< cds::gc::HP, LazyList_HP_cmp_stdAlloc_seqcst,
1174 typename cc::michael_set::make_traits<
1177 > MichaelSet_Lazy_HP_cmp_stdAlloc_seqcst;
1179 typedef cc::MichaelHashSet< cds::gc::HP, LazyList_HP_cmp_michaelAlloc,
1180 typename cc::michael_set::make_traits<
1182 co::allocator< memory::MichaelAllocator<int> >
1184 > MichaelSet_Lazy_HP_cmp_michaelAlloc;
1186 typedef cc::MichaelHashSet< cds::gc::HP, LazyList_HP_less_stdAlloc,
1187 typename cc::michael_set::make_traits<
1190 > MichaelSet_Lazy_HP_less_stdAlloc;
1192 typedef cc::MichaelHashSet< cds::gc::HP, LazyList_HP_less_stdAlloc_seqcst,
1193 typename cc::michael_set::make_traits<
1196 > MichaelSet_Lazy_HP_less_stdAlloc_seqcst;
1198 typedef cc::MichaelHashSet< cds::gc::HP, LazyList_HP_less_michaelAlloc,
1199 typename cc::michael_set::make_traits<
1201 co::allocator< memory::MichaelAllocator<int> >
1203 > MichaelSet_Lazy_HP_less_michaelAlloc;
1205 typedef cc::MichaelHashSet< cds::gc::DHP, LazyList_DHP_cmp_stdAlloc,
1206 typename cc::michael_set::make_traits<
1209 > MichaelSet_Lazy_DHP_cmp_stdAlloc;
1211 typedef cc::MichaelHashSet< cds::gc::DHP, LazyList_DHP_cmp_stdAlloc_seqcst,
1212 typename cc::michael_set::make_traits<
1215 > MichaelSet_Lazy_DHP_cmp_stdAlloc_seqcst;
1217 typedef cc::MichaelHashSet< cds::gc::DHP, LazyList_DHP_cmp_michaelAlloc,
1218 typename cc::michael_set::make_traits<
1220 co::allocator< memory::MichaelAllocator<int> >
1222 > MichaelSet_Lazy_DHP_cmp_michaelAlloc;
1224 typedef cc::MichaelHashSet< cds::gc::DHP, LazyList_DHP_less_stdAlloc,
1225 typename cc::michael_set::make_traits<
1228 > MichaelSet_Lazy_DHP_less_stdAlloc;
1230 typedef cc::MichaelHashSet< cds::gc::DHP, LazyList_DHP_less_stdAlloc_seqcst,
1231 typename cc::michael_set::make_traits<
1234 > MichaelSet_Lazy_DHP_less_stdAlloc_seqcst;
1236 typedef cc::MichaelHashSet< cds::gc::DHP, LazyList_DHP_less_michaelAlloc,
1237 typename cc::michael_set::make_traits<
1239 co::allocator< memory::MichaelAllocator<int> >
1241 > MichaelSet_Lazy_DHP_less_michaelAlloc;
1244 typedef cc::MichaelHashSet< rcu_gpi, LazyList_RCU_GPI_cmp_stdAlloc,
1245 typename cc::michael_set::make_traits<
1248 > MichaelSet_Lazy_RCU_GPI_cmp_stdAlloc;
1250 typedef cc::MichaelHashSet< rcu_gpi, LazyList_RCU_GPI_cmp_stdAlloc_seqcst,
1251 typename cc::michael_set::make_traits<
1254 > MichaelSet_Lazy_RCU_GPI_cmp_stdAlloc_seqcst;
1256 typedef cc::MichaelHashSet< rcu_gpi, LazyList_RCU_GPI_cmp_michaelAlloc,
1257 typename cc::michael_set::make_traits<
1259 co::allocator< memory::MichaelAllocator<int> >
1261 > MichaelSet_Lazy_RCU_GPI_cmp_michaelAlloc;
1263 typedef cc::MichaelHashSet< rcu_gpi, LazyList_RCU_GPI_less_stdAlloc,
1264 typename cc::michael_set::make_traits<
1267 > MichaelSet_Lazy_RCU_GPI_less_stdAlloc;
1269 typedef cc::MichaelHashSet< rcu_gpi, LazyList_RCU_GPI_less_stdAlloc_seqcst,
1270 typename cc::michael_set::make_traits<
1273 > MichaelSet_Lazy_RCU_GPI_less_stdAlloc_seqcst;
1275 typedef cc::MichaelHashSet< rcu_gpi, LazyList_RCU_GPI_less_michaelAlloc,
1276 typename cc::michael_set::make_traits<
1278 co::allocator< memory::MichaelAllocator<int> >
1280 > MichaelSet_Lazy_RCU_GPI_less_michaelAlloc;
1283 typedef cc::MichaelHashSet< rcu_gpb, LazyList_RCU_GPB_cmp_stdAlloc,
1284 typename cc::michael_set::make_traits<
1287 > MichaelSet_Lazy_RCU_GPB_cmp_stdAlloc;
1289 typedef cc::MichaelHashSet< rcu_gpb, LazyList_RCU_GPB_cmp_stdAlloc_seqcst,
1290 typename cc::michael_set::make_traits<
1293 > MichaelSet_Lazy_RCU_GPB_cmp_stdAlloc_seqcst;
1295 typedef cc::MichaelHashSet< rcu_gpb, LazyList_RCU_GPB_cmp_michaelAlloc,
1296 typename cc::michael_set::make_traits<
1298 co::allocator< memory::MichaelAllocator<int> >
1300 > MichaelSet_Lazy_RCU_GPB_cmp_michaelAlloc;
1302 typedef cc::MichaelHashSet< rcu_gpb, LazyList_RCU_GPB_less_stdAlloc,
1303 typename cc::michael_set::make_traits<
1306 > MichaelSet_Lazy_RCU_GPB_less_stdAlloc;
1308 typedef cc::MichaelHashSet< rcu_gpb, LazyList_RCU_GPB_less_stdAlloc_seqcst,
1309 typename cc::michael_set::make_traits<
1312 > MichaelSet_Lazy_RCU_GPB_less_stdAlloc_seqcst;
1314 typedef cc::MichaelHashSet< rcu_gpb, LazyList_RCU_GPB_less_michaelAlloc,
1315 typename cc::michael_set::make_traits<
1317 co::allocator< memory::MichaelAllocator<int> >
1319 > MichaelSet_Lazy_RCU_GPB_less_michaelAlloc;
1322 typedef cc::MichaelHashSet< rcu_gpt, LazyList_RCU_GPT_cmp_stdAlloc,
1323 typename cc::michael_set::make_traits<
1326 > MichaelSet_Lazy_RCU_GPT_cmp_stdAlloc;
1328 typedef cc::MichaelHashSet< rcu_gpt, LazyList_RCU_GPT_cmp_stdAlloc_seqcst,
1329 typename cc::michael_set::make_traits<
1332 > MichaelSet_Lazy_RCU_GPT_cmp_stdAlloc_seqcst;
1334 typedef cc::MichaelHashSet< rcu_gpt, LazyList_RCU_GPT_cmp_michaelAlloc,
1335 typename cc::michael_set::make_traits<
1337 co::allocator< memory::MichaelAllocator<int> >
1339 > MichaelSet_Lazy_RCU_GPT_cmp_michaelAlloc;
1341 typedef cc::MichaelHashSet< rcu_gpt, LazyList_RCU_GPT_less_stdAlloc,
1342 typename cc::michael_set::make_traits<
1345 > MichaelSet_Lazy_RCU_GPT_less_stdAlloc;
1347 typedef cc::MichaelHashSet< rcu_gpt, LazyList_RCU_GPT_less_stdAlloc_seqcst,
1348 typename cc::michael_set::make_traits<
1351 > MichaelSet_Lazy_RCU_GPT_less_stdAlloc_seqcst;
1353 typedef cc::MichaelHashSet< rcu_gpt, LazyList_RCU_GPT_less_michaelAlloc,
1354 typename cc::michael_set::make_traits<
1356 co::allocator< memory::MichaelAllocator<int> >
1358 > MichaelSet_Lazy_RCU_GPT_less_michaelAlloc;
1360 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
1361 typedef cc::MichaelHashSet< rcu_shb, LazyList_RCU_SHB_cmp_stdAlloc,
1362 typename cc::michael_set::make_traits<
1365 > MichaelSet_Lazy_RCU_SHB_cmp_stdAlloc;
1367 typedef cc::MichaelHashSet< rcu_shb, LazyList_RCU_SHB_cmp_stdAlloc_seqcst,
1368 typename cc::michael_set::make_traits<
1371 > MichaelSet_Lazy_RCU_SHB_cmp_stdAlloc_seqcst;
1373 typedef cc::MichaelHashSet< rcu_shb, LazyList_RCU_SHB_cmp_michaelAlloc,
1374 typename cc::michael_set::make_traits<
1376 co::allocator< memory::MichaelAllocator<int> >
1378 > MichaelSet_Lazy_RCU_SHB_cmp_michaelAlloc;
1380 typedef cc::MichaelHashSet< rcu_shb, LazyList_RCU_SHB_less_stdAlloc,
1381 typename cc::michael_set::make_traits<
1384 > MichaelSet_Lazy_RCU_SHB_less_stdAlloc;
1386 typedef cc::MichaelHashSet< rcu_shb, LazyList_RCU_SHB_less_stdAlloc_seqcst,
1387 typename cc::michael_set::make_traits<
1390 > MichaelSet_Lazy_RCU_SHB_less_stdAlloc_seqcst;
1392 typedef cc::MichaelHashSet< rcu_shb, LazyList_RCU_SHB_less_michaelAlloc,
1393 typename cc::michael_set::make_traits<
1395 co::allocator< memory::MichaelAllocator<int> >
1397 > MichaelSet_Lazy_RCU_SHB_less_michaelAlloc;
1400 typedef cc::MichaelHashSet< rcu_sht, LazyList_RCU_SHT_cmp_stdAlloc,
1401 typename cc::michael_set::make_traits<
1404 > MichaelSet_Lazy_RCU_SHT_cmp_stdAlloc;
1406 typedef cc::MichaelHashSet< rcu_sht, LazyList_RCU_SHT_cmp_stdAlloc_seqcst,
1407 typename cc::michael_set::make_traits<
1410 > MichaelSet_Lazy_RCU_SHT_cmp_stdAlloc_seqcst;
1412 typedef cc::MichaelHashSet< rcu_sht, LazyList_RCU_SHT_cmp_michaelAlloc,
1413 typename cc::michael_set::make_traits<
1415 co::allocator< memory::MichaelAllocator<int> >
1417 > MichaelSet_Lazy_RCU_SHT_cmp_michaelAlloc;
1419 typedef cc::MichaelHashSet< rcu_sht, LazyList_RCU_SHT_less_stdAlloc,
1420 typename cc::michael_set::make_traits<
1423 > MichaelSet_Lazy_RCU_SHT_less_stdAlloc;
1425 typedef cc::MichaelHashSet< rcu_sht, LazyList_RCU_SHT_less_stdAlloc_seqcst,
1426 typename cc::michael_set::make_traits<
1429 > MichaelSet_Lazy_RCU_SHT_less_stdAlloc_seqcst;
1431 typedef cc::MichaelHashSet< rcu_sht, LazyList_RCU_SHT_less_michaelAlloc,
1432 typename cc::michael_set::make_traits<
1434 co::allocator< memory::MichaelAllocator<int> >
1436 > MichaelSet_Lazy_RCU_SHT_less_michaelAlloc;
1439 // ***************************************************************************
1440 // SplitListSet based on MichaelList
1443 typedef cc::SplitListSet< cds::gc::HP, key_val,
1444 typename cc::split_list::make_traits<
1445 cc::split_list::ordered_list<cc::michael_list_tag>
1447 ,cc::split_list::ordered_list_traits<
1448 typename cc::michael_list::make_traits<
1449 co::compare< compare >
1453 > SplitList_Michael_HP_dyn_cmp;
1455 typedef cc::SplitListSet< cds::gc::HP, key_val,
1456 typename cc::split_list::make_traits<
1457 cc::split_list::ordered_list<cc::michael_list_tag>
1459 ,co::memory_model< co::v::sequential_consistent >
1460 ,cc::split_list::ordered_list_traits<
1461 typename cc::michael_list::make_traits<
1462 co::compare< compare >
1463 ,co::memory_model< co::v::sequential_consistent >
1467 > SplitList_Michael_HP_dyn_cmp_seqcst;
1469 typedef cc::SplitListSet< cds::gc::HP, key_val,
1470 typename cc::split_list::make_traits<
1471 cc::split_list::ordered_list<cc::michael_list_tag>
1472 ,cc::split_list::dynamic_bucket_table< false >
1474 ,cc::split_list::ordered_list_traits<
1475 typename cc::michael_list::make_traits<
1476 co::compare< compare >
1480 > SplitList_Michael_HP_st_cmp;
1482 typedef cc::SplitListSet< cds::gc::HP, key_val,
1483 typename cc::split_list::make_traits<
1484 cc::split_list::ordered_list<cc::michael_list_tag>
1486 ,cc::split_list::dynamic_bucket_table< false >
1487 ,co::memory_model< co::v::sequential_consistent >
1488 ,cc::split_list::ordered_list_traits<
1489 typename cc::michael_list::make_traits<
1490 co::compare< compare >
1491 ,co::memory_model< co::v::sequential_consistent >
1495 > SplitList_Michael_HP_st_cmp_seqcst;
1498 typedef cc::SplitListSet< cds::gc::HP, key_val,
1499 typename cc::split_list::make_traits<
1500 cc::split_list::ordered_list<cc::michael_list_tag>
1502 ,cc::split_list::ordered_list_traits<
1503 typename cc::michael_list::make_traits<
1508 > SplitList_Michael_HP_dyn_less;
1510 typedef cc::SplitListSet< cds::gc::HP, key_val,
1511 typename cc::split_list::make_traits<
1512 cc::split_list::ordered_list<cc::michael_list_tag>
1514 ,co::memory_model< co::v::sequential_consistent >
1515 ,cc::split_list::ordered_list_traits<
1516 typename cc::michael_list::make_traits<
1518 ,co::memory_model< co::v::sequential_consistent >
1522 > SplitList_Michael_HP_dyn_less_seqcst;
1524 typedef cc::SplitListSet< cds::gc::HP, key_val,
1525 typename cc::split_list::make_traits<
1526 cc::split_list::ordered_list<cc::michael_list_tag>
1527 ,cc::split_list::dynamic_bucket_table< false >
1529 ,cc::split_list::ordered_list_traits<
1530 typename cc::michael_list::make_traits<
1535 > SplitList_Michael_HP_st_less;
1537 typedef cc::SplitListSet< cds::gc::HP, key_val,
1538 typename cc::split_list::make_traits<
1539 cc::split_list::ordered_list<cc::michael_list_tag>
1541 ,cc::split_list::dynamic_bucket_table< false >
1542 ,co::memory_model< co::v::sequential_consistent >
1543 ,cc::split_list::ordered_list_traits<
1544 typename cc::michael_list::make_traits<
1546 ,co::memory_model< co::v::sequential_consistent >
1550 > SplitList_Michael_HP_st_less_seqcst;
1553 typedef cc::SplitListSet< cds::gc::DHP, key_val,
1554 typename cc::split_list::make_traits<
1555 cc::split_list::ordered_list<cc::michael_list_tag>
1557 ,cc::split_list::ordered_list_traits<
1558 typename cc::michael_list::make_traits<
1559 co::compare< compare >
1563 > SplitList_Michael_DHP_dyn_cmp;
1565 typedef cc::SplitListSet< cds::gc::DHP, key_val,
1566 typename cc::split_list::make_traits<
1567 cc::split_list::ordered_list<cc::michael_list_tag>
1569 ,co::memory_model< co::v::sequential_consistent >
1570 ,cc::split_list::ordered_list_traits<
1571 typename cc::michael_list::make_traits<
1572 co::compare< compare >
1573 ,co::memory_model< co::v::sequential_consistent >
1577 > SplitList_Michael_DHP_dyn_cmp_seqcst;
1579 typedef cc::SplitListSet< cds::gc::DHP, key_val,
1580 typename cc::split_list::make_traits<
1581 cc::split_list::ordered_list<cc::michael_list_tag>
1582 ,cc::split_list::dynamic_bucket_table< false >
1584 ,cc::split_list::ordered_list_traits<
1585 typename cc::michael_list::make_traits<
1586 co::compare< compare >
1590 > SplitList_Michael_DHP_st_cmp;
1592 typedef cc::SplitListSet< cds::gc::DHP, key_val,
1593 typename cc::split_list::make_traits<
1594 cc::split_list::ordered_list<cc::michael_list_tag>
1596 ,cc::split_list::dynamic_bucket_table< false >
1597 ,co::memory_model< co::v::sequential_consistent >
1598 ,cc::split_list::ordered_list_traits<
1599 typename cc::michael_list::make_traits<
1600 co::compare< compare >
1601 ,co::memory_model< co::v::sequential_consistent >
1605 > SplitList_Michael_DHP_st_cmp_seqcst;
1608 typedef cc::SplitListSet< cds::gc::DHP, key_val,
1609 typename cc::split_list::make_traits<
1610 cc::split_list::ordered_list<cc::michael_list_tag>
1612 ,cc::split_list::ordered_list_traits<
1613 typename cc::michael_list::make_traits<
1618 > SplitList_Michael_DHP_dyn_less;
1620 typedef cc::SplitListSet< cds::gc::DHP, key_val,
1621 typename cc::split_list::make_traits<
1622 cc::split_list::ordered_list<cc::michael_list_tag>
1624 ,co::memory_model< co::v::sequential_consistent >
1625 ,cc::split_list::ordered_list_traits<
1626 typename cc::michael_list::make_traits<
1628 ,co::memory_model< co::v::sequential_consistent >
1632 > SplitList_Michael_DHP_dyn_less_seqcst;
1634 typedef cc::SplitListSet< cds::gc::DHP, key_val,
1635 typename cc::split_list::make_traits<
1636 cc::split_list::ordered_list<cc::michael_list_tag>
1637 ,cc::split_list::dynamic_bucket_table< false >
1639 ,cc::split_list::ordered_list_traits<
1640 typename cc::michael_list::make_traits<
1645 > SplitList_Michael_DHP_st_less;
1647 typedef cc::SplitListSet< cds::gc::DHP, key_val,
1648 typename cc::split_list::make_traits<
1649 cc::split_list::ordered_list<cc::michael_list_tag>
1651 ,cc::split_list::dynamic_bucket_table< false >
1652 ,co::memory_model< co::v::sequential_consistent >
1653 ,cc::split_list::ordered_list_traits<
1654 typename cc::michael_list::make_traits<
1656 ,co::memory_model< co::v::sequential_consistent >
1660 > SplitList_Michael_DHP_st_less_seqcst;
1663 typedef cc::SplitListSet< rcu_gpi, key_val,
1664 typename cc::split_list::make_traits<
1665 cc::split_list::ordered_list<cc::michael_list_tag>
1667 ,cc::split_list::ordered_list_traits<
1668 typename cc::michael_list::make_traits<
1669 co::compare< compare >
1673 > SplitList_Michael_RCU_GPI_dyn_cmp;
1675 typedef cc::SplitListSet< rcu_gpi, key_val,
1676 typename cc::split_list::make_traits<
1677 cc::split_list::ordered_list<cc::michael_list_tag>
1679 ,co::memory_model< co::v::sequential_consistent >
1680 ,cc::split_list::ordered_list_traits<
1681 typename cc::michael_list::make_traits<
1682 co::compare< compare >
1683 ,co::memory_model< co::v::sequential_consistent >
1687 > SplitList_Michael_RCU_GPI_dyn_cmp_seqcst;
1689 typedef cc::SplitListSet< rcu_gpi, key_val,
1690 typename cc::split_list::make_traits<
1691 cc::split_list::ordered_list<cc::michael_list_tag>
1692 ,cc::split_list::dynamic_bucket_table< false >
1694 ,cc::split_list::ordered_list_traits<
1695 typename cc::michael_list::make_traits<
1696 co::compare< compare >
1700 > SplitList_Michael_RCU_GPI_st_cmp;
1702 typedef cc::SplitListSet< rcu_gpi, key_val,
1703 typename cc::split_list::make_traits<
1704 cc::split_list::ordered_list<cc::michael_list_tag>
1706 ,cc::split_list::dynamic_bucket_table< false >
1707 ,co::memory_model< co::v::sequential_consistent >
1708 ,cc::split_list::ordered_list_traits<
1709 typename cc::michael_list::make_traits<
1710 co::compare< compare >
1711 ,co::memory_model< co::v::sequential_consistent >
1715 > SplitList_Michael_RCU_GPI_st_cmp_seqcst;
1718 typedef cc::SplitListSet< rcu_gpi, key_val,
1719 typename cc::split_list::make_traits<
1720 cc::split_list::ordered_list<cc::michael_list_tag>
1722 ,cc::split_list::ordered_list_traits<
1723 typename cc::michael_list::make_traits<
1728 > SplitList_Michael_RCU_GPI_dyn_less;
1730 typedef cc::SplitListSet< rcu_gpi, key_val,
1731 typename cc::split_list::make_traits<
1732 cc::split_list::ordered_list<cc::michael_list_tag>
1734 ,co::memory_model< co::v::sequential_consistent >
1735 ,cc::split_list::ordered_list_traits<
1736 typename cc::michael_list::make_traits<
1738 ,co::memory_model< co::v::sequential_consistent >
1742 > SplitList_Michael_RCU_GPI_dyn_less_seqcst;
1744 typedef cc::SplitListSet< rcu_gpi, key_val,
1745 typename cc::split_list::make_traits<
1746 cc::split_list::ordered_list<cc::michael_list_tag>
1747 ,cc::split_list::dynamic_bucket_table< false >
1749 ,cc::split_list::ordered_list_traits<
1750 typename cc::michael_list::make_traits<
1755 > SplitList_Michael_RCU_GPI_st_less;
1757 typedef cc::SplitListSet< rcu_gpi, key_val,
1758 typename cc::split_list::make_traits<
1759 cc::split_list::ordered_list<cc::michael_list_tag>
1761 ,cc::split_list::dynamic_bucket_table< false >
1762 ,co::memory_model< co::v::sequential_consistent >
1763 ,cc::split_list::ordered_list_traits<
1764 typename cc::michael_list::make_traits<
1766 ,co::memory_model< co::v::sequential_consistent >
1770 > SplitList_Michael_RCU_GPI_st_less_seqcst;
1774 typedef cc::SplitListSet< rcu_gpb, key_val,
1775 typename cc::split_list::make_traits<
1776 cc::split_list::ordered_list<cc::michael_list_tag>
1778 ,cc::split_list::ordered_list_traits<
1779 typename cc::michael_list::make_traits<
1780 co::compare< compare >
1784 > SplitList_Michael_RCU_GPB_dyn_cmp;
1786 typedef cc::SplitListSet< rcu_gpb, key_val,
1787 typename cc::split_list::make_traits<
1788 cc::split_list::ordered_list<cc::michael_list_tag>
1790 ,co::memory_model< co::v::sequential_consistent >
1791 ,cc::split_list::ordered_list_traits<
1792 typename cc::michael_list::make_traits<
1793 co::compare< compare >
1794 ,co::memory_model< co::v::sequential_consistent >
1798 > SplitList_Michael_RCU_GPB_dyn_cmp_seqcst;
1800 typedef cc::SplitListSet< rcu_gpb, key_val,
1801 typename cc::split_list::make_traits<
1802 cc::split_list::ordered_list<cc::michael_list_tag>
1803 ,cc::split_list::dynamic_bucket_table< false >
1805 ,cc::split_list::ordered_list_traits<
1806 typename cc::michael_list::make_traits<
1807 co::compare< compare >
1811 > SplitList_Michael_RCU_GPB_st_cmp;
1813 typedef cc::SplitListSet< rcu_gpb, key_val,
1814 typename cc::split_list::make_traits<
1815 cc::split_list::ordered_list<cc::michael_list_tag>
1817 ,cc::split_list::dynamic_bucket_table< false >
1818 ,co::memory_model< co::v::sequential_consistent >
1819 ,cc::split_list::ordered_list_traits<
1820 typename cc::michael_list::make_traits<
1821 co::compare< compare >
1822 ,co::memory_model< co::v::sequential_consistent >
1826 > SplitList_Michael_RCU_GPB_st_cmp_seqcst;
1829 typedef cc::SplitListSet< rcu_gpb, key_val,
1830 typename cc::split_list::make_traits<
1831 cc::split_list::ordered_list<cc::michael_list_tag>
1833 ,cc::split_list::ordered_list_traits<
1834 typename cc::michael_list::make_traits<
1839 > SplitList_Michael_RCU_GPB_dyn_less;
1841 typedef cc::SplitListSet< rcu_gpb, key_val,
1842 typename cc::split_list::make_traits<
1843 cc::split_list::ordered_list<cc::michael_list_tag>
1845 ,co::memory_model< co::v::sequential_consistent >
1846 ,cc::split_list::ordered_list_traits<
1847 typename cc::michael_list::make_traits<
1849 ,co::memory_model< co::v::sequential_consistent >
1853 > SplitList_Michael_RCU_GPB_dyn_less_seqcst;
1855 typedef cc::SplitListSet< rcu_gpb, key_val,
1856 typename cc::split_list::make_traits<
1857 cc::split_list::ordered_list<cc::michael_list_tag>
1858 ,cc::split_list::dynamic_bucket_table< false >
1860 ,cc::split_list::ordered_list_traits<
1861 typename cc::michael_list::make_traits<
1866 > SplitList_Michael_RCU_GPB_st_less;
1868 typedef cc::SplitListSet< rcu_gpb, key_val,
1869 typename cc::split_list::make_traits<
1870 cc::split_list::ordered_list<cc::michael_list_tag>
1872 ,cc::split_list::dynamic_bucket_table< false >
1873 ,co::memory_model< co::v::sequential_consistent >
1874 ,cc::split_list::ordered_list_traits<
1875 typename cc::michael_list::make_traits<
1877 ,co::memory_model< co::v::sequential_consistent >
1881 > SplitList_Michael_RCU_GPB_st_less_seqcst;
1884 typedef cc::SplitListSet< rcu_gpt, key_val,
1885 typename cc::split_list::make_traits<
1886 cc::split_list::ordered_list<cc::michael_list_tag>
1888 ,cc::split_list::ordered_list_traits<
1889 typename cc::michael_list::make_traits<
1890 co::compare< compare >
1894 > SplitList_Michael_RCU_GPT_dyn_cmp;
1896 typedef cc::SplitListSet< rcu_gpt, key_val,
1897 typename cc::split_list::make_traits<
1898 cc::split_list::ordered_list<cc::michael_list_tag>
1900 ,co::memory_model< co::v::sequential_consistent >
1901 ,cc::split_list::ordered_list_traits<
1902 typename cc::michael_list::make_traits<
1903 co::compare< compare >
1904 ,co::memory_model< co::v::sequential_consistent >
1908 > SplitList_Michael_RCU_GPT_dyn_cmp_seqcst;
1910 typedef cc::SplitListSet< rcu_gpt, key_val,
1911 typename cc::split_list::make_traits<
1912 cc::split_list::ordered_list<cc::michael_list_tag>
1913 ,cc::split_list::dynamic_bucket_table< false >
1915 ,cc::split_list::ordered_list_traits<
1916 typename cc::michael_list::make_traits<
1917 co::compare< compare >
1921 > SplitList_Michael_RCU_GPT_st_cmp;
1923 typedef cc::SplitListSet< rcu_gpt, key_val,
1924 typename cc::split_list::make_traits<
1925 cc::split_list::ordered_list<cc::michael_list_tag>
1927 ,cc::split_list::dynamic_bucket_table< false >
1928 ,co::memory_model< co::v::sequential_consistent >
1929 ,cc::split_list::ordered_list_traits<
1930 typename cc::michael_list::make_traits<
1931 co::compare< compare >
1932 ,co::memory_model< co::v::sequential_consistent >
1936 > SplitList_Michael_RCU_GPT_st_cmp_seqcst;
1939 typedef cc::SplitListSet< rcu_gpt, key_val,
1940 typename cc::split_list::make_traits<
1941 cc::split_list::ordered_list<cc::michael_list_tag>
1943 ,cc::split_list::ordered_list_traits<
1944 typename cc::michael_list::make_traits<
1949 > SplitList_Michael_RCU_GPT_dyn_less;
1951 typedef cc::SplitListSet< rcu_gpt, key_val,
1952 typename cc::split_list::make_traits<
1953 cc::split_list::ordered_list<cc::michael_list_tag>
1955 ,co::memory_model< co::v::sequential_consistent >
1956 ,cc::split_list::ordered_list_traits<
1957 typename cc::michael_list::make_traits<
1959 ,co::memory_model< co::v::sequential_consistent >
1963 > SplitList_Michael_RCU_GPT_dyn_less_seqcst;
1965 typedef cc::SplitListSet< rcu_gpt, key_val,
1966 typename cc::split_list::make_traits<
1967 cc::split_list::ordered_list<cc::michael_list_tag>
1968 ,cc::split_list::dynamic_bucket_table< false >
1970 ,cc::split_list::ordered_list_traits<
1971 typename cc::michael_list::make_traits<
1976 > SplitList_Michael_RCU_GPT_st_less;
1978 typedef cc::SplitListSet< rcu_gpt, key_val,
1979 typename cc::split_list::make_traits<
1980 cc::split_list::ordered_list<cc::michael_list_tag>
1982 ,cc::split_list::dynamic_bucket_table< false >
1983 ,co::memory_model< co::v::sequential_consistent >
1984 ,cc::split_list::ordered_list_traits<
1985 typename cc::michael_list::make_traits<
1987 ,co::memory_model< co::v::sequential_consistent >
1991 > SplitList_Michael_RCU_GPT_st_less_seqcst;
1993 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
1994 typedef cc::SplitListSet< rcu_shb, key_val,
1995 typename cc::split_list::make_traits<
1996 cc::split_list::ordered_list<cc::michael_list_tag>
1998 ,cc::split_list::ordered_list_traits<
1999 typename cc::michael_list::make_traits<
2000 co::compare< compare >
2004 > SplitList_Michael_RCU_SHB_dyn_cmp;
2006 typedef cc::SplitListSet< rcu_shb, key_val,
2007 typename cc::split_list::make_traits<
2008 cc::split_list::ordered_list<cc::michael_list_tag>
2010 ,co::memory_model< co::v::sequential_consistent >
2011 ,cc::split_list::ordered_list_traits<
2012 typename cc::michael_list::make_traits<
2013 co::compare< compare >
2014 ,co::memory_model< co::v::sequential_consistent >
2018 > SplitList_Michael_RCU_SHB_dyn_cmp_seqcst;
2020 typedef cc::SplitListSet< rcu_shb, key_val,
2021 typename cc::split_list::make_traits<
2022 cc::split_list::ordered_list<cc::michael_list_tag>
2023 ,cc::split_list::dynamic_bucket_table< false >
2025 ,cc::split_list::ordered_list_traits<
2026 typename cc::michael_list::make_traits<
2027 co::compare< compare >
2031 > SplitList_Michael_RCU_SHB_st_cmp;
2033 typedef cc::SplitListSet< rcu_shb, key_val,
2034 typename cc::split_list::make_traits<
2035 cc::split_list::ordered_list<cc::michael_list_tag>
2037 ,cc::split_list::dynamic_bucket_table< false >
2038 ,co::memory_model< co::v::sequential_consistent >
2039 ,cc::split_list::ordered_list_traits<
2040 typename cc::michael_list::make_traits<
2041 co::compare< compare >
2042 ,co::memory_model< co::v::sequential_consistent >
2046 > SplitList_Michael_RCU_SHB_st_cmp_seqcst;
2049 typedef cc::SplitListSet< rcu_shb, key_val,
2050 typename cc::split_list::make_traits<
2051 cc::split_list::ordered_list<cc::michael_list_tag>
2053 ,cc::split_list::ordered_list_traits<
2054 typename cc::michael_list::make_traits<
2059 > SplitList_Michael_RCU_SHB_dyn_less;
2061 typedef cc::SplitListSet< rcu_shb, key_val,
2062 typename cc::split_list::make_traits<
2063 cc::split_list::ordered_list<cc::michael_list_tag>
2065 ,co::memory_model< co::v::sequential_consistent >
2066 ,cc::split_list::ordered_list_traits<
2067 typename cc::michael_list::make_traits<
2069 ,co::memory_model< co::v::sequential_consistent >
2073 > SplitList_Michael_RCU_SHB_dyn_less_seqcst;
2075 typedef cc::SplitListSet< rcu_shb, key_val,
2076 typename cc::split_list::make_traits<
2077 cc::split_list::ordered_list<cc::michael_list_tag>
2078 ,cc::split_list::dynamic_bucket_table< false >
2080 ,cc::split_list::ordered_list_traits<
2081 typename cc::michael_list::make_traits<
2086 > SplitList_Michael_RCU_SHB_st_less;
2088 typedef cc::SplitListSet< rcu_shb, key_val,
2089 typename cc::split_list::make_traits<
2090 cc::split_list::ordered_list<cc::michael_list_tag>
2092 ,cc::split_list::dynamic_bucket_table< false >
2093 ,co::memory_model< co::v::sequential_consistent >
2094 ,cc::split_list::ordered_list_traits<
2095 typename cc::michael_list::make_traits<
2097 ,co::memory_model< co::v::sequential_consistent >
2101 > SplitList_Michael_RCU_SHB_st_less_seqcst;
2104 typedef cc::SplitListSet< rcu_sht, key_val,
2105 typename cc::split_list::make_traits<
2106 cc::split_list::ordered_list<cc::michael_list_tag>
2108 ,cc::split_list::ordered_list_traits<
2109 typename cc::michael_list::make_traits<
2110 co::compare< compare >
2114 > SplitList_Michael_RCU_SHT_dyn_cmp;
2116 typedef cc::SplitListSet< rcu_sht, key_val,
2117 typename cc::split_list::make_traits<
2118 cc::split_list::ordered_list<cc::michael_list_tag>
2120 ,co::memory_model< co::v::sequential_consistent >
2121 ,cc::split_list::ordered_list_traits<
2122 typename cc::michael_list::make_traits<
2123 co::compare< compare >
2124 ,co::memory_model< co::v::sequential_consistent >
2128 > SplitList_Michael_RCU_SHT_dyn_cmp_seqcst;
2130 typedef cc::SplitListSet< rcu_sht, key_val,
2131 typename cc::split_list::make_traits<
2132 cc::split_list::ordered_list<cc::michael_list_tag>
2133 ,cc::split_list::dynamic_bucket_table< false >
2135 ,cc::split_list::ordered_list_traits<
2136 typename cc::michael_list::make_traits<
2137 co::compare< compare >
2141 > SplitList_Michael_RCU_SHT_st_cmp;
2143 typedef cc::SplitListSet< rcu_sht, key_val,
2144 typename cc::split_list::make_traits<
2145 cc::split_list::ordered_list<cc::michael_list_tag>
2147 ,cc::split_list::dynamic_bucket_table< false >
2148 ,co::memory_model< co::v::sequential_consistent >
2149 ,cc::split_list::ordered_list_traits<
2150 typename cc::michael_list::make_traits<
2151 co::compare< compare >
2152 ,co::memory_model< co::v::sequential_consistent >
2156 > SplitList_Michael_RCU_SHT_st_cmp_seqcst;
2159 typedef cc::SplitListSet< rcu_sht, key_val,
2160 typename cc::split_list::make_traits<
2161 cc::split_list::ordered_list<cc::michael_list_tag>
2163 ,cc::split_list::ordered_list_traits<
2164 typename cc::michael_list::make_traits<
2169 > SplitList_Michael_RCU_SHT_dyn_less;
2171 typedef cc::SplitListSet< rcu_sht, key_val,
2172 typename cc::split_list::make_traits<
2173 cc::split_list::ordered_list<cc::michael_list_tag>
2175 ,co::memory_model< co::v::sequential_consistent >
2176 ,cc::split_list::ordered_list_traits<
2177 typename cc::michael_list::make_traits<
2179 ,co::memory_model< co::v::sequential_consistent >
2183 > SplitList_Michael_RCU_SHT_dyn_less_seqcst;
2185 typedef cc::SplitListSet< rcu_sht, key_val,
2186 typename cc::split_list::make_traits<
2187 cc::split_list::ordered_list<cc::michael_list_tag>
2188 ,cc::split_list::dynamic_bucket_table< false >
2190 ,cc::split_list::ordered_list_traits<
2191 typename cc::michael_list::make_traits<
2196 > SplitList_Michael_RCU_SHT_st_less;
2198 typedef cc::SplitListSet< rcu_sht, key_val,
2199 typename cc::split_list::make_traits<
2200 cc::split_list::ordered_list<cc::michael_list_tag>
2202 ,cc::split_list::dynamic_bucket_table< false >
2203 ,co::memory_model< co::v::sequential_consistent >
2204 ,cc::split_list::ordered_list_traits<
2205 typename cc::michael_list::make_traits<
2207 ,co::memory_model< co::v::sequential_consistent >
2211 > SplitList_Michael_RCU_SHT_st_less_seqcst;
2214 // ***************************************************************************
2215 // SplitListSet based on LazyList
2218 typedef cc::SplitListSet< cds::gc::HP, key_val,
2219 typename cc::split_list::make_traits<
2220 cc::split_list::ordered_list<cc::lazy_list_tag>
2222 ,cc::split_list::ordered_list_traits<
2223 typename cc::lazy_list::make_traits<
2224 co::compare< compare >
2228 > SplitList_Lazy_HP_dyn_cmp;
2230 typedef cc::SplitListSet< cds::gc::HP, key_val,
2231 typename cc::split_list::make_traits<
2232 cc::split_list::ordered_list<cc::lazy_list_tag>
2234 ,co::memory_model< co::v::sequential_consistent >
2235 ,cc::split_list::ordered_list_traits<
2236 typename cc::lazy_list::make_traits<
2237 co::compare< compare >
2238 ,co::memory_model< co::v::sequential_consistent >
2242 > SplitList_Lazy_HP_dyn_cmp_seqcst;
2244 typedef cc::SplitListSet< cds::gc::HP, key_val,
2245 typename cc::split_list::make_traits<
2246 cc::split_list::ordered_list<cc::lazy_list_tag>
2247 ,cc::split_list::dynamic_bucket_table< false >
2249 ,cc::split_list::ordered_list_traits<
2250 typename cc::lazy_list::make_traits<
2251 co::compare< compare >
2255 > SplitList_Lazy_HP_st_cmp;
2257 typedef cc::SplitListSet< cds::gc::HP, key_val,
2258 typename cc::split_list::make_traits<
2259 cc::split_list::ordered_list<cc::lazy_list_tag>
2261 ,cc::split_list::dynamic_bucket_table< false >
2262 ,co::memory_model< co::v::sequential_consistent >
2263 ,cc::split_list::ordered_list_traits<
2264 typename cc::lazy_list::make_traits<
2265 co::compare< compare >
2266 ,co::memory_model< co::v::sequential_consistent >
2270 > SplitList_Lazy_HP_st_cmp_seqcst;
2274 typedef cc::SplitListSet< cds::gc::HP, key_val,
2275 typename cc::split_list::make_traits<
2276 cc::split_list::ordered_list<cc::lazy_list_tag>
2278 ,cc::split_list::ordered_list_traits<
2279 typename cc::lazy_list::make_traits<
2284 > SplitList_Lazy_HP_dyn_less;
2286 typedef cc::SplitListSet< cds::gc::HP, key_val,
2287 typename cc::split_list::make_traits<
2288 cc::split_list::ordered_list<cc::lazy_list_tag>
2290 ,co::memory_model< co::v::sequential_consistent >
2291 ,cc::split_list::ordered_list_traits<
2292 typename cc::lazy_list::make_traits<
2294 ,co::memory_model< co::v::sequential_consistent >
2298 > SplitList_Lazy_HP_dyn_less_seqcst;
2300 typedef cc::SplitListSet< cds::gc::HP, key_val,
2301 typename cc::split_list::make_traits<
2302 cc::split_list::ordered_list<cc::lazy_list_tag>
2303 ,cc::split_list::dynamic_bucket_table< false >
2305 ,cc::split_list::ordered_list_traits<
2306 typename cc::lazy_list::make_traits<
2311 > SplitList_Lazy_HP_st_less;
2313 typedef cc::SplitListSet< cds::gc::HP, key_val,
2314 typename cc::split_list::make_traits<
2315 cc::split_list::ordered_list<cc::lazy_list_tag>
2317 ,cc::split_list::dynamic_bucket_table< false >
2318 ,co::memory_model< co::v::sequential_consistent >
2319 ,cc::split_list::ordered_list_traits<
2320 typename cc::lazy_list::make_traits<
2322 ,co::memory_model< co::v::sequential_consistent >
2326 > SplitList_Lazy_HP_st_less_seqcst;
2329 typedef cc::SplitListSet< cds::gc::DHP, key_val,
2330 typename cc::split_list::make_traits<
2331 cc::split_list::ordered_list<cc::lazy_list_tag>
2333 ,cc::split_list::ordered_list_traits<
2334 typename cc::lazy_list::make_traits<
2335 co::compare< compare >
2339 > SplitList_Lazy_DHP_dyn_cmp;
2341 typedef cc::SplitListSet< cds::gc::DHP, key_val,
2342 typename cc::split_list::make_traits<
2343 cc::split_list::ordered_list<cc::lazy_list_tag>
2345 ,co::memory_model< co::v::sequential_consistent >
2346 ,cc::split_list::ordered_list_traits<
2347 typename cc::lazy_list::make_traits<
2348 co::compare< compare >
2349 ,co::memory_model< co::v::sequential_consistent >
2353 > SplitList_Lazy_DHP_dyn_cmp_seqcst;
2355 typedef cc::SplitListSet< cds::gc::DHP, key_val,
2356 typename cc::split_list::make_traits<
2357 cc::split_list::ordered_list<cc::lazy_list_tag>
2358 ,cc::split_list::dynamic_bucket_table< false >
2360 ,cc::split_list::ordered_list_traits<
2361 typename cc::lazy_list::make_traits<
2362 co::compare< compare >
2366 > SplitList_Lazy_DHP_st_cmp;
2368 typedef cc::SplitListSet< cds::gc::DHP, key_val,
2369 typename cc::split_list::make_traits<
2370 cc::split_list::ordered_list<cc::lazy_list_tag>
2372 ,cc::split_list::dynamic_bucket_table< false >
2373 ,co::memory_model< co::v::sequential_consistent >
2374 ,cc::split_list::ordered_list_traits<
2375 typename cc::lazy_list::make_traits<
2376 co::compare< compare >
2377 ,co::memory_model< co::v::sequential_consistent >
2381 > SplitList_Lazy_DHP_st_cmp_seqcst;
2384 typedef cc::SplitListSet< cds::gc::DHP, key_val,
2385 typename cc::split_list::make_traits<
2386 cc::split_list::ordered_list<cc::lazy_list_tag>
2388 ,cc::split_list::ordered_list_traits<
2389 typename cc::lazy_list::make_traits<
2394 > SplitList_Lazy_DHP_dyn_less;
2396 typedef cc::SplitListSet< cds::gc::DHP, key_val,
2397 typename cc::split_list::make_traits<
2398 cc::split_list::ordered_list<cc::lazy_list_tag>
2400 ,co::memory_model< co::v::sequential_consistent >
2401 ,cc::split_list::ordered_list_traits<
2402 typename cc::lazy_list::make_traits<
2404 ,co::memory_model< co::v::sequential_consistent >
2408 > SplitList_Lazy_DHP_dyn_less_seqcst;
2410 typedef cc::SplitListSet< cds::gc::DHP, key_val,
2411 typename cc::split_list::make_traits<
2412 cc::split_list::ordered_list<cc::lazy_list_tag>
2413 ,cc::split_list::dynamic_bucket_table< false >
2415 ,cc::split_list::ordered_list_traits<
2416 typename cc::lazy_list::make_traits<
2421 > SplitList_Lazy_DHP_st_less;
2423 typedef cc::SplitListSet< cds::gc::DHP, key_val,
2424 typename cc::split_list::make_traits<
2425 cc::split_list::ordered_list<cc::lazy_list_tag>
2427 ,cc::split_list::dynamic_bucket_table< false >
2428 ,co::memory_model< co::v::sequential_consistent >
2429 ,cc::split_list::ordered_list_traits<
2430 typename cc::lazy_list::make_traits<
2432 ,co::memory_model< co::v::sequential_consistent >
2436 > SplitList_Lazy_DHP_st_less_seqcst;
2440 typedef cc::SplitListSet< rcu_gpi, key_val,
2441 typename cc::split_list::make_traits<
2442 cc::split_list::ordered_list<cc::lazy_list_tag>
2444 ,cc::split_list::ordered_list_traits<
2445 typename cc::lazy_list::make_traits<
2446 co::compare< compare >
2450 > SplitList_Lazy_RCU_GPI_dyn_cmp;
2452 typedef cc::SplitListSet< rcu_gpi, key_val,
2453 typename cc::split_list::make_traits<
2454 cc::split_list::ordered_list<cc::lazy_list_tag>
2456 ,co::memory_model< co::v::sequential_consistent >
2457 ,cc::split_list::ordered_list_traits<
2458 typename cc::lazy_list::make_traits<
2459 co::compare< compare >
2460 ,co::memory_model< co::v::sequential_consistent >
2464 > SplitList_Lazy_RCU_GPI_dyn_cmp_seqcst;
2466 typedef cc::SplitListSet< rcu_gpi, key_val,
2467 typename cc::split_list::make_traits<
2468 cc::split_list::ordered_list<cc::lazy_list_tag>
2469 ,cc::split_list::dynamic_bucket_table< false >
2471 ,cc::split_list::ordered_list_traits<
2472 typename cc::lazy_list::make_traits<
2473 co::compare< compare >
2477 > SplitList_Lazy_RCU_GPI_st_cmp;
2479 typedef cc::SplitListSet< rcu_gpi, key_val,
2480 typename cc::split_list::make_traits<
2481 cc::split_list::ordered_list<cc::lazy_list_tag>
2483 ,cc::split_list::dynamic_bucket_table< false >
2484 ,co::memory_model< co::v::sequential_consistent >
2485 ,cc::split_list::ordered_list_traits<
2486 typename cc::lazy_list::make_traits<
2487 co::compare< compare >
2488 ,co::memory_model< co::v::sequential_consistent >
2492 > SplitList_Lazy_RCU_GPI_st_cmp_seqcst;
2495 typedef cc::SplitListSet< rcu_gpi, key_val,
2496 typename cc::split_list::make_traits<
2497 cc::split_list::ordered_list<cc::lazy_list_tag>
2499 ,cc::split_list::ordered_list_traits<
2500 typename cc::lazy_list::make_traits<
2505 > SplitList_Lazy_RCU_GPI_dyn_less;
2507 typedef cc::SplitListSet< rcu_gpi, key_val,
2508 typename cc::split_list::make_traits<
2509 cc::split_list::ordered_list<cc::lazy_list_tag>
2511 ,co::memory_model< co::v::sequential_consistent >
2512 ,cc::split_list::ordered_list_traits<
2513 typename cc::lazy_list::make_traits<
2515 ,co::memory_model< co::v::sequential_consistent >
2519 > SplitList_Lazy_RCU_GPI_dyn_less_seqcst;
2521 typedef cc::SplitListSet< rcu_gpi, key_val,
2522 typename cc::split_list::make_traits<
2523 cc::split_list::ordered_list<cc::lazy_list_tag>
2524 ,cc::split_list::dynamic_bucket_table< false >
2526 ,cc::split_list::ordered_list_traits<
2527 typename cc::lazy_list::make_traits<
2532 > SplitList_Lazy_RCU_GPI_st_less;
2534 typedef cc::SplitListSet< rcu_gpi, key_val,
2535 typename cc::split_list::make_traits<
2536 cc::split_list::ordered_list<cc::lazy_list_tag>
2538 ,cc::split_list::dynamic_bucket_table< false >
2539 ,co::memory_model< co::v::sequential_consistent >
2540 ,cc::split_list::ordered_list_traits<
2541 typename cc::lazy_list::make_traits<
2543 ,co::memory_model< co::v::sequential_consistent >
2547 > SplitList_Lazy_RCU_GPI_st_less_seqcst;
2550 typedef cc::SplitListSet< rcu_gpb, key_val,
2551 typename cc::split_list::make_traits<
2552 cc::split_list::ordered_list<cc::lazy_list_tag>
2554 ,cc::split_list::ordered_list_traits<
2555 typename cc::lazy_list::make_traits<
2556 co::compare< compare >
2560 > SplitList_Lazy_RCU_GPB_dyn_cmp;
2562 typedef cc::SplitListSet< rcu_gpb, key_val,
2563 typename cc::split_list::make_traits<
2564 cc::split_list::ordered_list<cc::lazy_list_tag>
2566 ,co::memory_model< co::v::sequential_consistent >
2567 ,cc::split_list::ordered_list_traits<
2568 typename cc::lazy_list::make_traits<
2569 co::compare< compare >
2570 ,co::memory_model< co::v::sequential_consistent >
2574 > SplitList_Lazy_RCU_GPB_dyn_cmp_seqcst;
2576 typedef cc::SplitListSet< rcu_gpb, key_val,
2577 typename cc::split_list::make_traits<
2578 cc::split_list::ordered_list<cc::lazy_list_tag>
2579 ,cc::split_list::dynamic_bucket_table< false >
2581 ,cc::split_list::ordered_list_traits<
2582 typename cc::lazy_list::make_traits<
2583 co::compare< compare >
2587 > SplitList_Lazy_RCU_GPB_st_cmp;
2589 typedef cc::SplitListSet< rcu_gpb, key_val,
2590 typename cc::split_list::make_traits<
2591 cc::split_list::ordered_list<cc::lazy_list_tag>
2593 ,cc::split_list::dynamic_bucket_table< false >
2594 ,co::memory_model< co::v::sequential_consistent >
2595 ,cc::split_list::ordered_list_traits<
2596 typename cc::lazy_list::make_traits<
2597 co::compare< compare >
2598 ,co::memory_model< co::v::sequential_consistent >
2602 > SplitList_Lazy_RCU_GPB_st_cmp_seqcst;
2605 typedef cc::SplitListSet< rcu_gpb, key_val,
2606 typename cc::split_list::make_traits<
2607 cc::split_list::ordered_list<cc::lazy_list_tag>
2609 ,cc::split_list::ordered_list_traits<
2610 typename cc::lazy_list::make_traits<
2615 > SplitList_Lazy_RCU_GPB_dyn_less;
2617 typedef cc::SplitListSet< rcu_gpb, key_val,
2618 typename cc::split_list::make_traits<
2619 cc::split_list::ordered_list<cc::lazy_list_tag>
2621 ,co::memory_model< co::v::sequential_consistent >
2622 ,cc::split_list::ordered_list_traits<
2623 typename cc::lazy_list::make_traits<
2625 ,co::memory_model< co::v::sequential_consistent >
2629 > SplitList_Lazy_RCU_GPB_dyn_less_seqcst;
2631 typedef cc::SplitListSet< rcu_gpb, key_val,
2632 typename cc::split_list::make_traits<
2633 cc::split_list::ordered_list<cc::lazy_list_tag>
2634 ,cc::split_list::dynamic_bucket_table< false >
2636 ,cc::split_list::ordered_list_traits<
2637 typename cc::lazy_list::make_traits<
2642 > SplitList_Lazy_RCU_GPB_st_less;
2644 typedef cc::SplitListSet< rcu_gpb, key_val,
2645 typename cc::split_list::make_traits<
2646 cc::split_list::ordered_list<cc::lazy_list_tag>
2648 ,cc::split_list::dynamic_bucket_table< false >
2649 ,co::memory_model< co::v::sequential_consistent >
2650 ,cc::split_list::ordered_list_traits<
2651 typename cc::lazy_list::make_traits<
2653 ,co::memory_model< co::v::sequential_consistent >
2657 > SplitList_Lazy_RCU_GPB_st_less_seqcst;
2660 typedef cc::SplitListSet< rcu_gpt, key_val,
2661 typename cc::split_list::make_traits<
2662 cc::split_list::ordered_list<cc::lazy_list_tag>
2664 ,cc::split_list::ordered_list_traits<
2665 typename cc::lazy_list::make_traits<
2666 co::compare< compare >
2670 > SplitList_Lazy_RCU_GPT_dyn_cmp;
2672 typedef cc::SplitListSet< rcu_gpt, key_val,
2673 typename cc::split_list::make_traits<
2674 cc::split_list::ordered_list<cc::lazy_list_tag>
2676 ,co::memory_model< co::v::sequential_consistent >
2677 ,cc::split_list::ordered_list_traits<
2678 typename cc::lazy_list::make_traits<
2679 co::compare< compare >
2680 ,co::memory_model< co::v::sequential_consistent >
2684 > SplitList_Lazy_RCU_GPT_dyn_cmp_seqcst;
2686 typedef cc::SplitListSet< rcu_gpt, key_val,
2687 typename cc::split_list::make_traits<
2688 cc::split_list::ordered_list<cc::lazy_list_tag>
2689 ,cc::split_list::dynamic_bucket_table< false >
2691 ,cc::split_list::ordered_list_traits<
2692 typename cc::lazy_list::make_traits<
2693 co::compare< compare >
2697 > SplitList_Lazy_RCU_GPT_st_cmp;
2699 typedef cc::SplitListSet< rcu_gpt, key_val,
2700 typename cc::split_list::make_traits<
2701 cc::split_list::ordered_list<cc::lazy_list_tag>
2703 ,cc::split_list::dynamic_bucket_table< false >
2704 ,co::memory_model< co::v::sequential_consistent >
2705 ,cc::split_list::ordered_list_traits<
2706 typename cc::lazy_list::make_traits<
2707 co::compare< compare >
2708 ,co::memory_model< co::v::sequential_consistent >
2712 > SplitList_Lazy_RCU_GPT_st_cmp_seqcst;
2715 typedef cc::SplitListSet< rcu_gpt, key_val,
2716 typename cc::split_list::make_traits<
2717 cc::split_list::ordered_list<cc::lazy_list_tag>
2719 ,cc::split_list::ordered_list_traits<
2720 typename cc::lazy_list::make_traits<
2725 > SplitList_Lazy_RCU_GPT_dyn_less;
2727 typedef cc::SplitListSet< rcu_gpt, key_val,
2728 typename cc::split_list::make_traits<
2729 cc::split_list::ordered_list<cc::lazy_list_tag>
2731 ,co::memory_model< co::v::sequential_consistent >
2732 ,cc::split_list::ordered_list_traits<
2733 typename cc::lazy_list::make_traits<
2735 ,co::memory_model< co::v::sequential_consistent >
2739 > SplitList_Lazy_RCU_GPT_dyn_less_seqcst;
2741 typedef cc::SplitListSet< rcu_gpt, key_val,
2742 typename cc::split_list::make_traits<
2743 cc::split_list::ordered_list<cc::lazy_list_tag>
2744 ,cc::split_list::dynamic_bucket_table< false >
2746 ,cc::split_list::ordered_list_traits<
2747 typename cc::lazy_list::make_traits<
2752 > SplitList_Lazy_RCU_GPT_st_less;
2754 typedef cc::SplitListSet< rcu_gpt, key_val,
2755 typename cc::split_list::make_traits<
2756 cc::split_list::ordered_list<cc::lazy_list_tag>
2758 ,cc::split_list::dynamic_bucket_table< false >
2759 ,co::memory_model< co::v::sequential_consistent >
2760 ,cc::split_list::ordered_list_traits<
2761 typename cc::lazy_list::make_traits<
2763 ,co::memory_model< co::v::sequential_consistent >
2767 > SplitList_Lazy_RCU_GPT_st_less_seqcst;
2769 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
2770 typedef cc::SplitListSet< rcu_shb, key_val,
2771 typename cc::split_list::make_traits<
2772 cc::split_list::ordered_list<cc::lazy_list_tag>
2774 ,cc::split_list::ordered_list_traits<
2775 typename cc::lazy_list::make_traits<
2776 co::compare< compare >
2780 > SplitList_Lazy_RCU_SHB_dyn_cmp;
2782 typedef cc::SplitListSet< rcu_shb, key_val,
2783 typename cc::split_list::make_traits<
2784 cc::split_list::ordered_list<cc::lazy_list_tag>
2786 ,co::memory_model< co::v::sequential_consistent >
2787 ,cc::split_list::ordered_list_traits<
2788 typename cc::lazy_list::make_traits<
2789 co::compare< compare >
2790 ,co::memory_model< co::v::sequential_consistent >
2794 > SplitList_Lazy_RCU_SHB_dyn_cmp_seqcst;
2796 typedef cc::SplitListSet< rcu_shb, key_val,
2797 typename cc::split_list::make_traits<
2798 cc::split_list::ordered_list<cc::lazy_list_tag>
2799 ,cc::split_list::dynamic_bucket_table< false >
2801 ,cc::split_list::ordered_list_traits<
2802 typename cc::lazy_list::make_traits<
2803 co::compare< compare >
2807 > SplitList_Lazy_RCU_SHB_st_cmp;
2809 typedef cc::SplitListSet< rcu_shb, key_val,
2810 typename cc::split_list::make_traits<
2811 cc::split_list::ordered_list<cc::lazy_list_tag>
2813 ,cc::split_list::dynamic_bucket_table< false >
2814 ,co::memory_model< co::v::sequential_consistent >
2815 ,cc::split_list::ordered_list_traits<
2816 typename cc::lazy_list::make_traits<
2817 co::compare< compare >
2818 ,co::memory_model< co::v::sequential_consistent >
2822 > SplitList_Lazy_RCU_SHB_st_cmp_seqcst;
2825 typedef cc::SplitListSet< rcu_shb, key_val,
2826 typename cc::split_list::make_traits<
2827 cc::split_list::ordered_list<cc::lazy_list_tag>
2829 ,cc::split_list::ordered_list_traits<
2830 typename cc::lazy_list::make_traits<
2835 > SplitList_Lazy_RCU_SHB_dyn_less;
2837 typedef cc::SplitListSet< rcu_shb, key_val,
2838 typename cc::split_list::make_traits<
2839 cc::split_list::ordered_list<cc::lazy_list_tag>
2841 ,co::memory_model< co::v::sequential_consistent >
2842 ,cc::split_list::ordered_list_traits<
2843 typename cc::lazy_list::make_traits<
2845 ,co::memory_model< co::v::sequential_consistent >
2849 > SplitList_Lazy_RCU_SHB_dyn_less_seqcst;
2851 typedef cc::SplitListSet< rcu_shb, key_val,
2852 typename cc::split_list::make_traits<
2853 cc::split_list::ordered_list<cc::lazy_list_tag>
2854 ,cc::split_list::dynamic_bucket_table< false >
2856 ,cc::split_list::ordered_list_traits<
2857 typename cc::lazy_list::make_traits<
2862 > SplitList_Lazy_RCU_SHB_st_less;
2864 typedef cc::SplitListSet< rcu_shb, key_val,
2865 typename cc::split_list::make_traits<
2866 cc::split_list::ordered_list<cc::lazy_list_tag>
2868 ,cc::split_list::dynamic_bucket_table< false >
2869 ,co::memory_model< co::v::sequential_consistent >
2870 ,cc::split_list::ordered_list_traits<
2871 typename cc::lazy_list::make_traits<
2873 ,co::memory_model< co::v::sequential_consistent >
2877 > SplitList_Lazy_RCU_SHB_st_less_seqcst;
2880 typedef cc::SplitListSet< rcu_sht, key_val,
2881 typename cc::split_list::make_traits<
2882 cc::split_list::ordered_list<cc::lazy_list_tag>
2884 ,cc::split_list::ordered_list_traits<
2885 typename cc::lazy_list::make_traits<
2886 co::compare< compare >
2890 > SplitList_Lazy_RCU_SHT_dyn_cmp;
2892 typedef cc::SplitListSet< rcu_sht, key_val,
2893 typename cc::split_list::make_traits<
2894 cc::split_list::ordered_list<cc::lazy_list_tag>
2896 ,co::memory_model< co::v::sequential_consistent >
2897 ,cc::split_list::ordered_list_traits<
2898 typename cc::lazy_list::make_traits<
2899 co::compare< compare >
2900 ,co::memory_model< co::v::sequential_consistent >
2904 > SplitList_Lazy_RCU_SHT_dyn_cmp_seqcst;
2906 typedef cc::SplitListSet< rcu_sht, key_val,
2907 typename cc::split_list::make_traits<
2908 cc::split_list::ordered_list<cc::lazy_list_tag>
2909 ,cc::split_list::dynamic_bucket_table< false >
2911 ,cc::split_list::ordered_list_traits<
2912 typename cc::lazy_list::make_traits<
2913 co::compare< compare >
2917 > SplitList_Lazy_RCU_SHT_st_cmp;
2919 typedef cc::SplitListSet< rcu_sht, key_val,
2920 typename cc::split_list::make_traits<
2921 cc::split_list::ordered_list<cc::lazy_list_tag>
2923 ,cc::split_list::dynamic_bucket_table< false >
2924 ,co::memory_model< co::v::sequential_consistent >
2925 ,cc::split_list::ordered_list_traits<
2926 typename cc::lazy_list::make_traits<
2927 co::compare< compare >
2928 ,co::memory_model< co::v::sequential_consistent >
2932 > SplitList_Lazy_RCU_SHT_st_cmp_seqcst;
2935 typedef cc::SplitListSet< rcu_sht, key_val,
2936 typename cc::split_list::make_traits<
2937 cc::split_list::ordered_list<cc::lazy_list_tag>
2939 ,cc::split_list::ordered_list_traits<
2940 typename cc::lazy_list::make_traits<
2945 > SplitList_Lazy_RCU_SHT_dyn_less;
2947 typedef cc::SplitListSet< rcu_sht, key_val,
2948 typename cc::split_list::make_traits<
2949 cc::split_list::ordered_list<cc::lazy_list_tag>
2951 ,co::memory_model< co::v::sequential_consistent >
2952 ,cc::split_list::ordered_list_traits<
2953 typename cc::lazy_list::make_traits<
2955 ,co::memory_model< co::v::sequential_consistent >
2959 > SplitList_Lazy_RCU_SHT_dyn_less_seqcst;
2961 typedef cc::SplitListSet< rcu_sht, key_val,
2962 typename cc::split_list::make_traits<
2963 cc::split_list::ordered_list<cc::lazy_list_tag>
2964 ,cc::split_list::dynamic_bucket_table< false >
2966 ,cc::split_list::ordered_list_traits<
2967 typename cc::lazy_list::make_traits<
2972 > SplitList_Lazy_RCU_SHT_st_less;
2974 typedef cc::SplitListSet< rcu_sht, key_val,
2975 typename cc::split_list::make_traits<
2976 cc::split_list::ordered_list<cc::lazy_list_tag>
2978 ,cc::split_list::dynamic_bucket_table< false >
2979 ,co::memory_model< co::v::sequential_consistent >
2980 ,cc::split_list::ordered_list_traits<
2981 typename cc::lazy_list::make_traits<
2983 ,co::memory_model< co::v::sequential_consistent >
2987 > SplitList_Lazy_RCU_SHT_st_less_seqcst;
2990 // ***************************************************************************
2993 // for sequential containers
2994 template <class BucketEntry, typename... Options>
2995 class StripedHashSet_seq:
2996 public cc::StripedSet< BucketEntry,
2997 co::mutex_policy< cc::striped_set::striping<> >
2998 ,co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
3002 typedef cc::StripedSet< BucketEntry,
3003 co::mutex_policy< cc::striped_set::striping<> >
3004 ,co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
3007 typedef typename base_class::resizing_policy resizing_policy_t;
3009 resizing_policy_t m_placeHolder;
3011 StripedHashSet_seq( size_t nCapacity, size_t nLoadFactor )
3012 : base_class( nCapacity / nLoadFactor / 16, *(new(&m_placeHolder) resizing_policy_t( nLoadFactor )) )
3015 template <typename Q, typename Less>
3016 bool erase_with( Q const& v, Less pred )
3018 return base_class::erase( v );
3022 // for non-sequential ordered containers
3023 template <class BucketEntry, typename... Options>
3024 class StripedHashSet_ord:
3025 public cc::StripedSet< BucketEntry,
3026 co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
3027 ,co::mutex_policy< cc::striped_set::striping<> >
3031 typedef cc::StripedSet< BucketEntry,
3032 co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
3033 ,co::mutex_policy< cc::striped_set::striping<> >
3036 typedef typename base_class::resizing_policy resizing_policy_t;
3038 resizing_policy_t m_placeHolder;
3040 StripedHashSet_ord( size_t nCapacity, size_t nLoadFactor )
3041 : base_class( 0, *(new(&m_placeHolder) resizing_policy_t( nLoadFactor * 1024 )) )
3044 template <typename Q, typename Less>
3045 bool erase_with( Q const& v, Less pred )
3047 return base_class::erase( v );
3051 typedef StripedHashSet_seq<
3052 std::list< key_val >
3057 typedef StripedHashSet_seq<
3058 std::vector< key_val >
3061 > StripedSet_vector;
3063 #if BOOST_VERSION >= 104800
3064 typedef StripedHashSet_seq<
3065 boost::container::slist< key_val >
3068 > StripedSet_boost_slist;
3070 typedef StripedHashSet_seq<
3071 boost::container::list< key_val >
3074 > StripedSet_boost_list;
3076 typedef StripedHashSet_seq<
3077 boost::container::vector< key_val >
3080 > StripedSet_boost_vector;
3082 typedef StripedHashSet_seq<
3083 boost::container::stable_vector< key_val >
3086 > StripedSet_boost_stable_vector;
3089 typedef StripedHashSet_ord<
3090 std::set< key_val, less >
3094 #if (CDS_COMPILER == CDS_COMPILER_MSVC || (CDS_COMPILER == CDS_COMPILER_INTEL && CDS_OS_INTERFACE == CDS_OSI_WINDOWS)) && _MSC_VER < 1600
3095 typedef StripedHashSet_ord<
3096 stdext::hash_set< key_val, hash_less >
3098 > StripedSet_hashset;
3100 typedef StripedHashSet_ord<
3101 std::unordered_set< key_val, hash, equal_to >
3103 > StripedSet_hashset;
3106 #if BOOST_VERSION >= 104800
3107 typedef StripedHashSet_ord<
3108 boost::container::set< key_val, less >
3110 > StripedSet_boost_set;
3112 typedef StripedHashSet_ord<
3113 boost::container::flat_set< key_val, less >
3115 > StripedSet_boost_flat_set;
3118 typedef StripedHashSet_ord<
3119 boost::unordered_set< key_val, hash, equal_to >
3121 > StripedSet_boost_unordered_set;
3125 // ***************************************************************************
3128 // for sequential containers
3129 template <class BucketEntry, typename... Options>
3130 class RefinableHashSet_seq:
3131 public cc::StripedSet< BucketEntry,
3132 co::mutex_policy< cc::striped_set::refinable<> >
3133 ,co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
3137 typedef cc::StripedSet< BucketEntry,
3138 co::mutex_policy< cc::striped_set::refinable<> >
3139 ,co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
3142 typedef typename base_class::resizing_policy resizing_policy_t;
3144 resizing_policy_t m_placeHolder;
3146 RefinableHashSet_seq( size_t nCapacity, size_t nLoadFactor )
3147 : base_class( nCapacity / nLoadFactor / 16, *(new(&m_placeHolder) resizing_policy_t( nLoadFactor )) )
3150 template <typename Q, typename Less>
3151 bool erase_with( Q const& v, Less pred )
3153 return base_class::erase( v );
3157 // for non-sequential ordered containers
3158 template <class BucketEntry, typename... Options>
3159 class RefinableHashSet_ord:
3160 public cc::StripedSet< BucketEntry,
3161 co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
3162 ,co::mutex_policy< cc::striped_set::refinable<> >
3166 typedef cc::StripedSet< BucketEntry,
3167 co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
3168 ,co::mutex_policy< cc::striped_set::refinable<> >
3171 typedef typename base_class::resizing_policy resizing_policy_t;
3173 resizing_policy_t m_placeHolder;
3175 RefinableHashSet_ord( size_t nCapacity, size_t nLoadFactor )
3176 : base_class( 0, *(new(&m_placeHolder) resizing_policy_t( nLoadFactor * 1024 )) )
3179 template <typename Q, typename Less>
3180 bool erase_with( Q const& v, Less pred )
3182 return base_class::erase( v );
3186 typedef RefinableHashSet_seq<
3187 std::list< key_val >
3190 > RefinableSet_list;
3192 typedef RefinableHashSet_seq<
3193 std::vector< key_val >
3196 > RefinableSet_vector;
3198 #if BOOST_VERSION >= 104800
3199 typedef RefinableHashSet_seq<
3200 boost::container::slist< key_val >
3203 > RefinableSet_boost_slist;
3205 typedef RefinableHashSet_seq<
3206 boost::container::list< key_val >
3209 > RefinableSet_boost_list;
3211 typedef RefinableHashSet_seq<
3212 boost::container::vector< key_val >
3215 > RefinableSet_boost_vector;
3217 typedef RefinableHashSet_seq<
3218 boost::container::stable_vector< key_val >
3221 > RefinableSet_boost_stable_vector;
3224 typedef RefinableHashSet_ord<
3225 std::set< key_val, less >
3229 #if (CDS_COMPILER == CDS_COMPILER_MSVC || (CDS_COMPILER == CDS_COMPILER_INTEL && CDS_OS_INTERFACE == CDS_OSI_WINDOWS)) && _MSC_VER < 1600
3230 typedef RefinableHashSet_ord<
3231 stdext::hash_set< key_val, hash_less >
3233 > RefinableSet_hashset;
3235 typedef RefinableHashSet_ord<
3236 std::unordered_set< key_val, hash, equal_to >
3238 > RefinableSet_hashset;
3241 #if BOOST_VERSION >= 104800
3242 typedef RefinableHashSet_ord<
3243 boost::container::set< key_val, less >
3245 > RefinableSet_boost_set;
3247 typedef RefinableHashSet_ord<
3248 boost::container::flat_set< key_val, less >
3250 > RefinableSet_boost_flat_set;
3253 typedef RefinableHashSet_ord<
3254 boost::unordered_set< key_val, hash, equal_to >
3256 > RefinableSet_boost_unordered_set;
3260 // ***************************************************************************
3263 typedef CuckooStripedSet< key_val,
3264 cc::cuckoo::probeset_type< cc::cuckoo::list >
3265 ,co::equal_to< equal_to >
3266 ,co::hash< std::tuple< hash, hash2 > >
3267 > CuckooStripedSet_list_unord;
3269 typedef CuckooStripedSet< key_val,
3270 cc::cuckoo::probeset_type< cc::cuckoo::list >
3271 ,co::equal_to< equal_to >
3272 ,co::hash< std::tuple< hash, hash2 > >
3273 ,co::stat< cc::cuckoo::stat >
3274 > CuckooStripedSet_list_unord_stat;
3276 typedef CuckooStripedSet< key_val,
3277 cc::cuckoo::probeset_type< cc::cuckoo::list >
3278 ,co::equal_to< equal_to >
3279 ,co::hash< std::tuple< hash, hash2 > >
3280 ,cc::cuckoo::store_hash< true >
3281 > CuckooStripedSet_list_unord_storehash;
3283 typedef CuckooStripedSet< key_val,
3284 cc::cuckoo::probeset_type< cc::cuckoo::list >
3285 ,co::compare< compare >
3286 ,co::hash< std::tuple< hash, hash2 > >
3287 > CuckooStripedSet_list_ord;
3289 typedef CuckooStripedSet< key_val,
3290 cc::cuckoo::probeset_type< cc::cuckoo::list >
3291 ,co::compare< compare >
3292 ,co::hash< std::tuple< hash, hash2 > >
3293 ,co::stat< cc::cuckoo::stat >
3294 > CuckooStripedSet_list_ord_stat;
3296 typedef CuckooStripedSet< key_val,
3297 cc::cuckoo::probeset_type< cc::cuckoo::list >
3298 ,co::compare< compare >
3299 ,co::hash< std::tuple< hash, hash2 > >
3300 ,cc::cuckoo::store_hash< true >
3301 > CuckooStripedSet_list_ord_storehash;
3303 typedef CuckooStripedSet< key_val,
3304 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
3305 ,co::equal_to< equal_to >
3306 ,co::hash< std::tuple< hash, hash2 > >
3307 > CuckooStripedSet_vector_unord;
3309 typedef CuckooStripedSet< key_val,
3310 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
3311 ,co::equal_to< equal_to >
3312 ,co::hash< std::tuple< hash, hash2 > >
3313 ,co::stat< cc::cuckoo::stat >
3314 > CuckooStripedSet_vector_unord_stat;
3316 typedef CuckooStripedSet< key_val,
3317 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
3318 ,co::equal_to< equal_to >
3319 ,co::hash< std::tuple< hash, hash2 > >
3320 ,cc::cuckoo::store_hash< true >
3321 > CuckooStripedSet_vector_unord_storehash;
3323 typedef CuckooStripedSet< key_val,
3324 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
3325 ,co::compare< compare >
3326 ,co::hash< std::tuple< hash, hash2 > >
3327 > CuckooStripedSet_vector_ord;
3329 typedef CuckooStripedSet< key_val,
3330 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
3331 ,co::compare< compare >
3332 ,co::hash< std::tuple< hash, hash2 > >
3333 ,co::stat< cc::cuckoo::stat >
3334 > CuckooStripedSet_vector_ord_stat;
3336 typedef CuckooStripedSet< key_val,
3337 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
3338 ,co::compare< compare >
3339 ,co::hash< std::tuple< hash, hash2 > >
3340 ,cc::cuckoo::store_hash< true >
3341 > CuckooStripedSet_vector_ord_storehash;
3343 typedef CuckooRefinableSet< key_val,
3344 cc::cuckoo::probeset_type< cc::cuckoo::list >
3345 ,co::equal_to< equal_to >
3346 ,co::hash< std::tuple< hash, hash2 > >
3347 > CuckooRefinableSet_list_unord;
3349 typedef CuckooRefinableSet< key_val,
3350 cc::cuckoo::probeset_type< cc::cuckoo::list >
3351 ,co::equal_to< equal_to >
3352 ,co::hash< std::tuple< hash, hash2 > >
3353 ,co::stat< cc::cuckoo::stat >
3354 > CuckooRefinableSet_list_unord_stat;
3356 typedef CuckooRefinableSet< key_val,
3357 cc::cuckoo::probeset_type< cc::cuckoo::list >
3358 ,co::equal_to< equal_to >
3359 ,co::hash< std::tuple< hash, hash2 > >
3360 ,cc::cuckoo::store_hash< true >
3361 > CuckooRefinableSet_list_unord_storehash;
3363 typedef CuckooRefinableSet< key_val,
3364 cc::cuckoo::probeset_type< cc::cuckoo::list >
3365 ,co::compare< compare >
3366 ,co::hash< std::tuple< hash, hash2 > >
3367 > CuckooRefinableSet_list_ord;
3369 typedef CuckooRefinableSet< key_val,
3370 cc::cuckoo::probeset_type< cc::cuckoo::list >
3371 ,co::compare< compare >
3372 ,co::hash< std::tuple< hash, hash2 > >
3373 ,co::stat< cc::cuckoo::stat >
3374 > CuckooRefinableSet_list_ord_stat;
3376 typedef CuckooRefinableSet< key_val,
3377 cc::cuckoo::probeset_type< cc::cuckoo::list >
3378 ,co::compare< compare >
3379 ,co::hash< std::tuple< hash, hash2 > >
3380 ,cc::cuckoo::store_hash< true >
3381 > CuckooRefinableSet_list_ord_storehash;
3383 typedef CuckooRefinableSet< key_val,
3384 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
3385 ,co::equal_to< equal_to >
3386 ,co::hash< std::tuple< hash, hash2 > >
3387 > CuckooRefinableSet_vector_unord;
3389 typedef CuckooRefinableSet< key_val,
3390 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
3391 ,co::equal_to< equal_to >
3392 ,co::hash< std::tuple< hash, hash2 > >
3393 ,co::stat< cc::cuckoo::stat >
3394 > CuckooRefinableSet_vector_unord_stat;
3396 typedef CuckooRefinableSet< key_val,
3397 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
3398 ,co::equal_to< equal_to >
3399 ,co::hash< std::tuple< hash, hash2 > >
3400 ,cc::cuckoo::store_hash< true >
3401 > CuckooRefinableSet_vector_unord_storehash;
3403 typedef CuckooRefinableSet< key_val,
3404 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
3405 ,co::compare< compare >
3406 ,co::hash< std::tuple< hash, hash2 > >
3407 > CuckooRefinableSet_vector_ord;
3409 typedef CuckooRefinableSet< key_val,
3410 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
3411 ,co::compare< compare >
3412 ,co::hash< std::tuple< hash, hash2 > >
3413 ,co::stat< cc::cuckoo::stat >
3414 > CuckooRefinableSet_vector_ord_stat;
3416 typedef CuckooRefinableSet< key_val,
3417 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
3418 ,co::compare< compare >
3419 ,co::hash< std::tuple< hash, hash2 > >
3420 ,cc::cuckoo::store_hash< true >
3421 > CuckooRefinableSet_vector_ord_storehash;
3424 // ***************************************************************************
3427 class traits_SkipListSet_hp_less_pascal: public cc::skip_list::make_traits <
3429 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3430 ,co::item_counter< cds::atomicity::item_counter >
3433 typedef cc::SkipListSet< cds::gc::HP, key_val, traits_SkipListSet_hp_less_pascal > SkipListSet_hp_less_pascal;
3435 class traits_SkipListSet_hp_less_pascal_seqcst: public cc::skip_list::make_traits <
3437 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3438 ,co::memory_model< co::v::sequential_consistent >
3439 ,co::item_counter< cds::atomicity::item_counter >
3442 typedef cc::SkipListSet< cds::gc::HP, key_val, traits_SkipListSet_hp_less_pascal_seqcst > SkipListSet_hp_less_pascal_seqcst;
3444 class traits_SkipListSet_hp_less_pascal_stat: public cc::skip_list::make_traits <
3446 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3447 ,co::stat< cc::skip_list::stat<> >
3448 ,co::item_counter< cds::atomicity::item_counter >
3451 typedef cc::SkipListSet< cds::gc::HP, key_val, traits_SkipListSet_hp_less_pascal_stat > SkipListSet_hp_less_pascal_stat;
3453 class traits_SkipListSet_hp_cmp_pascal: public cc::skip_list::make_traits <
3454 co::compare< compare >
3455 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3456 ,co::item_counter< cds::atomicity::item_counter >
3459 typedef cc::SkipListSet< cds::gc::HP, key_val, traits_SkipListSet_hp_cmp_pascal > SkipListSet_hp_cmp_pascal;
3461 class traits_SkipListSet_hp_cmp_pascal_stat: public cc::skip_list::make_traits <
3462 co::compare< compare >
3463 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3464 ,co::stat< cc::skip_list::stat<> >
3465 ,co::item_counter< cds::atomicity::item_counter >
3468 typedef cc::SkipListSet< cds::gc::HP, key_val, traits_SkipListSet_hp_cmp_pascal_stat > SkipListSet_hp_cmp_pascal_stat;
3470 class traits_SkipListSet_hp_less_xorshift: public cc::skip_list::make_traits <
3472 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3473 ,co::item_counter< cds::atomicity::item_counter >
3476 typedef cc::SkipListSet< cds::gc::HP, key_val, traits_SkipListSet_hp_less_xorshift > SkipListSet_hp_less_xorshift;
3478 class traits_SkipListSet_hp_less_xorshift_stat: public cc::skip_list::make_traits <
3480 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3481 ,co::stat< cc::skip_list::stat<> >
3482 ,co::item_counter< cds::atomicity::item_counter >
3485 typedef cc::SkipListSet< cds::gc::HP, key_val, traits_SkipListSet_hp_less_xorshift_stat > SkipListSet_hp_less_xorshift_stat;
3487 class traits_SkipListSet_hp_cmp_xorshift: public cc::skip_list::make_traits <
3488 co::compare< compare >
3489 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3490 ,co::item_counter< cds::atomicity::item_counter >
3493 typedef cc::SkipListSet< cds::gc::HP, key_val, traits_SkipListSet_hp_cmp_xorshift > SkipListSet_hp_cmp_xorshift;
3495 class traits_SkipListSet_hp_cmp_xorshift_stat: public cc::skip_list::make_traits <
3496 co::compare< compare >
3497 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3498 ,co::stat< cc::skip_list::stat<> >
3499 ,co::item_counter< cds::atomicity::item_counter >
3502 typedef cc::SkipListSet< cds::gc::HP, key_val, traits_SkipListSet_hp_cmp_xorshift_stat > SkipListSet_hp_cmp_xorshift_stat;
3504 // ***************************************************************************
3505 // SkipListSet - DHP
3507 class traits_SkipListSet_ptb_less_pascal: public cc::skip_list::make_traits <
3509 ,co::item_counter< cds::atomicity::item_counter >
3510 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3513 typedef cc::SkipListSet< cds::gc::DHP, key_val, traits_SkipListSet_ptb_less_pascal > SkipListSet_ptb_less_pascal;
3515 class traits_SkipListSet_ptb_less_pascal_seqcst: public cc::skip_list::make_traits <
3517 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3518 ,co::memory_model< co::v::sequential_consistent >
3519 ,co::item_counter< cds::atomicity::item_counter >
3522 typedef cc::SkipListSet< cds::gc::DHP, key_val, traits_SkipListSet_ptb_less_pascal_seqcst > SkipListSet_ptb_less_pascal_seqcst;
3524 class traits_SkipListSet_ptb_less_pascal_stat: public cc::skip_list::make_traits <
3526 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3527 ,co::stat< cc::skip_list::stat<> >
3528 ,co::item_counter< cds::atomicity::item_counter >
3531 typedef cc::SkipListSet< cds::gc::DHP, key_val, traits_SkipListSet_ptb_less_pascal_stat > SkipListSet_ptb_less_pascal_stat;
3533 class traits_SkipListSet_ptb_cmp_pascal: public cc::skip_list::make_traits <
3534 co::compare< compare >
3535 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3536 ,co::item_counter< cds::atomicity::item_counter >
3539 typedef cc::SkipListSet< cds::gc::DHP, key_val, traits_SkipListSet_ptb_cmp_pascal > SkipListSet_ptb_cmp_pascal;
3541 class traits_SkipListSet_ptb_cmp_pascal_stat: public cc::skip_list::make_traits <
3542 co::compare< compare >
3543 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3544 ,co::stat< cc::skip_list::stat<> >
3545 ,co::item_counter< cds::atomicity::item_counter >
3548 typedef cc::SkipListSet< cds::gc::DHP, key_val, traits_SkipListSet_ptb_cmp_pascal_stat > SkipListSet_ptb_cmp_pascal_stat;
3550 class traits_SkipListSet_ptb_less_xorshift: public cc::skip_list::make_traits <
3552 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3553 ,co::item_counter< cds::atomicity::item_counter >
3556 typedef cc::SkipListSet< cds::gc::DHP, key_val, traits_SkipListSet_ptb_less_xorshift > SkipListSet_ptb_less_xorshift;
3558 class traits_SkipListSet_ptb_less_xorshift_stat: public cc::skip_list::make_traits <
3560 ,co::item_counter< cds::atomicity::item_counter >
3561 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3562 ,co::stat< cc::skip_list::stat<> >
3565 typedef cc::SkipListSet< cds::gc::DHP, key_val, traits_SkipListSet_ptb_less_xorshift_stat > SkipListSet_ptb_less_xorshift_stat;
3567 class traits_SkipListSet_ptb_cmp_xorshift: public cc::skip_list::make_traits <
3568 co::compare< compare >
3569 ,co::item_counter< cds::atomicity::item_counter >
3570 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3573 typedef cc::SkipListSet< cds::gc::DHP, key_val, traits_SkipListSet_ptb_cmp_xorshift> SkipListSet_ptb_cmp_xorshift;
3575 class traits_SkipListSet_ptb_cmp_xorshift_stat: public cc::skip_list::make_traits <
3576 co::compare< compare >
3577 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3578 ,co::stat< cc::skip_list::stat<> >
3579 ,co::item_counter< cds::atomicity::item_counter >
3582 typedef cc::SkipListSet< cds::gc::DHP, key_val, traits_SkipListSet_ptb_cmp_xorshift_stat > SkipListSet_ptb_cmp_xorshift_stat;
3585 // ***************************************************************************
3586 // SkipListSet - RCU general_instant
3588 class traits_SkipListSet_rcu_gpi_less_pascal: public cc::skip_list::make_traits <
3590 ,co::item_counter< cds::atomicity::item_counter >
3591 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3594 typedef cc::SkipListSet< rcu_gpi, key_val, traits_SkipListSet_rcu_gpi_less_pascal > SkipListSet_rcu_gpi_less_pascal;
3596 class traits_SkipListSet_rcu_gpi_less_pascal_seqcst: public cc::skip_list::make_traits <
3598 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3599 ,co::memory_model< co::v::sequential_consistent >
3600 ,co::item_counter< cds::atomicity::item_counter >
3603 typedef cc::SkipListSet< rcu_gpi, key_val, traits_SkipListSet_rcu_gpi_less_pascal_seqcst > SkipListSet_rcu_gpi_less_pascal_seqcst;
3605 class traits_SkipListSet_rcu_gpi_less_pascal_stat: public cc::skip_list::make_traits <
3607 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3608 ,co::stat< cc::skip_list::stat<> >
3609 ,co::item_counter< cds::atomicity::item_counter >
3612 typedef cc::SkipListSet< rcu_gpi, key_val, traits_SkipListSet_rcu_gpi_less_pascal_stat > SkipListSet_rcu_gpi_less_pascal_stat;
3614 class traits_SkipListSet_rcu_gpi_cmp_pascal: public cc::skip_list::make_traits <
3615 co::compare< compare >
3616 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3617 ,co::item_counter< cds::atomicity::item_counter >
3620 typedef cc::SkipListSet< rcu_gpi, key_val, traits_SkipListSet_rcu_gpi_cmp_pascal > SkipListSet_rcu_gpi_cmp_pascal;
3622 class traits_SkipListSet_rcu_gpi_cmp_pascal_stat: public cc::skip_list::make_traits <
3623 co::compare< compare >
3624 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3625 ,co::stat< cc::skip_list::stat<> >
3626 ,co::item_counter< cds::atomicity::item_counter >
3629 typedef cc::SkipListSet< rcu_gpi, key_val, traits_SkipListSet_rcu_gpi_cmp_pascal_stat > SkipListSet_rcu_gpi_cmp_pascal_stat;
3631 class traits_SkipListSet_rcu_gpi_less_xorshift: public cc::skip_list::make_traits <
3633 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3634 ,co::item_counter< cds::atomicity::item_counter >
3637 typedef cc::SkipListSet< rcu_gpi, key_val, traits_SkipListSet_rcu_gpi_less_xorshift > SkipListSet_rcu_gpi_less_xorshift;
3639 class traits_SkipListSet_rcu_gpi_less_xorshift_stat: public cc::skip_list::make_traits <
3641 ,co::item_counter< cds::atomicity::item_counter >
3642 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3643 ,co::stat< cc::skip_list::stat<> >
3646 typedef cc::SkipListSet< rcu_gpi, key_val, traits_SkipListSet_rcu_gpi_less_xorshift_stat > SkipListSet_rcu_gpi_less_xorshift_stat;
3648 class traits_SkipListSet_rcu_gpi_cmp_xorshift: public cc::skip_list::make_traits <
3649 co::compare< compare >
3650 ,co::item_counter< cds::atomicity::item_counter >
3651 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3654 typedef cc::SkipListSet< rcu_gpi, key_val, traits_SkipListSet_rcu_gpi_cmp_xorshift > SkipListSet_rcu_gpi_cmp_xorshift;
3656 class traits_SkipListSet_rcu_gpi_cmp_xorshift_stat: public cc::skip_list::make_traits <
3657 co::compare< compare >
3658 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3659 ,co::stat< cc::skip_list::stat<> >
3660 ,co::item_counter< cds::atomicity::item_counter >
3663 typedef cc::SkipListSet< rcu_gpi, key_val, traits_SkipListSet_rcu_gpi_cmp_xorshift_stat > SkipListSet_rcu_gpi_cmp_xorshift_stat;
3666 // ***************************************************************************
3667 // SkipListSet - RCU general_buffered
3669 class traits_SkipListSet_rcu_gpb_less_pascal: public cc::skip_list::make_traits <
3671 ,co::item_counter< cds::atomicity::item_counter >
3672 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3675 typedef cc::SkipListSet< rcu_gpb, key_val, traits_SkipListSet_rcu_gpb_less_pascal > SkipListSet_rcu_gpb_less_pascal;
3677 class traits_SkipListSet_rcu_gpb_less_pascal_seqcst: public cc::skip_list::make_traits <
3679 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3680 ,co::memory_model< co::v::sequential_consistent >
3681 ,co::item_counter< cds::atomicity::item_counter >
3684 typedef cc::SkipListSet< rcu_gpb, key_val, traits_SkipListSet_rcu_gpb_less_pascal_seqcst > SkipListSet_rcu_gpb_less_pascal_seqcst;
3686 class traits_SkipListSet_rcu_gpb_less_pascal_stat: public cc::skip_list::make_traits <
3688 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3689 ,co::stat< cc::skip_list::stat<> >
3690 ,co::item_counter< cds::atomicity::item_counter >
3693 typedef cc::SkipListSet< rcu_gpb, key_val, traits_SkipListSet_rcu_gpb_less_pascal_stat > SkipListSet_rcu_gpb_less_pascal_stat;
3695 class traits_SkipListSet_rcu_gpb_cmp_pascal: public cc::skip_list::make_traits <
3696 co::compare< compare >
3697 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3698 ,co::item_counter< cds::atomicity::item_counter >
3701 typedef cc::SkipListSet< rcu_gpb, key_val, traits_SkipListSet_rcu_gpb_cmp_pascal > SkipListSet_rcu_gpb_cmp_pascal;
3703 class traits_SkipListSet_rcu_gpb_cmp_pascal_stat: public cc::skip_list::make_traits <
3704 co::compare< compare >
3705 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3706 ,co::stat< cc::skip_list::stat<> >
3707 ,co::item_counter< cds::atomicity::item_counter >
3710 typedef cc::SkipListSet< rcu_gpb, key_val, traits_SkipListSet_rcu_gpb_cmp_pascal_stat > SkipListSet_rcu_gpb_cmp_pascal_stat;
3712 class traits_SkipListSet_rcu_gpb_less_xorshift: public cc::skip_list::make_traits <
3714 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3715 ,co::item_counter< cds::atomicity::item_counter >
3718 typedef cc::SkipListSet< rcu_gpb, key_val, traits_SkipListSet_rcu_gpb_less_xorshift > SkipListSet_rcu_gpb_less_xorshift;
3720 class traits_SkipListSet_rcu_gpb_less_xorshift_stat: public cc::skip_list::make_traits <
3722 ,co::item_counter< cds::atomicity::item_counter >
3723 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3724 ,co::stat< cc::skip_list::stat<> >
3727 typedef cc::SkipListSet< rcu_gpb, key_val, traits_SkipListSet_rcu_gpb_less_xorshift_stat > SkipListSet_rcu_gpb_less_xorshift_stat;
3729 class traits_SkipListSet_rcu_gpb_cmp_xorshift: public cc::skip_list::make_traits <
3730 co::compare< compare >
3731 ,co::item_counter< cds::atomicity::item_counter >
3732 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3735 typedef cc::SkipListSet< rcu_gpb, key_val, traits_SkipListSet_rcu_gpb_cmp_xorshift > SkipListSet_rcu_gpb_cmp_xorshift;
3737 class traits_SkipListSet_rcu_gpb_cmp_xorshift_stat: public cc::skip_list::make_traits <
3738 co::compare< compare >
3739 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3740 ,co::stat< cc::skip_list::stat<> >
3741 ,co::item_counter< cds::atomicity::item_counter >
3744 typedef cc::SkipListSet< rcu_gpb, key_val, traits_SkipListSet_rcu_gpb_cmp_xorshift_stat > SkipListSet_rcu_gpb_cmp_xorshift_stat;
3746 // ***************************************************************************
3747 // SkipListSet - RCU general_threaded
3749 class traits_SkipListSet_rcu_gpt_less_pascal: public cc::skip_list::make_traits <
3751 ,co::item_counter< cds::atomicity::item_counter >
3752 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3755 typedef cc::SkipListSet< rcu_gpt, key_val, traits_SkipListSet_rcu_gpt_less_pascal > SkipListSet_rcu_gpt_less_pascal;
3757 class traits_SkipListSet_rcu_gpt_less_pascal_seqcst: public cc::skip_list::make_traits <
3759 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3760 ,co::memory_model< co::v::sequential_consistent >
3761 ,co::item_counter< cds::atomicity::item_counter >
3764 typedef cc::SkipListSet< rcu_gpt, key_val, traits_SkipListSet_rcu_gpt_less_pascal_seqcst > SkipListSet_rcu_gpt_less_pascal_seqcst;
3766 class traits_SkipListSet_rcu_gpt_less_pascal_stat: public cc::skip_list::make_traits <
3768 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3769 ,co::stat< cc::skip_list::stat<> >
3770 ,co::item_counter< cds::atomicity::item_counter >
3773 typedef cc::SkipListSet< rcu_gpt, key_val, traits_SkipListSet_rcu_gpt_less_pascal_stat > SkipListSet_rcu_gpt_less_pascal_stat;
3775 class traits_SkipListSet_rcu_gpt_cmp_pascal: public cc::skip_list::make_traits <
3776 co::compare< compare >
3777 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3778 ,co::item_counter< cds::atomicity::item_counter >
3781 typedef cc::SkipListSet< rcu_gpt, key_val, traits_SkipListSet_rcu_gpt_cmp_pascal > SkipListSet_rcu_gpt_cmp_pascal;
3783 class traits_SkipListSet_rcu_gpt_cmp_pascal_stat: public cc::skip_list::make_traits <
3784 co::compare< compare >
3785 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3786 ,co::stat< cc::skip_list::stat<> >
3787 ,co::item_counter< cds::atomicity::item_counter >
3790 typedef cc::SkipListSet< rcu_gpt, key_val, traits_SkipListSet_rcu_gpt_cmp_pascal_stat > SkipListSet_rcu_gpt_cmp_pascal_stat;
3792 class traits_SkipListSet_rcu_gpt_less_xorshift: public cc::skip_list::make_traits <
3794 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3795 ,co::item_counter< cds::atomicity::item_counter >
3798 typedef cc::SkipListSet< rcu_gpt, key_val, traits_SkipListSet_rcu_gpt_less_xorshift > SkipListSet_rcu_gpt_less_xorshift;
3800 class traits_SkipListSet_rcu_gpt_less_xorshift_stat: public cc::skip_list::make_traits <
3802 ,co::item_counter< cds::atomicity::item_counter >
3803 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3804 ,co::stat< cc::skip_list::stat<> >
3807 typedef cc::SkipListSet< rcu_gpt, key_val, traits_SkipListSet_rcu_gpt_less_xorshift_stat > SkipListSet_rcu_gpt_less_xorshift_stat;
3809 class traits_SkipListSet_rcu_gpt_cmp_xorshift: public cc::skip_list::make_traits <
3810 co::compare< compare >
3811 ,co::item_counter< cds::atomicity::item_counter >
3812 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3815 typedef cc::SkipListSet< rcu_gpt, key_val, traits_SkipListSet_rcu_gpt_cmp_xorshift > SkipListSet_rcu_gpt_cmp_xorshift;
3817 class traits_SkipListSet_rcu_gpt_cmp_xorshift_stat: public cc::skip_list::make_traits <
3818 co::compare< compare >
3819 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3820 ,co::stat< cc::skip_list::stat<> >
3821 ,co::item_counter< cds::atomicity::item_counter >
3824 typedef cc::SkipListSet< rcu_gpt, key_val, traits_SkipListSet_rcu_gpt_cmp_xorshift_stat > SkipListSet_rcu_gpt_cmp_xorshift_stat;
3826 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
3827 // ***************************************************************************
3828 // SkipListSet - RCU signal_buffered
3830 class traits_SkipListSet_rcu_shb_less_pascal: public cc::skip_list::make_traits <
3832 ,co::item_counter< cds::atomicity::item_counter >
3833 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3836 typedef cc::SkipListSet< rcu_shb, key_val, traits_SkipListSet_rcu_shb_less_pascal > SkipListSet_rcu_shb_less_pascal;
3838 class traits_SkipListSet_rcu_shb_less_pascal_seqcst: public cc::skip_list::make_traits <
3840 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3841 ,co::memory_model< co::v::sequential_consistent >
3842 ,co::item_counter< cds::atomicity::item_counter >
3845 typedef cc::SkipListSet< rcu_shb, key_val, traits_SkipListSet_rcu_shb_less_pascal_seqcst > SkipListSet_rcu_shb_less_pascal_seqcst;
3847 class traits_SkipListSet_rcu_shb_less_pascal_stat: public cc::skip_list::make_traits <
3849 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3850 ,co::stat< cc::skip_list::stat<> >
3851 ,co::item_counter< cds::atomicity::item_counter >
3854 typedef cc::SkipListSet< rcu_shb, key_val, traits_SkipListSet_rcu_shb_less_pascal_stat > SkipListSet_rcu_shb_less_pascal_stat;
3856 class traits_SkipListSet_rcu_shb_cmp_pascal: public cc::skip_list::make_traits <
3857 co::compare< compare >
3858 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3859 ,co::item_counter< cds::atomicity::item_counter >
3862 typedef cc::SkipListSet< rcu_shb, key_val, traits_SkipListSet_rcu_shb_cmp_pascal > SkipListSet_rcu_shb_cmp_pascal;
3864 class traits_SkipListSet_rcu_shb_cmp_pascal_stat: public cc::skip_list::make_traits <
3865 co::compare< compare >
3866 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3867 ,co::stat< cc::skip_list::stat<> >
3868 ,co::item_counter< cds::atomicity::item_counter >
3871 typedef cc::SkipListSet< rcu_shb, key_val, traits_SkipListSet_rcu_shb_cmp_pascal_stat > SkipListSet_rcu_shb_cmp_pascal_stat;
3873 class traits_SkipListSet_rcu_shb_less_xorshift: public cc::skip_list::make_traits <
3875 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3876 ,co::item_counter< cds::atomicity::item_counter >
3879 typedef cc::SkipListSet< rcu_shb, key_val, traits_SkipListSet_rcu_shb_less_xorshift > SkipListSet_rcu_shb_less_xorshift;
3881 class traits_SkipListSet_rcu_shb_less_xorshift_stat: public cc::skip_list::make_traits <
3883 ,co::item_counter< cds::atomicity::item_counter >
3884 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3885 ,co::stat< cc::skip_list::stat<> >
3888 typedef cc::SkipListSet< rcu_shb, key_val, traits_SkipListSet_rcu_shb_less_xorshift_stat > SkipListSet_rcu_shb_less_xorshift_stat;
3890 class traits_SkipListSet_rcu_shb_cmp_xorshift: public cc::skip_list::make_traits <
3891 co::compare< compare >
3892 ,co::item_counter< cds::atomicity::item_counter >
3893 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3896 typedef cc::SkipListSet< rcu_shb, key_val, traits_SkipListSet_rcu_shb_cmp_xorshift > SkipListSet_rcu_shb_cmp_xorshift;
3898 class traits_SkipListSet_rcu_shb_cmp_xorshift_stat: public cc::skip_list::make_traits <
3899 co::compare< compare >
3900 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3901 ,co::stat< cc::skip_list::stat<> >
3902 ,co::item_counter< cds::atomicity::item_counter >
3905 typedef cc::SkipListSet< rcu_shb, key_val, traits_SkipListSet_rcu_shb_cmp_xorshift_stat > SkipListSet_rcu_shb_cmp_xorshift_stat;
3907 // ***************************************************************************
3908 // SkipListSet - RCU signal_threaded
3910 class traits_SkipListSet_rcu_sht_less_pascal: public cc::skip_list::make_traits <
3912 ,co::item_counter< cds::atomicity::item_counter >
3913 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3916 typedef cc::SkipListSet< rcu_sht, key_val, traits_SkipListSet_rcu_sht_less_pascal > SkipListSet_rcu_sht_less_pascal;
3918 class traits_SkipListSet_rcu_sht_less_pascal_seqcst: public cc::skip_list::make_traits <
3920 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3921 ,co::memory_model< co::v::sequential_consistent >
3922 ,co::item_counter< cds::atomicity::item_counter >
3925 typedef cc::SkipListSet< rcu_sht, key_val, traits_SkipListSet_rcu_sht_less_pascal_seqcst > SkipListSet_rcu_sht_less_pascal_seqcst;
3927 class traits_SkipListSet_rcu_sht_less_pascal_stat: public cc::skip_list::make_traits <
3929 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3930 ,co::stat< cc::skip_list::stat<> >
3931 ,co::item_counter< cds::atomicity::item_counter >
3934 typedef cc::SkipListSet< rcu_sht, key_val, traits_SkipListSet_rcu_sht_less_pascal_stat > SkipListSet_rcu_sht_less_pascal_stat;
3936 class traits_SkipListSet_rcu_sht_cmp_pascal: public cc::skip_list::make_traits <
3937 co::compare< compare >
3938 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3939 ,co::item_counter< cds::atomicity::item_counter >
3942 typedef cc::SkipListSet< rcu_sht, key_val, traits_SkipListSet_rcu_sht_cmp_pascal > SkipListSet_rcu_sht_cmp_pascal;
3944 class traits_SkipListSet_rcu_sht_cmp_pascal_stat: public cc::skip_list::make_traits <
3945 co::compare< compare >
3946 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3947 ,co::stat< cc::skip_list::stat<> >
3948 ,co::item_counter< cds::atomicity::item_counter >
3951 typedef cc::SkipListSet< rcu_sht, key_val, traits_SkipListSet_rcu_sht_cmp_pascal_stat > SkipListSet_rcu_sht_cmp_pascal_stat;
3953 class traits_SkipListSet_rcu_sht_less_xorshift: public cc::skip_list::make_traits <
3955 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3956 ,co::item_counter< cds::atomicity::item_counter >
3959 typedef cc::SkipListSet< rcu_sht, key_val, traits_SkipListSet_rcu_sht_less_xorshift > SkipListSet_rcu_sht_less_xorshift;
3961 class traits_SkipListSet_rcu_sht_less_xorshift_stat: public cc::skip_list::make_traits <
3963 ,co::item_counter< cds::atomicity::item_counter >
3964 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3965 ,co::stat< cc::skip_list::stat<> >
3968 typedef cc::SkipListSet< rcu_sht, key_val, traits_SkipListSet_rcu_sht_less_xorshift_stat > SkipListSet_rcu_sht_less_xorshift_stat;
3970 class traits_SkipListSet_rcu_sht_cmp_xorshift: public cc::skip_list::make_traits <
3971 co::compare< compare >
3972 ,co::item_counter< cds::atomicity::item_counter >
3973 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3976 typedef cc::SkipListSet< rcu_sht, key_val, traits_SkipListSet_rcu_sht_cmp_xorshift > SkipListSet_rcu_sht_cmp_xorshift;
3978 class traits_SkipListSet_rcu_sht_cmp_xorshift_stat: public cc::skip_list::make_traits <
3979 co::compare< compare >
3980 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3981 ,co::stat< cc::skip_list::stat<> >
3982 ,co::item_counter< cds::atomicity::item_counter >
3985 typedef cc::SkipListSet< rcu_sht, key_val, traits_SkipListSet_rcu_sht_cmp_xorshift_stat > SkipListSet_rcu_sht_cmp_xorshift_stat;
3988 // ***************************************************************************
3990 struct ellen_bintree_props {
3991 struct key_extractor {
3992 void operator()( key_type& dest, key_val const& src ) const
3999 bool operator()( key_val const& v1, key_val const& v2 ) const
4001 return key_less()( v1.key, v2.key );
4003 bool operator()( key_type const& k, key_val const& v ) const
4005 return key_less()( k, v.key );
4007 bool operator()( key_val const& v, key_type const& k ) const
4009 return key_less()( v.key, k );
4011 bool operator()( key_type const& k1, key_type const& k2 ) const
4013 return key_less()( k1, k2 );
4018 typedef cc::ellen_bintree::node<cds::gc::HP, key_val> leaf_node;
4019 typedef cc::ellen_bintree::internal_node< key_type, leaf_node > internal_node;
4020 typedef cc::ellen_bintree::update_desc< leaf_node, internal_node > update_desc;
4024 typedef cc::ellen_bintree::node<cds::gc::DHP, key_val> leaf_node;
4025 typedef cc::ellen_bintree::internal_node< key_type, leaf_node > internal_node;
4026 typedef cc::ellen_bintree::update_desc< leaf_node, internal_node > update_desc;
4030 typedef cc::ellen_bintree::node<rcu_gpi, key_val> leaf_node;
4031 typedef cc::ellen_bintree::internal_node< key_type, leaf_node > internal_node;
4032 typedef cc::ellen_bintree::update_desc< leaf_node, internal_node > update_desc;
4035 typedef cc::ellen_bintree::node<rcu_gpb, key_val> leaf_node;
4036 typedef cc::ellen_bintree::internal_node< key_type, leaf_node > internal_node;
4037 typedef cc::ellen_bintree::update_desc< leaf_node, internal_node > update_desc;
4040 typedef cc::ellen_bintree::node<rcu_gpt, key_val> leaf_node;
4041 typedef cc::ellen_bintree::internal_node< key_type, leaf_node > internal_node;
4042 typedef cc::ellen_bintree::update_desc< leaf_node, internal_node > update_desc;
4044 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
4046 typedef cc::ellen_bintree::node<rcu_shb, key_val> leaf_node;
4047 typedef cc::ellen_bintree::internal_node< key_type, leaf_node > internal_node;
4048 typedef cc::ellen_bintree::update_desc< leaf_node, internal_node > update_desc;
4051 typedef cc::ellen_bintree::node<rcu_sht, key_val> leaf_node;
4052 typedef cc::ellen_bintree::internal_node< key_type, leaf_node > internal_node;
4053 typedef cc::ellen_bintree::update_desc< leaf_node, internal_node > update_desc;
4059 // ***************************************************************************
4060 // EllenBinTreeSet - HP
4062 class traits_EllenBinTreeSet_hp: public cc::ellen_bintree::make_set_traits<
4063 cc::ellen_bintree::key_extractor< typename ellen_bintree_props::key_extractor >
4064 ,co::less< typename ellen_bintree_props::less >
4065 ,cc::ellen_bintree::update_desc_allocator<
4066 cds::memory::pool_allocator< typename ellen_bintree_props::hp_gc::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
4068 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
4071 typedef cc::EllenBinTreeSet< cds::gc::HP, key_type, key_val, traits_EllenBinTreeSet_hp > EllenBinTreeSet_hp;
4073 class traits_EllenBinTreeSet_hp_stat: public cc::ellen_bintree::make_set_traits<
4074 cc::ellen_bintree::key_extractor< typename ellen_bintree_props::key_extractor >
4075 ,co::less< typename ellen_bintree_props::less >
4076 ,cc::ellen_bintree::update_desc_allocator<
4077 cds::memory::pool_allocator< typename ellen_bintree_props::hp_gc::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
4079 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
4080 ,co::stat< cc::ellen_bintree::stat<> >
4083 typedef cc::EllenBinTreeSet< cds::gc::HP, key_type, key_val, traits_EllenBinTreeSet_hp_stat > EllenBinTreeSet_hp_stat;
4085 // ***************************************************************************
4086 // EllenBinTreeSet - DHP
4088 class traits_EllenBinTreeSet_ptb: public cc::ellen_bintree::make_set_traits<
4089 cc::ellen_bintree::key_extractor< typename ellen_bintree_props::key_extractor >
4090 ,co::less< typename ellen_bintree_props::less >
4091 ,cc::ellen_bintree::update_desc_allocator<
4092 cds::memory::pool_allocator< typename ellen_bintree_props::ptb_gc::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
4094 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
4097 typedef cc::EllenBinTreeSet< cds::gc::DHP, key_type, key_val, traits_EllenBinTreeSet_ptb > EllenBinTreeSet_ptb;
4099 class traits_EllenBinTreeSet_ptb_stat: public cc::ellen_bintree::make_set_traits<
4100 cc::ellen_bintree::key_extractor< typename ellen_bintree_props::key_extractor >
4101 ,co::less< typename ellen_bintree_props::less >
4102 ,cc::ellen_bintree::update_desc_allocator<
4103 cds::memory::pool_allocator< typename ellen_bintree_props::ptb_gc::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
4105 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
4106 ,co::stat< cc::ellen_bintree::stat<> >
4109 typedef cc::EllenBinTreeSet< cds::gc::DHP, key_type, key_val, traits_EllenBinTreeSet_ptb_stat > EllenBinTreeSet_ptb_stat;
4112 // ***************************************************************************
4113 // EllenBinTreeSet - RCU
4115 class traits_EllenBinTreeSet_rcu_gpi: public cc::ellen_bintree::make_set_traits<
4116 cc::ellen_bintree::key_extractor< typename ellen_bintree_props::key_extractor >
4117 ,co::less< typename ellen_bintree_props::less >
4118 ,cc::ellen_bintree::update_desc_allocator<
4119 cds::memory::pool_allocator< typename ellen_bintree_props::gpi::update_desc, ellen_bintree_pool::bounded_update_desc_pool_accessor >
4121 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
4124 typedef cc::EllenBinTreeSet< rcu_gpi, key_type, key_val, traits_EllenBinTreeSet_rcu_gpi > EllenBinTreeSet_rcu_gpi;
4126 class traits_EllenBinTreeSet_rcu_gpi_stat: public cc::ellen_bintree::make_set_traits<
4127 cc::ellen_bintree::key_extractor< typename ellen_bintree_props::key_extractor >
4128 ,co::less< typename ellen_bintree_props::less >
4129 ,cc::ellen_bintree::update_desc_allocator<
4130 cds::memory::pool_allocator< typename ellen_bintree_props::gpi::update_desc, ellen_bintree_pool::bounded_update_desc_pool_accessor >
4132 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
4133 ,co::stat< cc::ellen_bintree::stat<> >
4136 typedef cc::EllenBinTreeSet< rcu_gpi, key_type, key_val, traits_EllenBinTreeSet_rcu_gpi_stat > EllenBinTreeSet_rcu_gpi_stat;
4138 class traits_EllenBinTreeSet_rcu_gpb: public cc::ellen_bintree::make_set_traits<
4139 cc::ellen_bintree::key_extractor< typename ellen_bintree_props::key_extractor >
4140 ,co::less< typename ellen_bintree_props::less >
4141 ,cc::ellen_bintree::update_desc_allocator<
4142 cds::memory::pool_allocator< typename ellen_bintree_props::gpb::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
4144 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
4147 typedef cc::EllenBinTreeSet< rcu_gpb, key_type, key_val, traits_EllenBinTreeSet_rcu_gpb > EllenBinTreeSet_rcu_gpb;
4149 class traits_EllenBinTreeSet_rcu_gpb_stat: public cc::ellen_bintree::make_set_traits<
4150 cc::ellen_bintree::key_extractor< typename ellen_bintree_props::key_extractor >
4151 ,co::less< typename ellen_bintree_props::less >
4152 ,cc::ellen_bintree::update_desc_allocator<
4153 cds::memory::pool_allocator< typename ellen_bintree_props::gpb::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
4155 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
4156 ,co::stat< cc::ellen_bintree::stat<> >
4159 typedef cc::EllenBinTreeSet< rcu_gpb, key_type, key_val, traits_EllenBinTreeSet_rcu_gpb_stat > EllenBinTreeSet_rcu_gpb_stat;
4161 class traits_EllenBinTreeSet_rcu_gpt: public cc::ellen_bintree::make_set_traits<
4162 cc::ellen_bintree::key_extractor< typename ellen_bintree_props::key_extractor >
4163 ,co::less< typename ellen_bintree_props::less >
4164 ,cc::ellen_bintree::update_desc_allocator<
4165 cds::memory::pool_allocator< typename ellen_bintree_props::gpt::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
4167 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
4170 typedef cc::EllenBinTreeSet< rcu_gpt, key_type, key_val, traits_EllenBinTreeSet_rcu_gpt > EllenBinTreeSet_rcu_gpt;
4172 class traits_EllenBinTreeSet_rcu_gpt_stat: public cc::ellen_bintree::make_set_traits<
4173 cc::ellen_bintree::key_extractor< typename ellen_bintree_props::key_extractor >
4174 ,co::less< typename ellen_bintree_props::less >
4175 ,cc::ellen_bintree::update_desc_allocator<
4176 cds::memory::pool_allocator< typename ellen_bintree_props::gpt::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
4178 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
4179 ,co::stat< cc::ellen_bintree::stat<> >
4182 typedef cc::EllenBinTreeSet< rcu_gpt, key_type, key_val, traits_EllenBinTreeSet_rcu_gpt_stat > EllenBinTreeSet_rcu_gpt_stat;
4184 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
4185 class traits_EllenBinTreeSet_rcu_shb: public cc::ellen_bintree::make_set_traits<
4186 cc::ellen_bintree::key_extractor< typename ellen_bintree_props::key_extractor >
4187 ,co::less< typename ellen_bintree_props::less >
4188 ,cc::ellen_bintree::update_desc_allocator<
4189 cds::memory::pool_allocator< typename ellen_bintree_props::shb::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
4191 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
4194 typedef cc::EllenBinTreeSet< rcu_shb, key_type, key_val, traits_EllenBinTreeSet_rcu_shb > EllenBinTreeSet_rcu_shb;
4196 class traits_EllenBinTreeSet_rcu_shb_stat: public cc::ellen_bintree::make_set_traits<
4197 cc::ellen_bintree::key_extractor< typename ellen_bintree_props::key_extractor >
4198 ,co::less< typename ellen_bintree_props::less >
4199 ,cc::ellen_bintree::update_desc_allocator<
4200 cds::memory::pool_allocator< typename ellen_bintree_props::shb::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
4202 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
4203 ,co::stat< cc::ellen_bintree::stat<> >
4206 typedef cc::EllenBinTreeSet< rcu_shb, key_type, key_val, traits_EllenBinTreeSet_rcu_shb_stat > EllenBinTreeSet_rcu_shb_stat;
4208 class traits_EllenBinTreeSet_rcu_sht: public cc::ellen_bintree::make_set_traits<
4209 cc::ellen_bintree::key_extractor< typename ellen_bintree_props::key_extractor >
4210 ,co::less< typename ellen_bintree_props::less >
4211 ,cc::ellen_bintree::update_desc_allocator<
4212 cds::memory::pool_allocator< typename ellen_bintree_props::sht::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
4214 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
4217 typedef cc::EllenBinTreeSet< rcu_sht, key_type, key_val, traits_EllenBinTreeSet_rcu_sht > EllenBinTreeSet_rcu_sht;
4219 class traits_EllenBinTreeSet_rcu_sht_stat: public cc::ellen_bintree::make_set_traits<
4220 cc::ellen_bintree::key_extractor< typename ellen_bintree_props::key_extractor >
4221 ,co::less< typename ellen_bintree_props::less >
4222 ,cc::ellen_bintree::update_desc_allocator<
4223 cds::memory::pool_allocator< typename ellen_bintree_props::sht::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
4225 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
4226 ,co::stat< cc::ellen_bintree::stat<> >
4229 typedef cc::EllenBinTreeSet< rcu_sht, key_type, key_val, traits_EllenBinTreeSet_rcu_sht_stat > EllenBinTreeSet_rcu_sht_stat;
4233 // ***************************************************************************
4234 // Standard implementations
4236 typedef StdSet< key_val, less, cds::SpinLock > StdSet_Spin;
4237 typedef StdSet< key_val, less, lock::NoLock> StdSet_NoLock;
4239 typedef StdHashSet< key_val, hash, less, equal_to, cds::SpinLock > StdHashSet_Spin;
4240 typedef StdHashSet< key_val, hash, less, equal_to, lock::NoLock > StdHashSet_NoLock;
4245 // *************************************************
4247 // *************************************************
4249 template <typename Set>
4250 static inline void print_stat( Set const& s )
4253 template <typename GC, typename T, typename Traits>
4254 static inline void print_stat( cc::SkipListSet<GC, T, Traits> const& s )
4256 CPPUNIT_MSG( s.statistics() );
4259 template <typename GC, typename Key, typename T, typename Traits>
4260 static inline void print_stat( cc::EllenBinTreeSet<GC, Key, T, Traits> const& s )
4262 CPPUNIT_MSG( s.statistics() );
4265 template <typename T, typename Traits >
4266 static inline void print_stat( cc::CuckooSet< T, Traits > const& s )
4268 CPPUNIT_MSG( s.statistics() << s.mutex_policy_statistics() );
4271 template <typename V, typename... Options>
4272 static inline void print_stat( CuckooStripedSet< V, Options... > const& s )
4274 typedef CuckooStripedSet< V, Options... > set_type;
4275 print_stat( static_cast<typename set_type::cuckoo_base_class const&>(s) );
4278 template <typename V, typename... Options>
4279 static inline void print_stat( CuckooRefinableSet< V, Options... > const& s )
4281 typedef CuckooRefinableSet< V, Options... > set_type;
4282 print_stat( static_cast<typename set_type::cuckoo_base_class const&>(s) );
4287 //*******************************************************
4289 //*******************************************************
4291 template <typename Set>
4292 static inline void additional_check( Set& set )
4295 template <typename Set>
4296 static inline void additional_cleanup( Set& set )
4299 namespace ellen_bintree_check {
4300 static inline void check_stat( cds::intrusive::ellen_bintree::empty_stat const& s )
4302 // Not true for threaded RCU
4304 CPPUNIT_CHECK_CURRENT_EX( ellen_bintree_pool::internal_node_counter::m_nAlloc.get() == ellen_bintree_pool::internal_node_counter::m_nFree.get(),
4305 "m_nAlloc=" << ellen_bintree_pool::internal_node_counter::m_nAlloc.get()
4306 << ", m_nFree=" << ellen_bintree_pool::internal_node_counter::m_nFree.get()
4311 static inline void check_stat( cds::intrusive::ellen_bintree::stat<> const& stat )
4313 CPPUNIT_CHECK_CURRENT( stat.m_nInternalNodeCreated == stat.m_nInternalNodeDeleted );
4314 CPPUNIT_CHECK_CURRENT( stat.m_nUpdateDescCreated == stat.m_nUpdateDescDeleted );
4315 //CPPUNIT_CHECK_CURRENT( ellen_bintree_pool::internal_node_counter::m_nAlloc.get() == ellen_bintree_pool::internal_node_counter::m_nFree.get() );
4316 CPPUNIT_CHECK_CURRENT( ellen_bintree_pool::internal_node_counter::m_nAlloc.get() == stat.m_nInternalNodeCreated );
4317 // true if RCU is not threaded
4318 //CPPUNIT_CHECK_CURRENT( stat.m_nInternalNodeDeleted == ellen_bintree_pool::internal_node_counter::m_nFree.get() );
4320 } // namespace ellen_bintree_check
4322 template <typename GC, typename Key, typename T, typename Traits>
4323 static inline void additional_check( cc::EllenBinTreeSet<GC, Key, T, Traits>& s )
4325 GC::force_dispose();
4326 ellen_bintree_check::check_stat( s.statistics() );
4329 template <typename GC, typename Key, typename T, typename Traits>
4330 static inline void additional_cleanup( cc::EllenBinTreeSet<GC, Key, T, Traits>& s )
4332 ellen_bintree_pool::internal_node_counter::reset();
4337 #endif // ifndef _CDSUNIT_SET2_SET_TYPES_H