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_hrc.h>
14 #include <cds/container/michael_list_ptb.h>
15 #include <cds/container/michael_list_rcu.h>
16 #include <cds/container/lazy_list_hp.h>
17 #include <cds/container/lazy_list_hrc.h>
18 #include <cds/container/lazy_list_ptb.h>
19 #include <cds/container/lazy_list_rcu.h>
21 #include <cds/container/michael_set.h>
22 #include <cds/container/michael_set_rcu.h>
24 #include <cds/container/split_list_set.h>
25 #include <cds/container/split_list_set_rcu.h>
27 #include <cds/container/cuckoo_set.h>
29 #include <cds/container/skip_list_set_hp.h>
30 #include <cds/container/skip_list_set_hrc.h>
31 #include <cds/container/skip_list_set_ptb.h>
32 #include <cds/container/skip_list_set_rcu.h>
34 #include <cds/container/ellen_bintree_set_rcu.h>
35 #include <cds/container/ellen_bintree_set_hp.h>
36 #include <cds/container/ellen_bintree_set_ptb.h>
38 #include <cds/container/striped_set/std_list.h>
39 #include <cds/container/striped_set/std_vector.h>
40 #include <cds/container/striped_set/std_set.h>
41 #include <cds/container/striped_set/std_hash_set.h>
42 #include <cds/container/striped_set/boost_unordered_set.h>
44 #include <boost/version.hpp>
45 #if BOOST_VERSION >= 104800
46 # include <cds/container/striped_set/boost_slist.h>
47 # include <cds/container/striped_set/boost_list.h>
48 # include <cds/container/striped_set/boost_vector.h>
49 # include <cds/container/striped_set/boost_stable_vector.h>
50 # include <cds/container/striped_set/boost_set.h>
51 //# if !(CDS_COMPILER == CDS_COMPILER_MSVC && CDS_COMPILER_VERSION >= 1700)
52 //# define CDS_UNIT_MAP_TYPES_ENABLE_BOOST_FLAT_CONTAINERS
53 # include <cds/container/striped_set/boost_flat_set.h>
56 #include <cds/container/striped_set.h>
58 #include <cds/lock/spinlock.h>
59 #include <boost/functional/hash/hash.hpp>
61 #include "cppunit/cppunit_mini.h"
62 #include "lock/nolock.h"
63 #include "set2/std_set.h"
64 #include "set2/std_hash_set.h"
65 #include "michael_alloc.h"
66 #include "print_cuckoo_stat.h"
67 #include "print_skip_list_stat.h"
68 #include "print_ellenbintree_stat.h"
69 #include "ellen_bintree_update_desc_pool.h"
72 namespace cc = cds::container;
73 namespace co = cds::opt;
75 typedef cds::urcu::gc< cds::urcu::general_instant<> > rcu_gpi;
76 typedef cds::urcu::gc< cds::urcu::general_buffered<> > rcu_gpb;
77 typedef cds::urcu::gc< cds::urcu::general_threaded<> > rcu_gpt;
78 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
79 typedef cds::urcu::gc< cds::urcu::signal_buffered<> > rcu_shb;
80 typedef cds::urcu::gc< cds::urcu::signal_threaded<> > rcu_sht;
83 template <typename V, typename... Options>
84 class CuckooStripedSet:
85 public cc::CuckooSet< V,
86 typename cc::cuckoo::make_traits<
87 co::mutex_policy< cc::cuckoo::striping<> >
93 typedef typename cc::cuckoo::make_traits<
94 co::mutex_policy< cc::cuckoo::striping<> >
96 >::type cuckoo_traits;
98 typedef cc::CuckooSet< V, cuckoo_traits > cuckoo_base_class;
101 CuckooStripedSet( size_t nCapacity, size_t nLoadFactor )
102 : cuckoo_base_class( nCapacity / (nLoadFactor * 16), (unsigned int) 4 )
105 template <typename Q, typename Pred>
106 bool erase_with( Q const& key, Pred pred )
108 return cuckoo_base_class::erase_with( key, typename std::conditional< cuckoo_base_class::c_isSorted, Pred, typename Pred::equal_to>::type() );
112 template <typename V, typename... Options>
113 class CuckooRefinableSet:
114 public cc::CuckooSet< V,
115 typename cc::cuckoo::make_traits<
116 co::mutex_policy< cc::cuckoo::refinable<> >
122 typedef typename cc::cuckoo::make_traits<
123 co::mutex_policy< cc::cuckoo::refinable<> >
125 >::type cuckoo_traits;
127 typedef cc::CuckooSet< V, cuckoo_traits > cuckoo_base_class;
130 CuckooRefinableSet( size_t nCapacity, size_t nLoadFactor )
131 : cuckoo_base_class( nCapacity / (nLoadFactor * 16), (unsigned int) 4 )
134 template <typename Q, typename Pred>
135 bool erase_with( Q const& key, Pred pred )
137 return cuckoo_base_class::erase_with( key, typename std::conditional< cuckoo_base_class::c_isSorted, Pred, typename Pred::equal_to>::type() );
141 template <typename Key>
143 int operator ()(Key const& k1, Key const& k2) const
145 if ( std::less<Key>( k1, k2 ) )
147 return std::less<Key>( k2, k1 ) ? 1 : 0;
151 #define CDSUNIT_INT_COMPARE(t) template <> struct cmp<t> { int operator()( t k1, t k2 ){ return (int)(k1 - k2); } }
152 CDSUNIT_INT_COMPARE(char);
153 CDSUNIT_INT_COMPARE(unsigned char);
154 CDSUNIT_INT_COMPARE(int);
155 CDSUNIT_INT_COMPARE(unsigned int);
156 CDSUNIT_INT_COMPARE(long);
157 CDSUNIT_INT_COMPARE(unsigned long);
158 CDSUNIT_INT_COMPARE(long long);
159 CDSUNIT_INT_COMPARE(unsigned long long);
160 #undef CDSUNIT_INT_COMPARE
163 struct cmp<std::string>
165 int operator()(std::string const& s1, std::string const& s2)
167 return s1.compare( s2 );
169 int operator()(std::string const& s1, char const * s2)
171 return s1.compare( s2 );
173 int operator()(char const * s1, std::string const& s2)
175 return -s2.compare( s1 );
179 template <typename Key, typename Value>
182 typedef Key key_type;
183 typedef Value value_type;
189 /*explicit*/ key_val( key_type const& k ): key(k), val() {}
190 key_val( key_type const& k, value_type const& v ): key(k), val(v) {}
192 template <typename K>
193 /*explicit*/ key_val( K const& k ): key(k) {}
195 template <typename K, typename T>
196 key_val( K const& k, T const& v ): key(k), val(v) {}
199 typedef co::v::hash<key_type> key_hash;
200 typedef std::less<key_type> key_less;
201 typedef cmp<key_type> key_compare;
204 bool operator()( key_val const& k1, key_val const& k2 ) const
206 return key_less()( k1.key, k2.key );
208 bool operator()( key_type const& k1, key_val const& k2 ) const
210 return key_less()( k1, k2.key );
212 bool operator()( key_val const& k1, key_type const& k2 ) const
214 return key_less()( k1.key, k2 );
219 int operator()( key_val const& k1, key_val const& k2 ) const
221 return key_compare()( k1.key, k2.key );
223 int operator()( key_type const& k1, key_val const& k2 ) const
225 return key_compare()( k1, k2.key );
227 int operator()( key_val const& k1, key_type const& k2 ) const
229 return key_compare()( k1.key, k2 );
234 bool operator()( key_val const& k1, key_val const& k2 ) const
236 return key_compare()( k1.key, k2.key ) == 0;
238 bool operator()( key_type const& k1, key_val const& k2 ) const
240 return key_compare()( k1, k2.key ) == 0;
242 bool operator()( key_val const& k1, key_type const& k2 ) const
244 return key_compare()( k1.key, k2 ) == 0;
249 struct hash: public key_hash
251 size_t operator()( key_val const& v ) const
253 return key_hash::operator()( v.key );
255 size_t operator()( key_type const& key ) const
257 return key_hash::operator()( key );
259 template <typename Q>
260 size_t operator()( Q const& k ) const
262 return key_hash::operator()( k );
266 struct hash2: public hash
268 size_t operator()( key_val const& k ) const
270 size_t seed = ~hash::operator ()( k );
271 boost::hash_combine( seed, k.key );
274 size_t operator()( key_type const& k ) const
276 size_t seed = ~hash::operator ()( k );
277 boost::hash_combine( seed, k );
280 template <typename Q>
281 size_t operator()( Q const& k ) const
283 return key_hash::operator()( k );
287 #if (CDS_COMPILER == CDS_COMPILER_MSVC || (CDS_COMPILER == CDS_COMPILER_INTEL && CDS_OS_INTERFACE == CDS_OSI_WINDOWS)) && _MSC_VER < 1600
288 struct hash_less: public stdext::hash_compare< key_type, std::less<key_type> >
290 typedef stdext::hash_compare< key_type, std::less<key_type> > base_class;
291 size_t operator()(const key_val& kv) const
295 size_t operator()(const key_type& k ) const
300 bool operator()(const key_val& kv1, const key_val& kv2) const
302 return less()( kv1, kv2 );
304 bool operator()(const key_type& k1, const key_val& kv2) const
306 return less()( k1, kv2 );
308 bool operator()(const key_val& kv1, const key_type& k2) const
310 return less()( kv1, k2 );
315 // ***************************************************************************
318 typedef cc::MichaelList< cds::gc::HP, key_val,
319 typename cc::michael_list::make_traits<
320 co::compare< compare >
322 > MichaelList_HP_cmp_stdAlloc;
324 typedef cc::MichaelList< cds::gc::HP, key_val,
325 typename cc::michael_list::make_traits<
326 co::compare< compare >
327 ,co::memory_model< co::v::sequential_consistent >
329 > MichaelList_HP_cmp_stdAlloc_seqcst;
331 typedef cc::MichaelList< cds::gc::HP, key_val,
332 typename cc::michael_list::make_traits<
333 co::compare< compare >,
334 co::allocator< memory::MichaelAllocator<int> >
336 > MichaelList_HP_cmp_michaelAlloc;
338 typedef cc::MichaelList< cds::gc::HP, key_val,
339 typename cc::michael_list::make_traits<
342 > MichaelList_HP_less_stdAlloc;
344 typedef cc::MichaelList< cds::gc::HP, key_val,
345 typename cc::michael_list::make_traits<
347 ,co::memory_model< co::v::sequential_consistent >
349 > MichaelList_HP_less_stdAlloc_seqcst;
351 typedef cc::MichaelList< cds::gc::HP, key_val,
352 typename cc::michael_list::make_traits<
354 co::allocator< memory::MichaelAllocator<int> >
356 > MichaelList_HP_less_michaelAlloc;
358 typedef cc::MichaelList< cds::gc::HRC, key_val,
359 typename cc::michael_list::make_traits<
360 co::compare< compare >
362 > MichaelList_HRC_cmp_stdAlloc;
364 typedef cc::MichaelList< cds::gc::HRC, key_val,
365 typename cc::michael_list::make_traits<
366 co::compare< compare >
367 ,co::memory_model< co::v::sequential_consistent >
369 > MichaelList_HRC_cmp_stdAlloc_seqcst;
371 typedef cc::MichaelList< cds::gc::HRC, key_val,
372 typename cc::michael_list::make_traits<
373 co::compare< compare >,
374 co::allocator< memory::MichaelAllocator<int> >
376 > MichaelList_HRC_cmp_michaelAlloc;
378 typedef cc::MichaelList< cds::gc::HRC, key_val,
379 typename cc::michael_list::make_traits<
382 > MichaelList_HRC_less_stdAlloc;
384 typedef cc::MichaelList< cds::gc::HRC, key_val,
385 typename cc::michael_list::make_traits<
387 ,co::memory_model< co::v::sequential_consistent >
389 > MichaelList_HRC_less_stdAlloc_seqcst;
391 typedef cc::MichaelList< cds::gc::HRC, key_val,
392 typename cc::michael_list::make_traits<
394 co::allocator< memory::MichaelAllocator<int> >
396 > MichaelList_HRC_less_michaelAlloc;
398 typedef cc::MichaelList< cds::gc::PTB, key_val,
399 typename cc::michael_list::make_traits<
400 co::compare< compare >
402 > MichaelList_PTB_cmp_stdAlloc;
404 typedef cc::MichaelList< cds::gc::PTB, key_val,
405 typename cc::michael_list::make_traits<
406 co::compare< compare >
407 ,co::memory_model< co::v::sequential_consistent >
409 > MichaelList_PTB_cmp_stdAlloc_seqcst;
411 typedef cc::MichaelList< cds::gc::PTB, key_val,
412 typename cc::michael_list::make_traits<
413 co::compare< compare >,
414 co::allocator< memory::MichaelAllocator<int> >
416 > MichaelList_PTB_cmp_michaelAlloc;
418 typedef cc::MichaelList< cds::gc::PTB, key_val,
419 typename cc::michael_list::make_traits<
422 > MichaelList_PTB_less_stdAlloc;
424 typedef cc::MichaelList< cds::gc::PTB, key_val,
425 typename cc::michael_list::make_traits<
427 ,co::memory_model< co::v::sequential_consistent >
429 > MichaelList_PTB_less_stdAlloc_seqcst;
431 typedef cc::MichaelList< cds::gc::PTB, key_val,
432 typename cc::michael_list::make_traits<
434 co::allocator< memory::MichaelAllocator<int> >
436 > MichaelList_PTB_less_michaelAlloc;
439 typedef cc::MichaelList< rcu_gpi, key_val,
440 typename cc::michael_list::make_traits<
441 co::compare< compare >
443 > MichaelList_RCU_GPI_cmp_stdAlloc;
445 typedef cc::MichaelList< rcu_gpi, key_val,
446 typename cc::michael_list::make_traits<
447 co::compare< compare >
448 ,co::memory_model< co::v::sequential_consistent >
450 > MichaelList_RCU_GPI_cmp_stdAlloc_seqcst;
452 typedef cc::MichaelList< rcu_gpi, key_val,
453 typename cc::michael_list::make_traits<
454 co::compare< compare >,
455 co::allocator< memory::MichaelAllocator<int> >
457 > MichaelList_RCU_GPI_cmp_michaelAlloc;
459 typedef cc::MichaelList< rcu_gpi, key_val,
460 typename cc::michael_list::make_traits<
463 > MichaelList_RCU_GPI_less_stdAlloc;
465 typedef cc::MichaelList< rcu_gpi, key_val,
466 typename cc::michael_list::make_traits<
468 ,co::memory_model< co::v::sequential_consistent >
470 > MichaelList_RCU_GPI_less_stdAlloc_seqcst;
472 typedef cc::MichaelList< rcu_gpi, key_val,
473 typename cc::michael_list::make_traits<
475 co::allocator< memory::MichaelAllocator<int> >
477 > MichaelList_RCU_GPI_less_michaelAlloc;
480 typedef cc::MichaelList< rcu_gpb, key_val,
481 typename cc::michael_list::make_traits<
482 co::compare< compare >
484 > MichaelList_RCU_GPB_cmp_stdAlloc;
486 typedef cc::MichaelList< rcu_gpb, key_val,
487 typename cc::michael_list::make_traits<
488 co::compare< compare >
489 ,co::memory_model< co::v::sequential_consistent >
491 > MichaelList_RCU_GPB_cmp_stdAlloc_seqcst;
493 typedef cc::MichaelList< rcu_gpb, key_val,
494 typename cc::michael_list::make_traits<
495 co::compare< compare >,
496 co::allocator< memory::MichaelAllocator<int> >
498 > MichaelList_RCU_GPB_cmp_michaelAlloc;
500 typedef cc::MichaelList< rcu_gpb, key_val,
501 typename cc::michael_list::make_traits<
504 > MichaelList_RCU_GPB_less_stdAlloc;
506 typedef cc::MichaelList< rcu_gpb, key_val,
507 typename cc::michael_list::make_traits<
509 ,co::memory_model< co::v::sequential_consistent >
511 > MichaelList_RCU_GPB_less_stdAlloc_seqcst;
513 typedef cc::MichaelList< rcu_gpb, key_val,
514 typename cc::michael_list::make_traits<
516 co::allocator< memory::MichaelAllocator<int> >
518 > MichaelList_RCU_GPB_less_michaelAlloc;
521 typedef cc::MichaelList< rcu_gpt, key_val,
522 typename cc::michael_list::make_traits<
523 co::compare< compare >
525 > MichaelList_RCU_GPT_cmp_stdAlloc;
527 typedef cc::MichaelList< rcu_gpt, key_val,
528 typename cc::michael_list::make_traits<
529 co::compare< compare >
530 ,co::memory_model< co::v::sequential_consistent >
532 > MichaelList_RCU_GPT_cmp_stdAlloc_seqcst;
534 typedef cc::MichaelList< rcu_gpt, key_val,
535 typename cc::michael_list::make_traits<
536 co::compare< compare >,
537 co::allocator< memory::MichaelAllocator<int> >
539 > MichaelList_RCU_GPT_cmp_michaelAlloc;
541 typedef cc::MichaelList< rcu_gpt, key_val,
542 typename cc::michael_list::make_traits<
545 > MichaelList_RCU_GPT_less_stdAlloc;
547 typedef cc::MichaelList< rcu_gpt, key_val,
548 typename cc::michael_list::make_traits<
550 ,co::memory_model< co::v::sequential_consistent >
552 > MichaelList_RCU_GPT_less_stdAlloc_seqcst;
554 typedef cc::MichaelList< rcu_gpt, key_val,
555 typename cc::michael_list::make_traits<
557 co::allocator< memory::MichaelAllocator<int> >
559 > MichaelList_RCU_GPT_less_michaelAlloc;
561 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
562 typedef cc::MichaelList< rcu_shb, key_val,
563 typename cc::michael_list::make_traits<
564 co::compare< compare >
566 > MichaelList_RCU_SHB_cmp_stdAlloc;
568 typedef cc::MichaelList< rcu_shb, key_val,
569 typename cc::michael_list::make_traits<
570 co::compare< compare >
571 ,co::memory_model< co::v::sequential_consistent >
573 > MichaelList_RCU_SHB_cmp_stdAlloc_seqcst;
575 typedef cc::MichaelList< rcu_shb, key_val,
576 typename cc::michael_list::make_traits<
577 co::compare< compare >,
578 co::allocator< memory::MichaelAllocator<int> >
580 > MichaelList_RCU_SHB_cmp_michaelAlloc;
582 typedef cc::MichaelList< rcu_shb, key_val,
583 typename cc::michael_list::make_traits<
586 > MichaelList_RCU_SHB_less_stdAlloc;
588 typedef cc::MichaelList< rcu_shb, key_val,
589 typename cc::michael_list::make_traits<
591 ,co::memory_model< co::v::sequential_consistent >
593 > MichaelList_RCU_SHB_less_stdAlloc_seqcst;
595 typedef cc::MichaelList< rcu_shb, key_val,
596 typename cc::michael_list::make_traits<
598 co::allocator< memory::MichaelAllocator<int> >
600 > MichaelList_RCU_SHB_less_michaelAlloc;
603 typedef cc::MichaelList< rcu_sht, key_val,
604 typename cc::michael_list::make_traits<
605 co::compare< compare >
607 > MichaelList_RCU_SHT_cmp_stdAlloc;
609 typedef cc::MichaelList< rcu_sht, key_val,
610 typename cc::michael_list::make_traits<
611 co::compare< compare >
612 ,co::memory_model< co::v::sequential_consistent >
614 > MichaelList_RCU_SHT_cmp_stdAlloc_seqcst;
616 typedef cc::MichaelList< rcu_sht, key_val,
617 typename cc::michael_list::make_traits<
618 co::compare< compare >,
619 co::allocator< memory::MichaelAllocator<int> >
621 > MichaelList_RCU_SHT_cmp_michaelAlloc;
623 typedef cc::MichaelList< rcu_sht, key_val,
624 typename cc::michael_list::make_traits<
627 > MichaelList_RCU_SHT_less_stdAlloc;
629 typedef cc::MichaelList< rcu_sht, key_val,
630 typename cc::michael_list::make_traits<
632 ,co::memory_model< co::v::sequential_consistent >
634 > MichaelList_RCU_SHT_less_stdAlloc_seqcst;
636 typedef cc::MichaelList< rcu_sht, key_val,
637 typename cc::michael_list::make_traits<
639 co::allocator< memory::MichaelAllocator<int> >
641 > MichaelList_RCU_SHT_less_michaelAlloc;
644 // ***************************************************************************
645 // MichaelHashSet based on MichaelList
647 typedef cc::MichaelHashSet< cds::gc::HP, MichaelList_HP_cmp_stdAlloc,
648 typename cc::michael_set::make_traits<
651 > MichaelSet_HP_cmp_stdAlloc;
653 typedef cc::MichaelHashSet< cds::gc::HP, MichaelList_HP_cmp_stdAlloc_seqcst,
654 typename cc::michael_set::make_traits<
657 > MichaelSet_HP_cmp_stdAlloc_seqcst;
659 typedef cc::MichaelHashSet< cds::gc::HP, MichaelList_HP_cmp_michaelAlloc,
660 typename cc::michael_set::make_traits<
662 co::allocator< memory::MichaelAllocator<int> >
664 > MichaelSet_HP_cmp_michaelAlloc;
666 typedef cc::MichaelHashSet< cds::gc::HP, MichaelList_HP_less_stdAlloc,
667 typename cc::michael_set::make_traits<
670 > MichaelSet_HP_less_stdAlloc;
672 typedef cc::MichaelHashSet< cds::gc::HP, MichaelList_HP_less_stdAlloc_seqcst,
673 typename cc::michael_set::make_traits<
676 > MichaelSet_HP_less_stdAlloc_seqcst;
678 typedef cc::MichaelHashSet< cds::gc::HP, MichaelList_HP_less_michaelAlloc,
679 typename cc::michael_set::make_traits<
681 co::allocator< memory::MichaelAllocator<int> >
683 > MichaelSet_HP_less_michaelAlloc;
685 typedef cc::MichaelHashSet< cds::gc::HRC, MichaelList_HRC_cmp_stdAlloc,
686 typename cc::michael_set::make_traits<
689 > MichaelSet_HRC_cmp_stdAlloc;
691 typedef cc::MichaelHashSet< cds::gc::HRC, MichaelList_HRC_cmp_stdAlloc_seqcst,
692 typename cc::michael_set::make_traits<
695 > MichaelSet_HRC_cmp_stdAlloc_seqcst;
697 typedef cc::MichaelHashSet< cds::gc::HRC, MichaelList_HRC_cmp_michaelAlloc,
698 typename cc::michael_set::make_traits<
700 co::allocator< memory::MichaelAllocator<int> >
702 > MichaelSet_HRC_cmp_michaelAlloc;
704 typedef cc::MichaelHashSet< cds::gc::HRC, MichaelList_HRC_less_stdAlloc,
705 typename cc::michael_set::make_traits<
708 > MichaelSet_HRC_less_stdAlloc;
710 typedef cc::MichaelHashSet< cds::gc::HRC, MichaelList_HRC_less_stdAlloc_seqcst,
711 typename cc::michael_set::make_traits<
714 > MichaelSet_HRC_less_stdAlloc_seqcst;
716 typedef cc::MichaelHashSet< cds::gc::HRC, MichaelList_HRC_less_michaelAlloc,
717 typename cc::michael_set::make_traits<
719 co::allocator< memory::MichaelAllocator<int> >
721 > MichaelSet_HRC_less_michaelAlloc;
723 typedef cc::MichaelHashSet< cds::gc::PTB, MichaelList_PTB_cmp_stdAlloc,
724 typename cc::michael_set::make_traits<
727 > MichaelSet_PTB_cmp_stdAlloc;
729 typedef cc::MichaelHashSet< cds::gc::PTB, MichaelList_PTB_cmp_stdAlloc_seqcst,
730 typename cc::michael_set::make_traits<
733 > MichaelSet_PTB_cmp_stdAlloc_seqcst;
735 typedef cc::MichaelHashSet< cds::gc::PTB, MichaelList_PTB_cmp_michaelAlloc,
736 typename cc::michael_set::make_traits<
738 co::allocator< memory::MichaelAllocator<int> >
740 > MichaelSet_PTB_cmp_michaelAlloc;
742 typedef cc::MichaelHashSet< cds::gc::PTB, MichaelList_PTB_less_stdAlloc,
743 typename cc::michael_set::make_traits<
746 > MichaelSet_PTB_less_stdAlloc;
748 typedef cc::MichaelHashSet< cds::gc::PTB, MichaelList_PTB_less_stdAlloc_seqcst,
749 typename cc::michael_set::make_traits<
752 > MichaelSet_PTB_less_stdAlloc_seqcst;
754 typedef cc::MichaelHashSet< cds::gc::PTB, MichaelList_PTB_less_michaelAlloc,
755 typename cc::michael_set::make_traits<
757 co::allocator< memory::MichaelAllocator<int> >
759 > MichaelSet_PTB_less_michaelAlloc;
761 // general_instant RCU
762 typedef cc::MichaelHashSet< rcu_gpi, MichaelList_RCU_GPI_cmp_stdAlloc,
763 typename cc::michael_set::make_traits<
766 > MichaelSet_RCU_GPI_cmp_stdAlloc;
768 typedef cc::MichaelHashSet< rcu_gpi, MichaelList_RCU_GPI_cmp_stdAlloc_seqcst,
769 typename cc::michael_set::make_traits<
772 > MichaelSet_RCU_GPI_cmp_stdAlloc_seqcst;
774 typedef cc::MichaelHashSet< rcu_gpi, MichaelList_RCU_GPI_cmp_michaelAlloc,
775 typename cc::michael_set::make_traits<
777 co::allocator< memory::MichaelAllocator<int> >
779 > MichaelSet_RCU_GPI_cmp_michaelAlloc;
781 typedef cc::MichaelHashSet< rcu_gpi, MichaelList_RCU_GPI_less_stdAlloc,
782 typename cc::michael_set::make_traits<
785 > MichaelSet_RCU_GPI_less_stdAlloc;
787 typedef cc::MichaelHashSet< rcu_gpi, MichaelList_RCU_GPI_less_stdAlloc_seqcst,
788 typename cc::michael_set::make_traits<
791 > MichaelSet_RCU_GPI_less_stdAlloc_seqcst;
793 typedef cc::MichaelHashSet< rcu_gpi, MichaelList_RCU_GPI_less_michaelAlloc,
794 typename cc::michael_set::make_traits<
796 co::allocator< memory::MichaelAllocator<int> >
798 > MichaelSet_RCU_GPI_less_michaelAlloc;
800 // general_buffered RCU
801 typedef cc::MichaelHashSet< rcu_gpb, MichaelList_RCU_GPB_cmp_stdAlloc,
802 typename cc::michael_set::make_traits<
805 > MichaelSet_RCU_GPB_cmp_stdAlloc;
807 typedef cc::MichaelHashSet< rcu_gpb, MichaelList_RCU_GPB_cmp_stdAlloc_seqcst,
808 typename cc::michael_set::make_traits<
811 > MichaelSet_RCU_GPB_cmp_stdAlloc_seqcst;
813 typedef cc::MichaelHashSet< rcu_gpb, MichaelList_RCU_GPB_cmp_michaelAlloc,
814 typename cc::michael_set::make_traits<
816 co::allocator< memory::MichaelAllocator<int> >
818 > MichaelSet_RCU_GPB_cmp_michaelAlloc;
820 typedef cc::MichaelHashSet< rcu_gpb, MichaelList_RCU_GPB_less_stdAlloc,
821 typename cc::michael_set::make_traits<
824 > MichaelSet_RCU_GPB_less_stdAlloc;
826 typedef cc::MichaelHashSet< rcu_gpb, MichaelList_RCU_GPB_less_stdAlloc_seqcst,
827 typename cc::michael_set::make_traits<
830 > MichaelSet_RCU_GPB_less_stdAlloc_seqcst;
832 typedef cc::MichaelHashSet< rcu_gpb, MichaelList_RCU_GPB_less_michaelAlloc,
833 typename cc::michael_set::make_traits<
835 co::allocator< memory::MichaelAllocator<int> >
837 > MichaelSet_RCU_GPB_less_michaelAlloc;
839 // general_threaded RCU
840 typedef cc::MichaelHashSet< rcu_gpt, MichaelList_RCU_GPT_cmp_stdAlloc,
841 typename cc::michael_set::make_traits<
844 > MichaelSet_RCU_GPT_cmp_stdAlloc;
846 typedef cc::MichaelHashSet< rcu_gpt, MichaelList_RCU_GPT_cmp_stdAlloc_seqcst,
847 typename cc::michael_set::make_traits<
850 > MichaelSet_RCU_GPT_cmp_stdAlloc_seqcst;
852 typedef cc::MichaelHashSet< rcu_gpt, MichaelList_RCU_GPT_cmp_michaelAlloc,
853 typename cc::michael_set::make_traits<
855 co::allocator< memory::MichaelAllocator<int> >
857 > MichaelSet_RCU_GPT_cmp_michaelAlloc;
859 typedef cc::MichaelHashSet< rcu_gpt, MichaelList_RCU_GPT_less_stdAlloc,
860 typename cc::michael_set::make_traits<
863 > MichaelSet_RCU_GPT_less_stdAlloc;
865 typedef cc::MichaelHashSet< rcu_gpt, MichaelList_RCU_GPT_less_stdAlloc_seqcst,
866 typename cc::michael_set::make_traits<
869 > MichaelSet_RCU_GPT_less_stdAlloc_seqcst;
871 typedef cc::MichaelHashSet< rcu_gpt, MichaelList_RCU_GPT_less_michaelAlloc,
872 typename cc::michael_set::make_traits<
874 co::allocator< memory::MichaelAllocator<int> >
876 > MichaelSet_RCU_GPT_less_michaelAlloc;
878 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
879 // signal_buffered RCU
880 typedef cc::MichaelHashSet< rcu_shb, MichaelList_RCU_SHB_cmp_stdAlloc,
881 typename cc::michael_set::make_traits<
884 > MichaelSet_RCU_SHB_cmp_stdAlloc;
886 typedef cc::MichaelHashSet< rcu_shb, MichaelList_RCU_SHB_cmp_stdAlloc_seqcst,
887 typename cc::michael_set::make_traits<
890 > MichaelSet_RCU_SHB_cmp_stdAlloc_seqcst;
892 typedef cc::MichaelHashSet< rcu_shb, MichaelList_RCU_SHB_cmp_michaelAlloc,
893 typename cc::michael_set::make_traits<
895 co::allocator< memory::MichaelAllocator<int> >
897 > MichaelSet_RCU_SHB_cmp_michaelAlloc;
899 typedef cc::MichaelHashSet< rcu_shb, MichaelList_RCU_SHB_less_stdAlloc,
900 typename cc::michael_set::make_traits<
903 > MichaelSet_RCU_SHB_less_stdAlloc;
905 typedef cc::MichaelHashSet< rcu_shb, MichaelList_RCU_SHB_less_stdAlloc_seqcst,
906 typename cc::michael_set::make_traits<
909 > MichaelSet_RCU_SHB_less_stdAlloc_seqcst;
911 typedef cc::MichaelHashSet< rcu_shb, MichaelList_RCU_SHB_less_michaelAlloc,
912 typename cc::michael_set::make_traits<
914 co::allocator< memory::MichaelAllocator<int> >
916 > MichaelSet_RCU_SHB_less_michaelAlloc;
918 // signal_threaded RCU
919 typedef cc::MichaelHashSet< rcu_sht, MichaelList_RCU_SHT_cmp_stdAlloc,
920 typename cc::michael_set::make_traits<
923 > MichaelSet_RCU_SHT_cmp_stdAlloc;
925 typedef cc::MichaelHashSet< rcu_sht, MichaelList_RCU_SHT_cmp_stdAlloc_seqcst,
926 typename cc::michael_set::make_traits<
929 > MichaelSet_RCU_SHT_cmp_stdAlloc_seqcst;
931 typedef cc::MichaelHashSet< rcu_sht, MichaelList_RCU_SHT_cmp_michaelAlloc,
932 typename cc::michael_set::make_traits<
934 co::allocator< memory::MichaelAllocator<int> >
936 > MichaelSet_RCU_SHT_cmp_michaelAlloc;
938 typedef cc::MichaelHashSet< rcu_sht, MichaelList_RCU_SHT_less_stdAlloc,
939 typename cc::michael_set::make_traits<
942 > MichaelSet_RCU_SHT_less_stdAlloc;
944 typedef cc::MichaelHashSet< rcu_sht, MichaelList_RCU_SHT_less_stdAlloc_seqcst,
945 typename cc::michael_set::make_traits<
948 > MichaelSet_RCU_SHT_less_stdAlloc_seqcst;
950 typedef cc::MichaelHashSet< rcu_sht, MichaelList_RCU_SHT_less_michaelAlloc,
951 typename cc::michael_set::make_traits<
953 co::allocator< memory::MichaelAllocator<int> >
955 > MichaelSet_RCU_SHT_less_michaelAlloc;
959 // ***************************************************************************
962 typedef cc::LazyList< cds::gc::HP, key_val,
963 typename cc::lazy_list::make_traits<
964 co::compare< compare >
966 > LazyList_HP_cmp_stdAlloc;
968 typedef cc::LazyList< cds::gc::HP, key_val,
969 typename cc::lazy_list::make_traits<
970 co::compare< compare >
971 ,co::memory_model< co::v::sequential_consistent >
973 > LazyList_HP_cmp_stdAlloc_seqcst;
975 typedef cc::LazyList< cds::gc::HP, key_val,
976 typename cc::lazy_list::make_traits<
977 co::compare< compare >,
978 co::allocator< memory::MichaelAllocator<int> >
980 > LazyList_HP_cmp_michaelAlloc;
982 typedef cc::LazyList< cds::gc::HP, key_val,
983 typename cc::lazy_list::make_traits<
986 > LazyList_HP_less_stdAlloc;
988 typedef cc::LazyList< cds::gc::HP, key_val,
989 typename cc::lazy_list::make_traits<
991 ,co::memory_model< co::v::sequential_consistent >
993 > LazyList_HP_less_stdAlloc_seqcst;
995 typedef cc::LazyList< cds::gc::HP, key_val,
996 typename cc::lazy_list::make_traits<
998 co::allocator< memory::MichaelAllocator<int> >
1000 > LazyList_HP_less_michaelAlloc;
1002 typedef cc::LazyList< cds::gc::HRC, key_val,
1003 typename cc::lazy_list::make_traits<
1004 co::compare< compare >
1006 > LazyList_HRC_cmp_stdAlloc;
1008 typedef cc::LazyList< cds::gc::HRC, key_val,
1009 typename cc::lazy_list::make_traits<
1010 co::compare< compare >
1011 ,co::memory_model< co::v::sequential_consistent >
1013 > LazyList_HRC_cmp_stdAlloc_seqcst;
1015 typedef cc::LazyList< cds::gc::HRC, key_val,
1016 typename cc::lazy_list::make_traits<
1017 co::compare< compare >,
1018 co::allocator< memory::MichaelAllocator<int> >
1020 > LazyList_HRC_cmp_michaelAlloc;
1022 typedef cc::LazyList< cds::gc::HRC, key_val,
1023 typename cc::lazy_list::make_traits<
1026 > LazyList_HRC_less_stdAlloc;
1028 typedef cc::LazyList< cds::gc::HRC, key_val,
1029 typename cc::lazy_list::make_traits<
1031 ,co::memory_model< co::v::sequential_consistent >
1033 > LazyList_HRC_less_stdAlloc_seqcst;
1035 typedef cc::LazyList< cds::gc::HRC, key_val,
1036 typename cc::lazy_list::make_traits<
1038 co::allocator< memory::MichaelAllocator<int> >
1040 > LazyList_HRC_less_michaelAlloc;
1042 typedef cc::LazyList< cds::gc::PTB, key_val,
1043 typename cc::lazy_list::make_traits<
1044 co::compare< compare >
1046 > LazyList_PTB_cmp_stdAlloc;
1048 typedef cc::LazyList< cds::gc::PTB, key_val,
1049 typename cc::lazy_list::make_traits<
1050 co::compare< compare >
1051 ,co::memory_model< co::v::sequential_consistent >
1053 > LazyList_PTB_cmp_stdAlloc_seqcst;
1055 typedef cc::LazyList< cds::gc::PTB, key_val,
1056 typename cc::lazy_list::make_traits<
1057 co::compare< compare >,
1058 co::allocator< memory::MichaelAllocator<int> >
1060 > LazyList_PTB_cmp_michaelAlloc;
1062 typedef cc::LazyList< cds::gc::PTB, key_val,
1063 typename cc::lazy_list::make_traits<
1066 > LazyList_PTB_less_stdAlloc;
1068 typedef cc::LazyList< cds::gc::PTB, key_val,
1069 typename cc::lazy_list::make_traits<
1071 ,co::memory_model< co::v::sequential_consistent >
1073 > LazyList_PTB_less_stdAlloc_seqcst;
1075 typedef cc::LazyList< cds::gc::PTB, key_val,
1076 typename cc::lazy_list::make_traits<
1078 co::allocator< memory::MichaelAllocator<int> >
1080 > LazyList_PTB_less_michaelAlloc;
1083 typedef cc::LazyList< rcu_gpi, key_val,
1084 typename cc::lazy_list::make_traits<
1085 co::compare< compare >
1087 > LazyList_RCU_GPI_cmp_stdAlloc;
1089 typedef cc::LazyList< rcu_gpi, key_val,
1090 typename cc::lazy_list::make_traits<
1091 co::compare< compare >
1092 ,co::memory_model< co::v::sequential_consistent >
1094 > LazyList_RCU_GPI_cmp_stdAlloc_seqcst;
1096 typedef cc::LazyList< rcu_gpi, key_val,
1097 typename cc::lazy_list::make_traits<
1098 co::compare< compare >,
1099 co::allocator< memory::MichaelAllocator<int> >
1101 > LazyList_RCU_GPI_cmp_michaelAlloc;
1103 typedef cc::LazyList< rcu_gpi, key_val,
1104 typename cc::lazy_list::make_traits<
1107 > LazyList_RCU_GPI_less_stdAlloc;
1109 typedef cc::LazyList< rcu_gpi, key_val,
1110 typename cc::lazy_list::make_traits<
1112 ,co::memory_model< co::v::sequential_consistent >
1114 > LazyList_RCU_GPI_less_stdAlloc_seqcst;
1116 typedef cc::LazyList< rcu_gpi, key_val,
1117 typename cc::lazy_list::make_traits<
1119 co::allocator< memory::MichaelAllocator<int> >
1121 > LazyList_RCU_GPI_less_michaelAlloc;
1123 typedef cc::LazyList< rcu_gpb, key_val,
1124 typename cc::lazy_list::make_traits<
1125 co::compare< compare >
1127 > LazyList_RCU_GPB_cmp_stdAlloc;
1129 typedef cc::LazyList< rcu_gpb, key_val,
1130 typename cc::lazy_list::make_traits<
1131 co::compare< compare >
1132 ,co::memory_model< co::v::sequential_consistent >
1134 > LazyList_RCU_GPB_cmp_stdAlloc_seqcst;
1136 typedef cc::LazyList< rcu_gpb, key_val,
1137 typename cc::lazy_list::make_traits<
1138 co::compare< compare >,
1139 co::allocator< memory::MichaelAllocator<int> >
1141 > LazyList_RCU_GPB_cmp_michaelAlloc;
1143 typedef cc::LazyList< rcu_gpb, key_val,
1144 typename cc::lazy_list::make_traits<
1147 > LazyList_RCU_GPB_less_stdAlloc;
1149 typedef cc::LazyList< rcu_gpb, key_val,
1150 typename cc::lazy_list::make_traits<
1152 ,co::memory_model< co::v::sequential_consistent >
1154 > LazyList_RCU_GPB_less_stdAlloc_seqcst;
1156 typedef cc::LazyList< rcu_gpb, key_val,
1157 typename cc::lazy_list::make_traits<
1159 co::allocator< memory::MichaelAllocator<int> >
1161 > LazyList_RCU_GPB_less_michaelAlloc;
1164 typedef cc::LazyList< rcu_gpt, key_val,
1165 typename cc::lazy_list::make_traits<
1166 co::compare< compare >
1168 > LazyList_RCU_GPT_cmp_stdAlloc;
1170 typedef cc::LazyList< rcu_gpt, key_val,
1171 typename cc::lazy_list::make_traits<
1172 co::compare< compare >
1173 ,co::memory_model< co::v::sequential_consistent >
1175 > LazyList_RCU_GPT_cmp_stdAlloc_seqcst;
1177 typedef cc::LazyList< rcu_gpt, key_val,
1178 typename cc::lazy_list::make_traits<
1179 co::compare< compare >,
1180 co::allocator< memory::MichaelAllocator<int> >
1182 > LazyList_RCU_GPT_cmp_michaelAlloc;
1184 typedef cc::LazyList< rcu_gpt, key_val,
1185 typename cc::lazy_list::make_traits<
1188 > LazyList_RCU_GPT_less_stdAlloc;
1190 typedef cc::LazyList< rcu_gpt, key_val,
1191 typename cc::lazy_list::make_traits<
1193 ,co::memory_model< co::v::sequential_consistent >
1195 > LazyList_RCU_GPT_less_stdAlloc_seqcst;
1197 typedef cc::LazyList< rcu_gpt, key_val,
1198 typename cc::lazy_list::make_traits<
1200 co::allocator< memory::MichaelAllocator<int> >
1202 > LazyList_RCU_GPT_less_michaelAlloc;
1204 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
1205 typedef cc::LazyList< rcu_shb, key_val,
1206 typename cc::lazy_list::make_traits<
1207 co::compare< compare >
1209 > LazyList_RCU_SHB_cmp_stdAlloc;
1211 typedef cc::LazyList< rcu_shb, key_val,
1212 typename cc::lazy_list::make_traits<
1213 co::compare< compare >
1214 ,co::memory_model< co::v::sequential_consistent >
1216 > LazyList_RCU_SHB_cmp_stdAlloc_seqcst;
1218 typedef cc::LazyList< rcu_shb, key_val,
1219 typename cc::lazy_list::make_traits<
1220 co::compare< compare >,
1221 co::allocator< memory::MichaelAllocator<int> >
1223 > LazyList_RCU_SHB_cmp_michaelAlloc;
1225 typedef cc::LazyList< rcu_shb, key_val,
1226 typename cc::lazy_list::make_traits<
1229 > LazyList_RCU_SHB_less_stdAlloc;
1231 typedef cc::LazyList< rcu_shb, key_val,
1232 typename cc::lazy_list::make_traits<
1234 ,co::memory_model< co::v::sequential_consistent >
1236 > LazyList_RCU_SHB_less_stdAlloc_seqcst;
1238 typedef cc::LazyList< rcu_shb, key_val,
1239 typename cc::lazy_list::make_traits<
1241 co::allocator< memory::MichaelAllocator<int> >
1243 > LazyList_RCU_SHB_less_michaelAlloc;
1246 typedef cc::LazyList< rcu_sht, key_val,
1247 typename cc::lazy_list::make_traits<
1248 co::compare< compare >
1250 > LazyList_RCU_SHT_cmp_stdAlloc;
1252 typedef cc::LazyList< rcu_sht, key_val,
1253 typename cc::lazy_list::make_traits<
1254 co::compare< compare >
1255 ,co::memory_model< co::v::sequential_consistent >
1257 > LazyList_RCU_SHT_cmp_stdAlloc_seqcst;
1259 typedef cc::LazyList< rcu_sht, key_val,
1260 typename cc::lazy_list::make_traits<
1261 co::compare< compare >,
1262 co::allocator< memory::MichaelAllocator<int> >
1264 > LazyList_RCU_SHT_cmp_michaelAlloc;
1266 typedef cc::LazyList< rcu_sht, key_val,
1267 typename cc::lazy_list::make_traits<
1270 > LazyList_RCU_SHT_less_stdAlloc;
1272 typedef cc::LazyList< rcu_sht, key_val,
1273 typename cc::lazy_list::make_traits<
1275 ,co::memory_model< co::v::sequential_consistent >
1277 > LazyList_RCU_SHT_less_stdAlloc_seqcst;
1279 typedef cc::LazyList< rcu_sht, key_val,
1280 typename cc::lazy_list::make_traits<
1282 co::allocator< memory::MichaelAllocator<int> >
1284 > LazyList_RCU_SHT_less_michaelAlloc;
1288 // ***************************************************************************
1289 // MichaelHashSet based on LazyList
1291 typedef cc::MichaelHashSet< cds::gc::HP, LazyList_HP_cmp_stdAlloc,
1292 typename cc::michael_set::make_traits<
1295 > MichaelSet_Lazy_HP_cmp_stdAlloc;
1297 typedef cc::MichaelHashSet< cds::gc::HP, LazyList_HP_cmp_stdAlloc_seqcst,
1298 typename cc::michael_set::make_traits<
1301 > MichaelSet_Lazy_HP_cmp_stdAlloc_seqcst;
1303 typedef cc::MichaelHashSet< cds::gc::HP, LazyList_HP_cmp_michaelAlloc,
1304 typename cc::michael_set::make_traits<
1306 co::allocator< memory::MichaelAllocator<int> >
1308 > MichaelSet_Lazy_HP_cmp_michaelAlloc;
1310 typedef cc::MichaelHashSet< cds::gc::HP, LazyList_HP_less_stdAlloc,
1311 typename cc::michael_set::make_traits<
1314 > MichaelSet_Lazy_HP_less_stdAlloc;
1316 typedef cc::MichaelHashSet< cds::gc::HP, LazyList_HP_less_stdAlloc_seqcst,
1317 typename cc::michael_set::make_traits<
1320 > MichaelSet_Lazy_HP_less_stdAlloc_seqcst;
1322 typedef cc::MichaelHashSet< cds::gc::HP, LazyList_HP_less_michaelAlloc,
1323 typename cc::michael_set::make_traits<
1325 co::allocator< memory::MichaelAllocator<int> >
1327 > MichaelSet_Lazy_HP_less_michaelAlloc;
1329 typedef cc::MichaelHashSet< cds::gc::HRC, LazyList_HRC_cmp_stdAlloc,
1330 typename cc::michael_set::make_traits<
1333 > MichaelSet_Lazy_HRC_cmp_stdAlloc;
1335 typedef cc::MichaelHashSet< cds::gc::HRC, LazyList_HRC_cmp_stdAlloc_seqcst,
1336 typename cc::michael_set::make_traits<
1339 > MichaelSet_Lazy_HRC_cmp_stdAlloc_seqcst;
1341 typedef cc::MichaelHashSet< cds::gc::HRC, LazyList_HRC_cmp_michaelAlloc,
1342 typename cc::michael_set::make_traits<
1344 co::allocator< memory::MichaelAllocator<int> >
1346 > MichaelSet_Lazy_HRC_cmp_michaelAlloc;
1348 typedef cc::MichaelHashSet< cds::gc::HRC, LazyList_HRC_less_stdAlloc,
1349 typename cc::michael_set::make_traits<
1352 > MichaelSet_Lazy_HRC_less_stdAlloc;
1354 typedef cc::MichaelHashSet< cds::gc::HRC, LazyList_HRC_less_stdAlloc_seqcst,
1355 typename cc::michael_set::make_traits<
1358 > MichaelSet_Lazy_HRC_less_stdAlloc_seqcst;
1360 typedef cc::MichaelHashSet< cds::gc::HRC, LazyList_HRC_less_michaelAlloc,
1361 typename cc::michael_set::make_traits<
1363 co::allocator< memory::MichaelAllocator<int> >
1365 > MichaelSet_Lazy_HRC_less_michaelAlloc;
1367 typedef cc::MichaelHashSet< cds::gc::PTB, LazyList_PTB_cmp_stdAlloc,
1368 typename cc::michael_set::make_traits<
1371 > MichaelSet_Lazy_PTB_cmp_stdAlloc;
1373 typedef cc::MichaelHashSet< cds::gc::PTB, LazyList_PTB_cmp_stdAlloc_seqcst,
1374 typename cc::michael_set::make_traits<
1377 > MichaelSet_Lazy_PTB_cmp_stdAlloc_seqcst;
1379 typedef cc::MichaelHashSet< cds::gc::PTB, LazyList_PTB_cmp_michaelAlloc,
1380 typename cc::michael_set::make_traits<
1382 co::allocator< memory::MichaelAllocator<int> >
1384 > MichaelSet_Lazy_PTB_cmp_michaelAlloc;
1386 typedef cc::MichaelHashSet< cds::gc::PTB, LazyList_PTB_less_stdAlloc,
1387 typename cc::michael_set::make_traits<
1390 > MichaelSet_Lazy_PTB_less_stdAlloc;
1392 typedef cc::MichaelHashSet< cds::gc::PTB, LazyList_PTB_less_stdAlloc_seqcst,
1393 typename cc::michael_set::make_traits<
1396 > MichaelSet_Lazy_PTB_less_stdAlloc_seqcst;
1398 typedef cc::MichaelHashSet< cds::gc::PTB, LazyList_PTB_less_michaelAlloc,
1399 typename cc::michael_set::make_traits<
1401 co::allocator< memory::MichaelAllocator<int> >
1403 > MichaelSet_Lazy_PTB_less_michaelAlloc;
1406 typedef cc::MichaelHashSet< rcu_gpi, LazyList_RCU_GPI_cmp_stdAlloc,
1407 typename cc::michael_set::make_traits<
1410 > MichaelSet_Lazy_RCU_GPI_cmp_stdAlloc;
1412 typedef cc::MichaelHashSet< rcu_gpi, LazyList_RCU_GPI_cmp_stdAlloc_seqcst,
1413 typename cc::michael_set::make_traits<
1416 > MichaelSet_Lazy_RCU_GPI_cmp_stdAlloc_seqcst;
1418 typedef cc::MichaelHashSet< rcu_gpi, LazyList_RCU_GPI_cmp_michaelAlloc,
1419 typename cc::michael_set::make_traits<
1421 co::allocator< memory::MichaelAllocator<int> >
1423 > MichaelSet_Lazy_RCU_GPI_cmp_michaelAlloc;
1425 typedef cc::MichaelHashSet< rcu_gpi, LazyList_RCU_GPI_less_stdAlloc,
1426 typename cc::michael_set::make_traits<
1429 > MichaelSet_Lazy_RCU_GPI_less_stdAlloc;
1431 typedef cc::MichaelHashSet< rcu_gpi, LazyList_RCU_GPI_less_stdAlloc_seqcst,
1432 typename cc::michael_set::make_traits<
1435 > MichaelSet_Lazy_RCU_GPI_less_stdAlloc_seqcst;
1437 typedef cc::MichaelHashSet< rcu_gpi, LazyList_RCU_GPI_less_michaelAlloc,
1438 typename cc::michael_set::make_traits<
1440 co::allocator< memory::MichaelAllocator<int> >
1442 > MichaelSet_Lazy_RCU_GPI_less_michaelAlloc;
1445 typedef cc::MichaelHashSet< rcu_gpb, LazyList_RCU_GPB_cmp_stdAlloc,
1446 typename cc::michael_set::make_traits<
1449 > MichaelSet_Lazy_RCU_GPB_cmp_stdAlloc;
1451 typedef cc::MichaelHashSet< rcu_gpb, LazyList_RCU_GPB_cmp_stdAlloc_seqcst,
1452 typename cc::michael_set::make_traits<
1455 > MichaelSet_Lazy_RCU_GPB_cmp_stdAlloc_seqcst;
1457 typedef cc::MichaelHashSet< rcu_gpb, LazyList_RCU_GPB_cmp_michaelAlloc,
1458 typename cc::michael_set::make_traits<
1460 co::allocator< memory::MichaelAllocator<int> >
1462 > MichaelSet_Lazy_RCU_GPB_cmp_michaelAlloc;
1464 typedef cc::MichaelHashSet< rcu_gpb, LazyList_RCU_GPB_less_stdAlloc,
1465 typename cc::michael_set::make_traits<
1468 > MichaelSet_Lazy_RCU_GPB_less_stdAlloc;
1470 typedef cc::MichaelHashSet< rcu_gpb, LazyList_RCU_GPB_less_stdAlloc_seqcst,
1471 typename cc::michael_set::make_traits<
1474 > MichaelSet_Lazy_RCU_GPB_less_stdAlloc_seqcst;
1476 typedef cc::MichaelHashSet< rcu_gpb, LazyList_RCU_GPB_less_michaelAlloc,
1477 typename cc::michael_set::make_traits<
1479 co::allocator< memory::MichaelAllocator<int> >
1481 > MichaelSet_Lazy_RCU_GPB_less_michaelAlloc;
1484 typedef cc::MichaelHashSet< rcu_gpt, LazyList_RCU_GPT_cmp_stdAlloc,
1485 typename cc::michael_set::make_traits<
1488 > MichaelSet_Lazy_RCU_GPT_cmp_stdAlloc;
1490 typedef cc::MichaelHashSet< rcu_gpt, LazyList_RCU_GPT_cmp_stdAlloc_seqcst,
1491 typename cc::michael_set::make_traits<
1494 > MichaelSet_Lazy_RCU_GPT_cmp_stdAlloc_seqcst;
1496 typedef cc::MichaelHashSet< rcu_gpt, LazyList_RCU_GPT_cmp_michaelAlloc,
1497 typename cc::michael_set::make_traits<
1499 co::allocator< memory::MichaelAllocator<int> >
1501 > MichaelSet_Lazy_RCU_GPT_cmp_michaelAlloc;
1503 typedef cc::MichaelHashSet< rcu_gpt, LazyList_RCU_GPT_less_stdAlloc,
1504 typename cc::michael_set::make_traits<
1507 > MichaelSet_Lazy_RCU_GPT_less_stdAlloc;
1509 typedef cc::MichaelHashSet< rcu_gpt, LazyList_RCU_GPT_less_stdAlloc_seqcst,
1510 typename cc::michael_set::make_traits<
1513 > MichaelSet_Lazy_RCU_GPT_less_stdAlloc_seqcst;
1515 typedef cc::MichaelHashSet< rcu_gpt, LazyList_RCU_GPT_less_michaelAlloc,
1516 typename cc::michael_set::make_traits<
1518 co::allocator< memory::MichaelAllocator<int> >
1520 > MichaelSet_Lazy_RCU_GPT_less_michaelAlloc;
1522 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
1523 typedef cc::MichaelHashSet< rcu_shb, LazyList_RCU_SHB_cmp_stdAlloc,
1524 typename cc::michael_set::make_traits<
1527 > MichaelSet_Lazy_RCU_SHB_cmp_stdAlloc;
1529 typedef cc::MichaelHashSet< rcu_shb, LazyList_RCU_SHB_cmp_stdAlloc_seqcst,
1530 typename cc::michael_set::make_traits<
1533 > MichaelSet_Lazy_RCU_SHB_cmp_stdAlloc_seqcst;
1535 typedef cc::MichaelHashSet< rcu_shb, LazyList_RCU_SHB_cmp_michaelAlloc,
1536 typename cc::michael_set::make_traits<
1538 co::allocator< memory::MichaelAllocator<int> >
1540 > MichaelSet_Lazy_RCU_SHB_cmp_michaelAlloc;
1542 typedef cc::MichaelHashSet< rcu_shb, LazyList_RCU_SHB_less_stdAlloc,
1543 typename cc::michael_set::make_traits<
1546 > MichaelSet_Lazy_RCU_SHB_less_stdAlloc;
1548 typedef cc::MichaelHashSet< rcu_shb, LazyList_RCU_SHB_less_stdAlloc_seqcst,
1549 typename cc::michael_set::make_traits<
1552 > MichaelSet_Lazy_RCU_SHB_less_stdAlloc_seqcst;
1554 typedef cc::MichaelHashSet< rcu_shb, LazyList_RCU_SHB_less_michaelAlloc,
1555 typename cc::michael_set::make_traits<
1557 co::allocator< memory::MichaelAllocator<int> >
1559 > MichaelSet_Lazy_RCU_SHB_less_michaelAlloc;
1562 typedef cc::MichaelHashSet< rcu_sht, LazyList_RCU_SHT_cmp_stdAlloc,
1563 typename cc::michael_set::make_traits<
1566 > MichaelSet_Lazy_RCU_SHT_cmp_stdAlloc;
1568 typedef cc::MichaelHashSet< rcu_sht, LazyList_RCU_SHT_cmp_stdAlloc_seqcst,
1569 typename cc::michael_set::make_traits<
1572 > MichaelSet_Lazy_RCU_SHT_cmp_stdAlloc_seqcst;
1574 typedef cc::MichaelHashSet< rcu_sht, LazyList_RCU_SHT_cmp_michaelAlloc,
1575 typename cc::michael_set::make_traits<
1577 co::allocator< memory::MichaelAllocator<int> >
1579 > MichaelSet_Lazy_RCU_SHT_cmp_michaelAlloc;
1581 typedef cc::MichaelHashSet< rcu_sht, LazyList_RCU_SHT_less_stdAlloc,
1582 typename cc::michael_set::make_traits<
1585 > MichaelSet_Lazy_RCU_SHT_less_stdAlloc;
1587 typedef cc::MichaelHashSet< rcu_sht, LazyList_RCU_SHT_less_stdAlloc_seqcst,
1588 typename cc::michael_set::make_traits<
1591 > MichaelSet_Lazy_RCU_SHT_less_stdAlloc_seqcst;
1593 typedef cc::MichaelHashSet< rcu_sht, LazyList_RCU_SHT_less_michaelAlloc,
1594 typename cc::michael_set::make_traits<
1596 co::allocator< memory::MichaelAllocator<int> >
1598 > MichaelSet_Lazy_RCU_SHT_less_michaelAlloc;
1601 // ***************************************************************************
1602 // SplitListSet based on MichaelList
1605 typedef cc::SplitListSet< cds::gc::HP, key_val,
1606 typename cc::split_list::make_traits<
1607 cc::split_list::ordered_list<cc::michael_list_tag>
1609 ,cc::split_list::ordered_list_traits<
1610 typename cc::michael_list::make_traits<
1611 co::compare< compare >
1615 > SplitList_Michael_HP_dyn_cmp;
1617 typedef cc::SplitListSet< cds::gc::HP, key_val,
1618 typename cc::split_list::make_traits<
1619 cc::split_list::ordered_list<cc::michael_list_tag>
1621 ,co::memory_model< co::v::sequential_consistent >
1622 ,cc::split_list::ordered_list_traits<
1623 typename cc::michael_list::make_traits<
1624 co::compare< compare >
1625 ,co::memory_model< co::v::sequential_consistent >
1629 > SplitList_Michael_HP_dyn_cmp_seqcst;
1631 typedef cc::SplitListSet< cds::gc::HP, key_val,
1632 typename cc::split_list::make_traits<
1633 cc::split_list::ordered_list<cc::michael_list_tag>
1634 ,cc::split_list::dynamic_bucket_table< false >
1636 ,cc::split_list::ordered_list_traits<
1637 typename cc::michael_list::make_traits<
1638 co::compare< compare >
1642 > SplitList_Michael_HP_st_cmp;
1644 typedef cc::SplitListSet< cds::gc::HP, key_val,
1645 typename cc::split_list::make_traits<
1646 cc::split_list::ordered_list<cc::michael_list_tag>
1648 ,cc::split_list::dynamic_bucket_table< false >
1649 ,co::memory_model< co::v::sequential_consistent >
1650 ,cc::split_list::ordered_list_traits<
1651 typename cc::michael_list::make_traits<
1652 co::compare< compare >
1653 ,co::memory_model< co::v::sequential_consistent >
1657 > SplitList_Michael_HP_st_cmp_seqcst;
1660 typedef cc::SplitListSet< cds::gc::HP, key_val,
1661 typename cc::split_list::make_traits<
1662 cc::split_list::ordered_list<cc::michael_list_tag>
1664 ,cc::split_list::ordered_list_traits<
1665 typename cc::michael_list::make_traits<
1670 > SplitList_Michael_HP_dyn_less;
1672 typedef cc::SplitListSet< cds::gc::HP, key_val,
1673 typename cc::split_list::make_traits<
1674 cc::split_list::ordered_list<cc::michael_list_tag>
1676 ,co::memory_model< co::v::sequential_consistent >
1677 ,cc::split_list::ordered_list_traits<
1678 typename cc::michael_list::make_traits<
1680 ,co::memory_model< co::v::sequential_consistent >
1684 > SplitList_Michael_HP_dyn_less_seqcst;
1686 typedef cc::SplitListSet< cds::gc::HP, key_val,
1687 typename cc::split_list::make_traits<
1688 cc::split_list::ordered_list<cc::michael_list_tag>
1689 ,cc::split_list::dynamic_bucket_table< false >
1691 ,cc::split_list::ordered_list_traits<
1692 typename cc::michael_list::make_traits<
1697 > SplitList_Michael_HP_st_less;
1699 typedef cc::SplitListSet< cds::gc::HP, key_val,
1700 typename cc::split_list::make_traits<
1701 cc::split_list::ordered_list<cc::michael_list_tag>
1703 ,cc::split_list::dynamic_bucket_table< false >
1704 ,co::memory_model< co::v::sequential_consistent >
1705 ,cc::split_list::ordered_list_traits<
1706 typename cc::michael_list::make_traits<
1708 ,co::memory_model< co::v::sequential_consistent >
1712 > SplitList_Michael_HP_st_less_seqcst;
1715 typedef cc::SplitListSet< cds::gc::HRC, key_val,
1716 typename cc::split_list::make_traits<
1717 cc::split_list::ordered_list<cc::michael_list_tag>
1719 ,cc::split_list::ordered_list_traits<
1720 typename cc::michael_list::make_traits<
1721 co::compare< compare >
1725 > SplitList_Michael_HRC_dyn_cmp;
1727 typedef cc::SplitListSet< cds::gc::HRC, key_val,
1728 typename cc::split_list::make_traits<
1729 cc::split_list::ordered_list<cc::michael_list_tag>
1731 ,co::memory_model< co::v::sequential_consistent >
1732 ,cc::split_list::ordered_list_traits<
1733 typename cc::michael_list::make_traits<
1734 co::compare< compare >
1735 ,co::memory_model< co::v::sequential_consistent >
1739 > SplitList_Michael_HRC_dyn_cmp_seqcst;
1741 typedef cc::SplitListSet< cds::gc::HRC, key_val,
1742 typename cc::split_list::make_traits<
1743 cc::split_list::ordered_list<cc::michael_list_tag>
1744 ,cc::split_list::dynamic_bucket_table< false >
1746 ,cc::split_list::ordered_list_traits<
1747 typename cc::michael_list::make_traits<
1748 co::compare< compare >
1752 > SplitList_Michael_HRC_st_cmp;
1754 typedef cc::SplitListSet< cds::gc::HRC, key_val,
1755 typename cc::split_list::make_traits<
1756 cc::split_list::ordered_list<cc::michael_list_tag>
1758 ,cc::split_list::dynamic_bucket_table< false >
1759 ,co::memory_model< co::v::sequential_consistent >
1760 ,cc::split_list::ordered_list_traits<
1761 typename cc::michael_list::make_traits<
1762 co::compare< compare >
1763 ,co::memory_model< co::v::sequential_consistent >
1767 > SplitList_Michael_HRC_st_cmp_seqcst;
1770 typedef cc::SplitListSet< cds::gc::HRC, key_val,
1771 typename cc::split_list::make_traits<
1772 cc::split_list::ordered_list<cc::michael_list_tag>
1774 ,cc::split_list::ordered_list_traits<
1775 typename cc::michael_list::make_traits<
1780 > SplitList_Michael_HRC_dyn_less;
1782 typedef cc::SplitListSet< cds::gc::HRC, key_val,
1783 typename cc::split_list::make_traits<
1784 cc::split_list::ordered_list<cc::michael_list_tag>
1786 ,co::memory_model< co::v::sequential_consistent >
1787 ,cc::split_list::ordered_list_traits<
1788 typename cc::michael_list::make_traits<
1790 ,co::memory_model< co::v::sequential_consistent >
1794 > SplitList_Michael_HRC_dyn_less_seqcst;
1796 typedef cc::SplitListSet< cds::gc::HRC, key_val,
1797 typename cc::split_list::make_traits<
1798 cc::split_list::ordered_list<cc::michael_list_tag>
1799 ,cc::split_list::dynamic_bucket_table< false >
1801 ,cc::split_list::ordered_list_traits<
1802 typename cc::michael_list::make_traits<
1807 > SplitList_Michael_HRC_st_less;
1809 typedef cc::SplitListSet< cds::gc::HRC, key_val,
1810 typename cc::split_list::make_traits<
1811 cc::split_list::ordered_list<cc::michael_list_tag>
1813 ,cc::split_list::dynamic_bucket_table< false >
1814 ,co::memory_model< co::v::sequential_consistent >
1815 ,cc::split_list::ordered_list_traits<
1816 typename cc::michael_list::make_traits<
1818 ,co::memory_model< co::v::sequential_consistent >
1822 > SplitList_Michael_HRC_st_less_seqcst;
1825 typedef cc::SplitListSet< cds::gc::PTB, key_val,
1826 typename cc::split_list::make_traits<
1827 cc::split_list::ordered_list<cc::michael_list_tag>
1829 ,cc::split_list::ordered_list_traits<
1830 typename cc::michael_list::make_traits<
1831 co::compare< compare >
1835 > SplitList_Michael_PTB_dyn_cmp;
1837 typedef cc::SplitListSet< cds::gc::PTB, key_val,
1838 typename cc::split_list::make_traits<
1839 cc::split_list::ordered_list<cc::michael_list_tag>
1841 ,co::memory_model< co::v::sequential_consistent >
1842 ,cc::split_list::ordered_list_traits<
1843 typename cc::michael_list::make_traits<
1844 co::compare< compare >
1845 ,co::memory_model< co::v::sequential_consistent >
1849 > SplitList_Michael_PTB_dyn_cmp_seqcst;
1851 typedef cc::SplitListSet< cds::gc::PTB, key_val,
1852 typename cc::split_list::make_traits<
1853 cc::split_list::ordered_list<cc::michael_list_tag>
1854 ,cc::split_list::dynamic_bucket_table< false >
1856 ,cc::split_list::ordered_list_traits<
1857 typename cc::michael_list::make_traits<
1858 co::compare< compare >
1862 > SplitList_Michael_PTB_st_cmp;
1864 typedef cc::SplitListSet< cds::gc::PTB, key_val,
1865 typename cc::split_list::make_traits<
1866 cc::split_list::ordered_list<cc::michael_list_tag>
1868 ,cc::split_list::dynamic_bucket_table< false >
1869 ,co::memory_model< co::v::sequential_consistent >
1870 ,cc::split_list::ordered_list_traits<
1871 typename cc::michael_list::make_traits<
1872 co::compare< compare >
1873 ,co::memory_model< co::v::sequential_consistent >
1877 > SplitList_Michael_PTB_st_cmp_seqcst;
1880 typedef cc::SplitListSet< cds::gc::PTB, key_val,
1881 typename cc::split_list::make_traits<
1882 cc::split_list::ordered_list<cc::michael_list_tag>
1884 ,cc::split_list::ordered_list_traits<
1885 typename cc::michael_list::make_traits<
1890 > SplitList_Michael_PTB_dyn_less;
1892 typedef cc::SplitListSet< cds::gc::PTB, key_val,
1893 typename cc::split_list::make_traits<
1894 cc::split_list::ordered_list<cc::michael_list_tag>
1896 ,co::memory_model< co::v::sequential_consistent >
1897 ,cc::split_list::ordered_list_traits<
1898 typename cc::michael_list::make_traits<
1900 ,co::memory_model< co::v::sequential_consistent >
1904 > SplitList_Michael_PTB_dyn_less_seqcst;
1906 typedef cc::SplitListSet< cds::gc::PTB, key_val,
1907 typename cc::split_list::make_traits<
1908 cc::split_list::ordered_list<cc::michael_list_tag>
1909 ,cc::split_list::dynamic_bucket_table< false >
1911 ,cc::split_list::ordered_list_traits<
1912 typename cc::michael_list::make_traits<
1917 > SplitList_Michael_PTB_st_less;
1919 typedef cc::SplitListSet< cds::gc::PTB, key_val,
1920 typename cc::split_list::make_traits<
1921 cc::split_list::ordered_list<cc::michael_list_tag>
1923 ,cc::split_list::dynamic_bucket_table< false >
1924 ,co::memory_model< co::v::sequential_consistent >
1925 ,cc::split_list::ordered_list_traits<
1926 typename cc::michael_list::make_traits<
1928 ,co::memory_model< co::v::sequential_consistent >
1932 > SplitList_Michael_PTB_st_less_seqcst;
1935 typedef cc::SplitListSet< rcu_gpi, key_val,
1936 typename cc::split_list::make_traits<
1937 cc::split_list::ordered_list<cc::michael_list_tag>
1939 ,cc::split_list::ordered_list_traits<
1940 typename cc::michael_list::make_traits<
1941 co::compare< compare >
1945 > SplitList_Michael_RCU_GPI_dyn_cmp;
1947 typedef cc::SplitListSet< rcu_gpi, key_val,
1948 typename cc::split_list::make_traits<
1949 cc::split_list::ordered_list<cc::michael_list_tag>
1951 ,co::memory_model< co::v::sequential_consistent >
1952 ,cc::split_list::ordered_list_traits<
1953 typename cc::michael_list::make_traits<
1954 co::compare< compare >
1955 ,co::memory_model< co::v::sequential_consistent >
1959 > SplitList_Michael_RCU_GPI_dyn_cmp_seqcst;
1961 typedef cc::SplitListSet< rcu_gpi, key_val,
1962 typename cc::split_list::make_traits<
1963 cc::split_list::ordered_list<cc::michael_list_tag>
1964 ,cc::split_list::dynamic_bucket_table< false >
1966 ,cc::split_list::ordered_list_traits<
1967 typename cc::michael_list::make_traits<
1968 co::compare< compare >
1972 > SplitList_Michael_RCU_GPI_st_cmp;
1974 typedef cc::SplitListSet< rcu_gpi, key_val,
1975 typename cc::split_list::make_traits<
1976 cc::split_list::ordered_list<cc::michael_list_tag>
1978 ,cc::split_list::dynamic_bucket_table< false >
1979 ,co::memory_model< co::v::sequential_consistent >
1980 ,cc::split_list::ordered_list_traits<
1981 typename cc::michael_list::make_traits<
1982 co::compare< compare >
1983 ,co::memory_model< co::v::sequential_consistent >
1987 > SplitList_Michael_RCU_GPI_st_cmp_seqcst;
1990 typedef cc::SplitListSet< rcu_gpi, key_val,
1991 typename cc::split_list::make_traits<
1992 cc::split_list::ordered_list<cc::michael_list_tag>
1994 ,cc::split_list::ordered_list_traits<
1995 typename cc::michael_list::make_traits<
2000 > SplitList_Michael_RCU_GPI_dyn_less;
2002 typedef cc::SplitListSet< rcu_gpi, key_val,
2003 typename cc::split_list::make_traits<
2004 cc::split_list::ordered_list<cc::michael_list_tag>
2006 ,co::memory_model< co::v::sequential_consistent >
2007 ,cc::split_list::ordered_list_traits<
2008 typename cc::michael_list::make_traits<
2010 ,co::memory_model< co::v::sequential_consistent >
2014 > SplitList_Michael_RCU_GPI_dyn_less_seqcst;
2016 typedef cc::SplitListSet< rcu_gpi, key_val,
2017 typename cc::split_list::make_traits<
2018 cc::split_list::ordered_list<cc::michael_list_tag>
2019 ,cc::split_list::dynamic_bucket_table< false >
2021 ,cc::split_list::ordered_list_traits<
2022 typename cc::michael_list::make_traits<
2027 > SplitList_Michael_RCU_GPI_st_less;
2029 typedef cc::SplitListSet< rcu_gpi, key_val,
2030 typename cc::split_list::make_traits<
2031 cc::split_list::ordered_list<cc::michael_list_tag>
2033 ,cc::split_list::dynamic_bucket_table< false >
2034 ,co::memory_model< co::v::sequential_consistent >
2035 ,cc::split_list::ordered_list_traits<
2036 typename cc::michael_list::make_traits<
2038 ,co::memory_model< co::v::sequential_consistent >
2042 > SplitList_Michael_RCU_GPI_st_less_seqcst;
2046 typedef cc::SplitListSet< rcu_gpb, key_val,
2047 typename cc::split_list::make_traits<
2048 cc::split_list::ordered_list<cc::michael_list_tag>
2050 ,cc::split_list::ordered_list_traits<
2051 typename cc::michael_list::make_traits<
2052 co::compare< compare >
2056 > SplitList_Michael_RCU_GPB_dyn_cmp;
2058 typedef cc::SplitListSet< rcu_gpb, key_val,
2059 typename cc::split_list::make_traits<
2060 cc::split_list::ordered_list<cc::michael_list_tag>
2062 ,co::memory_model< co::v::sequential_consistent >
2063 ,cc::split_list::ordered_list_traits<
2064 typename cc::michael_list::make_traits<
2065 co::compare< compare >
2066 ,co::memory_model< co::v::sequential_consistent >
2070 > SplitList_Michael_RCU_GPB_dyn_cmp_seqcst;
2072 typedef cc::SplitListSet< rcu_gpb, key_val,
2073 typename cc::split_list::make_traits<
2074 cc::split_list::ordered_list<cc::michael_list_tag>
2075 ,cc::split_list::dynamic_bucket_table< false >
2077 ,cc::split_list::ordered_list_traits<
2078 typename cc::michael_list::make_traits<
2079 co::compare< compare >
2083 > SplitList_Michael_RCU_GPB_st_cmp;
2085 typedef cc::SplitListSet< rcu_gpb, key_val,
2086 typename cc::split_list::make_traits<
2087 cc::split_list::ordered_list<cc::michael_list_tag>
2089 ,cc::split_list::dynamic_bucket_table< false >
2090 ,co::memory_model< co::v::sequential_consistent >
2091 ,cc::split_list::ordered_list_traits<
2092 typename cc::michael_list::make_traits<
2093 co::compare< compare >
2094 ,co::memory_model< co::v::sequential_consistent >
2098 > SplitList_Michael_RCU_GPB_st_cmp_seqcst;
2101 typedef cc::SplitListSet< rcu_gpb, key_val,
2102 typename cc::split_list::make_traits<
2103 cc::split_list::ordered_list<cc::michael_list_tag>
2105 ,cc::split_list::ordered_list_traits<
2106 typename cc::michael_list::make_traits<
2111 > SplitList_Michael_RCU_GPB_dyn_less;
2113 typedef cc::SplitListSet< rcu_gpb, key_val,
2114 typename cc::split_list::make_traits<
2115 cc::split_list::ordered_list<cc::michael_list_tag>
2117 ,co::memory_model< co::v::sequential_consistent >
2118 ,cc::split_list::ordered_list_traits<
2119 typename cc::michael_list::make_traits<
2121 ,co::memory_model< co::v::sequential_consistent >
2125 > SplitList_Michael_RCU_GPB_dyn_less_seqcst;
2127 typedef cc::SplitListSet< rcu_gpb, key_val,
2128 typename cc::split_list::make_traits<
2129 cc::split_list::ordered_list<cc::michael_list_tag>
2130 ,cc::split_list::dynamic_bucket_table< false >
2132 ,cc::split_list::ordered_list_traits<
2133 typename cc::michael_list::make_traits<
2138 > SplitList_Michael_RCU_GPB_st_less;
2140 typedef cc::SplitListSet< rcu_gpb, key_val,
2141 typename cc::split_list::make_traits<
2142 cc::split_list::ordered_list<cc::michael_list_tag>
2144 ,cc::split_list::dynamic_bucket_table< false >
2145 ,co::memory_model< co::v::sequential_consistent >
2146 ,cc::split_list::ordered_list_traits<
2147 typename cc::michael_list::make_traits<
2149 ,co::memory_model< co::v::sequential_consistent >
2153 > SplitList_Michael_RCU_GPB_st_less_seqcst;
2156 typedef cc::SplitListSet< rcu_gpt, key_val,
2157 typename cc::split_list::make_traits<
2158 cc::split_list::ordered_list<cc::michael_list_tag>
2160 ,cc::split_list::ordered_list_traits<
2161 typename cc::michael_list::make_traits<
2162 co::compare< compare >
2166 > SplitList_Michael_RCU_GPT_dyn_cmp;
2168 typedef cc::SplitListSet< rcu_gpt, key_val,
2169 typename cc::split_list::make_traits<
2170 cc::split_list::ordered_list<cc::michael_list_tag>
2172 ,co::memory_model< co::v::sequential_consistent >
2173 ,cc::split_list::ordered_list_traits<
2174 typename cc::michael_list::make_traits<
2175 co::compare< compare >
2176 ,co::memory_model< co::v::sequential_consistent >
2180 > SplitList_Michael_RCU_GPT_dyn_cmp_seqcst;
2182 typedef cc::SplitListSet< rcu_gpt, key_val,
2183 typename cc::split_list::make_traits<
2184 cc::split_list::ordered_list<cc::michael_list_tag>
2185 ,cc::split_list::dynamic_bucket_table< false >
2187 ,cc::split_list::ordered_list_traits<
2188 typename cc::michael_list::make_traits<
2189 co::compare< compare >
2193 > SplitList_Michael_RCU_GPT_st_cmp;
2195 typedef cc::SplitListSet< rcu_gpt, key_val,
2196 typename cc::split_list::make_traits<
2197 cc::split_list::ordered_list<cc::michael_list_tag>
2199 ,cc::split_list::dynamic_bucket_table< false >
2200 ,co::memory_model< co::v::sequential_consistent >
2201 ,cc::split_list::ordered_list_traits<
2202 typename cc::michael_list::make_traits<
2203 co::compare< compare >
2204 ,co::memory_model< co::v::sequential_consistent >
2208 > SplitList_Michael_RCU_GPT_st_cmp_seqcst;
2211 typedef cc::SplitListSet< rcu_gpt, key_val,
2212 typename cc::split_list::make_traits<
2213 cc::split_list::ordered_list<cc::michael_list_tag>
2215 ,cc::split_list::ordered_list_traits<
2216 typename cc::michael_list::make_traits<
2221 > SplitList_Michael_RCU_GPT_dyn_less;
2223 typedef cc::SplitListSet< rcu_gpt, key_val,
2224 typename cc::split_list::make_traits<
2225 cc::split_list::ordered_list<cc::michael_list_tag>
2227 ,co::memory_model< co::v::sequential_consistent >
2228 ,cc::split_list::ordered_list_traits<
2229 typename cc::michael_list::make_traits<
2231 ,co::memory_model< co::v::sequential_consistent >
2235 > SplitList_Michael_RCU_GPT_dyn_less_seqcst;
2237 typedef cc::SplitListSet< rcu_gpt, key_val,
2238 typename cc::split_list::make_traits<
2239 cc::split_list::ordered_list<cc::michael_list_tag>
2240 ,cc::split_list::dynamic_bucket_table< false >
2242 ,cc::split_list::ordered_list_traits<
2243 typename cc::michael_list::make_traits<
2248 > SplitList_Michael_RCU_GPT_st_less;
2250 typedef cc::SplitListSet< rcu_gpt, key_val,
2251 typename cc::split_list::make_traits<
2252 cc::split_list::ordered_list<cc::michael_list_tag>
2254 ,cc::split_list::dynamic_bucket_table< false >
2255 ,co::memory_model< co::v::sequential_consistent >
2256 ,cc::split_list::ordered_list_traits<
2257 typename cc::michael_list::make_traits<
2259 ,co::memory_model< co::v::sequential_consistent >
2263 > SplitList_Michael_RCU_GPT_st_less_seqcst;
2265 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
2266 typedef cc::SplitListSet< rcu_shb, key_val,
2267 typename cc::split_list::make_traits<
2268 cc::split_list::ordered_list<cc::michael_list_tag>
2270 ,cc::split_list::ordered_list_traits<
2271 typename cc::michael_list::make_traits<
2272 co::compare< compare >
2276 > SplitList_Michael_RCU_SHB_dyn_cmp;
2278 typedef cc::SplitListSet< rcu_shb, key_val,
2279 typename cc::split_list::make_traits<
2280 cc::split_list::ordered_list<cc::michael_list_tag>
2282 ,co::memory_model< co::v::sequential_consistent >
2283 ,cc::split_list::ordered_list_traits<
2284 typename cc::michael_list::make_traits<
2285 co::compare< compare >
2286 ,co::memory_model< co::v::sequential_consistent >
2290 > SplitList_Michael_RCU_SHB_dyn_cmp_seqcst;
2292 typedef cc::SplitListSet< rcu_shb, key_val,
2293 typename cc::split_list::make_traits<
2294 cc::split_list::ordered_list<cc::michael_list_tag>
2295 ,cc::split_list::dynamic_bucket_table< false >
2297 ,cc::split_list::ordered_list_traits<
2298 typename cc::michael_list::make_traits<
2299 co::compare< compare >
2303 > SplitList_Michael_RCU_SHB_st_cmp;
2305 typedef cc::SplitListSet< rcu_shb, key_val,
2306 typename cc::split_list::make_traits<
2307 cc::split_list::ordered_list<cc::michael_list_tag>
2309 ,cc::split_list::dynamic_bucket_table< false >
2310 ,co::memory_model< co::v::sequential_consistent >
2311 ,cc::split_list::ordered_list_traits<
2312 typename cc::michael_list::make_traits<
2313 co::compare< compare >
2314 ,co::memory_model< co::v::sequential_consistent >
2318 > SplitList_Michael_RCU_SHB_st_cmp_seqcst;
2321 typedef cc::SplitListSet< rcu_shb, key_val,
2322 typename cc::split_list::make_traits<
2323 cc::split_list::ordered_list<cc::michael_list_tag>
2325 ,cc::split_list::ordered_list_traits<
2326 typename cc::michael_list::make_traits<
2331 > SplitList_Michael_RCU_SHB_dyn_less;
2333 typedef cc::SplitListSet< rcu_shb, key_val,
2334 typename cc::split_list::make_traits<
2335 cc::split_list::ordered_list<cc::michael_list_tag>
2337 ,co::memory_model< co::v::sequential_consistent >
2338 ,cc::split_list::ordered_list_traits<
2339 typename cc::michael_list::make_traits<
2341 ,co::memory_model< co::v::sequential_consistent >
2345 > SplitList_Michael_RCU_SHB_dyn_less_seqcst;
2347 typedef cc::SplitListSet< rcu_shb, key_val,
2348 typename cc::split_list::make_traits<
2349 cc::split_list::ordered_list<cc::michael_list_tag>
2350 ,cc::split_list::dynamic_bucket_table< false >
2352 ,cc::split_list::ordered_list_traits<
2353 typename cc::michael_list::make_traits<
2358 > SplitList_Michael_RCU_SHB_st_less;
2360 typedef cc::SplitListSet< rcu_shb, key_val,
2361 typename cc::split_list::make_traits<
2362 cc::split_list::ordered_list<cc::michael_list_tag>
2364 ,cc::split_list::dynamic_bucket_table< false >
2365 ,co::memory_model< co::v::sequential_consistent >
2366 ,cc::split_list::ordered_list_traits<
2367 typename cc::michael_list::make_traits<
2369 ,co::memory_model< co::v::sequential_consistent >
2373 > SplitList_Michael_RCU_SHB_st_less_seqcst;
2376 typedef cc::SplitListSet< rcu_sht, key_val,
2377 typename cc::split_list::make_traits<
2378 cc::split_list::ordered_list<cc::michael_list_tag>
2380 ,cc::split_list::ordered_list_traits<
2381 typename cc::michael_list::make_traits<
2382 co::compare< compare >
2386 > SplitList_Michael_RCU_SHT_dyn_cmp;
2388 typedef cc::SplitListSet< rcu_sht, key_val,
2389 typename cc::split_list::make_traits<
2390 cc::split_list::ordered_list<cc::michael_list_tag>
2392 ,co::memory_model< co::v::sequential_consistent >
2393 ,cc::split_list::ordered_list_traits<
2394 typename cc::michael_list::make_traits<
2395 co::compare< compare >
2396 ,co::memory_model< co::v::sequential_consistent >
2400 > SplitList_Michael_RCU_SHT_dyn_cmp_seqcst;
2402 typedef cc::SplitListSet< rcu_sht, key_val,
2403 typename cc::split_list::make_traits<
2404 cc::split_list::ordered_list<cc::michael_list_tag>
2405 ,cc::split_list::dynamic_bucket_table< false >
2407 ,cc::split_list::ordered_list_traits<
2408 typename cc::michael_list::make_traits<
2409 co::compare< compare >
2413 > SplitList_Michael_RCU_SHT_st_cmp;
2415 typedef cc::SplitListSet< rcu_sht, key_val,
2416 typename cc::split_list::make_traits<
2417 cc::split_list::ordered_list<cc::michael_list_tag>
2419 ,cc::split_list::dynamic_bucket_table< false >
2420 ,co::memory_model< co::v::sequential_consistent >
2421 ,cc::split_list::ordered_list_traits<
2422 typename cc::michael_list::make_traits<
2423 co::compare< compare >
2424 ,co::memory_model< co::v::sequential_consistent >
2428 > SplitList_Michael_RCU_SHT_st_cmp_seqcst;
2431 typedef cc::SplitListSet< rcu_sht, key_val,
2432 typename cc::split_list::make_traits<
2433 cc::split_list::ordered_list<cc::michael_list_tag>
2435 ,cc::split_list::ordered_list_traits<
2436 typename cc::michael_list::make_traits<
2441 > SplitList_Michael_RCU_SHT_dyn_less;
2443 typedef cc::SplitListSet< rcu_sht, key_val,
2444 typename cc::split_list::make_traits<
2445 cc::split_list::ordered_list<cc::michael_list_tag>
2447 ,co::memory_model< co::v::sequential_consistent >
2448 ,cc::split_list::ordered_list_traits<
2449 typename cc::michael_list::make_traits<
2451 ,co::memory_model< co::v::sequential_consistent >
2455 > SplitList_Michael_RCU_SHT_dyn_less_seqcst;
2457 typedef cc::SplitListSet< rcu_sht, key_val,
2458 typename cc::split_list::make_traits<
2459 cc::split_list::ordered_list<cc::michael_list_tag>
2460 ,cc::split_list::dynamic_bucket_table< false >
2462 ,cc::split_list::ordered_list_traits<
2463 typename cc::michael_list::make_traits<
2468 > SplitList_Michael_RCU_SHT_st_less;
2470 typedef cc::SplitListSet< rcu_sht, key_val,
2471 typename cc::split_list::make_traits<
2472 cc::split_list::ordered_list<cc::michael_list_tag>
2474 ,cc::split_list::dynamic_bucket_table< false >
2475 ,co::memory_model< co::v::sequential_consistent >
2476 ,cc::split_list::ordered_list_traits<
2477 typename cc::michael_list::make_traits<
2479 ,co::memory_model< co::v::sequential_consistent >
2483 > SplitList_Michael_RCU_SHT_st_less_seqcst;
2486 // ***************************************************************************
2487 // SplitListSet based on LazyList
2490 typedef cc::SplitListSet< cds::gc::HP, key_val,
2491 typename cc::split_list::make_traits<
2492 cc::split_list::ordered_list<cc::lazy_list_tag>
2494 ,cc::split_list::ordered_list_traits<
2495 typename cc::lazy_list::make_traits<
2496 co::compare< compare >
2500 > SplitList_Lazy_HP_dyn_cmp;
2502 typedef cc::SplitListSet< cds::gc::HP, key_val,
2503 typename cc::split_list::make_traits<
2504 cc::split_list::ordered_list<cc::lazy_list_tag>
2506 ,co::memory_model< co::v::sequential_consistent >
2507 ,cc::split_list::ordered_list_traits<
2508 typename cc::lazy_list::make_traits<
2509 co::compare< compare >
2510 ,co::memory_model< co::v::sequential_consistent >
2514 > SplitList_Lazy_HP_dyn_cmp_seqcst;
2516 typedef cc::SplitListSet< cds::gc::HP, key_val,
2517 typename cc::split_list::make_traits<
2518 cc::split_list::ordered_list<cc::lazy_list_tag>
2519 ,cc::split_list::dynamic_bucket_table< false >
2521 ,cc::split_list::ordered_list_traits<
2522 typename cc::lazy_list::make_traits<
2523 co::compare< compare >
2527 > SplitList_Lazy_HP_st_cmp;
2529 typedef cc::SplitListSet< cds::gc::HP, key_val,
2530 typename cc::split_list::make_traits<
2531 cc::split_list::ordered_list<cc::lazy_list_tag>
2533 ,cc::split_list::dynamic_bucket_table< false >
2534 ,co::memory_model< co::v::sequential_consistent >
2535 ,cc::split_list::ordered_list_traits<
2536 typename cc::lazy_list::make_traits<
2537 co::compare< compare >
2538 ,co::memory_model< co::v::sequential_consistent >
2542 > SplitList_Lazy_HP_st_cmp_seqcst;
2546 typedef cc::SplitListSet< cds::gc::HP, key_val,
2547 typename cc::split_list::make_traits<
2548 cc::split_list::ordered_list<cc::lazy_list_tag>
2550 ,cc::split_list::ordered_list_traits<
2551 typename cc::lazy_list::make_traits<
2556 > SplitList_Lazy_HP_dyn_less;
2558 typedef cc::SplitListSet< cds::gc::HP, key_val,
2559 typename cc::split_list::make_traits<
2560 cc::split_list::ordered_list<cc::lazy_list_tag>
2562 ,co::memory_model< co::v::sequential_consistent >
2563 ,cc::split_list::ordered_list_traits<
2564 typename cc::lazy_list::make_traits<
2566 ,co::memory_model< co::v::sequential_consistent >
2570 > SplitList_Lazy_HP_dyn_less_seqcst;
2572 typedef cc::SplitListSet< cds::gc::HP, key_val,
2573 typename cc::split_list::make_traits<
2574 cc::split_list::ordered_list<cc::lazy_list_tag>
2575 ,cc::split_list::dynamic_bucket_table< false >
2577 ,cc::split_list::ordered_list_traits<
2578 typename cc::lazy_list::make_traits<
2583 > SplitList_Lazy_HP_st_less;
2585 typedef cc::SplitListSet< cds::gc::HP, key_val,
2586 typename cc::split_list::make_traits<
2587 cc::split_list::ordered_list<cc::lazy_list_tag>
2589 ,cc::split_list::dynamic_bucket_table< false >
2590 ,co::memory_model< co::v::sequential_consistent >
2591 ,cc::split_list::ordered_list_traits<
2592 typename cc::lazy_list::make_traits<
2594 ,co::memory_model< co::v::sequential_consistent >
2598 > SplitList_Lazy_HP_st_less_seqcst;
2601 typedef cc::SplitListSet< cds::gc::HRC, key_val,
2602 typename cc::split_list::make_traits<
2603 cc::split_list::ordered_list<cc::lazy_list_tag>
2605 ,cc::split_list::ordered_list_traits<
2606 typename cc::lazy_list::make_traits<
2607 co::compare< compare >
2611 > SplitList_Lazy_HRC_dyn_cmp;
2613 typedef cc::SplitListSet< cds::gc::HRC, key_val,
2614 typename cc::split_list::make_traits<
2615 cc::split_list::ordered_list<cc::lazy_list_tag>
2617 ,co::memory_model< co::v::sequential_consistent >
2618 ,cc::split_list::ordered_list_traits<
2619 typename cc::lazy_list::make_traits<
2620 co::compare< compare >
2621 ,co::memory_model< co::v::sequential_consistent >
2625 > SplitList_Lazy_HRC_dyn_cmp_seqcst;
2627 typedef cc::SplitListSet< cds::gc::HRC, key_val,
2628 typename cc::split_list::make_traits<
2629 cc::split_list::ordered_list<cc::lazy_list_tag>
2630 ,cc::split_list::dynamic_bucket_table< false >
2632 ,cc::split_list::ordered_list_traits<
2633 typename cc::lazy_list::make_traits<
2634 co::compare< compare >
2638 > SplitList_Lazy_HRC_st_cmp;
2640 typedef cc::SplitListSet< cds::gc::HRC, key_val,
2641 typename cc::split_list::make_traits<
2642 cc::split_list::ordered_list<cc::lazy_list_tag>
2644 ,cc::split_list::dynamic_bucket_table< false >
2645 ,co::memory_model< co::v::sequential_consistent >
2646 ,cc::split_list::ordered_list_traits<
2647 typename cc::lazy_list::make_traits<
2648 co::compare< compare >
2649 ,co::memory_model< co::v::sequential_consistent >
2653 > SplitList_Lazy_HRC_st_cmp_seqcst;
2656 typedef cc::SplitListSet< cds::gc::HRC, key_val,
2657 typename cc::split_list::make_traits<
2658 cc::split_list::ordered_list<cc::lazy_list_tag>
2660 ,cc::split_list::ordered_list_traits<
2661 typename cc::lazy_list::make_traits<
2666 > SplitList_Lazy_HRC_dyn_less;
2668 typedef cc::SplitListSet< cds::gc::HRC, key_val,
2669 typename cc::split_list::make_traits<
2670 cc::split_list::ordered_list<cc::lazy_list_tag>
2672 ,co::memory_model< co::v::sequential_consistent >
2673 ,cc::split_list::ordered_list_traits<
2674 typename cc::lazy_list::make_traits<
2676 ,co::memory_model< co::v::sequential_consistent >
2680 > SplitList_Lazy_HRC_dyn_less_seqcst;
2682 typedef cc::SplitListSet< cds::gc::HRC, key_val,
2683 typename cc::split_list::make_traits<
2684 cc::split_list::ordered_list<cc::lazy_list_tag>
2685 ,cc::split_list::dynamic_bucket_table< false >
2687 ,cc::split_list::ordered_list_traits<
2688 typename cc::lazy_list::make_traits<
2693 > SplitList_Lazy_HRC_st_less;
2695 typedef cc::SplitListSet< cds::gc::HRC, key_val,
2696 typename cc::split_list::make_traits<
2697 cc::split_list::ordered_list<cc::lazy_list_tag>
2699 ,cc::split_list::dynamic_bucket_table< false >
2700 ,co::memory_model< co::v::sequential_consistent >
2701 ,cc::split_list::ordered_list_traits<
2702 typename cc::lazy_list::make_traits<
2704 ,co::memory_model< co::v::sequential_consistent >
2708 > SplitList_Lazy_HRC_st_less_seqcst;
2712 typedef cc::SplitListSet< cds::gc::PTB, key_val,
2713 typename cc::split_list::make_traits<
2714 cc::split_list::ordered_list<cc::lazy_list_tag>
2716 ,cc::split_list::ordered_list_traits<
2717 typename cc::lazy_list::make_traits<
2718 co::compare< compare >
2722 > SplitList_Lazy_PTB_dyn_cmp;
2724 typedef cc::SplitListSet< cds::gc::PTB, key_val,
2725 typename cc::split_list::make_traits<
2726 cc::split_list::ordered_list<cc::lazy_list_tag>
2728 ,co::memory_model< co::v::sequential_consistent >
2729 ,cc::split_list::ordered_list_traits<
2730 typename cc::lazy_list::make_traits<
2731 co::compare< compare >
2732 ,co::memory_model< co::v::sequential_consistent >
2736 > SplitList_Lazy_PTB_dyn_cmp_seqcst;
2738 typedef cc::SplitListSet< cds::gc::PTB, key_val,
2739 typename cc::split_list::make_traits<
2740 cc::split_list::ordered_list<cc::lazy_list_tag>
2741 ,cc::split_list::dynamic_bucket_table< false >
2743 ,cc::split_list::ordered_list_traits<
2744 typename cc::lazy_list::make_traits<
2745 co::compare< compare >
2749 > SplitList_Lazy_PTB_st_cmp;
2751 typedef cc::SplitListSet< cds::gc::PTB, key_val,
2752 typename cc::split_list::make_traits<
2753 cc::split_list::ordered_list<cc::lazy_list_tag>
2755 ,cc::split_list::dynamic_bucket_table< false >
2756 ,co::memory_model< co::v::sequential_consistent >
2757 ,cc::split_list::ordered_list_traits<
2758 typename cc::lazy_list::make_traits<
2759 co::compare< compare >
2760 ,co::memory_model< co::v::sequential_consistent >
2764 > SplitList_Lazy_PTB_st_cmp_seqcst;
2767 typedef cc::SplitListSet< cds::gc::PTB, key_val,
2768 typename cc::split_list::make_traits<
2769 cc::split_list::ordered_list<cc::lazy_list_tag>
2771 ,cc::split_list::ordered_list_traits<
2772 typename cc::lazy_list::make_traits<
2777 > SplitList_Lazy_PTB_dyn_less;
2779 typedef cc::SplitListSet< cds::gc::PTB, key_val,
2780 typename cc::split_list::make_traits<
2781 cc::split_list::ordered_list<cc::lazy_list_tag>
2783 ,co::memory_model< co::v::sequential_consistent >
2784 ,cc::split_list::ordered_list_traits<
2785 typename cc::lazy_list::make_traits<
2787 ,co::memory_model< co::v::sequential_consistent >
2791 > SplitList_Lazy_PTB_dyn_less_seqcst;
2793 typedef cc::SplitListSet< cds::gc::PTB, key_val,
2794 typename cc::split_list::make_traits<
2795 cc::split_list::ordered_list<cc::lazy_list_tag>
2796 ,cc::split_list::dynamic_bucket_table< false >
2798 ,cc::split_list::ordered_list_traits<
2799 typename cc::lazy_list::make_traits<
2804 > SplitList_Lazy_PTB_st_less;
2806 typedef cc::SplitListSet< cds::gc::PTB, key_val,
2807 typename cc::split_list::make_traits<
2808 cc::split_list::ordered_list<cc::lazy_list_tag>
2810 ,cc::split_list::dynamic_bucket_table< false >
2811 ,co::memory_model< co::v::sequential_consistent >
2812 ,cc::split_list::ordered_list_traits<
2813 typename cc::lazy_list::make_traits<
2815 ,co::memory_model< co::v::sequential_consistent >
2819 > SplitList_Lazy_PTB_st_less_seqcst;
2823 typedef cc::SplitListSet< rcu_gpi, key_val,
2824 typename cc::split_list::make_traits<
2825 cc::split_list::ordered_list<cc::lazy_list_tag>
2827 ,cc::split_list::ordered_list_traits<
2828 typename cc::lazy_list::make_traits<
2829 co::compare< compare >
2833 > SplitList_Lazy_RCU_GPI_dyn_cmp;
2835 typedef cc::SplitListSet< rcu_gpi, key_val,
2836 typename cc::split_list::make_traits<
2837 cc::split_list::ordered_list<cc::lazy_list_tag>
2839 ,co::memory_model< co::v::sequential_consistent >
2840 ,cc::split_list::ordered_list_traits<
2841 typename cc::lazy_list::make_traits<
2842 co::compare< compare >
2843 ,co::memory_model< co::v::sequential_consistent >
2847 > SplitList_Lazy_RCU_GPI_dyn_cmp_seqcst;
2849 typedef cc::SplitListSet< rcu_gpi, key_val,
2850 typename cc::split_list::make_traits<
2851 cc::split_list::ordered_list<cc::lazy_list_tag>
2852 ,cc::split_list::dynamic_bucket_table< false >
2854 ,cc::split_list::ordered_list_traits<
2855 typename cc::lazy_list::make_traits<
2856 co::compare< compare >
2860 > SplitList_Lazy_RCU_GPI_st_cmp;
2862 typedef cc::SplitListSet< rcu_gpi, key_val,
2863 typename cc::split_list::make_traits<
2864 cc::split_list::ordered_list<cc::lazy_list_tag>
2866 ,cc::split_list::dynamic_bucket_table< false >
2867 ,co::memory_model< co::v::sequential_consistent >
2868 ,cc::split_list::ordered_list_traits<
2869 typename cc::lazy_list::make_traits<
2870 co::compare< compare >
2871 ,co::memory_model< co::v::sequential_consistent >
2875 > SplitList_Lazy_RCU_GPI_st_cmp_seqcst;
2878 typedef cc::SplitListSet< rcu_gpi, key_val,
2879 typename cc::split_list::make_traits<
2880 cc::split_list::ordered_list<cc::lazy_list_tag>
2882 ,cc::split_list::ordered_list_traits<
2883 typename cc::lazy_list::make_traits<
2888 > SplitList_Lazy_RCU_GPI_dyn_less;
2890 typedef cc::SplitListSet< rcu_gpi, key_val,
2891 typename cc::split_list::make_traits<
2892 cc::split_list::ordered_list<cc::lazy_list_tag>
2894 ,co::memory_model< co::v::sequential_consistent >
2895 ,cc::split_list::ordered_list_traits<
2896 typename cc::lazy_list::make_traits<
2898 ,co::memory_model< co::v::sequential_consistent >
2902 > SplitList_Lazy_RCU_GPI_dyn_less_seqcst;
2904 typedef cc::SplitListSet< rcu_gpi, key_val,
2905 typename cc::split_list::make_traits<
2906 cc::split_list::ordered_list<cc::lazy_list_tag>
2907 ,cc::split_list::dynamic_bucket_table< false >
2909 ,cc::split_list::ordered_list_traits<
2910 typename cc::lazy_list::make_traits<
2915 > SplitList_Lazy_RCU_GPI_st_less;
2917 typedef cc::SplitListSet< rcu_gpi, key_val,
2918 typename cc::split_list::make_traits<
2919 cc::split_list::ordered_list<cc::lazy_list_tag>
2921 ,cc::split_list::dynamic_bucket_table< false >
2922 ,co::memory_model< co::v::sequential_consistent >
2923 ,cc::split_list::ordered_list_traits<
2924 typename cc::lazy_list::make_traits<
2926 ,co::memory_model< co::v::sequential_consistent >
2930 > SplitList_Lazy_RCU_GPI_st_less_seqcst;
2933 typedef cc::SplitListSet< rcu_gpb, key_val,
2934 typename cc::split_list::make_traits<
2935 cc::split_list::ordered_list<cc::lazy_list_tag>
2937 ,cc::split_list::ordered_list_traits<
2938 typename cc::lazy_list::make_traits<
2939 co::compare< compare >
2943 > SplitList_Lazy_RCU_GPB_dyn_cmp;
2945 typedef cc::SplitListSet< rcu_gpb, key_val,
2946 typename cc::split_list::make_traits<
2947 cc::split_list::ordered_list<cc::lazy_list_tag>
2949 ,co::memory_model< co::v::sequential_consistent >
2950 ,cc::split_list::ordered_list_traits<
2951 typename cc::lazy_list::make_traits<
2952 co::compare< compare >
2953 ,co::memory_model< co::v::sequential_consistent >
2957 > SplitList_Lazy_RCU_GPB_dyn_cmp_seqcst;
2959 typedef cc::SplitListSet< rcu_gpb, key_val,
2960 typename cc::split_list::make_traits<
2961 cc::split_list::ordered_list<cc::lazy_list_tag>
2962 ,cc::split_list::dynamic_bucket_table< false >
2964 ,cc::split_list::ordered_list_traits<
2965 typename cc::lazy_list::make_traits<
2966 co::compare< compare >
2970 > SplitList_Lazy_RCU_GPB_st_cmp;
2972 typedef cc::SplitListSet< rcu_gpb, key_val,
2973 typename cc::split_list::make_traits<
2974 cc::split_list::ordered_list<cc::lazy_list_tag>
2976 ,cc::split_list::dynamic_bucket_table< false >
2977 ,co::memory_model< co::v::sequential_consistent >
2978 ,cc::split_list::ordered_list_traits<
2979 typename cc::lazy_list::make_traits<
2980 co::compare< compare >
2981 ,co::memory_model< co::v::sequential_consistent >
2985 > SplitList_Lazy_RCU_GPB_st_cmp_seqcst;
2988 typedef cc::SplitListSet< rcu_gpb, key_val,
2989 typename cc::split_list::make_traits<
2990 cc::split_list::ordered_list<cc::lazy_list_tag>
2992 ,cc::split_list::ordered_list_traits<
2993 typename cc::lazy_list::make_traits<
2998 > SplitList_Lazy_RCU_GPB_dyn_less;
3000 typedef cc::SplitListSet< rcu_gpb, key_val,
3001 typename cc::split_list::make_traits<
3002 cc::split_list::ordered_list<cc::lazy_list_tag>
3004 ,co::memory_model< co::v::sequential_consistent >
3005 ,cc::split_list::ordered_list_traits<
3006 typename cc::lazy_list::make_traits<
3008 ,co::memory_model< co::v::sequential_consistent >
3012 > SplitList_Lazy_RCU_GPB_dyn_less_seqcst;
3014 typedef cc::SplitListSet< rcu_gpb, key_val,
3015 typename cc::split_list::make_traits<
3016 cc::split_list::ordered_list<cc::lazy_list_tag>
3017 ,cc::split_list::dynamic_bucket_table< false >
3019 ,cc::split_list::ordered_list_traits<
3020 typename cc::lazy_list::make_traits<
3025 > SplitList_Lazy_RCU_GPB_st_less;
3027 typedef cc::SplitListSet< rcu_gpb, key_val,
3028 typename cc::split_list::make_traits<
3029 cc::split_list::ordered_list<cc::lazy_list_tag>
3031 ,cc::split_list::dynamic_bucket_table< false >
3032 ,co::memory_model< co::v::sequential_consistent >
3033 ,cc::split_list::ordered_list_traits<
3034 typename cc::lazy_list::make_traits<
3036 ,co::memory_model< co::v::sequential_consistent >
3040 > SplitList_Lazy_RCU_GPB_st_less_seqcst;
3043 typedef cc::SplitListSet< rcu_gpt, key_val,
3044 typename cc::split_list::make_traits<
3045 cc::split_list::ordered_list<cc::lazy_list_tag>
3047 ,cc::split_list::ordered_list_traits<
3048 typename cc::lazy_list::make_traits<
3049 co::compare< compare >
3053 > SplitList_Lazy_RCU_GPT_dyn_cmp;
3055 typedef cc::SplitListSet< rcu_gpt, key_val,
3056 typename cc::split_list::make_traits<
3057 cc::split_list::ordered_list<cc::lazy_list_tag>
3059 ,co::memory_model< co::v::sequential_consistent >
3060 ,cc::split_list::ordered_list_traits<
3061 typename cc::lazy_list::make_traits<
3062 co::compare< compare >
3063 ,co::memory_model< co::v::sequential_consistent >
3067 > SplitList_Lazy_RCU_GPT_dyn_cmp_seqcst;
3069 typedef cc::SplitListSet< rcu_gpt, key_val,
3070 typename cc::split_list::make_traits<
3071 cc::split_list::ordered_list<cc::lazy_list_tag>
3072 ,cc::split_list::dynamic_bucket_table< false >
3074 ,cc::split_list::ordered_list_traits<
3075 typename cc::lazy_list::make_traits<
3076 co::compare< compare >
3080 > SplitList_Lazy_RCU_GPT_st_cmp;
3082 typedef cc::SplitListSet< rcu_gpt, key_val,
3083 typename cc::split_list::make_traits<
3084 cc::split_list::ordered_list<cc::lazy_list_tag>
3086 ,cc::split_list::dynamic_bucket_table< false >
3087 ,co::memory_model< co::v::sequential_consistent >
3088 ,cc::split_list::ordered_list_traits<
3089 typename cc::lazy_list::make_traits<
3090 co::compare< compare >
3091 ,co::memory_model< co::v::sequential_consistent >
3095 > SplitList_Lazy_RCU_GPT_st_cmp_seqcst;
3098 typedef cc::SplitListSet< rcu_gpt, key_val,
3099 typename cc::split_list::make_traits<
3100 cc::split_list::ordered_list<cc::lazy_list_tag>
3102 ,cc::split_list::ordered_list_traits<
3103 typename cc::lazy_list::make_traits<
3108 > SplitList_Lazy_RCU_GPT_dyn_less;
3110 typedef cc::SplitListSet< rcu_gpt, key_val,
3111 typename cc::split_list::make_traits<
3112 cc::split_list::ordered_list<cc::lazy_list_tag>
3114 ,co::memory_model< co::v::sequential_consistent >
3115 ,cc::split_list::ordered_list_traits<
3116 typename cc::lazy_list::make_traits<
3118 ,co::memory_model< co::v::sequential_consistent >
3122 > SplitList_Lazy_RCU_GPT_dyn_less_seqcst;
3124 typedef cc::SplitListSet< rcu_gpt, key_val,
3125 typename cc::split_list::make_traits<
3126 cc::split_list::ordered_list<cc::lazy_list_tag>
3127 ,cc::split_list::dynamic_bucket_table< false >
3129 ,cc::split_list::ordered_list_traits<
3130 typename cc::lazy_list::make_traits<
3135 > SplitList_Lazy_RCU_GPT_st_less;
3137 typedef cc::SplitListSet< rcu_gpt, key_val,
3138 typename cc::split_list::make_traits<
3139 cc::split_list::ordered_list<cc::lazy_list_tag>
3141 ,cc::split_list::dynamic_bucket_table< false >
3142 ,co::memory_model< co::v::sequential_consistent >
3143 ,cc::split_list::ordered_list_traits<
3144 typename cc::lazy_list::make_traits<
3146 ,co::memory_model< co::v::sequential_consistent >
3150 > SplitList_Lazy_RCU_GPT_st_less_seqcst;
3152 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
3153 typedef cc::SplitListSet< rcu_shb, key_val,
3154 typename cc::split_list::make_traits<
3155 cc::split_list::ordered_list<cc::lazy_list_tag>
3157 ,cc::split_list::ordered_list_traits<
3158 typename cc::lazy_list::make_traits<
3159 co::compare< compare >
3163 > SplitList_Lazy_RCU_SHB_dyn_cmp;
3165 typedef cc::SplitListSet< rcu_shb, key_val,
3166 typename cc::split_list::make_traits<
3167 cc::split_list::ordered_list<cc::lazy_list_tag>
3169 ,co::memory_model< co::v::sequential_consistent >
3170 ,cc::split_list::ordered_list_traits<
3171 typename cc::lazy_list::make_traits<
3172 co::compare< compare >
3173 ,co::memory_model< co::v::sequential_consistent >
3177 > SplitList_Lazy_RCU_SHB_dyn_cmp_seqcst;
3179 typedef cc::SplitListSet< rcu_shb, key_val,
3180 typename cc::split_list::make_traits<
3181 cc::split_list::ordered_list<cc::lazy_list_tag>
3182 ,cc::split_list::dynamic_bucket_table< false >
3184 ,cc::split_list::ordered_list_traits<
3185 typename cc::lazy_list::make_traits<
3186 co::compare< compare >
3190 > SplitList_Lazy_RCU_SHB_st_cmp;
3192 typedef cc::SplitListSet< rcu_shb, key_val,
3193 typename cc::split_list::make_traits<
3194 cc::split_list::ordered_list<cc::lazy_list_tag>
3196 ,cc::split_list::dynamic_bucket_table< false >
3197 ,co::memory_model< co::v::sequential_consistent >
3198 ,cc::split_list::ordered_list_traits<
3199 typename cc::lazy_list::make_traits<
3200 co::compare< compare >
3201 ,co::memory_model< co::v::sequential_consistent >
3205 > SplitList_Lazy_RCU_SHB_st_cmp_seqcst;
3208 typedef cc::SplitListSet< rcu_shb, key_val,
3209 typename cc::split_list::make_traits<
3210 cc::split_list::ordered_list<cc::lazy_list_tag>
3212 ,cc::split_list::ordered_list_traits<
3213 typename cc::lazy_list::make_traits<
3218 > SplitList_Lazy_RCU_SHB_dyn_less;
3220 typedef cc::SplitListSet< rcu_shb, key_val,
3221 typename cc::split_list::make_traits<
3222 cc::split_list::ordered_list<cc::lazy_list_tag>
3224 ,co::memory_model< co::v::sequential_consistent >
3225 ,cc::split_list::ordered_list_traits<
3226 typename cc::lazy_list::make_traits<
3228 ,co::memory_model< co::v::sequential_consistent >
3232 > SplitList_Lazy_RCU_SHB_dyn_less_seqcst;
3234 typedef cc::SplitListSet< rcu_shb, key_val,
3235 typename cc::split_list::make_traits<
3236 cc::split_list::ordered_list<cc::lazy_list_tag>
3237 ,cc::split_list::dynamic_bucket_table< false >
3239 ,cc::split_list::ordered_list_traits<
3240 typename cc::lazy_list::make_traits<
3245 > SplitList_Lazy_RCU_SHB_st_less;
3247 typedef cc::SplitListSet< rcu_shb, key_val,
3248 typename cc::split_list::make_traits<
3249 cc::split_list::ordered_list<cc::lazy_list_tag>
3251 ,cc::split_list::dynamic_bucket_table< false >
3252 ,co::memory_model< co::v::sequential_consistent >
3253 ,cc::split_list::ordered_list_traits<
3254 typename cc::lazy_list::make_traits<
3256 ,co::memory_model< co::v::sequential_consistent >
3260 > SplitList_Lazy_RCU_SHB_st_less_seqcst;
3263 typedef cc::SplitListSet< rcu_sht, key_val,
3264 typename cc::split_list::make_traits<
3265 cc::split_list::ordered_list<cc::lazy_list_tag>
3267 ,cc::split_list::ordered_list_traits<
3268 typename cc::lazy_list::make_traits<
3269 co::compare< compare >
3273 > SplitList_Lazy_RCU_SHT_dyn_cmp;
3275 typedef cc::SplitListSet< rcu_sht, key_val,
3276 typename cc::split_list::make_traits<
3277 cc::split_list::ordered_list<cc::lazy_list_tag>
3279 ,co::memory_model< co::v::sequential_consistent >
3280 ,cc::split_list::ordered_list_traits<
3281 typename cc::lazy_list::make_traits<
3282 co::compare< compare >
3283 ,co::memory_model< co::v::sequential_consistent >
3287 > SplitList_Lazy_RCU_SHT_dyn_cmp_seqcst;
3289 typedef cc::SplitListSet< rcu_sht, key_val,
3290 typename cc::split_list::make_traits<
3291 cc::split_list::ordered_list<cc::lazy_list_tag>
3292 ,cc::split_list::dynamic_bucket_table< false >
3294 ,cc::split_list::ordered_list_traits<
3295 typename cc::lazy_list::make_traits<
3296 co::compare< compare >
3300 > SplitList_Lazy_RCU_SHT_st_cmp;
3302 typedef cc::SplitListSet< rcu_sht, key_val,
3303 typename cc::split_list::make_traits<
3304 cc::split_list::ordered_list<cc::lazy_list_tag>
3306 ,cc::split_list::dynamic_bucket_table< false >
3307 ,co::memory_model< co::v::sequential_consistent >
3308 ,cc::split_list::ordered_list_traits<
3309 typename cc::lazy_list::make_traits<
3310 co::compare< compare >
3311 ,co::memory_model< co::v::sequential_consistent >
3315 > SplitList_Lazy_RCU_SHT_st_cmp_seqcst;
3318 typedef cc::SplitListSet< rcu_sht, key_val,
3319 typename cc::split_list::make_traits<
3320 cc::split_list::ordered_list<cc::lazy_list_tag>
3322 ,cc::split_list::ordered_list_traits<
3323 typename cc::lazy_list::make_traits<
3328 > SplitList_Lazy_RCU_SHT_dyn_less;
3330 typedef cc::SplitListSet< rcu_sht, key_val,
3331 typename cc::split_list::make_traits<
3332 cc::split_list::ordered_list<cc::lazy_list_tag>
3334 ,co::memory_model< co::v::sequential_consistent >
3335 ,cc::split_list::ordered_list_traits<
3336 typename cc::lazy_list::make_traits<
3338 ,co::memory_model< co::v::sequential_consistent >
3342 > SplitList_Lazy_RCU_SHT_dyn_less_seqcst;
3344 typedef cc::SplitListSet< rcu_sht, key_val,
3345 typename cc::split_list::make_traits<
3346 cc::split_list::ordered_list<cc::lazy_list_tag>
3347 ,cc::split_list::dynamic_bucket_table< false >
3349 ,cc::split_list::ordered_list_traits<
3350 typename cc::lazy_list::make_traits<
3355 > SplitList_Lazy_RCU_SHT_st_less;
3357 typedef cc::SplitListSet< rcu_sht, key_val,
3358 typename cc::split_list::make_traits<
3359 cc::split_list::ordered_list<cc::lazy_list_tag>
3361 ,cc::split_list::dynamic_bucket_table< false >
3362 ,co::memory_model< co::v::sequential_consistent >
3363 ,cc::split_list::ordered_list_traits<
3364 typename cc::lazy_list::make_traits<
3366 ,co::memory_model< co::v::sequential_consistent >
3370 > SplitList_Lazy_RCU_SHT_st_less_seqcst;
3373 // ***************************************************************************
3376 // for sequential containers
3377 template <class BucketEntry, typename... Options>
3378 class StripedHashSet_seq:
3379 public cc::StripedSet< BucketEntry,
3380 co::mutex_policy< cc::striped_set::striping<> >
3381 ,co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
3385 typedef cc::StripedSet< BucketEntry,
3386 co::mutex_policy< cc::striped_set::striping<> >
3387 ,co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
3390 typedef typename base_class::resizing_policy resizing_policy_t;
3392 resizing_policy_t m_placeHolder;
3394 StripedHashSet_seq( size_t nCapacity, size_t nLoadFactor )
3395 : base_class( nCapacity / nLoadFactor / 16, *(new(&m_placeHolder) resizing_policy_t( nLoadFactor )) )
3398 template <typename Q, typename Less>
3399 bool erase_with( Q const& v, Less pred )
3401 return base_class::erase( v );
3405 // for non-sequential ordered containers
3406 template <class BucketEntry, typename... Options>
3407 class StripedHashSet_ord:
3408 public cc::StripedSet< BucketEntry,
3409 co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
3410 ,co::mutex_policy< cc::striped_set::striping<> >
3414 typedef cc::StripedSet< BucketEntry,
3415 co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
3416 ,co::mutex_policy< cc::striped_set::striping<> >
3419 typedef typename base_class::resizing_policy resizing_policy_t;
3421 resizing_policy_t m_placeHolder;
3423 StripedHashSet_ord( size_t nCapacity, size_t nLoadFactor )
3424 : base_class( 0, *(new(&m_placeHolder) resizing_policy_t( nLoadFactor * 1024 )) )
3427 template <typename Q, typename Less>
3428 bool erase_with( Q const& v, Less pred )
3430 return base_class::erase( v );
3434 typedef StripedHashSet_seq<
3435 std::list< key_val >
3440 typedef StripedHashSet_seq<
3441 std::vector< key_val >
3444 > StripedSet_vector;
3446 #if BOOST_VERSION >= 104800
3447 typedef StripedHashSet_seq<
3448 boost::container::slist< key_val >
3451 > StripedSet_boost_slist;
3453 typedef StripedHashSet_seq<
3454 boost::container::list< key_val >
3457 > StripedSet_boost_list;
3459 typedef StripedHashSet_seq<
3460 boost::container::vector< key_val >
3463 > StripedSet_boost_vector;
3465 typedef StripedHashSet_seq<
3466 boost::container::stable_vector< key_val >
3469 > StripedSet_boost_stable_vector;
3472 typedef StripedHashSet_ord<
3473 std::set< key_val, less >
3477 #if (CDS_COMPILER == CDS_COMPILER_MSVC || (CDS_COMPILER == CDS_COMPILER_INTEL && CDS_OS_INTERFACE == CDS_OSI_WINDOWS)) && _MSC_VER < 1600
3478 typedef StripedHashSet_ord<
3479 stdext::hash_set< key_val, hash_less >
3481 > StripedSet_hashset;
3483 typedef StripedHashSet_ord<
3484 std::unordered_set< key_val, hash, equal_to >
3486 > StripedSet_hashset;
3489 #if BOOST_VERSION >= 104800
3490 typedef StripedHashSet_ord<
3491 boost::container::set< key_val, less >
3493 > StripedSet_boost_set;
3495 typedef StripedHashSet_ord<
3496 boost::container::flat_set< key_val, less >
3498 > StripedSet_boost_flat_set;
3501 typedef StripedHashSet_ord<
3502 boost::unordered_set< key_val, hash, equal_to >
3504 > StripedSet_boost_unordered_set;
3508 // ***************************************************************************
3511 // for sequential containers
3512 template <class BucketEntry, typename... Options>
3513 class RefinableHashSet_seq:
3514 public cc::StripedSet< BucketEntry,
3515 co::mutex_policy< cc::striped_set::refinable<> >
3516 ,co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
3520 typedef cc::StripedSet< BucketEntry,
3521 co::mutex_policy< cc::striped_set::refinable<> >
3522 ,co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
3525 typedef typename base_class::resizing_policy resizing_policy_t;
3527 resizing_policy_t m_placeHolder;
3529 RefinableHashSet_seq( size_t nCapacity, size_t nLoadFactor )
3530 : base_class( nCapacity / nLoadFactor / 16, *(new(&m_placeHolder) resizing_policy_t( nLoadFactor )) )
3533 template <typename Q, typename Less>
3534 bool erase_with( Q const& v, Less pred )
3536 return base_class::erase( v );
3540 // for non-sequential ordered containers
3541 template <class BucketEntry, typename... Options>
3542 class RefinableHashSet_ord:
3543 public cc::StripedSet< BucketEntry,
3544 co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
3545 ,co::mutex_policy< cc::striped_set::refinable<> >
3549 typedef cc::StripedSet< BucketEntry,
3550 co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
3551 ,co::mutex_policy< cc::striped_set::refinable<> >
3554 typedef typename base_class::resizing_policy resizing_policy_t;
3556 resizing_policy_t m_placeHolder;
3558 RefinableHashSet_ord( size_t nCapacity, size_t nLoadFactor )
3559 : base_class( 0, *(new(&m_placeHolder) resizing_policy_t( nLoadFactor * 1024 )) )
3562 template <typename Q, typename Less>
3563 bool erase_with( Q const& v, Less pred )
3565 return base_class::erase( v );
3569 typedef RefinableHashSet_seq<
3570 std::list< key_val >
3573 > RefinableSet_list;
3575 typedef RefinableHashSet_seq<
3576 std::vector< key_val >
3579 > RefinableSet_vector;
3581 #if BOOST_VERSION >= 104800
3582 typedef RefinableHashSet_seq<
3583 boost::container::slist< key_val >
3586 > RefinableSet_boost_slist;
3588 typedef RefinableHashSet_seq<
3589 boost::container::list< key_val >
3592 > RefinableSet_boost_list;
3594 typedef RefinableHashSet_seq<
3595 boost::container::vector< key_val >
3598 > RefinableSet_boost_vector;
3600 typedef RefinableHashSet_seq<
3601 boost::container::stable_vector< key_val >
3604 > RefinableSet_boost_stable_vector;
3607 typedef RefinableHashSet_ord<
3608 std::set< key_val, less >
3612 #if (CDS_COMPILER == CDS_COMPILER_MSVC || (CDS_COMPILER == CDS_COMPILER_INTEL && CDS_OS_INTERFACE == CDS_OSI_WINDOWS)) && _MSC_VER < 1600
3613 typedef RefinableHashSet_ord<
3614 stdext::hash_set< key_val, hash_less >
3616 > RefinableSet_hashset;
3618 typedef RefinableHashSet_ord<
3619 std::unordered_set< key_val, hash, equal_to >
3621 > RefinableSet_hashset;
3624 #if BOOST_VERSION >= 104800
3625 typedef RefinableHashSet_ord<
3626 boost::container::set< key_val, less >
3628 > RefinableSet_boost_set;
3630 typedef RefinableHashSet_ord<
3631 boost::container::flat_set< key_val, less >
3633 > RefinableSet_boost_flat_set;
3636 typedef RefinableHashSet_ord<
3637 boost::unordered_set< key_val, hash, equal_to >
3639 > RefinableSet_boost_unordered_set;
3643 // ***************************************************************************
3646 typedef CuckooStripedSet< key_val,
3647 cc::cuckoo::probeset_type< cc::cuckoo::list >
3648 ,co::equal_to< equal_to >
3649 ,co::hash< std::tuple< hash, hash2 > >
3650 > CuckooStripedSet_list_unord;
3652 typedef CuckooStripedSet< key_val,
3653 cc::cuckoo::probeset_type< cc::cuckoo::list >
3654 ,co::equal_to< equal_to >
3655 ,co::hash< std::tuple< hash, hash2 > >
3656 ,co::stat< cc::cuckoo::stat >
3657 > CuckooStripedSet_list_unord_stat;
3659 typedef CuckooStripedSet< key_val,
3660 cc::cuckoo::probeset_type< cc::cuckoo::list >
3661 ,co::equal_to< equal_to >
3662 ,co::hash< std::tuple< hash, hash2 > >
3663 ,cc::cuckoo::store_hash< true >
3664 > CuckooStripedSet_list_unord_storehash;
3666 typedef CuckooStripedSet< key_val,
3667 cc::cuckoo::probeset_type< cc::cuckoo::list >
3668 ,co::compare< compare >
3669 ,co::hash< std::tuple< hash, hash2 > >
3670 > CuckooStripedSet_list_ord;
3672 typedef CuckooStripedSet< key_val,
3673 cc::cuckoo::probeset_type< cc::cuckoo::list >
3674 ,co::compare< compare >
3675 ,co::hash< std::tuple< hash, hash2 > >
3676 ,co::stat< cc::cuckoo::stat >
3677 > CuckooStripedSet_list_ord_stat;
3679 typedef CuckooStripedSet< key_val,
3680 cc::cuckoo::probeset_type< cc::cuckoo::list >
3681 ,co::compare< compare >
3682 ,co::hash< std::tuple< hash, hash2 > >
3683 ,cc::cuckoo::store_hash< true >
3684 > CuckooStripedSet_list_ord_storehash;
3686 typedef CuckooStripedSet< key_val,
3687 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
3688 ,co::equal_to< equal_to >
3689 ,co::hash< std::tuple< hash, hash2 > >
3690 > CuckooStripedSet_vector_unord;
3692 typedef CuckooStripedSet< key_val,
3693 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
3694 ,co::equal_to< equal_to >
3695 ,co::hash< std::tuple< hash, hash2 > >
3696 ,co::stat< cc::cuckoo::stat >
3697 > CuckooStripedSet_vector_unord_stat;
3699 typedef CuckooStripedSet< key_val,
3700 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
3701 ,co::equal_to< equal_to >
3702 ,co::hash< std::tuple< hash, hash2 > >
3703 ,cc::cuckoo::store_hash< true >
3704 > CuckooStripedSet_vector_unord_storehash;
3706 typedef CuckooStripedSet< key_val,
3707 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
3708 ,co::compare< compare >
3709 ,co::hash< std::tuple< hash, hash2 > >
3710 > CuckooStripedSet_vector_ord;
3712 typedef CuckooStripedSet< key_val,
3713 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
3714 ,co::compare< compare >
3715 ,co::hash< std::tuple< hash, hash2 > >
3716 ,co::stat< cc::cuckoo::stat >
3717 > CuckooStripedSet_vector_ord_stat;
3719 typedef CuckooStripedSet< key_val,
3720 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
3721 ,co::compare< compare >
3722 ,co::hash< std::tuple< hash, hash2 > >
3723 ,cc::cuckoo::store_hash< true >
3724 > CuckooStripedSet_vector_ord_storehash;
3726 typedef CuckooRefinableSet< key_val,
3727 cc::cuckoo::probeset_type< cc::cuckoo::list >
3728 ,co::equal_to< equal_to >
3729 ,co::hash< std::tuple< hash, hash2 > >
3730 > CuckooRefinableSet_list_unord;
3732 typedef CuckooRefinableSet< key_val,
3733 cc::cuckoo::probeset_type< cc::cuckoo::list >
3734 ,co::equal_to< equal_to >
3735 ,co::hash< std::tuple< hash, hash2 > >
3736 ,co::stat< cc::cuckoo::stat >
3737 > CuckooRefinableSet_list_unord_stat;
3739 typedef CuckooRefinableSet< key_val,
3740 cc::cuckoo::probeset_type< cc::cuckoo::list >
3741 ,co::equal_to< equal_to >
3742 ,co::hash< std::tuple< hash, hash2 > >
3743 ,cc::cuckoo::store_hash< true >
3744 > CuckooRefinableSet_list_unord_storehash;
3746 typedef CuckooRefinableSet< key_val,
3747 cc::cuckoo::probeset_type< cc::cuckoo::list >
3748 ,co::compare< compare >
3749 ,co::hash< std::tuple< hash, hash2 > >
3750 > CuckooRefinableSet_list_ord;
3752 typedef CuckooRefinableSet< key_val,
3753 cc::cuckoo::probeset_type< cc::cuckoo::list >
3754 ,co::compare< compare >
3755 ,co::hash< std::tuple< hash, hash2 > >
3756 ,co::stat< cc::cuckoo::stat >
3757 > CuckooRefinableSet_list_ord_stat;
3759 typedef CuckooRefinableSet< key_val,
3760 cc::cuckoo::probeset_type< cc::cuckoo::list >
3761 ,co::compare< compare >
3762 ,co::hash< std::tuple< hash, hash2 > >
3763 ,cc::cuckoo::store_hash< true >
3764 > CuckooRefinableSet_list_ord_storehash;
3766 typedef CuckooRefinableSet< key_val,
3767 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
3768 ,co::equal_to< equal_to >
3769 ,co::hash< std::tuple< hash, hash2 > >
3770 > CuckooRefinableSet_vector_unord;
3772 typedef CuckooRefinableSet< key_val,
3773 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
3774 ,co::equal_to< equal_to >
3775 ,co::hash< std::tuple< hash, hash2 > >
3776 ,co::stat< cc::cuckoo::stat >
3777 > CuckooRefinableSet_vector_unord_stat;
3779 typedef CuckooRefinableSet< key_val,
3780 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
3781 ,co::equal_to< equal_to >
3782 ,co::hash< std::tuple< hash, hash2 > >
3783 ,cc::cuckoo::store_hash< true >
3784 > CuckooRefinableSet_vector_unord_storehash;
3786 typedef CuckooRefinableSet< key_val,
3787 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
3788 ,co::compare< compare >
3789 ,co::hash< std::tuple< hash, hash2 > >
3790 > CuckooRefinableSet_vector_ord;
3792 typedef CuckooRefinableSet< key_val,
3793 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
3794 ,co::compare< compare >
3795 ,co::hash< std::tuple< hash, hash2 > >
3796 ,co::stat< cc::cuckoo::stat >
3797 > CuckooRefinableSet_vector_ord_stat;
3799 typedef CuckooRefinableSet< key_val,
3800 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
3801 ,co::compare< compare >
3802 ,co::hash< std::tuple< hash, hash2 > >
3803 ,cc::cuckoo::store_hash< true >
3804 > CuckooRefinableSet_vector_ord_storehash;
3807 // ***************************************************************************
3810 class traits_SkipListSet_hp_less_pascal: public cc::skip_list::make_traits <
3812 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3813 ,co::item_counter< cds::atomicity::item_counter >
3816 typedef cc::SkipListSet< cds::gc::HP, key_val, traits_SkipListSet_hp_less_pascal > SkipListSet_hp_less_pascal;
3818 class traits_SkipListSet_hp_less_pascal_seqcst: public cc::skip_list::make_traits <
3820 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3821 ,co::memory_model< co::v::sequential_consistent >
3822 ,co::item_counter< cds::atomicity::item_counter >
3825 typedef cc::SkipListSet< cds::gc::HP, key_val, traits_SkipListSet_hp_less_pascal_seqcst > SkipListSet_hp_less_pascal_seqcst;
3827 class traits_SkipListSet_hp_less_pascal_stat: public cc::skip_list::make_traits <
3829 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3830 ,co::stat< cc::skip_list::stat<> >
3831 ,co::item_counter< cds::atomicity::item_counter >
3834 typedef cc::SkipListSet< cds::gc::HP, key_val, traits_SkipListSet_hp_less_pascal_stat > SkipListSet_hp_less_pascal_stat;
3836 class traits_SkipListSet_hp_cmp_pascal: public cc::skip_list::make_traits <
3837 co::compare< compare >
3838 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3839 ,co::item_counter< cds::atomicity::item_counter >
3842 typedef cc::SkipListSet< cds::gc::HP, key_val, traits_SkipListSet_hp_cmp_pascal > SkipListSet_hp_cmp_pascal;
3844 class traits_SkipListSet_hp_cmp_pascal_stat: public cc::skip_list::make_traits <
3845 co::compare< compare >
3846 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3847 ,co::stat< cc::skip_list::stat<> >
3848 ,co::item_counter< cds::atomicity::item_counter >
3851 typedef cc::SkipListSet< cds::gc::HP, key_val, traits_SkipListSet_hp_cmp_pascal_stat > SkipListSet_hp_cmp_pascal_stat;
3853 class traits_SkipListSet_hp_less_xorshift: public cc::skip_list::make_traits <
3855 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3856 ,co::item_counter< cds::atomicity::item_counter >
3859 typedef cc::SkipListSet< cds::gc::HP, key_val, traits_SkipListSet_hp_less_xorshift > SkipListSet_hp_less_xorshift;
3861 class traits_SkipListSet_hp_less_xorshift_stat: public cc::skip_list::make_traits <
3863 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3864 ,co::stat< cc::skip_list::stat<> >
3865 ,co::item_counter< cds::atomicity::item_counter >
3868 typedef cc::SkipListSet< cds::gc::HP, key_val, traits_SkipListSet_hp_less_xorshift_stat > SkipListSet_hp_less_xorshift_stat;
3870 class traits_SkipListSet_hp_cmp_xorshift: public cc::skip_list::make_traits <
3871 co::compare< compare >
3872 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3873 ,co::item_counter< cds::atomicity::item_counter >
3876 typedef cc::SkipListSet< cds::gc::HP, key_val, traits_SkipListSet_hp_cmp_xorshift > SkipListSet_hp_cmp_xorshift;
3878 class traits_SkipListSet_hp_cmp_xorshift_stat: public cc::skip_list::make_traits <
3879 co::compare< compare >
3880 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3881 ,co::stat< cc::skip_list::stat<> >
3882 ,co::item_counter< cds::atomicity::item_counter >
3885 typedef cc::SkipListSet< cds::gc::HP, key_val, traits_SkipListSet_hp_cmp_xorshift_stat > SkipListSet_hp_cmp_xorshift_stat;
3887 // ***************************************************************************
3888 // SkipListSet - HRC
3890 typedef cc::SkipListSet< cds::gc::HRC, key_val,
3891 typename cc::skip_list::make_traits <
3893 ,co::item_counter< cds::atomicity::item_counter >
3894 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3896 > SkipListSet_hrc_less_pascal;
3898 typedef cc::SkipListSet< cds::gc::HRC, key_val,
3899 typename cc::skip_list::make_traits <
3901 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3902 ,co::memory_model< co::v::sequential_consistent >
3903 ,co::item_counter< cds::atomicity::item_counter >
3905 > SkipListSet_hrc_less_pascal_seqcst;
3907 typedef cc::SkipListSet< cds::gc::HRC, key_val,
3908 typename cc::skip_list::make_traits <
3910 ,co::item_counter< cds::atomicity::item_counter >
3911 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3912 ,co::stat< cc::skip_list::stat<> >
3914 > SkipListSet_hrc_less_pascal_stat;
3916 typedef cc::SkipListSet< cds::gc::HRC, key_val,
3917 typename cc::skip_list::make_traits <
3918 co::compare< compare >
3919 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3920 ,co::item_counter< cds::atomicity::item_counter >
3922 > SkipListSet_hrc_cmp_pascal;
3924 typedef cc::SkipListSet< cds::gc::HRC, key_val,
3925 typename cc::skip_list::make_traits <
3926 co::compare< compare >
3927 ,co::item_counter< cds::atomicity::item_counter >
3928 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3929 ,co::stat< cc::skip_list::stat<> >
3931 > SkipListSet_hrc_cmp_pascal_stat;
3933 typedef cc::SkipListSet< cds::gc::HRC, key_val,
3934 typename cc::skip_list::make_traits <
3936 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3937 ,co::item_counter< cds::atomicity::item_counter >
3939 > SkipListSet_hrc_less_xorshift;
3941 typedef cc::SkipListSet< cds::gc::HRC, key_val,
3942 typename cc::skip_list::make_traits <
3944 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3945 ,co::stat< cc::skip_list::stat<> >
3946 ,co::item_counter< cds::atomicity::item_counter >
3948 > SkipListSet_hrc_less_xorshift_stat;
3950 typedef cc::SkipListSet< cds::gc::HRC, key_val,
3951 typename cc::skip_list::make_traits <
3952 co::compare< compare >
3953 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3954 ,co::item_counter< cds::atomicity::item_counter >
3956 > SkipListSet_hrc_cmp_xorshift;
3958 typedef cc::SkipListSet< cds::gc::HRC, key_val,
3959 typename cc::skip_list::make_traits <
3960 co::compare< compare >
3961 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3962 ,co::stat< cc::skip_list::stat<> >
3963 ,co::item_counter< cds::atomicity::item_counter >
3965 > SkipListSet_hrc_cmp_xorshift_stat;
3967 // ***************************************************************************
3968 // SkipListSet - PTB
3970 class traits_SkipListSet_ptb_less_pascal: public cc::skip_list::make_traits <
3972 ,co::item_counter< cds::atomicity::item_counter >
3973 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3976 typedef cc::SkipListSet< cds::gc::PTB, key_val, traits_SkipListSet_ptb_less_pascal > SkipListSet_ptb_less_pascal;
3978 class traits_SkipListSet_ptb_less_pascal_seqcst: public cc::skip_list::make_traits <
3980 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3981 ,co::memory_model< co::v::sequential_consistent >
3982 ,co::item_counter< cds::atomicity::item_counter >
3985 typedef cc::SkipListSet< cds::gc::PTB, key_val, traits_SkipListSet_ptb_less_pascal_seqcst > SkipListSet_ptb_less_pascal_seqcst;
3987 class traits_SkipListSet_ptb_less_pascal_stat: public cc::skip_list::make_traits <
3989 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3990 ,co::stat< cc::skip_list::stat<> >
3991 ,co::item_counter< cds::atomicity::item_counter >
3994 typedef cc::SkipListSet< cds::gc::PTB, key_val, traits_SkipListSet_ptb_less_pascal_stat > SkipListSet_ptb_less_pascal_stat;
3996 class traits_SkipListSet_ptb_cmp_pascal: public cc::skip_list::make_traits <
3997 co::compare< compare >
3998 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3999 ,co::item_counter< cds::atomicity::item_counter >
4002 typedef cc::SkipListSet< cds::gc::PTB, key_val, traits_SkipListSet_ptb_cmp_pascal > SkipListSet_ptb_cmp_pascal;
4004 class traits_SkipListSet_ptb_cmp_pascal_stat: public cc::skip_list::make_traits <
4005 co::compare< compare >
4006 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
4007 ,co::stat< cc::skip_list::stat<> >
4008 ,co::item_counter< cds::atomicity::item_counter >
4011 typedef cc::SkipListSet< cds::gc::PTB, key_val, traits_SkipListSet_ptb_cmp_pascal_stat > SkipListSet_ptb_cmp_pascal_stat;
4013 class traits_SkipListSet_ptb_less_xorshift: public cc::skip_list::make_traits <
4015 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
4016 ,co::item_counter< cds::atomicity::item_counter >
4019 typedef cc::SkipListSet< cds::gc::PTB, key_val, traits_SkipListSet_ptb_less_xorshift > SkipListSet_ptb_less_xorshift;
4021 class traits_SkipListSet_ptb_less_xorshift_stat: public cc::skip_list::make_traits <
4023 ,co::item_counter< cds::atomicity::item_counter >
4024 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
4025 ,co::stat< cc::skip_list::stat<> >
4028 typedef cc::SkipListSet< cds::gc::PTB, key_val, traits_SkipListSet_ptb_less_xorshift_stat > SkipListSet_ptb_less_xorshift_stat;
4030 class traits_SkipListSet_ptb_cmp_xorshift: public cc::skip_list::make_traits <
4031 co::compare< compare >
4032 ,co::item_counter< cds::atomicity::item_counter >
4033 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
4036 typedef cc::SkipListSet< cds::gc::PTB, key_val, traits_SkipListSet_ptb_cmp_xorshift> SkipListSet_ptb_cmp_xorshift;
4038 class traits_SkipListSet_ptb_cmp_xorshift_stat: public cc::skip_list::make_traits <
4039 co::compare< compare >
4040 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
4041 ,co::stat< cc::skip_list::stat<> >
4042 ,co::item_counter< cds::atomicity::item_counter >
4045 typedef cc::SkipListSet< cds::gc::PTB, key_val, traits_SkipListSet_ptb_cmp_xorshift_stat > SkipListSet_ptb_cmp_xorshift_stat;
4048 // ***************************************************************************
4049 // SkipListSet - RCU general_instant
4051 class traits_SkipListSet_rcu_gpi_less_pascal: public cc::skip_list::make_traits <
4053 ,co::item_counter< cds::atomicity::item_counter >
4054 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
4057 typedef cc::SkipListSet< rcu_gpi, key_val, traits_SkipListSet_rcu_gpi_less_pascal > SkipListSet_rcu_gpi_less_pascal;
4059 class traits_SkipListSet_rcu_gpi_less_pascal_seqcst: public cc::skip_list::make_traits <
4061 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
4062 ,co::memory_model< co::v::sequential_consistent >
4063 ,co::item_counter< cds::atomicity::item_counter >
4066 typedef cc::SkipListSet< rcu_gpi, key_val, traits_SkipListSet_rcu_gpi_less_pascal_seqcst > SkipListSet_rcu_gpi_less_pascal_seqcst;
4068 class traits_SkipListSet_rcu_gpi_less_pascal_stat: public cc::skip_list::make_traits <
4070 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
4071 ,co::stat< cc::skip_list::stat<> >
4072 ,co::item_counter< cds::atomicity::item_counter >
4075 typedef cc::SkipListSet< rcu_gpi, key_val, traits_SkipListSet_rcu_gpi_less_pascal_stat > SkipListSet_rcu_gpi_less_pascal_stat;
4077 class traits_SkipListSet_rcu_gpi_cmp_pascal: public cc::skip_list::make_traits <
4078 co::compare< compare >
4079 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
4080 ,co::item_counter< cds::atomicity::item_counter >
4083 typedef cc::SkipListSet< rcu_gpi, key_val, traits_SkipListSet_rcu_gpi_cmp_pascal > SkipListSet_rcu_gpi_cmp_pascal;
4085 class traits_SkipListSet_rcu_gpi_cmp_pascal_stat: public cc::skip_list::make_traits <
4086 co::compare< compare >
4087 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
4088 ,co::stat< cc::skip_list::stat<> >
4089 ,co::item_counter< cds::atomicity::item_counter >
4092 typedef cc::SkipListSet< rcu_gpi, key_val, traits_SkipListSet_rcu_gpi_cmp_pascal_stat > SkipListSet_rcu_gpi_cmp_pascal_stat;
4094 class traits_SkipListSet_rcu_gpi_less_xorshift: public cc::skip_list::make_traits <
4096 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
4097 ,co::item_counter< cds::atomicity::item_counter >
4100 typedef cc::SkipListSet< rcu_gpi, key_val, traits_SkipListSet_rcu_gpi_less_xorshift > SkipListSet_rcu_gpi_less_xorshift;
4102 class traits_SkipListSet_rcu_gpi_less_xorshift_stat: public cc::skip_list::make_traits <
4104 ,co::item_counter< cds::atomicity::item_counter >
4105 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
4106 ,co::stat< cc::skip_list::stat<> >
4109 typedef cc::SkipListSet< rcu_gpi, key_val, traits_SkipListSet_rcu_gpi_less_xorshift_stat > SkipListSet_rcu_gpi_less_xorshift_stat;
4111 class traits_SkipListSet_rcu_gpi_cmp_xorshift: public cc::skip_list::make_traits <
4112 co::compare< compare >
4113 ,co::item_counter< cds::atomicity::item_counter >
4114 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
4117 typedef cc::SkipListSet< rcu_gpi, key_val, traits_SkipListSet_rcu_gpi_cmp_xorshift > SkipListSet_rcu_gpi_cmp_xorshift;
4119 class traits_SkipListSet_rcu_gpi_cmp_xorshift_stat: public cc::skip_list::make_traits <
4120 co::compare< compare >
4121 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
4122 ,co::stat< cc::skip_list::stat<> >
4123 ,co::item_counter< cds::atomicity::item_counter >
4126 typedef cc::SkipListSet< rcu_gpi, key_val, traits_SkipListSet_rcu_gpi_cmp_xorshift_stat > SkipListSet_rcu_gpi_cmp_xorshift_stat;
4129 // ***************************************************************************
4130 // SkipListSet - RCU general_buffered
4132 class traits_SkipListSet_rcu_gpb_less_pascal: public cc::skip_list::make_traits <
4134 ,co::item_counter< cds::atomicity::item_counter >
4135 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
4138 typedef cc::SkipListSet< rcu_gpb, key_val, traits_SkipListSet_rcu_gpb_less_pascal > SkipListSet_rcu_gpb_less_pascal;
4140 class traits_SkipListSet_rcu_gpb_less_pascal_seqcst: public cc::skip_list::make_traits <
4142 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
4143 ,co::memory_model< co::v::sequential_consistent >
4144 ,co::item_counter< cds::atomicity::item_counter >
4147 typedef cc::SkipListSet< rcu_gpb, key_val, traits_SkipListSet_rcu_gpb_less_pascal_seqcst > SkipListSet_rcu_gpb_less_pascal_seqcst;
4149 class traits_SkipListSet_rcu_gpb_less_pascal_stat: public cc::skip_list::make_traits <
4151 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
4152 ,co::stat< cc::skip_list::stat<> >
4153 ,co::item_counter< cds::atomicity::item_counter >
4156 typedef cc::SkipListSet< rcu_gpb, key_val, traits_SkipListSet_rcu_gpb_less_pascal_stat > SkipListSet_rcu_gpb_less_pascal_stat;
4158 class traits_SkipListSet_rcu_gpb_cmp_pascal: public cc::skip_list::make_traits <
4159 co::compare< compare >
4160 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
4161 ,co::item_counter< cds::atomicity::item_counter >
4164 typedef cc::SkipListSet< rcu_gpb, key_val, traits_SkipListSet_rcu_gpb_cmp_pascal > SkipListSet_rcu_gpb_cmp_pascal;
4166 class traits_SkipListSet_rcu_gpb_cmp_pascal_stat: public cc::skip_list::make_traits <
4167 co::compare< compare >
4168 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
4169 ,co::stat< cc::skip_list::stat<> >
4170 ,co::item_counter< cds::atomicity::item_counter >
4173 typedef cc::SkipListSet< rcu_gpb, key_val, traits_SkipListSet_rcu_gpb_cmp_pascal_stat > SkipListSet_rcu_gpb_cmp_pascal_stat;
4175 class traits_SkipListSet_rcu_gpb_less_xorshift: public cc::skip_list::make_traits <
4177 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
4178 ,co::item_counter< cds::atomicity::item_counter >
4181 typedef cc::SkipListSet< rcu_gpb, key_val, traits_SkipListSet_rcu_gpb_less_xorshift > SkipListSet_rcu_gpb_less_xorshift;
4183 class traits_SkipListSet_rcu_gpb_less_xorshift_stat: public cc::skip_list::make_traits <
4185 ,co::item_counter< cds::atomicity::item_counter >
4186 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
4187 ,co::stat< cc::skip_list::stat<> >
4190 typedef cc::SkipListSet< rcu_gpb, key_val, traits_SkipListSet_rcu_gpb_less_xorshift_stat > SkipListSet_rcu_gpb_less_xorshift_stat;
4192 class traits_SkipListSet_rcu_gpb_cmp_xorshift: public cc::skip_list::make_traits <
4193 co::compare< compare >
4194 ,co::item_counter< cds::atomicity::item_counter >
4195 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
4198 typedef cc::SkipListSet< rcu_gpb, key_val, traits_SkipListSet_rcu_gpb_cmp_xorshift > SkipListSet_rcu_gpb_cmp_xorshift;
4200 class traits_SkipListSet_rcu_gpb_cmp_xorshift_stat: public cc::skip_list::make_traits <
4201 co::compare< compare >
4202 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
4203 ,co::stat< cc::skip_list::stat<> >
4204 ,co::item_counter< cds::atomicity::item_counter >
4207 typedef cc::SkipListSet< rcu_gpb, key_val, traits_SkipListSet_rcu_gpb_cmp_xorshift_stat > SkipListSet_rcu_gpb_cmp_xorshift_stat;
4209 // ***************************************************************************
4210 // SkipListSet - RCU general_threaded
4212 class traits_SkipListSet_rcu_gpt_less_pascal: public cc::skip_list::make_traits <
4214 ,co::item_counter< cds::atomicity::item_counter >
4215 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
4218 typedef cc::SkipListSet< rcu_gpt, key_val, traits_SkipListSet_rcu_gpt_less_pascal > SkipListSet_rcu_gpt_less_pascal;
4220 class traits_SkipListSet_rcu_gpt_less_pascal_seqcst: public cc::skip_list::make_traits <
4222 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
4223 ,co::memory_model< co::v::sequential_consistent >
4224 ,co::item_counter< cds::atomicity::item_counter >
4227 typedef cc::SkipListSet< rcu_gpt, key_val, traits_SkipListSet_rcu_gpt_less_pascal_seqcst > SkipListSet_rcu_gpt_less_pascal_seqcst;
4229 class traits_SkipListSet_rcu_gpt_less_pascal_stat: public cc::skip_list::make_traits <
4231 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
4232 ,co::stat< cc::skip_list::stat<> >
4233 ,co::item_counter< cds::atomicity::item_counter >
4236 typedef cc::SkipListSet< rcu_gpt, key_val, traits_SkipListSet_rcu_gpt_less_pascal_stat > SkipListSet_rcu_gpt_less_pascal_stat;
4238 class traits_SkipListSet_rcu_gpt_cmp_pascal: public cc::skip_list::make_traits <
4239 co::compare< compare >
4240 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
4241 ,co::item_counter< cds::atomicity::item_counter >
4244 typedef cc::SkipListSet< rcu_gpt, key_val, traits_SkipListSet_rcu_gpt_cmp_pascal > SkipListSet_rcu_gpt_cmp_pascal;
4246 class traits_SkipListSet_rcu_gpt_cmp_pascal_stat: public cc::skip_list::make_traits <
4247 co::compare< compare >
4248 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
4249 ,co::stat< cc::skip_list::stat<> >
4250 ,co::item_counter< cds::atomicity::item_counter >
4253 typedef cc::SkipListSet< rcu_gpt, key_val, traits_SkipListSet_rcu_gpt_cmp_pascal_stat > SkipListSet_rcu_gpt_cmp_pascal_stat;
4255 class traits_SkipListSet_rcu_gpt_less_xorshift: public cc::skip_list::make_traits <
4257 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
4258 ,co::item_counter< cds::atomicity::item_counter >
4261 typedef cc::SkipListSet< rcu_gpt, key_val, traits_SkipListSet_rcu_gpt_less_xorshift > SkipListSet_rcu_gpt_less_xorshift;
4263 class traits_SkipListSet_rcu_gpt_less_xorshift_stat: public cc::skip_list::make_traits <
4265 ,co::item_counter< cds::atomicity::item_counter >
4266 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
4267 ,co::stat< cc::skip_list::stat<> >
4270 typedef cc::SkipListSet< rcu_gpt, key_val, traits_SkipListSet_rcu_gpt_less_xorshift_stat > SkipListSet_rcu_gpt_less_xorshift_stat;
4272 class traits_SkipListSet_rcu_gpt_cmp_xorshift: public cc::skip_list::make_traits <
4273 co::compare< compare >
4274 ,co::item_counter< cds::atomicity::item_counter >
4275 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
4278 typedef cc::SkipListSet< rcu_gpt, key_val, traits_SkipListSet_rcu_gpt_cmp_xorshift > SkipListSet_rcu_gpt_cmp_xorshift;
4280 class traits_SkipListSet_rcu_gpt_cmp_xorshift_stat: public cc::skip_list::make_traits <
4281 co::compare< compare >
4282 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
4283 ,co::stat< cc::skip_list::stat<> >
4284 ,co::item_counter< cds::atomicity::item_counter >
4287 typedef cc::SkipListSet< rcu_gpt, key_val, traits_SkipListSet_rcu_gpt_cmp_xorshift_stat > SkipListSet_rcu_gpt_cmp_xorshift_stat;
4289 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
4290 // ***************************************************************************
4291 // SkipListSet - RCU signal_buffered
4293 class traits_SkipListSet_rcu_shb_less_pascal: public cc::skip_list::make_traits <
4295 ,co::item_counter< cds::atomicity::item_counter >
4296 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
4299 typedef cc::SkipListSet< rcu_shb, key_val, traits_SkipListSet_rcu_shb_less_pascal > SkipListSet_rcu_shb_less_pascal;
4301 class traits_SkipListSet_rcu_shb_less_pascal_seqcst: public cc::skip_list::make_traits <
4303 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
4304 ,co::memory_model< co::v::sequential_consistent >
4305 ,co::item_counter< cds::atomicity::item_counter >
4308 typedef cc::SkipListSet< rcu_shb, key_val, traits_SkipListSet_rcu_shb_less_pascal_seqcst > SkipListSet_rcu_shb_less_pascal_seqcst;
4310 class traits_SkipListSet_rcu_shb_less_pascal_stat: public cc::skip_list::make_traits <
4312 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
4313 ,co::stat< cc::skip_list::stat<> >
4314 ,co::item_counter< cds::atomicity::item_counter >
4317 typedef cc::SkipListSet< rcu_shb, key_val, traits_SkipListSet_rcu_shb_less_pascal_stat > SkipListSet_rcu_shb_less_pascal_stat;
4319 class traits_SkipListSet_rcu_shb_cmp_pascal: public cc::skip_list::make_traits <
4320 co::compare< compare >
4321 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
4322 ,co::item_counter< cds::atomicity::item_counter >
4325 typedef cc::SkipListSet< rcu_shb, key_val, traits_SkipListSet_rcu_shb_cmp_pascal > SkipListSet_rcu_shb_cmp_pascal;
4327 class traits_SkipListSet_rcu_shb_cmp_pascal_stat: public cc::skip_list::make_traits <
4328 co::compare< compare >
4329 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
4330 ,co::stat< cc::skip_list::stat<> >
4331 ,co::item_counter< cds::atomicity::item_counter >
4334 typedef cc::SkipListSet< rcu_shb, key_val, traits_SkipListSet_rcu_shb_cmp_pascal_stat > SkipListSet_rcu_shb_cmp_pascal_stat;
4336 class traits_SkipListSet_rcu_shb_less_xorshift: public cc::skip_list::make_traits <
4338 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
4339 ,co::item_counter< cds::atomicity::item_counter >
4342 typedef cc::SkipListSet< rcu_shb, key_val, traits_SkipListSet_rcu_shb_less_xorshift > SkipListSet_rcu_shb_less_xorshift;
4344 class traits_SkipListSet_rcu_shb_less_xorshift_stat: public cc::skip_list::make_traits <
4346 ,co::item_counter< cds::atomicity::item_counter >
4347 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
4348 ,co::stat< cc::skip_list::stat<> >
4351 typedef cc::SkipListSet< rcu_shb, key_val, traits_SkipListSet_rcu_shb_less_xorshift_stat > SkipListSet_rcu_shb_less_xorshift_stat;
4353 class traits_SkipListSet_rcu_shb_cmp_xorshift: public cc::skip_list::make_traits <
4354 co::compare< compare >
4355 ,co::item_counter< cds::atomicity::item_counter >
4356 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
4359 typedef cc::SkipListSet< rcu_shb, key_val, traits_SkipListSet_rcu_shb_cmp_xorshift > SkipListSet_rcu_shb_cmp_xorshift;
4361 class traits_SkipListSet_rcu_shb_cmp_xorshift_stat: public cc::skip_list::make_traits <
4362 co::compare< compare >
4363 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
4364 ,co::stat< cc::skip_list::stat<> >
4365 ,co::item_counter< cds::atomicity::item_counter >
4368 typedef cc::SkipListSet< rcu_shb, key_val, traits_SkipListSet_rcu_shb_cmp_xorshift_stat > SkipListSet_rcu_shb_cmp_xorshift_stat;
4370 // ***************************************************************************
4371 // SkipListSet - RCU signal_threaded
4373 class traits_SkipListSet_rcu_sht_less_pascal: public cc::skip_list::make_traits <
4375 ,co::item_counter< cds::atomicity::item_counter >
4376 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
4379 typedef cc::SkipListSet< rcu_sht, key_val, traits_SkipListSet_rcu_sht_less_pascal > SkipListSet_rcu_sht_less_pascal;
4381 class traits_SkipListSet_rcu_sht_less_pascal_seqcst: public cc::skip_list::make_traits <
4383 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
4384 ,co::memory_model< co::v::sequential_consistent >
4385 ,co::item_counter< cds::atomicity::item_counter >
4388 typedef cc::SkipListSet< rcu_sht, key_val, traits_SkipListSet_rcu_sht_less_pascal_seqcst > SkipListSet_rcu_sht_less_pascal_seqcst;
4390 class traits_SkipListSet_rcu_sht_less_pascal_stat: public cc::skip_list::make_traits <
4392 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
4393 ,co::stat< cc::skip_list::stat<> >
4394 ,co::item_counter< cds::atomicity::item_counter >
4397 typedef cc::SkipListSet< rcu_sht, key_val, traits_SkipListSet_rcu_sht_less_pascal_stat > SkipListSet_rcu_sht_less_pascal_stat;
4399 class traits_SkipListSet_rcu_sht_cmp_pascal: public cc::skip_list::make_traits <
4400 co::compare< compare >
4401 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
4402 ,co::item_counter< cds::atomicity::item_counter >
4405 typedef cc::SkipListSet< rcu_sht, key_val, traits_SkipListSet_rcu_sht_cmp_pascal > SkipListSet_rcu_sht_cmp_pascal;
4407 class traits_SkipListSet_rcu_sht_cmp_pascal_stat: public cc::skip_list::make_traits <
4408 co::compare< compare >
4409 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
4410 ,co::stat< cc::skip_list::stat<> >
4411 ,co::item_counter< cds::atomicity::item_counter >
4414 typedef cc::SkipListSet< rcu_sht, key_val, traits_SkipListSet_rcu_sht_cmp_pascal_stat > SkipListSet_rcu_sht_cmp_pascal_stat;
4416 class traits_SkipListSet_rcu_sht_less_xorshift: public cc::skip_list::make_traits <
4418 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
4419 ,co::item_counter< cds::atomicity::item_counter >
4422 typedef cc::SkipListSet< rcu_sht, key_val, traits_SkipListSet_rcu_sht_less_xorshift > SkipListSet_rcu_sht_less_xorshift;
4424 class traits_SkipListSet_rcu_sht_less_xorshift_stat: public cc::skip_list::make_traits <
4426 ,co::item_counter< cds::atomicity::item_counter >
4427 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
4428 ,co::stat< cc::skip_list::stat<> >
4431 typedef cc::SkipListSet< rcu_sht, key_val, traits_SkipListSet_rcu_sht_less_xorshift_stat > SkipListSet_rcu_sht_less_xorshift_stat;
4433 class traits_SkipListSet_rcu_sht_cmp_xorshift: public cc::skip_list::make_traits <
4434 co::compare< compare >
4435 ,co::item_counter< cds::atomicity::item_counter >
4436 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
4439 typedef cc::SkipListSet< rcu_sht, key_val, traits_SkipListSet_rcu_sht_cmp_xorshift > SkipListSet_rcu_sht_cmp_xorshift;
4441 class traits_SkipListSet_rcu_sht_cmp_xorshift_stat: public cc::skip_list::make_traits <
4442 co::compare< compare >
4443 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
4444 ,co::stat< cc::skip_list::stat<> >
4445 ,co::item_counter< cds::atomicity::item_counter >
4448 typedef cc::SkipListSet< rcu_sht, key_val, traits_SkipListSet_rcu_sht_cmp_xorshift_stat > SkipListSet_rcu_sht_cmp_xorshift_stat;
4451 // ***************************************************************************
4453 struct ellen_bintree_props {
4454 struct key_extractor {
4455 void operator()( key_type& dest, key_val const& src ) const
4462 bool operator()( key_val const& v1, key_val const& v2 ) const
4464 return key_less()( v1.key, v2.key );
4466 bool operator()( key_type const& k, key_val const& v ) const
4468 return key_less()( k, v.key );
4470 bool operator()( key_val const& v, key_type const& k ) const
4472 return key_less()( v.key, k );
4474 bool operator()( key_type const& k1, key_type const& k2 ) const
4476 return key_less()( k1, k2 );
4481 typedef cc::ellen_bintree::node<cds::gc::HP, key_val> leaf_node;
4482 typedef cc::ellen_bintree::internal_node< key_type, leaf_node > internal_node;
4483 typedef cc::ellen_bintree::update_desc< leaf_node, internal_node > update_desc;
4487 typedef cc::ellen_bintree::node<cds::gc::PTB, key_val> leaf_node;
4488 typedef cc::ellen_bintree::internal_node< key_type, leaf_node > internal_node;
4489 typedef cc::ellen_bintree::update_desc< leaf_node, internal_node > update_desc;
4493 typedef cc::ellen_bintree::node<rcu_gpi, key_val> leaf_node;
4494 typedef cc::ellen_bintree::internal_node< key_type, leaf_node > internal_node;
4495 typedef cc::ellen_bintree::update_desc< leaf_node, internal_node > update_desc;
4498 typedef cc::ellen_bintree::node<rcu_gpb, key_val> leaf_node;
4499 typedef cc::ellen_bintree::internal_node< key_type, leaf_node > internal_node;
4500 typedef cc::ellen_bintree::update_desc< leaf_node, internal_node > update_desc;
4503 typedef cc::ellen_bintree::node<rcu_gpt, key_val> leaf_node;
4504 typedef cc::ellen_bintree::internal_node< key_type, leaf_node > internal_node;
4505 typedef cc::ellen_bintree::update_desc< leaf_node, internal_node > update_desc;
4507 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
4509 typedef cc::ellen_bintree::node<rcu_shb, key_val> leaf_node;
4510 typedef cc::ellen_bintree::internal_node< key_type, leaf_node > internal_node;
4511 typedef cc::ellen_bintree::update_desc< leaf_node, internal_node > update_desc;
4514 typedef cc::ellen_bintree::node<rcu_sht, key_val> leaf_node;
4515 typedef cc::ellen_bintree::internal_node< key_type, leaf_node > internal_node;
4516 typedef cc::ellen_bintree::update_desc< leaf_node, internal_node > update_desc;
4522 // ***************************************************************************
4523 // EllenBinTreeSet - HP
4525 class traits_EllenBinTreeSet_hp: public cc::ellen_bintree::make_set_traits<
4526 cc::ellen_bintree::key_extractor< typename ellen_bintree_props::key_extractor >
4527 ,co::less< typename ellen_bintree_props::less >
4528 ,cc::ellen_bintree::update_desc_allocator<
4529 cds::memory::pool_allocator< typename ellen_bintree_props::hp_gc::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
4531 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
4534 typedef cc::EllenBinTreeSet< cds::gc::HP, key_type, key_val, traits_EllenBinTreeSet_hp > EllenBinTreeSet_hp;
4536 class traits_EllenBinTreeSet_hp_stat: public cc::ellen_bintree::make_set_traits<
4537 cc::ellen_bintree::key_extractor< typename ellen_bintree_props::key_extractor >
4538 ,co::less< typename ellen_bintree_props::less >
4539 ,cc::ellen_bintree::update_desc_allocator<
4540 cds::memory::pool_allocator< typename ellen_bintree_props::hp_gc::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
4542 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
4543 ,co::stat< cc::ellen_bintree::stat<> >
4546 typedef cc::EllenBinTreeSet< cds::gc::HP, key_type, key_val, traits_EllenBinTreeSet_hp_stat > EllenBinTreeSet_hp_stat;
4548 // ***************************************************************************
4549 // EllenBinTreeSet - PTB
4551 class traits_EllenBinTreeSet_ptb: public cc::ellen_bintree::make_set_traits<
4552 cc::ellen_bintree::key_extractor< typename ellen_bintree_props::key_extractor >
4553 ,co::less< typename ellen_bintree_props::less >
4554 ,cc::ellen_bintree::update_desc_allocator<
4555 cds::memory::pool_allocator< typename ellen_bintree_props::ptb_gc::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
4557 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
4560 typedef cc::EllenBinTreeSet< cds::gc::PTB, key_type, key_val, traits_EllenBinTreeSet_ptb > EllenBinTreeSet_ptb;
4562 class traits_EllenBinTreeSet_ptb_stat: public cc::ellen_bintree::make_set_traits<
4563 cc::ellen_bintree::key_extractor< typename ellen_bintree_props::key_extractor >
4564 ,co::less< typename ellen_bintree_props::less >
4565 ,cc::ellen_bintree::update_desc_allocator<
4566 cds::memory::pool_allocator< typename ellen_bintree_props::ptb_gc::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
4568 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
4569 ,co::stat< cc::ellen_bintree::stat<> >
4572 typedef cc::EllenBinTreeSet< cds::gc::PTB, key_type, key_val, traits_EllenBinTreeSet_ptb_stat > EllenBinTreeSet_ptb_stat;
4575 // ***************************************************************************
4576 // EllenBinTreeSet - RCU
4578 class traits_EllenBinTreeSet_rcu_gpi: public cc::ellen_bintree::make_set_traits<
4579 cc::ellen_bintree::key_extractor< typename ellen_bintree_props::key_extractor >
4580 ,co::less< typename ellen_bintree_props::less >
4581 ,cc::ellen_bintree::update_desc_allocator<
4582 cds::memory::pool_allocator< typename ellen_bintree_props::gpi::update_desc, ellen_bintree_pool::bounded_update_desc_pool_accessor >
4584 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
4587 typedef cc::EllenBinTreeSet< rcu_gpi, key_type, key_val, traits_EllenBinTreeSet_rcu_gpi > EllenBinTreeSet_rcu_gpi;
4589 class traits_EllenBinTreeSet_rcu_gpi_stat: public cc::ellen_bintree::make_set_traits<
4590 cc::ellen_bintree::key_extractor< typename ellen_bintree_props::key_extractor >
4591 ,co::less< typename ellen_bintree_props::less >
4592 ,cc::ellen_bintree::update_desc_allocator<
4593 cds::memory::pool_allocator< typename ellen_bintree_props::gpi::update_desc, ellen_bintree_pool::bounded_update_desc_pool_accessor >
4595 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
4596 ,co::stat< cc::ellen_bintree::stat<> >
4599 typedef cc::EllenBinTreeSet< rcu_gpi, key_type, key_val, traits_EllenBinTreeSet_rcu_gpi_stat > EllenBinTreeSet_rcu_gpi_stat;
4601 class traits_EllenBinTreeSet_rcu_gpb: public cc::ellen_bintree::make_set_traits<
4602 cc::ellen_bintree::key_extractor< typename ellen_bintree_props::key_extractor >
4603 ,co::less< typename ellen_bintree_props::less >
4604 ,cc::ellen_bintree::update_desc_allocator<
4605 cds::memory::pool_allocator< typename ellen_bintree_props::gpb::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
4607 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
4610 typedef cc::EllenBinTreeSet< rcu_gpb, key_type, key_val, traits_EllenBinTreeSet_rcu_gpb > EllenBinTreeSet_rcu_gpb;
4612 class traits_EllenBinTreeSet_rcu_gpb_stat: public cc::ellen_bintree::make_set_traits<
4613 cc::ellen_bintree::key_extractor< typename ellen_bintree_props::key_extractor >
4614 ,co::less< typename ellen_bintree_props::less >
4615 ,cc::ellen_bintree::update_desc_allocator<
4616 cds::memory::pool_allocator< typename ellen_bintree_props::gpb::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
4618 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
4619 ,co::stat< cc::ellen_bintree::stat<> >
4622 typedef cc::EllenBinTreeSet< rcu_gpb, key_type, key_val, traits_EllenBinTreeSet_rcu_gpb_stat > EllenBinTreeSet_rcu_gpb_stat;
4624 class traits_EllenBinTreeSet_rcu_gpt: public cc::ellen_bintree::make_set_traits<
4625 cc::ellen_bintree::key_extractor< typename ellen_bintree_props::key_extractor >
4626 ,co::less< typename ellen_bintree_props::less >
4627 ,cc::ellen_bintree::update_desc_allocator<
4628 cds::memory::pool_allocator< typename ellen_bintree_props::gpt::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
4630 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
4633 typedef cc::EllenBinTreeSet< rcu_gpt, key_type, key_val, traits_EllenBinTreeSet_rcu_gpt > EllenBinTreeSet_rcu_gpt;
4635 class traits_EllenBinTreeSet_rcu_gpt_stat: public cc::ellen_bintree::make_set_traits<
4636 cc::ellen_bintree::key_extractor< typename ellen_bintree_props::key_extractor >
4637 ,co::less< typename ellen_bintree_props::less >
4638 ,cc::ellen_bintree::update_desc_allocator<
4639 cds::memory::pool_allocator< typename ellen_bintree_props::gpt::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
4641 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
4642 ,co::stat< cc::ellen_bintree::stat<> >
4645 typedef cc::EllenBinTreeSet< rcu_gpt, key_type, key_val, traits_EllenBinTreeSet_rcu_gpt_stat > EllenBinTreeSet_rcu_gpt_stat;
4647 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
4648 class traits_EllenBinTreeSet_rcu_shb: public cc::ellen_bintree::make_set_traits<
4649 cc::ellen_bintree::key_extractor< typename ellen_bintree_props::key_extractor >
4650 ,co::less< typename ellen_bintree_props::less >
4651 ,cc::ellen_bintree::update_desc_allocator<
4652 cds::memory::pool_allocator< typename ellen_bintree_props::shb::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
4654 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
4657 typedef cc::EllenBinTreeSet< rcu_shb, key_type, key_val, traits_EllenBinTreeSet_rcu_shb > EllenBinTreeSet_rcu_shb;
4659 class traits_EllenBinTreeSet_rcu_shb_stat: public cc::ellen_bintree::make_set_traits<
4660 cc::ellen_bintree::key_extractor< typename ellen_bintree_props::key_extractor >
4661 ,co::less< typename ellen_bintree_props::less >
4662 ,cc::ellen_bintree::update_desc_allocator<
4663 cds::memory::pool_allocator< typename ellen_bintree_props::shb::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
4665 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
4666 ,co::stat< cc::ellen_bintree::stat<> >
4669 typedef cc::EllenBinTreeSet< rcu_shb, key_type, key_val, traits_EllenBinTreeSet_rcu_shb_stat > EllenBinTreeSet_rcu_shb_stat;
4671 class traits_EllenBinTreeSet_rcu_sht: public cc::ellen_bintree::make_set_traits<
4672 cc::ellen_bintree::key_extractor< typename ellen_bintree_props::key_extractor >
4673 ,co::less< typename ellen_bintree_props::less >
4674 ,cc::ellen_bintree::update_desc_allocator<
4675 cds::memory::pool_allocator< typename ellen_bintree_props::sht::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
4677 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
4680 typedef cc::EllenBinTreeSet< rcu_sht, key_type, key_val, traits_EllenBinTreeSet_rcu_sht > EllenBinTreeSet_rcu_sht;
4682 class traits_EllenBinTreeSet_rcu_sht_stat: public cc::ellen_bintree::make_set_traits<
4683 cc::ellen_bintree::key_extractor< typename ellen_bintree_props::key_extractor >
4684 ,co::less< typename ellen_bintree_props::less >
4685 ,cc::ellen_bintree::update_desc_allocator<
4686 cds::memory::pool_allocator< typename ellen_bintree_props::sht::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
4688 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
4689 ,co::stat< cc::ellen_bintree::stat<> >
4692 typedef cc::EllenBinTreeSet< rcu_sht, key_type, key_val, traits_EllenBinTreeSet_rcu_sht_stat > EllenBinTreeSet_rcu_sht_stat;
4696 // ***************************************************************************
4697 // Standard implementations
4699 typedef StdSet< key_val, less, cds::SpinLock > StdSet_Spin;
4700 typedef StdSet< key_val, less, lock::NoLock> StdSet_NoLock;
4702 typedef StdHashSet< key_val, hash, less, equal_to, cds::SpinLock > StdHashSet_Spin;
4703 typedef StdHashSet< key_val, hash, less, equal_to, lock::NoLock > StdHashSet_NoLock;
4708 // *************************************************
4710 // *************************************************
4712 template <typename Set>
4713 static inline void print_stat( Set const& s )
4716 template <typename GC, typename T, typename Traits>
4717 static inline void print_stat( cc::SkipListSet<GC, T, Traits> const& s )
4719 CPPUNIT_MSG( s.statistics() );
4722 template <typename GC, typename Key, typename T, typename Traits>
4723 static inline void print_stat( cc::EllenBinTreeSet<GC, Key, T, Traits> const& s )
4725 CPPUNIT_MSG( s.statistics() );
4728 template <typename T, typename Traits >
4729 static inline void print_stat( cc::CuckooSet< T, Traits > const& s )
4731 CPPUNIT_MSG( s.statistics() << s.mutex_policy_statistics() );
4734 template <typename V, typename... Options>
4735 static inline void print_stat( CuckooStripedSet< V, Options... > const& s )
4737 typedef CuckooStripedSet< V, Options... > set_type;
4738 print_stat( static_cast<typename set_type::cuckoo_base_class const&>(s) );
4741 template <typename V, typename... Options>
4742 static inline void print_stat( CuckooRefinableSet< V, Options... > const& s )
4744 typedef CuckooRefinableSet< V, Options... > set_type;
4745 print_stat( static_cast<typename set_type::cuckoo_base_class const&>(s) );
4750 //*******************************************************
4752 //*******************************************************
4754 template <typename Set>
4755 static inline void additional_check( Set& set )
4758 template <typename Set>
4759 static inline void additional_cleanup( Set& set )
4762 namespace ellen_bintree_check {
4763 static inline void check_stat( cds::intrusive::ellen_bintree::empty_stat const& s )
4765 // Not true for threaded RCU
4767 CPPUNIT_CHECK_CURRENT_EX( ellen_bintree_pool::internal_node_counter::m_nAlloc.get() == ellen_bintree_pool::internal_node_counter::m_nFree.get(),
4768 "m_nAlloc=" << ellen_bintree_pool::internal_node_counter::m_nAlloc.get()
4769 << ", m_nFree=" << ellen_bintree_pool::internal_node_counter::m_nFree.get()
4774 static inline void check_stat( cds::intrusive::ellen_bintree::stat<> const& stat )
4776 CPPUNIT_CHECK_CURRENT( stat.m_nInternalNodeCreated == stat.m_nInternalNodeDeleted );
4777 CPPUNIT_CHECK_CURRENT( stat.m_nUpdateDescCreated == stat.m_nUpdateDescDeleted );
4778 //CPPUNIT_CHECK_CURRENT( ellen_bintree_pool::internal_node_counter::m_nAlloc.get() == ellen_bintree_pool::internal_node_counter::m_nFree.get() );
4779 CPPUNIT_CHECK_CURRENT( ellen_bintree_pool::internal_node_counter::m_nAlloc.get() == stat.m_nInternalNodeCreated );
4780 // true if RCU is not threaded
4781 //CPPUNIT_CHECK_CURRENT( stat.m_nInternalNodeDeleted == ellen_bintree_pool::internal_node_counter::m_nFree.get() );
4783 } // namespace ellen_bintree_check
4785 template <typename GC, typename Key, typename T, typename Traits>
4786 static inline void additional_check( cc::EllenBinTreeSet<GC, Key, T, Traits>& s )
4788 GC::force_dispose();
4789 ellen_bintree_check::check_stat( s.statistics() );
4792 template <typename GC, typename Key, typename T, typename Traits>
4793 static inline void additional_cleanup( cc::EllenBinTreeSet<GC, Key, T, Traits>& s )
4795 ellen_bintree_pool::internal_node_counter::reset();
4800 #endif // ifndef _CDSUNIT_SET2_SET_TYPES_H