3 #ifndef _CDSUNIT_SET2_SET_TYPES_H
4 #define _CDSUNIT_SET2_SET_TYPES_H
6 #include <cds/urcu/general_instant.h>
7 #include <cds/urcu/general_buffered.h>
8 #include <cds/urcu/general_threaded.h>
9 #include <cds/urcu/signal_buffered.h>
10 #include <cds/urcu/signal_threaded.h>
12 #include <cds/container/michael_list_hp.h>
13 #include <cds/container/michael_list_dhp.h>
14 #include <cds/container/michael_list_rcu.h>
15 #include <cds/container/lazy_list_hp.h>
16 #include <cds/container/lazy_list_ptb.h>
17 #include <cds/container/lazy_list_rcu.h>
19 #include <cds/container/michael_set.h>
20 #include <cds/container/michael_set_rcu.h>
22 #include <cds/container/split_list_set.h>
23 #include <cds/container/split_list_set_rcu.h>
25 #include <cds/container/cuckoo_set.h>
27 #include <cds/container/skip_list_set_hp.h>
28 #include <cds/container/skip_list_set_ptb.h>
29 #include <cds/container/skip_list_set_rcu.h>
31 #include <cds/container/ellen_bintree_set_rcu.h>
32 #include <cds/container/ellen_bintree_set_hp.h>
33 #include <cds/container/ellen_bintree_set_ptb.h>
35 #include <cds/container/striped_set/std_list.h>
36 #include <cds/container/striped_set/std_vector.h>
37 #include <cds/container/striped_set/std_set.h>
38 #include <cds/container/striped_set/std_hash_set.h>
39 #include <cds/container/striped_set/boost_unordered_set.h>
41 #include <boost/version.hpp>
42 #if BOOST_VERSION >= 104800
43 # include <cds/container/striped_set/boost_slist.h>
44 # include <cds/container/striped_set/boost_list.h>
45 # include <cds/container/striped_set/boost_vector.h>
46 # include <cds/container/striped_set/boost_stable_vector.h>
47 # include <cds/container/striped_set/boost_set.h>
48 //# if !(CDS_COMPILER == CDS_COMPILER_MSVC && CDS_COMPILER_VERSION >= 1700)
49 //# define CDS_UNIT_MAP_TYPES_ENABLE_BOOST_FLAT_CONTAINERS
50 # include <cds/container/striped_set/boost_flat_set.h>
53 #include <cds/container/striped_set.h>
55 #include <cds/lock/spinlock.h>
56 #include <boost/functional/hash/hash.hpp>
58 #include "cppunit/cppunit_mini.h"
59 #include "lock/nolock.h"
60 #include "set2/std_set.h"
61 #include "set2/std_hash_set.h"
62 #include "michael_alloc.h"
63 #include "print_cuckoo_stat.h"
64 #include "print_skip_list_stat.h"
65 #include "print_ellenbintree_stat.h"
66 #include "ellen_bintree_update_desc_pool.h"
69 namespace cc = cds::container;
70 namespace co = cds::opt;
72 typedef cds::urcu::gc< cds::urcu::general_instant<> > rcu_gpi;
73 typedef cds::urcu::gc< cds::urcu::general_buffered<> > rcu_gpb;
74 typedef cds::urcu::gc< cds::urcu::general_threaded<> > rcu_gpt;
75 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
76 typedef cds::urcu::gc< cds::urcu::signal_buffered<> > rcu_shb;
77 typedef cds::urcu::gc< cds::urcu::signal_threaded<> > rcu_sht;
80 template <typename V, typename... Options>
81 class CuckooStripedSet:
82 public cc::CuckooSet< V,
83 typename cc::cuckoo::make_traits<
84 co::mutex_policy< cc::cuckoo::striping<> >
90 typedef typename cc::cuckoo::make_traits<
91 co::mutex_policy< cc::cuckoo::striping<> >
93 >::type cuckoo_traits;
95 typedef cc::CuckooSet< V, cuckoo_traits > cuckoo_base_class;
98 CuckooStripedSet( size_t nCapacity, size_t nLoadFactor )
99 : cuckoo_base_class( nCapacity / (nLoadFactor * 16), (unsigned int) 4 )
102 template <typename Q, typename Pred>
103 bool erase_with( Q const& key, Pred pred )
105 return cuckoo_base_class::erase_with( key, typename std::conditional< cuckoo_base_class::c_isSorted, Pred, typename Pred::equal_to>::type() );
109 template <typename V, typename... Options>
110 class CuckooRefinableSet:
111 public cc::CuckooSet< V,
112 typename cc::cuckoo::make_traits<
113 co::mutex_policy< cc::cuckoo::refinable<> >
119 typedef typename cc::cuckoo::make_traits<
120 co::mutex_policy< cc::cuckoo::refinable<> >
122 >::type cuckoo_traits;
124 typedef cc::CuckooSet< V, cuckoo_traits > cuckoo_base_class;
127 CuckooRefinableSet( size_t nCapacity, size_t nLoadFactor )
128 : cuckoo_base_class( nCapacity / (nLoadFactor * 16), (unsigned int) 4 )
131 template <typename Q, typename Pred>
132 bool erase_with( Q const& key, Pred pred )
134 return cuckoo_base_class::erase_with( key, typename std::conditional< cuckoo_base_class::c_isSorted, Pred, typename Pred::equal_to>::type() );
138 template <typename Key>
140 int operator ()(Key const& k1, Key const& k2) const
142 if ( std::less<Key>( k1, k2 ) )
144 return std::less<Key>( k2, k1 ) ? 1 : 0;
148 #define CDSUNIT_INT_COMPARE(t) template <> struct cmp<t> { int operator()( t k1, t k2 ){ return (int)(k1 - k2); } }
149 CDSUNIT_INT_COMPARE(char);
150 CDSUNIT_INT_COMPARE(unsigned char);
151 CDSUNIT_INT_COMPARE(int);
152 CDSUNIT_INT_COMPARE(unsigned int);
153 CDSUNIT_INT_COMPARE(long);
154 CDSUNIT_INT_COMPARE(unsigned long);
155 CDSUNIT_INT_COMPARE(long long);
156 CDSUNIT_INT_COMPARE(unsigned long long);
157 #undef CDSUNIT_INT_COMPARE
160 struct cmp<std::string>
162 int operator()(std::string const& s1, std::string const& s2)
164 return s1.compare( s2 );
166 int operator()(std::string const& s1, char const * s2)
168 return s1.compare( s2 );
170 int operator()(char const * s1, std::string const& s2)
172 return -s2.compare( s1 );
176 template <typename Key, typename Value>
179 typedef Key key_type;
180 typedef Value value_type;
186 /*explicit*/ key_val( key_type const& k ): key(k), val() {}
187 key_val( key_type const& k, value_type const& v ): key(k), val(v) {}
189 template <typename K>
190 /*explicit*/ key_val( K const& k ): key(k) {}
192 template <typename K, typename T>
193 key_val( K const& k, T const& v ): key(k), val(v) {}
196 typedef co::v::hash<key_type> key_hash;
197 typedef std::less<key_type> key_less;
198 typedef cmp<key_type> key_compare;
201 bool operator()( key_val const& k1, key_val const& k2 ) const
203 return key_less()( k1.key, k2.key );
205 bool operator()( key_type const& k1, key_val const& k2 ) const
207 return key_less()( k1, k2.key );
209 bool operator()( key_val const& k1, key_type const& k2 ) const
211 return key_less()( k1.key, k2 );
216 int operator()( key_val const& k1, key_val const& k2 ) const
218 return key_compare()( k1.key, k2.key );
220 int operator()( key_type const& k1, key_val const& k2 ) const
222 return key_compare()( k1, k2.key );
224 int operator()( key_val const& k1, key_type const& k2 ) const
226 return key_compare()( k1.key, k2 );
231 bool operator()( key_val const& k1, key_val const& k2 ) const
233 return key_compare()( k1.key, k2.key ) == 0;
235 bool operator()( key_type const& k1, key_val const& k2 ) const
237 return key_compare()( k1, k2.key ) == 0;
239 bool operator()( key_val const& k1, key_type const& k2 ) const
241 return key_compare()( k1.key, k2 ) == 0;
246 struct hash: public key_hash
248 size_t operator()( key_val const& v ) const
250 return key_hash::operator()( v.key );
252 size_t operator()( key_type const& key ) const
254 return key_hash::operator()( key );
256 template <typename Q>
257 size_t operator()( Q const& k ) const
259 return key_hash::operator()( k );
263 struct hash2: public hash
265 size_t operator()( key_val const& k ) const
267 size_t seed = ~hash::operator ()( k );
268 boost::hash_combine( seed, k.key );
271 size_t operator()( key_type const& k ) const
273 size_t seed = ~hash::operator ()( k );
274 boost::hash_combine( seed, k );
277 template <typename Q>
278 size_t operator()( Q const& k ) const
280 return key_hash::operator()( k );
284 #if (CDS_COMPILER == CDS_COMPILER_MSVC || (CDS_COMPILER == CDS_COMPILER_INTEL && CDS_OS_INTERFACE == CDS_OSI_WINDOWS)) && _MSC_VER < 1600
285 struct hash_less: public stdext::hash_compare< key_type, std::less<key_type> >
287 typedef stdext::hash_compare< key_type, std::less<key_type> > base_class;
288 size_t operator()(const key_val& kv) const
292 size_t operator()(const key_type& k ) const
297 bool operator()(const key_val& kv1, const key_val& kv2) const
299 return less()( kv1, kv2 );
301 bool operator()(const key_type& k1, const key_val& kv2) const
303 return less()( k1, kv2 );
305 bool operator()(const key_val& kv1, const key_type& k2) const
307 return less()( kv1, k2 );
312 // ***************************************************************************
315 typedef cc::MichaelList< cds::gc::HP, key_val,
316 typename cc::michael_list::make_traits<
317 co::compare< compare >
319 > MichaelList_HP_cmp_stdAlloc;
321 typedef cc::MichaelList< cds::gc::HP, key_val,
322 typename cc::michael_list::make_traits<
323 co::compare< compare >
324 ,co::memory_model< co::v::sequential_consistent >
326 > MichaelList_HP_cmp_stdAlloc_seqcst;
328 typedef cc::MichaelList< cds::gc::HP, key_val,
329 typename cc::michael_list::make_traits<
330 co::compare< compare >,
331 co::allocator< memory::MichaelAllocator<int> >
333 > MichaelList_HP_cmp_michaelAlloc;
335 typedef cc::MichaelList< cds::gc::HP, key_val,
336 typename cc::michael_list::make_traits<
339 > MichaelList_HP_less_stdAlloc;
341 typedef cc::MichaelList< cds::gc::HP, key_val,
342 typename cc::michael_list::make_traits<
344 ,co::memory_model< co::v::sequential_consistent >
346 > MichaelList_HP_less_stdAlloc_seqcst;
348 typedef cc::MichaelList< cds::gc::HP, key_val,
349 typename cc::michael_list::make_traits<
351 co::allocator< memory::MichaelAllocator<int> >
353 > MichaelList_HP_less_michaelAlloc;
355 typedef cc::MichaelList< cds::gc::PTB, key_val,
356 typename cc::michael_list::make_traits<
357 co::compare< compare >
359 > MichaelList_PTB_cmp_stdAlloc;
361 typedef cc::MichaelList< cds::gc::PTB, key_val,
362 typename cc::michael_list::make_traits<
363 co::compare< compare >
364 ,co::memory_model< co::v::sequential_consistent >
366 > MichaelList_PTB_cmp_stdAlloc_seqcst;
368 typedef cc::MichaelList< cds::gc::PTB, key_val,
369 typename cc::michael_list::make_traits<
370 co::compare< compare >,
371 co::allocator< memory::MichaelAllocator<int> >
373 > MichaelList_PTB_cmp_michaelAlloc;
375 typedef cc::MichaelList< cds::gc::PTB, key_val,
376 typename cc::michael_list::make_traits<
379 > MichaelList_PTB_less_stdAlloc;
381 typedef cc::MichaelList< cds::gc::PTB, key_val,
382 typename cc::michael_list::make_traits<
384 ,co::memory_model< co::v::sequential_consistent >
386 > MichaelList_PTB_less_stdAlloc_seqcst;
388 typedef cc::MichaelList< cds::gc::PTB, key_val,
389 typename cc::michael_list::make_traits<
391 co::allocator< memory::MichaelAllocator<int> >
393 > MichaelList_PTB_less_michaelAlloc;
396 typedef cc::MichaelList< rcu_gpi, key_val,
397 typename cc::michael_list::make_traits<
398 co::compare< compare >
400 > MichaelList_RCU_GPI_cmp_stdAlloc;
402 typedef cc::MichaelList< rcu_gpi, key_val,
403 typename cc::michael_list::make_traits<
404 co::compare< compare >
405 ,co::memory_model< co::v::sequential_consistent >
407 > MichaelList_RCU_GPI_cmp_stdAlloc_seqcst;
409 typedef cc::MichaelList< rcu_gpi, key_val,
410 typename cc::michael_list::make_traits<
411 co::compare< compare >,
412 co::allocator< memory::MichaelAllocator<int> >
414 > MichaelList_RCU_GPI_cmp_michaelAlloc;
416 typedef cc::MichaelList< rcu_gpi, key_val,
417 typename cc::michael_list::make_traits<
420 > MichaelList_RCU_GPI_less_stdAlloc;
422 typedef cc::MichaelList< rcu_gpi, key_val,
423 typename cc::michael_list::make_traits<
425 ,co::memory_model< co::v::sequential_consistent >
427 > MichaelList_RCU_GPI_less_stdAlloc_seqcst;
429 typedef cc::MichaelList< rcu_gpi, key_val,
430 typename cc::michael_list::make_traits<
432 co::allocator< memory::MichaelAllocator<int> >
434 > MichaelList_RCU_GPI_less_michaelAlloc;
437 typedef cc::MichaelList< rcu_gpb, key_val,
438 typename cc::michael_list::make_traits<
439 co::compare< compare >
441 > MichaelList_RCU_GPB_cmp_stdAlloc;
443 typedef cc::MichaelList< rcu_gpb, key_val,
444 typename cc::michael_list::make_traits<
445 co::compare< compare >
446 ,co::memory_model< co::v::sequential_consistent >
448 > MichaelList_RCU_GPB_cmp_stdAlloc_seqcst;
450 typedef cc::MichaelList< rcu_gpb, key_val,
451 typename cc::michael_list::make_traits<
452 co::compare< compare >,
453 co::allocator< memory::MichaelAllocator<int> >
455 > MichaelList_RCU_GPB_cmp_michaelAlloc;
457 typedef cc::MichaelList< rcu_gpb, key_val,
458 typename cc::michael_list::make_traits<
461 > MichaelList_RCU_GPB_less_stdAlloc;
463 typedef cc::MichaelList< rcu_gpb, key_val,
464 typename cc::michael_list::make_traits<
466 ,co::memory_model< co::v::sequential_consistent >
468 > MichaelList_RCU_GPB_less_stdAlloc_seqcst;
470 typedef cc::MichaelList< rcu_gpb, key_val,
471 typename cc::michael_list::make_traits<
473 co::allocator< memory::MichaelAllocator<int> >
475 > MichaelList_RCU_GPB_less_michaelAlloc;
478 typedef cc::MichaelList< rcu_gpt, key_val,
479 typename cc::michael_list::make_traits<
480 co::compare< compare >
482 > MichaelList_RCU_GPT_cmp_stdAlloc;
484 typedef cc::MichaelList< rcu_gpt, key_val,
485 typename cc::michael_list::make_traits<
486 co::compare< compare >
487 ,co::memory_model< co::v::sequential_consistent >
489 > MichaelList_RCU_GPT_cmp_stdAlloc_seqcst;
491 typedef cc::MichaelList< rcu_gpt, key_val,
492 typename cc::michael_list::make_traits<
493 co::compare< compare >,
494 co::allocator< memory::MichaelAllocator<int> >
496 > MichaelList_RCU_GPT_cmp_michaelAlloc;
498 typedef cc::MichaelList< rcu_gpt, key_val,
499 typename cc::michael_list::make_traits<
502 > MichaelList_RCU_GPT_less_stdAlloc;
504 typedef cc::MichaelList< rcu_gpt, key_val,
505 typename cc::michael_list::make_traits<
507 ,co::memory_model< co::v::sequential_consistent >
509 > MichaelList_RCU_GPT_less_stdAlloc_seqcst;
511 typedef cc::MichaelList< rcu_gpt, key_val,
512 typename cc::michael_list::make_traits<
514 co::allocator< memory::MichaelAllocator<int> >
516 > MichaelList_RCU_GPT_less_michaelAlloc;
518 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
519 typedef cc::MichaelList< rcu_shb, key_val,
520 typename cc::michael_list::make_traits<
521 co::compare< compare >
523 > MichaelList_RCU_SHB_cmp_stdAlloc;
525 typedef cc::MichaelList< rcu_shb, key_val,
526 typename cc::michael_list::make_traits<
527 co::compare< compare >
528 ,co::memory_model< co::v::sequential_consistent >
530 > MichaelList_RCU_SHB_cmp_stdAlloc_seqcst;
532 typedef cc::MichaelList< rcu_shb, key_val,
533 typename cc::michael_list::make_traits<
534 co::compare< compare >,
535 co::allocator< memory::MichaelAllocator<int> >
537 > MichaelList_RCU_SHB_cmp_michaelAlloc;
539 typedef cc::MichaelList< rcu_shb, key_val,
540 typename cc::michael_list::make_traits<
543 > MichaelList_RCU_SHB_less_stdAlloc;
545 typedef cc::MichaelList< rcu_shb, key_val,
546 typename cc::michael_list::make_traits<
548 ,co::memory_model< co::v::sequential_consistent >
550 > MichaelList_RCU_SHB_less_stdAlloc_seqcst;
552 typedef cc::MichaelList< rcu_shb, key_val,
553 typename cc::michael_list::make_traits<
555 co::allocator< memory::MichaelAllocator<int> >
557 > MichaelList_RCU_SHB_less_michaelAlloc;
560 typedef cc::MichaelList< rcu_sht, key_val,
561 typename cc::michael_list::make_traits<
562 co::compare< compare >
564 > MichaelList_RCU_SHT_cmp_stdAlloc;
566 typedef cc::MichaelList< rcu_sht, key_val,
567 typename cc::michael_list::make_traits<
568 co::compare< compare >
569 ,co::memory_model< co::v::sequential_consistent >
571 > MichaelList_RCU_SHT_cmp_stdAlloc_seqcst;
573 typedef cc::MichaelList< rcu_sht, key_val,
574 typename cc::michael_list::make_traits<
575 co::compare< compare >,
576 co::allocator< memory::MichaelAllocator<int> >
578 > MichaelList_RCU_SHT_cmp_michaelAlloc;
580 typedef cc::MichaelList< rcu_sht, key_val,
581 typename cc::michael_list::make_traits<
584 > MichaelList_RCU_SHT_less_stdAlloc;
586 typedef cc::MichaelList< rcu_sht, key_val,
587 typename cc::michael_list::make_traits<
589 ,co::memory_model< co::v::sequential_consistent >
591 > MichaelList_RCU_SHT_less_stdAlloc_seqcst;
593 typedef cc::MichaelList< rcu_sht, key_val,
594 typename cc::michael_list::make_traits<
596 co::allocator< memory::MichaelAllocator<int> >
598 > MichaelList_RCU_SHT_less_michaelAlloc;
601 // ***************************************************************************
602 // MichaelHashSet based on MichaelList
604 typedef cc::MichaelHashSet< cds::gc::HP, MichaelList_HP_cmp_stdAlloc,
605 typename cc::michael_set::make_traits<
608 > MichaelSet_HP_cmp_stdAlloc;
610 typedef cc::MichaelHashSet< cds::gc::HP, MichaelList_HP_cmp_stdAlloc_seqcst,
611 typename cc::michael_set::make_traits<
614 > MichaelSet_HP_cmp_stdAlloc_seqcst;
616 typedef cc::MichaelHashSet< cds::gc::HP, MichaelList_HP_cmp_michaelAlloc,
617 typename cc::michael_set::make_traits<
619 co::allocator< memory::MichaelAllocator<int> >
621 > MichaelSet_HP_cmp_michaelAlloc;
623 typedef cc::MichaelHashSet< cds::gc::HP, MichaelList_HP_less_stdAlloc,
624 typename cc::michael_set::make_traits<
627 > MichaelSet_HP_less_stdAlloc;
629 typedef cc::MichaelHashSet< cds::gc::HP, MichaelList_HP_less_stdAlloc_seqcst,
630 typename cc::michael_set::make_traits<
633 > MichaelSet_HP_less_stdAlloc_seqcst;
635 typedef cc::MichaelHashSet< cds::gc::HP, MichaelList_HP_less_michaelAlloc,
636 typename cc::michael_set::make_traits<
638 co::allocator< memory::MichaelAllocator<int> >
640 > MichaelSet_HP_less_michaelAlloc;
642 typedef cc::MichaelHashSet< cds::gc::PTB, MichaelList_PTB_cmp_stdAlloc,
643 typename cc::michael_set::make_traits<
646 > MichaelSet_PTB_cmp_stdAlloc;
648 typedef cc::MichaelHashSet< cds::gc::PTB, MichaelList_PTB_cmp_stdAlloc_seqcst,
649 typename cc::michael_set::make_traits<
652 > MichaelSet_PTB_cmp_stdAlloc_seqcst;
654 typedef cc::MichaelHashSet< cds::gc::PTB, MichaelList_PTB_cmp_michaelAlloc,
655 typename cc::michael_set::make_traits<
657 co::allocator< memory::MichaelAllocator<int> >
659 > MichaelSet_PTB_cmp_michaelAlloc;
661 typedef cc::MichaelHashSet< cds::gc::PTB, MichaelList_PTB_less_stdAlloc,
662 typename cc::michael_set::make_traits<
665 > MichaelSet_PTB_less_stdAlloc;
667 typedef cc::MichaelHashSet< cds::gc::PTB, MichaelList_PTB_less_stdAlloc_seqcst,
668 typename cc::michael_set::make_traits<
671 > MichaelSet_PTB_less_stdAlloc_seqcst;
673 typedef cc::MichaelHashSet< cds::gc::PTB, MichaelList_PTB_less_michaelAlloc,
674 typename cc::michael_set::make_traits<
676 co::allocator< memory::MichaelAllocator<int> >
678 > MichaelSet_PTB_less_michaelAlloc;
680 // general_instant RCU
681 typedef cc::MichaelHashSet< rcu_gpi, MichaelList_RCU_GPI_cmp_stdAlloc,
682 typename cc::michael_set::make_traits<
685 > MichaelSet_RCU_GPI_cmp_stdAlloc;
687 typedef cc::MichaelHashSet< rcu_gpi, MichaelList_RCU_GPI_cmp_stdAlloc_seqcst,
688 typename cc::michael_set::make_traits<
691 > MichaelSet_RCU_GPI_cmp_stdAlloc_seqcst;
693 typedef cc::MichaelHashSet< rcu_gpi, MichaelList_RCU_GPI_cmp_michaelAlloc,
694 typename cc::michael_set::make_traits<
696 co::allocator< memory::MichaelAllocator<int> >
698 > MichaelSet_RCU_GPI_cmp_michaelAlloc;
700 typedef cc::MichaelHashSet< rcu_gpi, MichaelList_RCU_GPI_less_stdAlloc,
701 typename cc::michael_set::make_traits<
704 > MichaelSet_RCU_GPI_less_stdAlloc;
706 typedef cc::MichaelHashSet< rcu_gpi, MichaelList_RCU_GPI_less_stdAlloc_seqcst,
707 typename cc::michael_set::make_traits<
710 > MichaelSet_RCU_GPI_less_stdAlloc_seqcst;
712 typedef cc::MichaelHashSet< rcu_gpi, MichaelList_RCU_GPI_less_michaelAlloc,
713 typename cc::michael_set::make_traits<
715 co::allocator< memory::MichaelAllocator<int> >
717 > MichaelSet_RCU_GPI_less_michaelAlloc;
719 // general_buffered RCU
720 typedef cc::MichaelHashSet< rcu_gpb, MichaelList_RCU_GPB_cmp_stdAlloc,
721 typename cc::michael_set::make_traits<
724 > MichaelSet_RCU_GPB_cmp_stdAlloc;
726 typedef cc::MichaelHashSet< rcu_gpb, MichaelList_RCU_GPB_cmp_stdAlloc_seqcst,
727 typename cc::michael_set::make_traits<
730 > MichaelSet_RCU_GPB_cmp_stdAlloc_seqcst;
732 typedef cc::MichaelHashSet< rcu_gpb, MichaelList_RCU_GPB_cmp_michaelAlloc,
733 typename cc::michael_set::make_traits<
735 co::allocator< memory::MichaelAllocator<int> >
737 > MichaelSet_RCU_GPB_cmp_michaelAlloc;
739 typedef cc::MichaelHashSet< rcu_gpb, MichaelList_RCU_GPB_less_stdAlloc,
740 typename cc::michael_set::make_traits<
743 > MichaelSet_RCU_GPB_less_stdAlloc;
745 typedef cc::MichaelHashSet< rcu_gpb, MichaelList_RCU_GPB_less_stdAlloc_seqcst,
746 typename cc::michael_set::make_traits<
749 > MichaelSet_RCU_GPB_less_stdAlloc_seqcst;
751 typedef cc::MichaelHashSet< rcu_gpb, MichaelList_RCU_GPB_less_michaelAlloc,
752 typename cc::michael_set::make_traits<
754 co::allocator< memory::MichaelAllocator<int> >
756 > MichaelSet_RCU_GPB_less_michaelAlloc;
758 // general_threaded RCU
759 typedef cc::MichaelHashSet< rcu_gpt, MichaelList_RCU_GPT_cmp_stdAlloc,
760 typename cc::michael_set::make_traits<
763 > MichaelSet_RCU_GPT_cmp_stdAlloc;
765 typedef cc::MichaelHashSet< rcu_gpt, MichaelList_RCU_GPT_cmp_stdAlloc_seqcst,
766 typename cc::michael_set::make_traits<
769 > MichaelSet_RCU_GPT_cmp_stdAlloc_seqcst;
771 typedef cc::MichaelHashSet< rcu_gpt, MichaelList_RCU_GPT_cmp_michaelAlloc,
772 typename cc::michael_set::make_traits<
774 co::allocator< memory::MichaelAllocator<int> >
776 > MichaelSet_RCU_GPT_cmp_michaelAlloc;
778 typedef cc::MichaelHashSet< rcu_gpt, MichaelList_RCU_GPT_less_stdAlloc,
779 typename cc::michael_set::make_traits<
782 > MichaelSet_RCU_GPT_less_stdAlloc;
784 typedef cc::MichaelHashSet< rcu_gpt, MichaelList_RCU_GPT_less_stdAlloc_seqcst,
785 typename cc::michael_set::make_traits<
788 > MichaelSet_RCU_GPT_less_stdAlloc_seqcst;
790 typedef cc::MichaelHashSet< rcu_gpt, MichaelList_RCU_GPT_less_michaelAlloc,
791 typename cc::michael_set::make_traits<
793 co::allocator< memory::MichaelAllocator<int> >
795 > MichaelSet_RCU_GPT_less_michaelAlloc;
797 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
798 // signal_buffered RCU
799 typedef cc::MichaelHashSet< rcu_shb, MichaelList_RCU_SHB_cmp_stdAlloc,
800 typename cc::michael_set::make_traits<
803 > MichaelSet_RCU_SHB_cmp_stdAlloc;
805 typedef cc::MichaelHashSet< rcu_shb, MichaelList_RCU_SHB_cmp_stdAlloc_seqcst,
806 typename cc::michael_set::make_traits<
809 > MichaelSet_RCU_SHB_cmp_stdAlloc_seqcst;
811 typedef cc::MichaelHashSet< rcu_shb, MichaelList_RCU_SHB_cmp_michaelAlloc,
812 typename cc::michael_set::make_traits<
814 co::allocator< memory::MichaelAllocator<int> >
816 > MichaelSet_RCU_SHB_cmp_michaelAlloc;
818 typedef cc::MichaelHashSet< rcu_shb, MichaelList_RCU_SHB_less_stdAlloc,
819 typename cc::michael_set::make_traits<
822 > MichaelSet_RCU_SHB_less_stdAlloc;
824 typedef cc::MichaelHashSet< rcu_shb, MichaelList_RCU_SHB_less_stdAlloc_seqcst,
825 typename cc::michael_set::make_traits<
828 > MichaelSet_RCU_SHB_less_stdAlloc_seqcst;
830 typedef cc::MichaelHashSet< rcu_shb, MichaelList_RCU_SHB_less_michaelAlloc,
831 typename cc::michael_set::make_traits<
833 co::allocator< memory::MichaelAllocator<int> >
835 > MichaelSet_RCU_SHB_less_michaelAlloc;
837 // signal_threaded RCU
838 typedef cc::MichaelHashSet< rcu_sht, MichaelList_RCU_SHT_cmp_stdAlloc,
839 typename cc::michael_set::make_traits<
842 > MichaelSet_RCU_SHT_cmp_stdAlloc;
844 typedef cc::MichaelHashSet< rcu_sht, MichaelList_RCU_SHT_cmp_stdAlloc_seqcst,
845 typename cc::michael_set::make_traits<
848 > MichaelSet_RCU_SHT_cmp_stdAlloc_seqcst;
850 typedef cc::MichaelHashSet< rcu_sht, MichaelList_RCU_SHT_cmp_michaelAlloc,
851 typename cc::michael_set::make_traits<
853 co::allocator< memory::MichaelAllocator<int> >
855 > MichaelSet_RCU_SHT_cmp_michaelAlloc;
857 typedef cc::MichaelHashSet< rcu_sht, MichaelList_RCU_SHT_less_stdAlloc,
858 typename cc::michael_set::make_traits<
861 > MichaelSet_RCU_SHT_less_stdAlloc;
863 typedef cc::MichaelHashSet< rcu_sht, MichaelList_RCU_SHT_less_stdAlloc_seqcst,
864 typename cc::michael_set::make_traits<
867 > MichaelSet_RCU_SHT_less_stdAlloc_seqcst;
869 typedef cc::MichaelHashSet< rcu_sht, MichaelList_RCU_SHT_less_michaelAlloc,
870 typename cc::michael_set::make_traits<
872 co::allocator< memory::MichaelAllocator<int> >
874 > MichaelSet_RCU_SHT_less_michaelAlloc;
878 // ***************************************************************************
881 typedef cc::LazyList< cds::gc::HP, key_val,
882 typename cc::lazy_list::make_traits<
883 co::compare< compare >
885 > LazyList_HP_cmp_stdAlloc;
887 typedef cc::LazyList< cds::gc::HP, key_val,
888 typename cc::lazy_list::make_traits<
889 co::compare< compare >
890 ,co::memory_model< co::v::sequential_consistent >
892 > LazyList_HP_cmp_stdAlloc_seqcst;
894 typedef cc::LazyList< cds::gc::HP, key_val,
895 typename cc::lazy_list::make_traits<
896 co::compare< compare >,
897 co::allocator< memory::MichaelAllocator<int> >
899 > LazyList_HP_cmp_michaelAlloc;
901 typedef cc::LazyList< cds::gc::HP, key_val,
902 typename cc::lazy_list::make_traits<
905 > LazyList_HP_less_stdAlloc;
907 typedef cc::LazyList< cds::gc::HP, key_val,
908 typename cc::lazy_list::make_traits<
910 ,co::memory_model< co::v::sequential_consistent >
912 > LazyList_HP_less_stdAlloc_seqcst;
914 typedef cc::LazyList< cds::gc::HP, key_val,
915 typename cc::lazy_list::make_traits<
917 co::allocator< memory::MichaelAllocator<int> >
919 > LazyList_HP_less_michaelAlloc;
921 typedef cc::LazyList< cds::gc::PTB, key_val,
922 typename cc::lazy_list::make_traits<
923 co::compare< compare >
925 > LazyList_PTB_cmp_stdAlloc;
927 typedef cc::LazyList< cds::gc::PTB, key_val,
928 typename cc::lazy_list::make_traits<
929 co::compare< compare >
930 ,co::memory_model< co::v::sequential_consistent >
932 > LazyList_PTB_cmp_stdAlloc_seqcst;
934 typedef cc::LazyList< cds::gc::PTB, key_val,
935 typename cc::lazy_list::make_traits<
936 co::compare< compare >,
937 co::allocator< memory::MichaelAllocator<int> >
939 > LazyList_PTB_cmp_michaelAlloc;
941 typedef cc::LazyList< cds::gc::PTB, key_val,
942 typename cc::lazy_list::make_traits<
945 > LazyList_PTB_less_stdAlloc;
947 typedef cc::LazyList< cds::gc::PTB, key_val,
948 typename cc::lazy_list::make_traits<
950 ,co::memory_model< co::v::sequential_consistent >
952 > LazyList_PTB_less_stdAlloc_seqcst;
954 typedef cc::LazyList< cds::gc::PTB, key_val,
955 typename cc::lazy_list::make_traits<
957 co::allocator< memory::MichaelAllocator<int> >
959 > LazyList_PTB_less_michaelAlloc;
962 typedef cc::LazyList< rcu_gpi, key_val,
963 typename cc::lazy_list::make_traits<
964 co::compare< compare >
966 > LazyList_RCU_GPI_cmp_stdAlloc;
968 typedef cc::LazyList< rcu_gpi, key_val,
969 typename cc::lazy_list::make_traits<
970 co::compare< compare >
971 ,co::memory_model< co::v::sequential_consistent >
973 > LazyList_RCU_GPI_cmp_stdAlloc_seqcst;
975 typedef cc::LazyList< rcu_gpi, key_val,
976 typename cc::lazy_list::make_traits<
977 co::compare< compare >,
978 co::allocator< memory::MichaelAllocator<int> >
980 > LazyList_RCU_GPI_cmp_michaelAlloc;
982 typedef cc::LazyList< rcu_gpi, key_val,
983 typename cc::lazy_list::make_traits<
986 > LazyList_RCU_GPI_less_stdAlloc;
988 typedef cc::LazyList< rcu_gpi, key_val,
989 typename cc::lazy_list::make_traits<
991 ,co::memory_model< co::v::sequential_consistent >
993 > LazyList_RCU_GPI_less_stdAlloc_seqcst;
995 typedef cc::LazyList< rcu_gpi, key_val,
996 typename cc::lazy_list::make_traits<
998 co::allocator< memory::MichaelAllocator<int> >
1000 > LazyList_RCU_GPI_less_michaelAlloc;
1002 typedef cc::LazyList< rcu_gpb, key_val,
1003 typename cc::lazy_list::make_traits<
1004 co::compare< compare >
1006 > LazyList_RCU_GPB_cmp_stdAlloc;
1008 typedef cc::LazyList< rcu_gpb, key_val,
1009 typename cc::lazy_list::make_traits<
1010 co::compare< compare >
1011 ,co::memory_model< co::v::sequential_consistent >
1013 > LazyList_RCU_GPB_cmp_stdAlloc_seqcst;
1015 typedef cc::LazyList< rcu_gpb, key_val,
1016 typename cc::lazy_list::make_traits<
1017 co::compare< compare >,
1018 co::allocator< memory::MichaelAllocator<int> >
1020 > LazyList_RCU_GPB_cmp_michaelAlloc;
1022 typedef cc::LazyList< rcu_gpb, key_val,
1023 typename cc::lazy_list::make_traits<
1026 > LazyList_RCU_GPB_less_stdAlloc;
1028 typedef cc::LazyList< rcu_gpb, key_val,
1029 typename cc::lazy_list::make_traits<
1031 ,co::memory_model< co::v::sequential_consistent >
1033 > LazyList_RCU_GPB_less_stdAlloc_seqcst;
1035 typedef cc::LazyList< rcu_gpb, key_val,
1036 typename cc::lazy_list::make_traits<
1038 co::allocator< memory::MichaelAllocator<int> >
1040 > LazyList_RCU_GPB_less_michaelAlloc;
1043 typedef cc::LazyList< rcu_gpt, key_val,
1044 typename cc::lazy_list::make_traits<
1045 co::compare< compare >
1047 > LazyList_RCU_GPT_cmp_stdAlloc;
1049 typedef cc::LazyList< rcu_gpt, key_val,
1050 typename cc::lazy_list::make_traits<
1051 co::compare< compare >
1052 ,co::memory_model< co::v::sequential_consistent >
1054 > LazyList_RCU_GPT_cmp_stdAlloc_seqcst;
1056 typedef cc::LazyList< rcu_gpt, key_val,
1057 typename cc::lazy_list::make_traits<
1058 co::compare< compare >,
1059 co::allocator< memory::MichaelAllocator<int> >
1061 > LazyList_RCU_GPT_cmp_michaelAlloc;
1063 typedef cc::LazyList< rcu_gpt, key_val,
1064 typename cc::lazy_list::make_traits<
1067 > LazyList_RCU_GPT_less_stdAlloc;
1069 typedef cc::LazyList< rcu_gpt, key_val,
1070 typename cc::lazy_list::make_traits<
1072 ,co::memory_model< co::v::sequential_consistent >
1074 > LazyList_RCU_GPT_less_stdAlloc_seqcst;
1076 typedef cc::LazyList< rcu_gpt, key_val,
1077 typename cc::lazy_list::make_traits<
1079 co::allocator< memory::MichaelAllocator<int> >
1081 > LazyList_RCU_GPT_less_michaelAlloc;
1083 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
1084 typedef cc::LazyList< rcu_shb, key_val,
1085 typename cc::lazy_list::make_traits<
1086 co::compare< compare >
1088 > LazyList_RCU_SHB_cmp_stdAlloc;
1090 typedef cc::LazyList< rcu_shb, key_val,
1091 typename cc::lazy_list::make_traits<
1092 co::compare< compare >
1093 ,co::memory_model< co::v::sequential_consistent >
1095 > LazyList_RCU_SHB_cmp_stdAlloc_seqcst;
1097 typedef cc::LazyList< rcu_shb, key_val,
1098 typename cc::lazy_list::make_traits<
1099 co::compare< compare >,
1100 co::allocator< memory::MichaelAllocator<int> >
1102 > LazyList_RCU_SHB_cmp_michaelAlloc;
1104 typedef cc::LazyList< rcu_shb, key_val,
1105 typename cc::lazy_list::make_traits<
1108 > LazyList_RCU_SHB_less_stdAlloc;
1110 typedef cc::LazyList< rcu_shb, key_val,
1111 typename cc::lazy_list::make_traits<
1113 ,co::memory_model< co::v::sequential_consistent >
1115 > LazyList_RCU_SHB_less_stdAlloc_seqcst;
1117 typedef cc::LazyList< rcu_shb, key_val,
1118 typename cc::lazy_list::make_traits<
1120 co::allocator< memory::MichaelAllocator<int> >
1122 > LazyList_RCU_SHB_less_michaelAlloc;
1125 typedef cc::LazyList< rcu_sht, key_val,
1126 typename cc::lazy_list::make_traits<
1127 co::compare< compare >
1129 > LazyList_RCU_SHT_cmp_stdAlloc;
1131 typedef cc::LazyList< rcu_sht, key_val,
1132 typename cc::lazy_list::make_traits<
1133 co::compare< compare >
1134 ,co::memory_model< co::v::sequential_consistent >
1136 > LazyList_RCU_SHT_cmp_stdAlloc_seqcst;
1138 typedef cc::LazyList< rcu_sht, key_val,
1139 typename cc::lazy_list::make_traits<
1140 co::compare< compare >,
1141 co::allocator< memory::MichaelAllocator<int> >
1143 > LazyList_RCU_SHT_cmp_michaelAlloc;
1145 typedef cc::LazyList< rcu_sht, key_val,
1146 typename cc::lazy_list::make_traits<
1149 > LazyList_RCU_SHT_less_stdAlloc;
1151 typedef cc::LazyList< rcu_sht, key_val,
1152 typename cc::lazy_list::make_traits<
1154 ,co::memory_model< co::v::sequential_consistent >
1156 > LazyList_RCU_SHT_less_stdAlloc_seqcst;
1158 typedef cc::LazyList< rcu_sht, key_val,
1159 typename cc::lazy_list::make_traits<
1161 co::allocator< memory::MichaelAllocator<int> >
1163 > LazyList_RCU_SHT_less_michaelAlloc;
1167 // ***************************************************************************
1168 // MichaelHashSet based on LazyList
1170 typedef cc::MichaelHashSet< cds::gc::HP, LazyList_HP_cmp_stdAlloc,
1171 typename cc::michael_set::make_traits<
1174 > MichaelSet_Lazy_HP_cmp_stdAlloc;
1176 typedef cc::MichaelHashSet< cds::gc::HP, LazyList_HP_cmp_stdAlloc_seqcst,
1177 typename cc::michael_set::make_traits<
1180 > MichaelSet_Lazy_HP_cmp_stdAlloc_seqcst;
1182 typedef cc::MichaelHashSet< cds::gc::HP, LazyList_HP_cmp_michaelAlloc,
1183 typename cc::michael_set::make_traits<
1185 co::allocator< memory::MichaelAllocator<int> >
1187 > MichaelSet_Lazy_HP_cmp_michaelAlloc;
1189 typedef cc::MichaelHashSet< cds::gc::HP, LazyList_HP_less_stdAlloc,
1190 typename cc::michael_set::make_traits<
1193 > MichaelSet_Lazy_HP_less_stdAlloc;
1195 typedef cc::MichaelHashSet< cds::gc::HP, LazyList_HP_less_stdAlloc_seqcst,
1196 typename cc::michael_set::make_traits<
1199 > MichaelSet_Lazy_HP_less_stdAlloc_seqcst;
1201 typedef cc::MichaelHashSet< cds::gc::HP, LazyList_HP_less_michaelAlloc,
1202 typename cc::michael_set::make_traits<
1204 co::allocator< memory::MichaelAllocator<int> >
1206 > MichaelSet_Lazy_HP_less_michaelAlloc;
1208 typedef cc::MichaelHashSet< cds::gc::PTB, LazyList_PTB_cmp_stdAlloc,
1209 typename cc::michael_set::make_traits<
1212 > MichaelSet_Lazy_PTB_cmp_stdAlloc;
1214 typedef cc::MichaelHashSet< cds::gc::PTB, LazyList_PTB_cmp_stdAlloc_seqcst,
1215 typename cc::michael_set::make_traits<
1218 > MichaelSet_Lazy_PTB_cmp_stdAlloc_seqcst;
1220 typedef cc::MichaelHashSet< cds::gc::PTB, LazyList_PTB_cmp_michaelAlloc,
1221 typename cc::michael_set::make_traits<
1223 co::allocator< memory::MichaelAllocator<int> >
1225 > MichaelSet_Lazy_PTB_cmp_michaelAlloc;
1227 typedef cc::MichaelHashSet< cds::gc::PTB, LazyList_PTB_less_stdAlloc,
1228 typename cc::michael_set::make_traits<
1231 > MichaelSet_Lazy_PTB_less_stdAlloc;
1233 typedef cc::MichaelHashSet< cds::gc::PTB, LazyList_PTB_less_stdAlloc_seqcst,
1234 typename cc::michael_set::make_traits<
1237 > MichaelSet_Lazy_PTB_less_stdAlloc_seqcst;
1239 typedef cc::MichaelHashSet< cds::gc::PTB, LazyList_PTB_less_michaelAlloc,
1240 typename cc::michael_set::make_traits<
1242 co::allocator< memory::MichaelAllocator<int> >
1244 > MichaelSet_Lazy_PTB_less_michaelAlloc;
1247 typedef cc::MichaelHashSet< rcu_gpi, LazyList_RCU_GPI_cmp_stdAlloc,
1248 typename cc::michael_set::make_traits<
1251 > MichaelSet_Lazy_RCU_GPI_cmp_stdAlloc;
1253 typedef cc::MichaelHashSet< rcu_gpi, LazyList_RCU_GPI_cmp_stdAlloc_seqcst,
1254 typename cc::michael_set::make_traits<
1257 > MichaelSet_Lazy_RCU_GPI_cmp_stdAlloc_seqcst;
1259 typedef cc::MichaelHashSet< rcu_gpi, LazyList_RCU_GPI_cmp_michaelAlloc,
1260 typename cc::michael_set::make_traits<
1262 co::allocator< memory::MichaelAllocator<int> >
1264 > MichaelSet_Lazy_RCU_GPI_cmp_michaelAlloc;
1266 typedef cc::MichaelHashSet< rcu_gpi, LazyList_RCU_GPI_less_stdAlloc,
1267 typename cc::michael_set::make_traits<
1270 > MichaelSet_Lazy_RCU_GPI_less_stdAlloc;
1272 typedef cc::MichaelHashSet< rcu_gpi, LazyList_RCU_GPI_less_stdAlloc_seqcst,
1273 typename cc::michael_set::make_traits<
1276 > MichaelSet_Lazy_RCU_GPI_less_stdAlloc_seqcst;
1278 typedef cc::MichaelHashSet< rcu_gpi, LazyList_RCU_GPI_less_michaelAlloc,
1279 typename cc::michael_set::make_traits<
1281 co::allocator< memory::MichaelAllocator<int> >
1283 > MichaelSet_Lazy_RCU_GPI_less_michaelAlloc;
1286 typedef cc::MichaelHashSet< rcu_gpb, LazyList_RCU_GPB_cmp_stdAlloc,
1287 typename cc::michael_set::make_traits<
1290 > MichaelSet_Lazy_RCU_GPB_cmp_stdAlloc;
1292 typedef cc::MichaelHashSet< rcu_gpb, LazyList_RCU_GPB_cmp_stdAlloc_seqcst,
1293 typename cc::michael_set::make_traits<
1296 > MichaelSet_Lazy_RCU_GPB_cmp_stdAlloc_seqcst;
1298 typedef cc::MichaelHashSet< rcu_gpb, LazyList_RCU_GPB_cmp_michaelAlloc,
1299 typename cc::michael_set::make_traits<
1301 co::allocator< memory::MichaelAllocator<int> >
1303 > MichaelSet_Lazy_RCU_GPB_cmp_michaelAlloc;
1305 typedef cc::MichaelHashSet< rcu_gpb, LazyList_RCU_GPB_less_stdAlloc,
1306 typename cc::michael_set::make_traits<
1309 > MichaelSet_Lazy_RCU_GPB_less_stdAlloc;
1311 typedef cc::MichaelHashSet< rcu_gpb, LazyList_RCU_GPB_less_stdAlloc_seqcst,
1312 typename cc::michael_set::make_traits<
1315 > MichaelSet_Lazy_RCU_GPB_less_stdAlloc_seqcst;
1317 typedef cc::MichaelHashSet< rcu_gpb, LazyList_RCU_GPB_less_michaelAlloc,
1318 typename cc::michael_set::make_traits<
1320 co::allocator< memory::MichaelAllocator<int> >
1322 > MichaelSet_Lazy_RCU_GPB_less_michaelAlloc;
1325 typedef cc::MichaelHashSet< rcu_gpt, LazyList_RCU_GPT_cmp_stdAlloc,
1326 typename cc::michael_set::make_traits<
1329 > MichaelSet_Lazy_RCU_GPT_cmp_stdAlloc;
1331 typedef cc::MichaelHashSet< rcu_gpt, LazyList_RCU_GPT_cmp_stdAlloc_seqcst,
1332 typename cc::michael_set::make_traits<
1335 > MichaelSet_Lazy_RCU_GPT_cmp_stdAlloc_seqcst;
1337 typedef cc::MichaelHashSet< rcu_gpt, LazyList_RCU_GPT_cmp_michaelAlloc,
1338 typename cc::michael_set::make_traits<
1340 co::allocator< memory::MichaelAllocator<int> >
1342 > MichaelSet_Lazy_RCU_GPT_cmp_michaelAlloc;
1344 typedef cc::MichaelHashSet< rcu_gpt, LazyList_RCU_GPT_less_stdAlloc,
1345 typename cc::michael_set::make_traits<
1348 > MichaelSet_Lazy_RCU_GPT_less_stdAlloc;
1350 typedef cc::MichaelHashSet< rcu_gpt, LazyList_RCU_GPT_less_stdAlloc_seqcst,
1351 typename cc::michael_set::make_traits<
1354 > MichaelSet_Lazy_RCU_GPT_less_stdAlloc_seqcst;
1356 typedef cc::MichaelHashSet< rcu_gpt, LazyList_RCU_GPT_less_michaelAlloc,
1357 typename cc::michael_set::make_traits<
1359 co::allocator< memory::MichaelAllocator<int> >
1361 > MichaelSet_Lazy_RCU_GPT_less_michaelAlloc;
1363 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
1364 typedef cc::MichaelHashSet< rcu_shb, LazyList_RCU_SHB_cmp_stdAlloc,
1365 typename cc::michael_set::make_traits<
1368 > MichaelSet_Lazy_RCU_SHB_cmp_stdAlloc;
1370 typedef cc::MichaelHashSet< rcu_shb, LazyList_RCU_SHB_cmp_stdAlloc_seqcst,
1371 typename cc::michael_set::make_traits<
1374 > MichaelSet_Lazy_RCU_SHB_cmp_stdAlloc_seqcst;
1376 typedef cc::MichaelHashSet< rcu_shb, LazyList_RCU_SHB_cmp_michaelAlloc,
1377 typename cc::michael_set::make_traits<
1379 co::allocator< memory::MichaelAllocator<int> >
1381 > MichaelSet_Lazy_RCU_SHB_cmp_michaelAlloc;
1383 typedef cc::MichaelHashSet< rcu_shb, LazyList_RCU_SHB_less_stdAlloc,
1384 typename cc::michael_set::make_traits<
1387 > MichaelSet_Lazy_RCU_SHB_less_stdAlloc;
1389 typedef cc::MichaelHashSet< rcu_shb, LazyList_RCU_SHB_less_stdAlloc_seqcst,
1390 typename cc::michael_set::make_traits<
1393 > MichaelSet_Lazy_RCU_SHB_less_stdAlloc_seqcst;
1395 typedef cc::MichaelHashSet< rcu_shb, LazyList_RCU_SHB_less_michaelAlloc,
1396 typename cc::michael_set::make_traits<
1398 co::allocator< memory::MichaelAllocator<int> >
1400 > MichaelSet_Lazy_RCU_SHB_less_michaelAlloc;
1403 typedef cc::MichaelHashSet< rcu_sht, LazyList_RCU_SHT_cmp_stdAlloc,
1404 typename cc::michael_set::make_traits<
1407 > MichaelSet_Lazy_RCU_SHT_cmp_stdAlloc;
1409 typedef cc::MichaelHashSet< rcu_sht, LazyList_RCU_SHT_cmp_stdAlloc_seqcst,
1410 typename cc::michael_set::make_traits<
1413 > MichaelSet_Lazy_RCU_SHT_cmp_stdAlloc_seqcst;
1415 typedef cc::MichaelHashSet< rcu_sht, LazyList_RCU_SHT_cmp_michaelAlloc,
1416 typename cc::michael_set::make_traits<
1418 co::allocator< memory::MichaelAllocator<int> >
1420 > MichaelSet_Lazy_RCU_SHT_cmp_michaelAlloc;
1422 typedef cc::MichaelHashSet< rcu_sht, LazyList_RCU_SHT_less_stdAlloc,
1423 typename cc::michael_set::make_traits<
1426 > MichaelSet_Lazy_RCU_SHT_less_stdAlloc;
1428 typedef cc::MichaelHashSet< rcu_sht, LazyList_RCU_SHT_less_stdAlloc_seqcst,
1429 typename cc::michael_set::make_traits<
1432 > MichaelSet_Lazy_RCU_SHT_less_stdAlloc_seqcst;
1434 typedef cc::MichaelHashSet< rcu_sht, LazyList_RCU_SHT_less_michaelAlloc,
1435 typename cc::michael_set::make_traits<
1437 co::allocator< memory::MichaelAllocator<int> >
1439 > MichaelSet_Lazy_RCU_SHT_less_michaelAlloc;
1442 // ***************************************************************************
1443 // SplitListSet based on MichaelList
1446 typedef cc::SplitListSet< cds::gc::HP, key_val,
1447 typename cc::split_list::make_traits<
1448 cc::split_list::ordered_list<cc::michael_list_tag>
1450 ,cc::split_list::ordered_list_traits<
1451 typename cc::michael_list::make_traits<
1452 co::compare< compare >
1456 > SplitList_Michael_HP_dyn_cmp;
1458 typedef cc::SplitListSet< cds::gc::HP, key_val,
1459 typename cc::split_list::make_traits<
1460 cc::split_list::ordered_list<cc::michael_list_tag>
1462 ,co::memory_model< co::v::sequential_consistent >
1463 ,cc::split_list::ordered_list_traits<
1464 typename cc::michael_list::make_traits<
1465 co::compare< compare >
1466 ,co::memory_model< co::v::sequential_consistent >
1470 > SplitList_Michael_HP_dyn_cmp_seqcst;
1472 typedef cc::SplitListSet< cds::gc::HP, key_val,
1473 typename cc::split_list::make_traits<
1474 cc::split_list::ordered_list<cc::michael_list_tag>
1475 ,cc::split_list::dynamic_bucket_table< false >
1477 ,cc::split_list::ordered_list_traits<
1478 typename cc::michael_list::make_traits<
1479 co::compare< compare >
1483 > SplitList_Michael_HP_st_cmp;
1485 typedef cc::SplitListSet< cds::gc::HP, key_val,
1486 typename cc::split_list::make_traits<
1487 cc::split_list::ordered_list<cc::michael_list_tag>
1489 ,cc::split_list::dynamic_bucket_table< false >
1490 ,co::memory_model< co::v::sequential_consistent >
1491 ,cc::split_list::ordered_list_traits<
1492 typename cc::michael_list::make_traits<
1493 co::compare< compare >
1494 ,co::memory_model< co::v::sequential_consistent >
1498 > SplitList_Michael_HP_st_cmp_seqcst;
1501 typedef cc::SplitListSet< cds::gc::HP, key_val,
1502 typename cc::split_list::make_traits<
1503 cc::split_list::ordered_list<cc::michael_list_tag>
1505 ,cc::split_list::ordered_list_traits<
1506 typename cc::michael_list::make_traits<
1511 > SplitList_Michael_HP_dyn_less;
1513 typedef cc::SplitListSet< cds::gc::HP, key_val,
1514 typename cc::split_list::make_traits<
1515 cc::split_list::ordered_list<cc::michael_list_tag>
1517 ,co::memory_model< co::v::sequential_consistent >
1518 ,cc::split_list::ordered_list_traits<
1519 typename cc::michael_list::make_traits<
1521 ,co::memory_model< co::v::sequential_consistent >
1525 > SplitList_Michael_HP_dyn_less_seqcst;
1527 typedef cc::SplitListSet< cds::gc::HP, key_val,
1528 typename cc::split_list::make_traits<
1529 cc::split_list::ordered_list<cc::michael_list_tag>
1530 ,cc::split_list::dynamic_bucket_table< false >
1532 ,cc::split_list::ordered_list_traits<
1533 typename cc::michael_list::make_traits<
1538 > SplitList_Michael_HP_st_less;
1540 typedef cc::SplitListSet< cds::gc::HP, key_val,
1541 typename cc::split_list::make_traits<
1542 cc::split_list::ordered_list<cc::michael_list_tag>
1544 ,cc::split_list::dynamic_bucket_table< false >
1545 ,co::memory_model< co::v::sequential_consistent >
1546 ,cc::split_list::ordered_list_traits<
1547 typename cc::michael_list::make_traits<
1549 ,co::memory_model< co::v::sequential_consistent >
1553 > SplitList_Michael_HP_st_less_seqcst;
1556 typedef cc::SplitListSet< cds::gc::PTB, key_val,
1557 typename cc::split_list::make_traits<
1558 cc::split_list::ordered_list<cc::michael_list_tag>
1560 ,cc::split_list::ordered_list_traits<
1561 typename cc::michael_list::make_traits<
1562 co::compare< compare >
1566 > SplitList_Michael_PTB_dyn_cmp;
1568 typedef cc::SplitListSet< cds::gc::PTB, key_val,
1569 typename cc::split_list::make_traits<
1570 cc::split_list::ordered_list<cc::michael_list_tag>
1572 ,co::memory_model< co::v::sequential_consistent >
1573 ,cc::split_list::ordered_list_traits<
1574 typename cc::michael_list::make_traits<
1575 co::compare< compare >
1576 ,co::memory_model< co::v::sequential_consistent >
1580 > SplitList_Michael_PTB_dyn_cmp_seqcst;
1582 typedef cc::SplitListSet< cds::gc::PTB, key_val,
1583 typename cc::split_list::make_traits<
1584 cc::split_list::ordered_list<cc::michael_list_tag>
1585 ,cc::split_list::dynamic_bucket_table< false >
1587 ,cc::split_list::ordered_list_traits<
1588 typename cc::michael_list::make_traits<
1589 co::compare< compare >
1593 > SplitList_Michael_PTB_st_cmp;
1595 typedef cc::SplitListSet< cds::gc::PTB, key_val,
1596 typename cc::split_list::make_traits<
1597 cc::split_list::ordered_list<cc::michael_list_tag>
1599 ,cc::split_list::dynamic_bucket_table< false >
1600 ,co::memory_model< co::v::sequential_consistent >
1601 ,cc::split_list::ordered_list_traits<
1602 typename cc::michael_list::make_traits<
1603 co::compare< compare >
1604 ,co::memory_model< co::v::sequential_consistent >
1608 > SplitList_Michael_PTB_st_cmp_seqcst;
1611 typedef cc::SplitListSet< cds::gc::PTB, key_val,
1612 typename cc::split_list::make_traits<
1613 cc::split_list::ordered_list<cc::michael_list_tag>
1615 ,cc::split_list::ordered_list_traits<
1616 typename cc::michael_list::make_traits<
1621 > SplitList_Michael_PTB_dyn_less;
1623 typedef cc::SplitListSet< cds::gc::PTB, key_val,
1624 typename cc::split_list::make_traits<
1625 cc::split_list::ordered_list<cc::michael_list_tag>
1627 ,co::memory_model< co::v::sequential_consistent >
1628 ,cc::split_list::ordered_list_traits<
1629 typename cc::michael_list::make_traits<
1631 ,co::memory_model< co::v::sequential_consistent >
1635 > SplitList_Michael_PTB_dyn_less_seqcst;
1637 typedef cc::SplitListSet< cds::gc::PTB, key_val,
1638 typename cc::split_list::make_traits<
1639 cc::split_list::ordered_list<cc::michael_list_tag>
1640 ,cc::split_list::dynamic_bucket_table< false >
1642 ,cc::split_list::ordered_list_traits<
1643 typename cc::michael_list::make_traits<
1648 > SplitList_Michael_PTB_st_less;
1650 typedef cc::SplitListSet< cds::gc::PTB, key_val,
1651 typename cc::split_list::make_traits<
1652 cc::split_list::ordered_list<cc::michael_list_tag>
1654 ,cc::split_list::dynamic_bucket_table< false >
1655 ,co::memory_model< co::v::sequential_consistent >
1656 ,cc::split_list::ordered_list_traits<
1657 typename cc::michael_list::make_traits<
1659 ,co::memory_model< co::v::sequential_consistent >
1663 > SplitList_Michael_PTB_st_less_seqcst;
1666 typedef cc::SplitListSet< rcu_gpi, key_val,
1667 typename cc::split_list::make_traits<
1668 cc::split_list::ordered_list<cc::michael_list_tag>
1670 ,cc::split_list::ordered_list_traits<
1671 typename cc::michael_list::make_traits<
1672 co::compare< compare >
1676 > SplitList_Michael_RCU_GPI_dyn_cmp;
1678 typedef cc::SplitListSet< rcu_gpi, key_val,
1679 typename cc::split_list::make_traits<
1680 cc::split_list::ordered_list<cc::michael_list_tag>
1682 ,co::memory_model< co::v::sequential_consistent >
1683 ,cc::split_list::ordered_list_traits<
1684 typename cc::michael_list::make_traits<
1685 co::compare< compare >
1686 ,co::memory_model< co::v::sequential_consistent >
1690 > SplitList_Michael_RCU_GPI_dyn_cmp_seqcst;
1692 typedef cc::SplitListSet< rcu_gpi, key_val,
1693 typename cc::split_list::make_traits<
1694 cc::split_list::ordered_list<cc::michael_list_tag>
1695 ,cc::split_list::dynamic_bucket_table< false >
1697 ,cc::split_list::ordered_list_traits<
1698 typename cc::michael_list::make_traits<
1699 co::compare< compare >
1703 > SplitList_Michael_RCU_GPI_st_cmp;
1705 typedef cc::SplitListSet< rcu_gpi, key_val,
1706 typename cc::split_list::make_traits<
1707 cc::split_list::ordered_list<cc::michael_list_tag>
1709 ,cc::split_list::dynamic_bucket_table< false >
1710 ,co::memory_model< co::v::sequential_consistent >
1711 ,cc::split_list::ordered_list_traits<
1712 typename cc::michael_list::make_traits<
1713 co::compare< compare >
1714 ,co::memory_model< co::v::sequential_consistent >
1718 > SplitList_Michael_RCU_GPI_st_cmp_seqcst;
1721 typedef cc::SplitListSet< rcu_gpi, key_val,
1722 typename cc::split_list::make_traits<
1723 cc::split_list::ordered_list<cc::michael_list_tag>
1725 ,cc::split_list::ordered_list_traits<
1726 typename cc::michael_list::make_traits<
1731 > SplitList_Michael_RCU_GPI_dyn_less;
1733 typedef cc::SplitListSet< rcu_gpi, key_val,
1734 typename cc::split_list::make_traits<
1735 cc::split_list::ordered_list<cc::michael_list_tag>
1737 ,co::memory_model< co::v::sequential_consistent >
1738 ,cc::split_list::ordered_list_traits<
1739 typename cc::michael_list::make_traits<
1741 ,co::memory_model< co::v::sequential_consistent >
1745 > SplitList_Michael_RCU_GPI_dyn_less_seqcst;
1747 typedef cc::SplitListSet< rcu_gpi, key_val,
1748 typename cc::split_list::make_traits<
1749 cc::split_list::ordered_list<cc::michael_list_tag>
1750 ,cc::split_list::dynamic_bucket_table< false >
1752 ,cc::split_list::ordered_list_traits<
1753 typename cc::michael_list::make_traits<
1758 > SplitList_Michael_RCU_GPI_st_less;
1760 typedef cc::SplitListSet< rcu_gpi, key_val,
1761 typename cc::split_list::make_traits<
1762 cc::split_list::ordered_list<cc::michael_list_tag>
1764 ,cc::split_list::dynamic_bucket_table< false >
1765 ,co::memory_model< co::v::sequential_consistent >
1766 ,cc::split_list::ordered_list_traits<
1767 typename cc::michael_list::make_traits<
1769 ,co::memory_model< co::v::sequential_consistent >
1773 > SplitList_Michael_RCU_GPI_st_less_seqcst;
1777 typedef cc::SplitListSet< rcu_gpb, key_val,
1778 typename cc::split_list::make_traits<
1779 cc::split_list::ordered_list<cc::michael_list_tag>
1781 ,cc::split_list::ordered_list_traits<
1782 typename cc::michael_list::make_traits<
1783 co::compare< compare >
1787 > SplitList_Michael_RCU_GPB_dyn_cmp;
1789 typedef cc::SplitListSet< rcu_gpb, key_val,
1790 typename cc::split_list::make_traits<
1791 cc::split_list::ordered_list<cc::michael_list_tag>
1793 ,co::memory_model< co::v::sequential_consistent >
1794 ,cc::split_list::ordered_list_traits<
1795 typename cc::michael_list::make_traits<
1796 co::compare< compare >
1797 ,co::memory_model< co::v::sequential_consistent >
1801 > SplitList_Michael_RCU_GPB_dyn_cmp_seqcst;
1803 typedef cc::SplitListSet< rcu_gpb, key_val,
1804 typename cc::split_list::make_traits<
1805 cc::split_list::ordered_list<cc::michael_list_tag>
1806 ,cc::split_list::dynamic_bucket_table< false >
1808 ,cc::split_list::ordered_list_traits<
1809 typename cc::michael_list::make_traits<
1810 co::compare< compare >
1814 > SplitList_Michael_RCU_GPB_st_cmp;
1816 typedef cc::SplitListSet< rcu_gpb, key_val,
1817 typename cc::split_list::make_traits<
1818 cc::split_list::ordered_list<cc::michael_list_tag>
1820 ,cc::split_list::dynamic_bucket_table< false >
1821 ,co::memory_model< co::v::sequential_consistent >
1822 ,cc::split_list::ordered_list_traits<
1823 typename cc::michael_list::make_traits<
1824 co::compare< compare >
1825 ,co::memory_model< co::v::sequential_consistent >
1829 > SplitList_Michael_RCU_GPB_st_cmp_seqcst;
1832 typedef cc::SplitListSet< rcu_gpb, key_val,
1833 typename cc::split_list::make_traits<
1834 cc::split_list::ordered_list<cc::michael_list_tag>
1836 ,cc::split_list::ordered_list_traits<
1837 typename cc::michael_list::make_traits<
1842 > SplitList_Michael_RCU_GPB_dyn_less;
1844 typedef cc::SplitListSet< rcu_gpb, key_val,
1845 typename cc::split_list::make_traits<
1846 cc::split_list::ordered_list<cc::michael_list_tag>
1848 ,co::memory_model< co::v::sequential_consistent >
1849 ,cc::split_list::ordered_list_traits<
1850 typename cc::michael_list::make_traits<
1852 ,co::memory_model< co::v::sequential_consistent >
1856 > SplitList_Michael_RCU_GPB_dyn_less_seqcst;
1858 typedef cc::SplitListSet< rcu_gpb, key_val,
1859 typename cc::split_list::make_traits<
1860 cc::split_list::ordered_list<cc::michael_list_tag>
1861 ,cc::split_list::dynamic_bucket_table< false >
1863 ,cc::split_list::ordered_list_traits<
1864 typename cc::michael_list::make_traits<
1869 > SplitList_Michael_RCU_GPB_st_less;
1871 typedef cc::SplitListSet< rcu_gpb, key_val,
1872 typename cc::split_list::make_traits<
1873 cc::split_list::ordered_list<cc::michael_list_tag>
1875 ,cc::split_list::dynamic_bucket_table< false >
1876 ,co::memory_model< co::v::sequential_consistent >
1877 ,cc::split_list::ordered_list_traits<
1878 typename cc::michael_list::make_traits<
1880 ,co::memory_model< co::v::sequential_consistent >
1884 > SplitList_Michael_RCU_GPB_st_less_seqcst;
1887 typedef cc::SplitListSet< rcu_gpt, key_val,
1888 typename cc::split_list::make_traits<
1889 cc::split_list::ordered_list<cc::michael_list_tag>
1891 ,cc::split_list::ordered_list_traits<
1892 typename cc::michael_list::make_traits<
1893 co::compare< compare >
1897 > SplitList_Michael_RCU_GPT_dyn_cmp;
1899 typedef cc::SplitListSet< rcu_gpt, key_val,
1900 typename cc::split_list::make_traits<
1901 cc::split_list::ordered_list<cc::michael_list_tag>
1903 ,co::memory_model< co::v::sequential_consistent >
1904 ,cc::split_list::ordered_list_traits<
1905 typename cc::michael_list::make_traits<
1906 co::compare< compare >
1907 ,co::memory_model< co::v::sequential_consistent >
1911 > SplitList_Michael_RCU_GPT_dyn_cmp_seqcst;
1913 typedef cc::SplitListSet< rcu_gpt, key_val,
1914 typename cc::split_list::make_traits<
1915 cc::split_list::ordered_list<cc::michael_list_tag>
1916 ,cc::split_list::dynamic_bucket_table< false >
1918 ,cc::split_list::ordered_list_traits<
1919 typename cc::michael_list::make_traits<
1920 co::compare< compare >
1924 > SplitList_Michael_RCU_GPT_st_cmp;
1926 typedef cc::SplitListSet< rcu_gpt, key_val,
1927 typename cc::split_list::make_traits<
1928 cc::split_list::ordered_list<cc::michael_list_tag>
1930 ,cc::split_list::dynamic_bucket_table< false >
1931 ,co::memory_model< co::v::sequential_consistent >
1932 ,cc::split_list::ordered_list_traits<
1933 typename cc::michael_list::make_traits<
1934 co::compare< compare >
1935 ,co::memory_model< co::v::sequential_consistent >
1939 > SplitList_Michael_RCU_GPT_st_cmp_seqcst;
1942 typedef cc::SplitListSet< rcu_gpt, key_val,
1943 typename cc::split_list::make_traits<
1944 cc::split_list::ordered_list<cc::michael_list_tag>
1946 ,cc::split_list::ordered_list_traits<
1947 typename cc::michael_list::make_traits<
1952 > SplitList_Michael_RCU_GPT_dyn_less;
1954 typedef cc::SplitListSet< rcu_gpt, key_val,
1955 typename cc::split_list::make_traits<
1956 cc::split_list::ordered_list<cc::michael_list_tag>
1958 ,co::memory_model< co::v::sequential_consistent >
1959 ,cc::split_list::ordered_list_traits<
1960 typename cc::michael_list::make_traits<
1962 ,co::memory_model< co::v::sequential_consistent >
1966 > SplitList_Michael_RCU_GPT_dyn_less_seqcst;
1968 typedef cc::SplitListSet< rcu_gpt, key_val,
1969 typename cc::split_list::make_traits<
1970 cc::split_list::ordered_list<cc::michael_list_tag>
1971 ,cc::split_list::dynamic_bucket_table< false >
1973 ,cc::split_list::ordered_list_traits<
1974 typename cc::michael_list::make_traits<
1979 > SplitList_Michael_RCU_GPT_st_less;
1981 typedef cc::SplitListSet< rcu_gpt, key_val,
1982 typename cc::split_list::make_traits<
1983 cc::split_list::ordered_list<cc::michael_list_tag>
1985 ,cc::split_list::dynamic_bucket_table< false >
1986 ,co::memory_model< co::v::sequential_consistent >
1987 ,cc::split_list::ordered_list_traits<
1988 typename cc::michael_list::make_traits<
1990 ,co::memory_model< co::v::sequential_consistent >
1994 > SplitList_Michael_RCU_GPT_st_less_seqcst;
1996 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
1997 typedef cc::SplitListSet< rcu_shb, key_val,
1998 typename cc::split_list::make_traits<
1999 cc::split_list::ordered_list<cc::michael_list_tag>
2001 ,cc::split_list::ordered_list_traits<
2002 typename cc::michael_list::make_traits<
2003 co::compare< compare >
2007 > SplitList_Michael_RCU_SHB_dyn_cmp;
2009 typedef cc::SplitListSet< rcu_shb, key_val,
2010 typename cc::split_list::make_traits<
2011 cc::split_list::ordered_list<cc::michael_list_tag>
2013 ,co::memory_model< co::v::sequential_consistent >
2014 ,cc::split_list::ordered_list_traits<
2015 typename cc::michael_list::make_traits<
2016 co::compare< compare >
2017 ,co::memory_model< co::v::sequential_consistent >
2021 > SplitList_Michael_RCU_SHB_dyn_cmp_seqcst;
2023 typedef cc::SplitListSet< rcu_shb, key_val,
2024 typename cc::split_list::make_traits<
2025 cc::split_list::ordered_list<cc::michael_list_tag>
2026 ,cc::split_list::dynamic_bucket_table< false >
2028 ,cc::split_list::ordered_list_traits<
2029 typename cc::michael_list::make_traits<
2030 co::compare< compare >
2034 > SplitList_Michael_RCU_SHB_st_cmp;
2036 typedef cc::SplitListSet< rcu_shb, key_val,
2037 typename cc::split_list::make_traits<
2038 cc::split_list::ordered_list<cc::michael_list_tag>
2040 ,cc::split_list::dynamic_bucket_table< false >
2041 ,co::memory_model< co::v::sequential_consistent >
2042 ,cc::split_list::ordered_list_traits<
2043 typename cc::michael_list::make_traits<
2044 co::compare< compare >
2045 ,co::memory_model< co::v::sequential_consistent >
2049 > SplitList_Michael_RCU_SHB_st_cmp_seqcst;
2052 typedef cc::SplitListSet< rcu_shb, key_val,
2053 typename cc::split_list::make_traits<
2054 cc::split_list::ordered_list<cc::michael_list_tag>
2056 ,cc::split_list::ordered_list_traits<
2057 typename cc::michael_list::make_traits<
2062 > SplitList_Michael_RCU_SHB_dyn_less;
2064 typedef cc::SplitListSet< rcu_shb, key_val,
2065 typename cc::split_list::make_traits<
2066 cc::split_list::ordered_list<cc::michael_list_tag>
2068 ,co::memory_model< co::v::sequential_consistent >
2069 ,cc::split_list::ordered_list_traits<
2070 typename cc::michael_list::make_traits<
2072 ,co::memory_model< co::v::sequential_consistent >
2076 > SplitList_Michael_RCU_SHB_dyn_less_seqcst;
2078 typedef cc::SplitListSet< rcu_shb, key_val,
2079 typename cc::split_list::make_traits<
2080 cc::split_list::ordered_list<cc::michael_list_tag>
2081 ,cc::split_list::dynamic_bucket_table< false >
2083 ,cc::split_list::ordered_list_traits<
2084 typename cc::michael_list::make_traits<
2089 > SplitList_Michael_RCU_SHB_st_less;
2091 typedef cc::SplitListSet< rcu_shb, key_val,
2092 typename cc::split_list::make_traits<
2093 cc::split_list::ordered_list<cc::michael_list_tag>
2095 ,cc::split_list::dynamic_bucket_table< false >
2096 ,co::memory_model< co::v::sequential_consistent >
2097 ,cc::split_list::ordered_list_traits<
2098 typename cc::michael_list::make_traits<
2100 ,co::memory_model< co::v::sequential_consistent >
2104 > SplitList_Michael_RCU_SHB_st_less_seqcst;
2107 typedef cc::SplitListSet< rcu_sht, key_val,
2108 typename cc::split_list::make_traits<
2109 cc::split_list::ordered_list<cc::michael_list_tag>
2111 ,cc::split_list::ordered_list_traits<
2112 typename cc::michael_list::make_traits<
2113 co::compare< compare >
2117 > SplitList_Michael_RCU_SHT_dyn_cmp;
2119 typedef cc::SplitListSet< rcu_sht, key_val,
2120 typename cc::split_list::make_traits<
2121 cc::split_list::ordered_list<cc::michael_list_tag>
2123 ,co::memory_model< co::v::sequential_consistent >
2124 ,cc::split_list::ordered_list_traits<
2125 typename cc::michael_list::make_traits<
2126 co::compare< compare >
2127 ,co::memory_model< co::v::sequential_consistent >
2131 > SplitList_Michael_RCU_SHT_dyn_cmp_seqcst;
2133 typedef cc::SplitListSet< rcu_sht, key_val,
2134 typename cc::split_list::make_traits<
2135 cc::split_list::ordered_list<cc::michael_list_tag>
2136 ,cc::split_list::dynamic_bucket_table< false >
2138 ,cc::split_list::ordered_list_traits<
2139 typename cc::michael_list::make_traits<
2140 co::compare< compare >
2144 > SplitList_Michael_RCU_SHT_st_cmp;
2146 typedef cc::SplitListSet< rcu_sht, key_val,
2147 typename cc::split_list::make_traits<
2148 cc::split_list::ordered_list<cc::michael_list_tag>
2150 ,cc::split_list::dynamic_bucket_table< false >
2151 ,co::memory_model< co::v::sequential_consistent >
2152 ,cc::split_list::ordered_list_traits<
2153 typename cc::michael_list::make_traits<
2154 co::compare< compare >
2155 ,co::memory_model< co::v::sequential_consistent >
2159 > SplitList_Michael_RCU_SHT_st_cmp_seqcst;
2162 typedef cc::SplitListSet< rcu_sht, key_val,
2163 typename cc::split_list::make_traits<
2164 cc::split_list::ordered_list<cc::michael_list_tag>
2166 ,cc::split_list::ordered_list_traits<
2167 typename cc::michael_list::make_traits<
2172 > SplitList_Michael_RCU_SHT_dyn_less;
2174 typedef cc::SplitListSet< rcu_sht, key_val,
2175 typename cc::split_list::make_traits<
2176 cc::split_list::ordered_list<cc::michael_list_tag>
2178 ,co::memory_model< co::v::sequential_consistent >
2179 ,cc::split_list::ordered_list_traits<
2180 typename cc::michael_list::make_traits<
2182 ,co::memory_model< co::v::sequential_consistent >
2186 > SplitList_Michael_RCU_SHT_dyn_less_seqcst;
2188 typedef cc::SplitListSet< rcu_sht, key_val,
2189 typename cc::split_list::make_traits<
2190 cc::split_list::ordered_list<cc::michael_list_tag>
2191 ,cc::split_list::dynamic_bucket_table< false >
2193 ,cc::split_list::ordered_list_traits<
2194 typename cc::michael_list::make_traits<
2199 > SplitList_Michael_RCU_SHT_st_less;
2201 typedef cc::SplitListSet< rcu_sht, key_val,
2202 typename cc::split_list::make_traits<
2203 cc::split_list::ordered_list<cc::michael_list_tag>
2205 ,cc::split_list::dynamic_bucket_table< false >
2206 ,co::memory_model< co::v::sequential_consistent >
2207 ,cc::split_list::ordered_list_traits<
2208 typename cc::michael_list::make_traits<
2210 ,co::memory_model< co::v::sequential_consistent >
2214 > SplitList_Michael_RCU_SHT_st_less_seqcst;
2217 // ***************************************************************************
2218 // SplitListSet based on LazyList
2221 typedef cc::SplitListSet< cds::gc::HP, key_val,
2222 typename cc::split_list::make_traits<
2223 cc::split_list::ordered_list<cc::lazy_list_tag>
2225 ,cc::split_list::ordered_list_traits<
2226 typename cc::lazy_list::make_traits<
2227 co::compare< compare >
2231 > SplitList_Lazy_HP_dyn_cmp;
2233 typedef cc::SplitListSet< cds::gc::HP, key_val,
2234 typename cc::split_list::make_traits<
2235 cc::split_list::ordered_list<cc::lazy_list_tag>
2237 ,co::memory_model< co::v::sequential_consistent >
2238 ,cc::split_list::ordered_list_traits<
2239 typename cc::lazy_list::make_traits<
2240 co::compare< compare >
2241 ,co::memory_model< co::v::sequential_consistent >
2245 > SplitList_Lazy_HP_dyn_cmp_seqcst;
2247 typedef cc::SplitListSet< cds::gc::HP, key_val,
2248 typename cc::split_list::make_traits<
2249 cc::split_list::ordered_list<cc::lazy_list_tag>
2250 ,cc::split_list::dynamic_bucket_table< false >
2252 ,cc::split_list::ordered_list_traits<
2253 typename cc::lazy_list::make_traits<
2254 co::compare< compare >
2258 > SplitList_Lazy_HP_st_cmp;
2260 typedef cc::SplitListSet< cds::gc::HP, key_val,
2261 typename cc::split_list::make_traits<
2262 cc::split_list::ordered_list<cc::lazy_list_tag>
2264 ,cc::split_list::dynamic_bucket_table< false >
2265 ,co::memory_model< co::v::sequential_consistent >
2266 ,cc::split_list::ordered_list_traits<
2267 typename cc::lazy_list::make_traits<
2268 co::compare< compare >
2269 ,co::memory_model< co::v::sequential_consistent >
2273 > SplitList_Lazy_HP_st_cmp_seqcst;
2277 typedef cc::SplitListSet< cds::gc::HP, key_val,
2278 typename cc::split_list::make_traits<
2279 cc::split_list::ordered_list<cc::lazy_list_tag>
2281 ,cc::split_list::ordered_list_traits<
2282 typename cc::lazy_list::make_traits<
2287 > SplitList_Lazy_HP_dyn_less;
2289 typedef cc::SplitListSet< cds::gc::HP, key_val,
2290 typename cc::split_list::make_traits<
2291 cc::split_list::ordered_list<cc::lazy_list_tag>
2293 ,co::memory_model< co::v::sequential_consistent >
2294 ,cc::split_list::ordered_list_traits<
2295 typename cc::lazy_list::make_traits<
2297 ,co::memory_model< co::v::sequential_consistent >
2301 > SplitList_Lazy_HP_dyn_less_seqcst;
2303 typedef cc::SplitListSet< cds::gc::HP, key_val,
2304 typename cc::split_list::make_traits<
2305 cc::split_list::ordered_list<cc::lazy_list_tag>
2306 ,cc::split_list::dynamic_bucket_table< false >
2308 ,cc::split_list::ordered_list_traits<
2309 typename cc::lazy_list::make_traits<
2314 > SplitList_Lazy_HP_st_less;
2316 typedef cc::SplitListSet< cds::gc::HP, key_val,
2317 typename cc::split_list::make_traits<
2318 cc::split_list::ordered_list<cc::lazy_list_tag>
2320 ,cc::split_list::dynamic_bucket_table< false >
2321 ,co::memory_model< co::v::sequential_consistent >
2322 ,cc::split_list::ordered_list_traits<
2323 typename cc::lazy_list::make_traits<
2325 ,co::memory_model< co::v::sequential_consistent >
2329 > SplitList_Lazy_HP_st_less_seqcst;
2332 typedef cc::SplitListSet< cds::gc::PTB, key_val,
2333 typename cc::split_list::make_traits<
2334 cc::split_list::ordered_list<cc::lazy_list_tag>
2336 ,cc::split_list::ordered_list_traits<
2337 typename cc::lazy_list::make_traits<
2338 co::compare< compare >
2342 > SplitList_Lazy_PTB_dyn_cmp;
2344 typedef cc::SplitListSet< cds::gc::PTB, key_val,
2345 typename cc::split_list::make_traits<
2346 cc::split_list::ordered_list<cc::lazy_list_tag>
2348 ,co::memory_model< co::v::sequential_consistent >
2349 ,cc::split_list::ordered_list_traits<
2350 typename cc::lazy_list::make_traits<
2351 co::compare< compare >
2352 ,co::memory_model< co::v::sequential_consistent >
2356 > SplitList_Lazy_PTB_dyn_cmp_seqcst;
2358 typedef cc::SplitListSet< cds::gc::PTB, key_val,
2359 typename cc::split_list::make_traits<
2360 cc::split_list::ordered_list<cc::lazy_list_tag>
2361 ,cc::split_list::dynamic_bucket_table< false >
2363 ,cc::split_list::ordered_list_traits<
2364 typename cc::lazy_list::make_traits<
2365 co::compare< compare >
2369 > SplitList_Lazy_PTB_st_cmp;
2371 typedef cc::SplitListSet< cds::gc::PTB, key_val,
2372 typename cc::split_list::make_traits<
2373 cc::split_list::ordered_list<cc::lazy_list_tag>
2375 ,cc::split_list::dynamic_bucket_table< false >
2376 ,co::memory_model< co::v::sequential_consistent >
2377 ,cc::split_list::ordered_list_traits<
2378 typename cc::lazy_list::make_traits<
2379 co::compare< compare >
2380 ,co::memory_model< co::v::sequential_consistent >
2384 > SplitList_Lazy_PTB_st_cmp_seqcst;
2387 typedef cc::SplitListSet< cds::gc::PTB, key_val,
2388 typename cc::split_list::make_traits<
2389 cc::split_list::ordered_list<cc::lazy_list_tag>
2391 ,cc::split_list::ordered_list_traits<
2392 typename cc::lazy_list::make_traits<
2397 > SplitList_Lazy_PTB_dyn_less;
2399 typedef cc::SplitListSet< cds::gc::PTB, key_val,
2400 typename cc::split_list::make_traits<
2401 cc::split_list::ordered_list<cc::lazy_list_tag>
2403 ,co::memory_model< co::v::sequential_consistent >
2404 ,cc::split_list::ordered_list_traits<
2405 typename cc::lazy_list::make_traits<
2407 ,co::memory_model< co::v::sequential_consistent >
2411 > SplitList_Lazy_PTB_dyn_less_seqcst;
2413 typedef cc::SplitListSet< cds::gc::PTB, key_val,
2414 typename cc::split_list::make_traits<
2415 cc::split_list::ordered_list<cc::lazy_list_tag>
2416 ,cc::split_list::dynamic_bucket_table< false >
2418 ,cc::split_list::ordered_list_traits<
2419 typename cc::lazy_list::make_traits<
2424 > SplitList_Lazy_PTB_st_less;
2426 typedef cc::SplitListSet< cds::gc::PTB, key_val,
2427 typename cc::split_list::make_traits<
2428 cc::split_list::ordered_list<cc::lazy_list_tag>
2430 ,cc::split_list::dynamic_bucket_table< false >
2431 ,co::memory_model< co::v::sequential_consistent >
2432 ,cc::split_list::ordered_list_traits<
2433 typename cc::lazy_list::make_traits<
2435 ,co::memory_model< co::v::sequential_consistent >
2439 > SplitList_Lazy_PTB_st_less_seqcst;
2443 typedef cc::SplitListSet< rcu_gpi, key_val,
2444 typename cc::split_list::make_traits<
2445 cc::split_list::ordered_list<cc::lazy_list_tag>
2447 ,cc::split_list::ordered_list_traits<
2448 typename cc::lazy_list::make_traits<
2449 co::compare< compare >
2453 > SplitList_Lazy_RCU_GPI_dyn_cmp;
2455 typedef cc::SplitListSet< rcu_gpi, key_val,
2456 typename cc::split_list::make_traits<
2457 cc::split_list::ordered_list<cc::lazy_list_tag>
2459 ,co::memory_model< co::v::sequential_consistent >
2460 ,cc::split_list::ordered_list_traits<
2461 typename cc::lazy_list::make_traits<
2462 co::compare< compare >
2463 ,co::memory_model< co::v::sequential_consistent >
2467 > SplitList_Lazy_RCU_GPI_dyn_cmp_seqcst;
2469 typedef cc::SplitListSet< rcu_gpi, key_val,
2470 typename cc::split_list::make_traits<
2471 cc::split_list::ordered_list<cc::lazy_list_tag>
2472 ,cc::split_list::dynamic_bucket_table< false >
2474 ,cc::split_list::ordered_list_traits<
2475 typename cc::lazy_list::make_traits<
2476 co::compare< compare >
2480 > SplitList_Lazy_RCU_GPI_st_cmp;
2482 typedef cc::SplitListSet< rcu_gpi, key_val,
2483 typename cc::split_list::make_traits<
2484 cc::split_list::ordered_list<cc::lazy_list_tag>
2486 ,cc::split_list::dynamic_bucket_table< false >
2487 ,co::memory_model< co::v::sequential_consistent >
2488 ,cc::split_list::ordered_list_traits<
2489 typename cc::lazy_list::make_traits<
2490 co::compare< compare >
2491 ,co::memory_model< co::v::sequential_consistent >
2495 > SplitList_Lazy_RCU_GPI_st_cmp_seqcst;
2498 typedef cc::SplitListSet< rcu_gpi, key_val,
2499 typename cc::split_list::make_traits<
2500 cc::split_list::ordered_list<cc::lazy_list_tag>
2502 ,cc::split_list::ordered_list_traits<
2503 typename cc::lazy_list::make_traits<
2508 > SplitList_Lazy_RCU_GPI_dyn_less;
2510 typedef cc::SplitListSet< rcu_gpi, key_val,
2511 typename cc::split_list::make_traits<
2512 cc::split_list::ordered_list<cc::lazy_list_tag>
2514 ,co::memory_model< co::v::sequential_consistent >
2515 ,cc::split_list::ordered_list_traits<
2516 typename cc::lazy_list::make_traits<
2518 ,co::memory_model< co::v::sequential_consistent >
2522 > SplitList_Lazy_RCU_GPI_dyn_less_seqcst;
2524 typedef cc::SplitListSet< rcu_gpi, key_val,
2525 typename cc::split_list::make_traits<
2526 cc::split_list::ordered_list<cc::lazy_list_tag>
2527 ,cc::split_list::dynamic_bucket_table< false >
2529 ,cc::split_list::ordered_list_traits<
2530 typename cc::lazy_list::make_traits<
2535 > SplitList_Lazy_RCU_GPI_st_less;
2537 typedef cc::SplitListSet< rcu_gpi, key_val,
2538 typename cc::split_list::make_traits<
2539 cc::split_list::ordered_list<cc::lazy_list_tag>
2541 ,cc::split_list::dynamic_bucket_table< false >
2542 ,co::memory_model< co::v::sequential_consistent >
2543 ,cc::split_list::ordered_list_traits<
2544 typename cc::lazy_list::make_traits<
2546 ,co::memory_model< co::v::sequential_consistent >
2550 > SplitList_Lazy_RCU_GPI_st_less_seqcst;
2553 typedef cc::SplitListSet< rcu_gpb, key_val,
2554 typename cc::split_list::make_traits<
2555 cc::split_list::ordered_list<cc::lazy_list_tag>
2557 ,cc::split_list::ordered_list_traits<
2558 typename cc::lazy_list::make_traits<
2559 co::compare< compare >
2563 > SplitList_Lazy_RCU_GPB_dyn_cmp;
2565 typedef cc::SplitListSet< rcu_gpb, key_val,
2566 typename cc::split_list::make_traits<
2567 cc::split_list::ordered_list<cc::lazy_list_tag>
2569 ,co::memory_model< co::v::sequential_consistent >
2570 ,cc::split_list::ordered_list_traits<
2571 typename cc::lazy_list::make_traits<
2572 co::compare< compare >
2573 ,co::memory_model< co::v::sequential_consistent >
2577 > SplitList_Lazy_RCU_GPB_dyn_cmp_seqcst;
2579 typedef cc::SplitListSet< rcu_gpb, key_val,
2580 typename cc::split_list::make_traits<
2581 cc::split_list::ordered_list<cc::lazy_list_tag>
2582 ,cc::split_list::dynamic_bucket_table< false >
2584 ,cc::split_list::ordered_list_traits<
2585 typename cc::lazy_list::make_traits<
2586 co::compare< compare >
2590 > SplitList_Lazy_RCU_GPB_st_cmp;
2592 typedef cc::SplitListSet< rcu_gpb, key_val,
2593 typename cc::split_list::make_traits<
2594 cc::split_list::ordered_list<cc::lazy_list_tag>
2596 ,cc::split_list::dynamic_bucket_table< false >
2597 ,co::memory_model< co::v::sequential_consistent >
2598 ,cc::split_list::ordered_list_traits<
2599 typename cc::lazy_list::make_traits<
2600 co::compare< compare >
2601 ,co::memory_model< co::v::sequential_consistent >
2605 > SplitList_Lazy_RCU_GPB_st_cmp_seqcst;
2608 typedef cc::SplitListSet< rcu_gpb, key_val,
2609 typename cc::split_list::make_traits<
2610 cc::split_list::ordered_list<cc::lazy_list_tag>
2612 ,cc::split_list::ordered_list_traits<
2613 typename cc::lazy_list::make_traits<
2618 > SplitList_Lazy_RCU_GPB_dyn_less;
2620 typedef cc::SplitListSet< rcu_gpb, key_val,
2621 typename cc::split_list::make_traits<
2622 cc::split_list::ordered_list<cc::lazy_list_tag>
2624 ,co::memory_model< co::v::sequential_consistent >
2625 ,cc::split_list::ordered_list_traits<
2626 typename cc::lazy_list::make_traits<
2628 ,co::memory_model< co::v::sequential_consistent >
2632 > SplitList_Lazy_RCU_GPB_dyn_less_seqcst;
2634 typedef cc::SplitListSet< rcu_gpb, key_val,
2635 typename cc::split_list::make_traits<
2636 cc::split_list::ordered_list<cc::lazy_list_tag>
2637 ,cc::split_list::dynamic_bucket_table< false >
2639 ,cc::split_list::ordered_list_traits<
2640 typename cc::lazy_list::make_traits<
2645 > SplitList_Lazy_RCU_GPB_st_less;
2647 typedef cc::SplitListSet< rcu_gpb, key_val,
2648 typename cc::split_list::make_traits<
2649 cc::split_list::ordered_list<cc::lazy_list_tag>
2651 ,cc::split_list::dynamic_bucket_table< false >
2652 ,co::memory_model< co::v::sequential_consistent >
2653 ,cc::split_list::ordered_list_traits<
2654 typename cc::lazy_list::make_traits<
2656 ,co::memory_model< co::v::sequential_consistent >
2660 > SplitList_Lazy_RCU_GPB_st_less_seqcst;
2663 typedef cc::SplitListSet< rcu_gpt, key_val,
2664 typename cc::split_list::make_traits<
2665 cc::split_list::ordered_list<cc::lazy_list_tag>
2667 ,cc::split_list::ordered_list_traits<
2668 typename cc::lazy_list::make_traits<
2669 co::compare< compare >
2673 > SplitList_Lazy_RCU_GPT_dyn_cmp;
2675 typedef cc::SplitListSet< rcu_gpt, key_val,
2676 typename cc::split_list::make_traits<
2677 cc::split_list::ordered_list<cc::lazy_list_tag>
2679 ,co::memory_model< co::v::sequential_consistent >
2680 ,cc::split_list::ordered_list_traits<
2681 typename cc::lazy_list::make_traits<
2682 co::compare< compare >
2683 ,co::memory_model< co::v::sequential_consistent >
2687 > SplitList_Lazy_RCU_GPT_dyn_cmp_seqcst;
2689 typedef cc::SplitListSet< rcu_gpt, key_val,
2690 typename cc::split_list::make_traits<
2691 cc::split_list::ordered_list<cc::lazy_list_tag>
2692 ,cc::split_list::dynamic_bucket_table< false >
2694 ,cc::split_list::ordered_list_traits<
2695 typename cc::lazy_list::make_traits<
2696 co::compare< compare >
2700 > SplitList_Lazy_RCU_GPT_st_cmp;
2702 typedef cc::SplitListSet< rcu_gpt, key_val,
2703 typename cc::split_list::make_traits<
2704 cc::split_list::ordered_list<cc::lazy_list_tag>
2706 ,cc::split_list::dynamic_bucket_table< false >
2707 ,co::memory_model< co::v::sequential_consistent >
2708 ,cc::split_list::ordered_list_traits<
2709 typename cc::lazy_list::make_traits<
2710 co::compare< compare >
2711 ,co::memory_model< co::v::sequential_consistent >
2715 > SplitList_Lazy_RCU_GPT_st_cmp_seqcst;
2718 typedef cc::SplitListSet< rcu_gpt, key_val,
2719 typename cc::split_list::make_traits<
2720 cc::split_list::ordered_list<cc::lazy_list_tag>
2722 ,cc::split_list::ordered_list_traits<
2723 typename cc::lazy_list::make_traits<
2728 > SplitList_Lazy_RCU_GPT_dyn_less;
2730 typedef cc::SplitListSet< rcu_gpt, key_val,
2731 typename cc::split_list::make_traits<
2732 cc::split_list::ordered_list<cc::lazy_list_tag>
2734 ,co::memory_model< co::v::sequential_consistent >
2735 ,cc::split_list::ordered_list_traits<
2736 typename cc::lazy_list::make_traits<
2738 ,co::memory_model< co::v::sequential_consistent >
2742 > SplitList_Lazy_RCU_GPT_dyn_less_seqcst;
2744 typedef cc::SplitListSet< rcu_gpt, key_val,
2745 typename cc::split_list::make_traits<
2746 cc::split_list::ordered_list<cc::lazy_list_tag>
2747 ,cc::split_list::dynamic_bucket_table< false >
2749 ,cc::split_list::ordered_list_traits<
2750 typename cc::lazy_list::make_traits<
2755 > SplitList_Lazy_RCU_GPT_st_less;
2757 typedef cc::SplitListSet< rcu_gpt, key_val,
2758 typename cc::split_list::make_traits<
2759 cc::split_list::ordered_list<cc::lazy_list_tag>
2761 ,cc::split_list::dynamic_bucket_table< false >
2762 ,co::memory_model< co::v::sequential_consistent >
2763 ,cc::split_list::ordered_list_traits<
2764 typename cc::lazy_list::make_traits<
2766 ,co::memory_model< co::v::sequential_consistent >
2770 > SplitList_Lazy_RCU_GPT_st_less_seqcst;
2772 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
2773 typedef cc::SplitListSet< rcu_shb, key_val,
2774 typename cc::split_list::make_traits<
2775 cc::split_list::ordered_list<cc::lazy_list_tag>
2777 ,cc::split_list::ordered_list_traits<
2778 typename cc::lazy_list::make_traits<
2779 co::compare< compare >
2783 > SplitList_Lazy_RCU_SHB_dyn_cmp;
2785 typedef cc::SplitListSet< rcu_shb, key_val,
2786 typename cc::split_list::make_traits<
2787 cc::split_list::ordered_list<cc::lazy_list_tag>
2789 ,co::memory_model< co::v::sequential_consistent >
2790 ,cc::split_list::ordered_list_traits<
2791 typename cc::lazy_list::make_traits<
2792 co::compare< compare >
2793 ,co::memory_model< co::v::sequential_consistent >
2797 > SplitList_Lazy_RCU_SHB_dyn_cmp_seqcst;
2799 typedef cc::SplitListSet< rcu_shb, key_val,
2800 typename cc::split_list::make_traits<
2801 cc::split_list::ordered_list<cc::lazy_list_tag>
2802 ,cc::split_list::dynamic_bucket_table< false >
2804 ,cc::split_list::ordered_list_traits<
2805 typename cc::lazy_list::make_traits<
2806 co::compare< compare >
2810 > SplitList_Lazy_RCU_SHB_st_cmp;
2812 typedef cc::SplitListSet< rcu_shb, key_val,
2813 typename cc::split_list::make_traits<
2814 cc::split_list::ordered_list<cc::lazy_list_tag>
2816 ,cc::split_list::dynamic_bucket_table< false >
2817 ,co::memory_model< co::v::sequential_consistent >
2818 ,cc::split_list::ordered_list_traits<
2819 typename cc::lazy_list::make_traits<
2820 co::compare< compare >
2821 ,co::memory_model< co::v::sequential_consistent >
2825 > SplitList_Lazy_RCU_SHB_st_cmp_seqcst;
2828 typedef cc::SplitListSet< rcu_shb, key_val,
2829 typename cc::split_list::make_traits<
2830 cc::split_list::ordered_list<cc::lazy_list_tag>
2832 ,cc::split_list::ordered_list_traits<
2833 typename cc::lazy_list::make_traits<
2838 > SplitList_Lazy_RCU_SHB_dyn_less;
2840 typedef cc::SplitListSet< rcu_shb, key_val,
2841 typename cc::split_list::make_traits<
2842 cc::split_list::ordered_list<cc::lazy_list_tag>
2844 ,co::memory_model< co::v::sequential_consistent >
2845 ,cc::split_list::ordered_list_traits<
2846 typename cc::lazy_list::make_traits<
2848 ,co::memory_model< co::v::sequential_consistent >
2852 > SplitList_Lazy_RCU_SHB_dyn_less_seqcst;
2854 typedef cc::SplitListSet< rcu_shb, key_val,
2855 typename cc::split_list::make_traits<
2856 cc::split_list::ordered_list<cc::lazy_list_tag>
2857 ,cc::split_list::dynamic_bucket_table< false >
2859 ,cc::split_list::ordered_list_traits<
2860 typename cc::lazy_list::make_traits<
2865 > SplitList_Lazy_RCU_SHB_st_less;
2867 typedef cc::SplitListSet< rcu_shb, key_val,
2868 typename cc::split_list::make_traits<
2869 cc::split_list::ordered_list<cc::lazy_list_tag>
2871 ,cc::split_list::dynamic_bucket_table< false >
2872 ,co::memory_model< co::v::sequential_consistent >
2873 ,cc::split_list::ordered_list_traits<
2874 typename cc::lazy_list::make_traits<
2876 ,co::memory_model< co::v::sequential_consistent >
2880 > SplitList_Lazy_RCU_SHB_st_less_seqcst;
2883 typedef cc::SplitListSet< rcu_sht, key_val,
2884 typename cc::split_list::make_traits<
2885 cc::split_list::ordered_list<cc::lazy_list_tag>
2887 ,cc::split_list::ordered_list_traits<
2888 typename cc::lazy_list::make_traits<
2889 co::compare< compare >
2893 > SplitList_Lazy_RCU_SHT_dyn_cmp;
2895 typedef cc::SplitListSet< rcu_sht, key_val,
2896 typename cc::split_list::make_traits<
2897 cc::split_list::ordered_list<cc::lazy_list_tag>
2899 ,co::memory_model< co::v::sequential_consistent >
2900 ,cc::split_list::ordered_list_traits<
2901 typename cc::lazy_list::make_traits<
2902 co::compare< compare >
2903 ,co::memory_model< co::v::sequential_consistent >
2907 > SplitList_Lazy_RCU_SHT_dyn_cmp_seqcst;
2909 typedef cc::SplitListSet< rcu_sht, key_val,
2910 typename cc::split_list::make_traits<
2911 cc::split_list::ordered_list<cc::lazy_list_tag>
2912 ,cc::split_list::dynamic_bucket_table< false >
2914 ,cc::split_list::ordered_list_traits<
2915 typename cc::lazy_list::make_traits<
2916 co::compare< compare >
2920 > SplitList_Lazy_RCU_SHT_st_cmp;
2922 typedef cc::SplitListSet< rcu_sht, key_val,
2923 typename cc::split_list::make_traits<
2924 cc::split_list::ordered_list<cc::lazy_list_tag>
2926 ,cc::split_list::dynamic_bucket_table< false >
2927 ,co::memory_model< co::v::sequential_consistent >
2928 ,cc::split_list::ordered_list_traits<
2929 typename cc::lazy_list::make_traits<
2930 co::compare< compare >
2931 ,co::memory_model< co::v::sequential_consistent >
2935 > SplitList_Lazy_RCU_SHT_st_cmp_seqcst;
2938 typedef cc::SplitListSet< rcu_sht, key_val,
2939 typename cc::split_list::make_traits<
2940 cc::split_list::ordered_list<cc::lazy_list_tag>
2942 ,cc::split_list::ordered_list_traits<
2943 typename cc::lazy_list::make_traits<
2948 > SplitList_Lazy_RCU_SHT_dyn_less;
2950 typedef cc::SplitListSet< rcu_sht, key_val,
2951 typename cc::split_list::make_traits<
2952 cc::split_list::ordered_list<cc::lazy_list_tag>
2954 ,co::memory_model< co::v::sequential_consistent >
2955 ,cc::split_list::ordered_list_traits<
2956 typename cc::lazy_list::make_traits<
2958 ,co::memory_model< co::v::sequential_consistent >
2962 > SplitList_Lazy_RCU_SHT_dyn_less_seqcst;
2964 typedef cc::SplitListSet< rcu_sht, key_val,
2965 typename cc::split_list::make_traits<
2966 cc::split_list::ordered_list<cc::lazy_list_tag>
2967 ,cc::split_list::dynamic_bucket_table< false >
2969 ,cc::split_list::ordered_list_traits<
2970 typename cc::lazy_list::make_traits<
2975 > SplitList_Lazy_RCU_SHT_st_less;
2977 typedef cc::SplitListSet< rcu_sht, key_val,
2978 typename cc::split_list::make_traits<
2979 cc::split_list::ordered_list<cc::lazy_list_tag>
2981 ,cc::split_list::dynamic_bucket_table< false >
2982 ,co::memory_model< co::v::sequential_consistent >
2983 ,cc::split_list::ordered_list_traits<
2984 typename cc::lazy_list::make_traits<
2986 ,co::memory_model< co::v::sequential_consistent >
2990 > SplitList_Lazy_RCU_SHT_st_less_seqcst;
2993 // ***************************************************************************
2996 // for sequential containers
2997 template <class BucketEntry, typename... Options>
2998 class StripedHashSet_seq:
2999 public cc::StripedSet< BucketEntry,
3000 co::mutex_policy< cc::striped_set::striping<> >
3001 ,co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
3005 typedef cc::StripedSet< BucketEntry,
3006 co::mutex_policy< cc::striped_set::striping<> >
3007 ,co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
3010 typedef typename base_class::resizing_policy resizing_policy_t;
3012 resizing_policy_t m_placeHolder;
3014 StripedHashSet_seq( size_t nCapacity, size_t nLoadFactor )
3015 : base_class( nCapacity / nLoadFactor / 16, *(new(&m_placeHolder) resizing_policy_t( nLoadFactor )) )
3018 template <typename Q, typename Less>
3019 bool erase_with( Q const& v, Less pred )
3021 return base_class::erase( v );
3025 // for non-sequential ordered containers
3026 template <class BucketEntry, typename... Options>
3027 class StripedHashSet_ord:
3028 public cc::StripedSet< BucketEntry,
3029 co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
3030 ,co::mutex_policy< cc::striped_set::striping<> >
3034 typedef cc::StripedSet< BucketEntry,
3035 co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
3036 ,co::mutex_policy< cc::striped_set::striping<> >
3039 typedef typename base_class::resizing_policy resizing_policy_t;
3041 resizing_policy_t m_placeHolder;
3043 StripedHashSet_ord( size_t nCapacity, size_t nLoadFactor )
3044 : base_class( 0, *(new(&m_placeHolder) resizing_policy_t( nLoadFactor * 1024 )) )
3047 template <typename Q, typename Less>
3048 bool erase_with( Q const& v, Less pred )
3050 return base_class::erase( v );
3054 typedef StripedHashSet_seq<
3055 std::list< key_val >
3060 typedef StripedHashSet_seq<
3061 std::vector< key_val >
3064 > StripedSet_vector;
3066 #if BOOST_VERSION >= 104800
3067 typedef StripedHashSet_seq<
3068 boost::container::slist< key_val >
3071 > StripedSet_boost_slist;
3073 typedef StripedHashSet_seq<
3074 boost::container::list< key_val >
3077 > StripedSet_boost_list;
3079 typedef StripedHashSet_seq<
3080 boost::container::vector< key_val >
3083 > StripedSet_boost_vector;
3085 typedef StripedHashSet_seq<
3086 boost::container::stable_vector< key_val >
3089 > StripedSet_boost_stable_vector;
3092 typedef StripedHashSet_ord<
3093 std::set< key_val, less >
3097 #if (CDS_COMPILER == CDS_COMPILER_MSVC || (CDS_COMPILER == CDS_COMPILER_INTEL && CDS_OS_INTERFACE == CDS_OSI_WINDOWS)) && _MSC_VER < 1600
3098 typedef StripedHashSet_ord<
3099 stdext::hash_set< key_val, hash_less >
3101 > StripedSet_hashset;
3103 typedef StripedHashSet_ord<
3104 std::unordered_set< key_val, hash, equal_to >
3106 > StripedSet_hashset;
3109 #if BOOST_VERSION >= 104800
3110 typedef StripedHashSet_ord<
3111 boost::container::set< key_val, less >
3113 > StripedSet_boost_set;
3115 typedef StripedHashSet_ord<
3116 boost::container::flat_set< key_val, less >
3118 > StripedSet_boost_flat_set;
3121 typedef StripedHashSet_ord<
3122 boost::unordered_set< key_val, hash, equal_to >
3124 > StripedSet_boost_unordered_set;
3128 // ***************************************************************************
3131 // for sequential containers
3132 template <class BucketEntry, typename... Options>
3133 class RefinableHashSet_seq:
3134 public cc::StripedSet< BucketEntry,
3135 co::mutex_policy< cc::striped_set::refinable<> >
3136 ,co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
3140 typedef cc::StripedSet< BucketEntry,
3141 co::mutex_policy< cc::striped_set::refinable<> >
3142 ,co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
3145 typedef typename base_class::resizing_policy resizing_policy_t;
3147 resizing_policy_t m_placeHolder;
3149 RefinableHashSet_seq( size_t nCapacity, size_t nLoadFactor )
3150 : base_class( nCapacity / nLoadFactor / 16, *(new(&m_placeHolder) resizing_policy_t( nLoadFactor )) )
3153 template <typename Q, typename Less>
3154 bool erase_with( Q const& v, Less pred )
3156 return base_class::erase( v );
3160 // for non-sequential ordered containers
3161 template <class BucketEntry, typename... Options>
3162 class RefinableHashSet_ord:
3163 public cc::StripedSet< BucketEntry,
3164 co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
3165 ,co::mutex_policy< cc::striped_set::refinable<> >
3169 typedef cc::StripedSet< BucketEntry,
3170 co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
3171 ,co::mutex_policy< cc::striped_set::refinable<> >
3174 typedef typename base_class::resizing_policy resizing_policy_t;
3176 resizing_policy_t m_placeHolder;
3178 RefinableHashSet_ord( size_t nCapacity, size_t nLoadFactor )
3179 : base_class( 0, *(new(&m_placeHolder) resizing_policy_t( nLoadFactor * 1024 )) )
3182 template <typename Q, typename Less>
3183 bool erase_with( Q const& v, Less pred )
3185 return base_class::erase( v );
3189 typedef RefinableHashSet_seq<
3190 std::list< key_val >
3193 > RefinableSet_list;
3195 typedef RefinableHashSet_seq<
3196 std::vector< key_val >
3199 > RefinableSet_vector;
3201 #if BOOST_VERSION >= 104800
3202 typedef RefinableHashSet_seq<
3203 boost::container::slist< key_val >
3206 > RefinableSet_boost_slist;
3208 typedef RefinableHashSet_seq<
3209 boost::container::list< key_val >
3212 > RefinableSet_boost_list;
3214 typedef RefinableHashSet_seq<
3215 boost::container::vector< key_val >
3218 > RefinableSet_boost_vector;
3220 typedef RefinableHashSet_seq<
3221 boost::container::stable_vector< key_val >
3224 > RefinableSet_boost_stable_vector;
3227 typedef RefinableHashSet_ord<
3228 std::set< key_val, less >
3232 #if (CDS_COMPILER == CDS_COMPILER_MSVC || (CDS_COMPILER == CDS_COMPILER_INTEL && CDS_OS_INTERFACE == CDS_OSI_WINDOWS)) && _MSC_VER < 1600
3233 typedef RefinableHashSet_ord<
3234 stdext::hash_set< key_val, hash_less >
3236 > RefinableSet_hashset;
3238 typedef RefinableHashSet_ord<
3239 std::unordered_set< key_val, hash, equal_to >
3241 > RefinableSet_hashset;
3244 #if BOOST_VERSION >= 104800
3245 typedef RefinableHashSet_ord<
3246 boost::container::set< key_val, less >
3248 > RefinableSet_boost_set;
3250 typedef RefinableHashSet_ord<
3251 boost::container::flat_set< key_val, less >
3253 > RefinableSet_boost_flat_set;
3256 typedef RefinableHashSet_ord<
3257 boost::unordered_set< key_val, hash, equal_to >
3259 > RefinableSet_boost_unordered_set;
3263 // ***************************************************************************
3266 typedef CuckooStripedSet< key_val,
3267 cc::cuckoo::probeset_type< cc::cuckoo::list >
3268 ,co::equal_to< equal_to >
3269 ,co::hash< std::tuple< hash, hash2 > >
3270 > CuckooStripedSet_list_unord;
3272 typedef CuckooStripedSet< key_val,
3273 cc::cuckoo::probeset_type< cc::cuckoo::list >
3274 ,co::equal_to< equal_to >
3275 ,co::hash< std::tuple< hash, hash2 > >
3276 ,co::stat< cc::cuckoo::stat >
3277 > CuckooStripedSet_list_unord_stat;
3279 typedef CuckooStripedSet< key_val,
3280 cc::cuckoo::probeset_type< cc::cuckoo::list >
3281 ,co::equal_to< equal_to >
3282 ,co::hash< std::tuple< hash, hash2 > >
3283 ,cc::cuckoo::store_hash< true >
3284 > CuckooStripedSet_list_unord_storehash;
3286 typedef CuckooStripedSet< key_val,
3287 cc::cuckoo::probeset_type< cc::cuckoo::list >
3288 ,co::compare< compare >
3289 ,co::hash< std::tuple< hash, hash2 > >
3290 > CuckooStripedSet_list_ord;
3292 typedef CuckooStripedSet< key_val,
3293 cc::cuckoo::probeset_type< cc::cuckoo::list >
3294 ,co::compare< compare >
3295 ,co::hash< std::tuple< hash, hash2 > >
3296 ,co::stat< cc::cuckoo::stat >
3297 > CuckooStripedSet_list_ord_stat;
3299 typedef CuckooStripedSet< key_val,
3300 cc::cuckoo::probeset_type< cc::cuckoo::list >
3301 ,co::compare< compare >
3302 ,co::hash< std::tuple< hash, hash2 > >
3303 ,cc::cuckoo::store_hash< true >
3304 > CuckooStripedSet_list_ord_storehash;
3306 typedef CuckooStripedSet< key_val,
3307 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
3308 ,co::equal_to< equal_to >
3309 ,co::hash< std::tuple< hash, hash2 > >
3310 > CuckooStripedSet_vector_unord;
3312 typedef CuckooStripedSet< key_val,
3313 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
3314 ,co::equal_to< equal_to >
3315 ,co::hash< std::tuple< hash, hash2 > >
3316 ,co::stat< cc::cuckoo::stat >
3317 > CuckooStripedSet_vector_unord_stat;
3319 typedef CuckooStripedSet< key_val,
3320 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
3321 ,co::equal_to< equal_to >
3322 ,co::hash< std::tuple< hash, hash2 > >
3323 ,cc::cuckoo::store_hash< true >
3324 > CuckooStripedSet_vector_unord_storehash;
3326 typedef CuckooStripedSet< key_val,
3327 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
3328 ,co::compare< compare >
3329 ,co::hash< std::tuple< hash, hash2 > >
3330 > CuckooStripedSet_vector_ord;
3332 typedef CuckooStripedSet< key_val,
3333 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
3334 ,co::compare< compare >
3335 ,co::hash< std::tuple< hash, hash2 > >
3336 ,co::stat< cc::cuckoo::stat >
3337 > CuckooStripedSet_vector_ord_stat;
3339 typedef CuckooStripedSet< key_val,
3340 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
3341 ,co::compare< compare >
3342 ,co::hash< std::tuple< hash, hash2 > >
3343 ,cc::cuckoo::store_hash< true >
3344 > CuckooStripedSet_vector_ord_storehash;
3346 typedef CuckooRefinableSet< key_val,
3347 cc::cuckoo::probeset_type< cc::cuckoo::list >
3348 ,co::equal_to< equal_to >
3349 ,co::hash< std::tuple< hash, hash2 > >
3350 > CuckooRefinableSet_list_unord;
3352 typedef CuckooRefinableSet< key_val,
3353 cc::cuckoo::probeset_type< cc::cuckoo::list >
3354 ,co::equal_to< equal_to >
3355 ,co::hash< std::tuple< hash, hash2 > >
3356 ,co::stat< cc::cuckoo::stat >
3357 > CuckooRefinableSet_list_unord_stat;
3359 typedef CuckooRefinableSet< key_val,
3360 cc::cuckoo::probeset_type< cc::cuckoo::list >
3361 ,co::equal_to< equal_to >
3362 ,co::hash< std::tuple< hash, hash2 > >
3363 ,cc::cuckoo::store_hash< true >
3364 > CuckooRefinableSet_list_unord_storehash;
3366 typedef CuckooRefinableSet< key_val,
3367 cc::cuckoo::probeset_type< cc::cuckoo::list >
3368 ,co::compare< compare >
3369 ,co::hash< std::tuple< hash, hash2 > >
3370 > CuckooRefinableSet_list_ord;
3372 typedef CuckooRefinableSet< key_val,
3373 cc::cuckoo::probeset_type< cc::cuckoo::list >
3374 ,co::compare< compare >
3375 ,co::hash< std::tuple< hash, hash2 > >
3376 ,co::stat< cc::cuckoo::stat >
3377 > CuckooRefinableSet_list_ord_stat;
3379 typedef CuckooRefinableSet< key_val,
3380 cc::cuckoo::probeset_type< cc::cuckoo::list >
3381 ,co::compare< compare >
3382 ,co::hash< std::tuple< hash, hash2 > >
3383 ,cc::cuckoo::store_hash< true >
3384 > CuckooRefinableSet_list_ord_storehash;
3386 typedef CuckooRefinableSet< key_val,
3387 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
3388 ,co::equal_to< equal_to >
3389 ,co::hash< std::tuple< hash, hash2 > >
3390 > CuckooRefinableSet_vector_unord;
3392 typedef CuckooRefinableSet< key_val,
3393 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
3394 ,co::equal_to< equal_to >
3395 ,co::hash< std::tuple< hash, hash2 > >
3396 ,co::stat< cc::cuckoo::stat >
3397 > CuckooRefinableSet_vector_unord_stat;
3399 typedef CuckooRefinableSet< key_val,
3400 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
3401 ,co::equal_to< equal_to >
3402 ,co::hash< std::tuple< hash, hash2 > >
3403 ,cc::cuckoo::store_hash< true >
3404 > CuckooRefinableSet_vector_unord_storehash;
3406 typedef CuckooRefinableSet< key_val,
3407 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
3408 ,co::compare< compare >
3409 ,co::hash< std::tuple< hash, hash2 > >
3410 > CuckooRefinableSet_vector_ord;
3412 typedef CuckooRefinableSet< key_val,
3413 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
3414 ,co::compare< compare >
3415 ,co::hash< std::tuple< hash, hash2 > >
3416 ,co::stat< cc::cuckoo::stat >
3417 > CuckooRefinableSet_vector_ord_stat;
3419 typedef CuckooRefinableSet< key_val,
3420 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
3421 ,co::compare< compare >
3422 ,co::hash< std::tuple< hash, hash2 > >
3423 ,cc::cuckoo::store_hash< true >
3424 > CuckooRefinableSet_vector_ord_storehash;
3427 // ***************************************************************************
3430 class traits_SkipListSet_hp_less_pascal: public cc::skip_list::make_traits <
3432 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3433 ,co::item_counter< cds::atomicity::item_counter >
3436 typedef cc::SkipListSet< cds::gc::HP, key_val, traits_SkipListSet_hp_less_pascal > SkipListSet_hp_less_pascal;
3438 class traits_SkipListSet_hp_less_pascal_seqcst: public cc::skip_list::make_traits <
3440 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3441 ,co::memory_model< co::v::sequential_consistent >
3442 ,co::item_counter< cds::atomicity::item_counter >
3445 typedef cc::SkipListSet< cds::gc::HP, key_val, traits_SkipListSet_hp_less_pascal_seqcst > SkipListSet_hp_less_pascal_seqcst;
3447 class traits_SkipListSet_hp_less_pascal_stat: public cc::skip_list::make_traits <
3449 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3450 ,co::stat< cc::skip_list::stat<> >
3451 ,co::item_counter< cds::atomicity::item_counter >
3454 typedef cc::SkipListSet< cds::gc::HP, key_val, traits_SkipListSet_hp_less_pascal_stat > SkipListSet_hp_less_pascal_stat;
3456 class traits_SkipListSet_hp_cmp_pascal: public cc::skip_list::make_traits <
3457 co::compare< compare >
3458 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3459 ,co::item_counter< cds::atomicity::item_counter >
3462 typedef cc::SkipListSet< cds::gc::HP, key_val, traits_SkipListSet_hp_cmp_pascal > SkipListSet_hp_cmp_pascal;
3464 class traits_SkipListSet_hp_cmp_pascal_stat: public cc::skip_list::make_traits <
3465 co::compare< compare >
3466 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3467 ,co::stat< cc::skip_list::stat<> >
3468 ,co::item_counter< cds::atomicity::item_counter >
3471 typedef cc::SkipListSet< cds::gc::HP, key_val, traits_SkipListSet_hp_cmp_pascal_stat > SkipListSet_hp_cmp_pascal_stat;
3473 class traits_SkipListSet_hp_less_xorshift: public cc::skip_list::make_traits <
3475 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3476 ,co::item_counter< cds::atomicity::item_counter >
3479 typedef cc::SkipListSet< cds::gc::HP, key_val, traits_SkipListSet_hp_less_xorshift > SkipListSet_hp_less_xorshift;
3481 class traits_SkipListSet_hp_less_xorshift_stat: public cc::skip_list::make_traits <
3483 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3484 ,co::stat< cc::skip_list::stat<> >
3485 ,co::item_counter< cds::atomicity::item_counter >
3488 typedef cc::SkipListSet< cds::gc::HP, key_val, traits_SkipListSet_hp_less_xorshift_stat > SkipListSet_hp_less_xorshift_stat;
3490 class traits_SkipListSet_hp_cmp_xorshift: public cc::skip_list::make_traits <
3491 co::compare< compare >
3492 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3493 ,co::item_counter< cds::atomicity::item_counter >
3496 typedef cc::SkipListSet< cds::gc::HP, key_val, traits_SkipListSet_hp_cmp_xorshift > SkipListSet_hp_cmp_xorshift;
3498 class traits_SkipListSet_hp_cmp_xorshift_stat: public cc::skip_list::make_traits <
3499 co::compare< compare >
3500 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3501 ,co::stat< cc::skip_list::stat<> >
3502 ,co::item_counter< cds::atomicity::item_counter >
3505 typedef cc::SkipListSet< cds::gc::HP, key_val, traits_SkipListSet_hp_cmp_xorshift_stat > SkipListSet_hp_cmp_xorshift_stat;
3507 // ***************************************************************************
3508 // SkipListSet - PTB
3510 class traits_SkipListSet_ptb_less_pascal: public cc::skip_list::make_traits <
3512 ,co::item_counter< cds::atomicity::item_counter >
3513 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3516 typedef cc::SkipListSet< cds::gc::PTB, key_val, traits_SkipListSet_ptb_less_pascal > SkipListSet_ptb_less_pascal;
3518 class traits_SkipListSet_ptb_less_pascal_seqcst: public cc::skip_list::make_traits <
3520 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3521 ,co::memory_model< co::v::sequential_consistent >
3522 ,co::item_counter< cds::atomicity::item_counter >
3525 typedef cc::SkipListSet< cds::gc::PTB, key_val, traits_SkipListSet_ptb_less_pascal_seqcst > SkipListSet_ptb_less_pascal_seqcst;
3527 class traits_SkipListSet_ptb_less_pascal_stat: public cc::skip_list::make_traits <
3529 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3530 ,co::stat< cc::skip_list::stat<> >
3531 ,co::item_counter< cds::atomicity::item_counter >
3534 typedef cc::SkipListSet< cds::gc::PTB, key_val, traits_SkipListSet_ptb_less_pascal_stat > SkipListSet_ptb_less_pascal_stat;
3536 class traits_SkipListSet_ptb_cmp_pascal: public cc::skip_list::make_traits <
3537 co::compare< compare >
3538 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3539 ,co::item_counter< cds::atomicity::item_counter >
3542 typedef cc::SkipListSet< cds::gc::PTB, key_val, traits_SkipListSet_ptb_cmp_pascal > SkipListSet_ptb_cmp_pascal;
3544 class traits_SkipListSet_ptb_cmp_pascal_stat: public cc::skip_list::make_traits <
3545 co::compare< compare >
3546 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3547 ,co::stat< cc::skip_list::stat<> >
3548 ,co::item_counter< cds::atomicity::item_counter >
3551 typedef cc::SkipListSet< cds::gc::PTB, key_val, traits_SkipListSet_ptb_cmp_pascal_stat > SkipListSet_ptb_cmp_pascal_stat;
3553 class traits_SkipListSet_ptb_less_xorshift: public cc::skip_list::make_traits <
3555 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3556 ,co::item_counter< cds::atomicity::item_counter >
3559 typedef cc::SkipListSet< cds::gc::PTB, key_val, traits_SkipListSet_ptb_less_xorshift > SkipListSet_ptb_less_xorshift;
3561 class traits_SkipListSet_ptb_less_xorshift_stat: public cc::skip_list::make_traits <
3563 ,co::item_counter< cds::atomicity::item_counter >
3564 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3565 ,co::stat< cc::skip_list::stat<> >
3568 typedef cc::SkipListSet< cds::gc::PTB, key_val, traits_SkipListSet_ptb_less_xorshift_stat > SkipListSet_ptb_less_xorshift_stat;
3570 class traits_SkipListSet_ptb_cmp_xorshift: public cc::skip_list::make_traits <
3571 co::compare< compare >
3572 ,co::item_counter< cds::atomicity::item_counter >
3573 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3576 typedef cc::SkipListSet< cds::gc::PTB, key_val, traits_SkipListSet_ptb_cmp_xorshift> SkipListSet_ptb_cmp_xorshift;
3578 class traits_SkipListSet_ptb_cmp_xorshift_stat: public cc::skip_list::make_traits <
3579 co::compare< compare >
3580 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3581 ,co::stat< cc::skip_list::stat<> >
3582 ,co::item_counter< cds::atomicity::item_counter >
3585 typedef cc::SkipListSet< cds::gc::PTB, key_val, traits_SkipListSet_ptb_cmp_xorshift_stat > SkipListSet_ptb_cmp_xorshift_stat;
3588 // ***************************************************************************
3589 // SkipListSet - RCU general_instant
3591 class traits_SkipListSet_rcu_gpi_less_pascal: public cc::skip_list::make_traits <
3593 ,co::item_counter< cds::atomicity::item_counter >
3594 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3597 typedef cc::SkipListSet< rcu_gpi, key_val, traits_SkipListSet_rcu_gpi_less_pascal > SkipListSet_rcu_gpi_less_pascal;
3599 class traits_SkipListSet_rcu_gpi_less_pascal_seqcst: public cc::skip_list::make_traits <
3601 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3602 ,co::memory_model< co::v::sequential_consistent >
3603 ,co::item_counter< cds::atomicity::item_counter >
3606 typedef cc::SkipListSet< rcu_gpi, key_val, traits_SkipListSet_rcu_gpi_less_pascal_seqcst > SkipListSet_rcu_gpi_less_pascal_seqcst;
3608 class traits_SkipListSet_rcu_gpi_less_pascal_stat: public cc::skip_list::make_traits <
3610 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3611 ,co::stat< cc::skip_list::stat<> >
3612 ,co::item_counter< cds::atomicity::item_counter >
3615 typedef cc::SkipListSet< rcu_gpi, key_val, traits_SkipListSet_rcu_gpi_less_pascal_stat > SkipListSet_rcu_gpi_less_pascal_stat;
3617 class traits_SkipListSet_rcu_gpi_cmp_pascal: public cc::skip_list::make_traits <
3618 co::compare< compare >
3619 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3620 ,co::item_counter< cds::atomicity::item_counter >
3623 typedef cc::SkipListSet< rcu_gpi, key_val, traits_SkipListSet_rcu_gpi_cmp_pascal > SkipListSet_rcu_gpi_cmp_pascal;
3625 class traits_SkipListSet_rcu_gpi_cmp_pascal_stat: public cc::skip_list::make_traits <
3626 co::compare< compare >
3627 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3628 ,co::stat< cc::skip_list::stat<> >
3629 ,co::item_counter< cds::atomicity::item_counter >
3632 typedef cc::SkipListSet< rcu_gpi, key_val, traits_SkipListSet_rcu_gpi_cmp_pascal_stat > SkipListSet_rcu_gpi_cmp_pascal_stat;
3634 class traits_SkipListSet_rcu_gpi_less_xorshift: public cc::skip_list::make_traits <
3636 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3637 ,co::item_counter< cds::atomicity::item_counter >
3640 typedef cc::SkipListSet< rcu_gpi, key_val, traits_SkipListSet_rcu_gpi_less_xorshift > SkipListSet_rcu_gpi_less_xorshift;
3642 class traits_SkipListSet_rcu_gpi_less_xorshift_stat: public cc::skip_list::make_traits <
3644 ,co::item_counter< cds::atomicity::item_counter >
3645 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3646 ,co::stat< cc::skip_list::stat<> >
3649 typedef cc::SkipListSet< rcu_gpi, key_val, traits_SkipListSet_rcu_gpi_less_xorshift_stat > SkipListSet_rcu_gpi_less_xorshift_stat;
3651 class traits_SkipListSet_rcu_gpi_cmp_xorshift: public cc::skip_list::make_traits <
3652 co::compare< compare >
3653 ,co::item_counter< cds::atomicity::item_counter >
3654 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3657 typedef cc::SkipListSet< rcu_gpi, key_val, traits_SkipListSet_rcu_gpi_cmp_xorshift > SkipListSet_rcu_gpi_cmp_xorshift;
3659 class traits_SkipListSet_rcu_gpi_cmp_xorshift_stat: public cc::skip_list::make_traits <
3660 co::compare< compare >
3661 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3662 ,co::stat< cc::skip_list::stat<> >
3663 ,co::item_counter< cds::atomicity::item_counter >
3666 typedef cc::SkipListSet< rcu_gpi, key_val, traits_SkipListSet_rcu_gpi_cmp_xorshift_stat > SkipListSet_rcu_gpi_cmp_xorshift_stat;
3669 // ***************************************************************************
3670 // SkipListSet - RCU general_buffered
3672 class traits_SkipListSet_rcu_gpb_less_pascal: public cc::skip_list::make_traits <
3674 ,co::item_counter< cds::atomicity::item_counter >
3675 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3678 typedef cc::SkipListSet< rcu_gpb, key_val, traits_SkipListSet_rcu_gpb_less_pascal > SkipListSet_rcu_gpb_less_pascal;
3680 class traits_SkipListSet_rcu_gpb_less_pascal_seqcst: public cc::skip_list::make_traits <
3682 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3683 ,co::memory_model< co::v::sequential_consistent >
3684 ,co::item_counter< cds::atomicity::item_counter >
3687 typedef cc::SkipListSet< rcu_gpb, key_val, traits_SkipListSet_rcu_gpb_less_pascal_seqcst > SkipListSet_rcu_gpb_less_pascal_seqcst;
3689 class traits_SkipListSet_rcu_gpb_less_pascal_stat: public cc::skip_list::make_traits <
3691 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3692 ,co::stat< cc::skip_list::stat<> >
3693 ,co::item_counter< cds::atomicity::item_counter >
3696 typedef cc::SkipListSet< rcu_gpb, key_val, traits_SkipListSet_rcu_gpb_less_pascal_stat > SkipListSet_rcu_gpb_less_pascal_stat;
3698 class traits_SkipListSet_rcu_gpb_cmp_pascal: public cc::skip_list::make_traits <
3699 co::compare< compare >
3700 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3701 ,co::item_counter< cds::atomicity::item_counter >
3704 typedef cc::SkipListSet< rcu_gpb, key_val, traits_SkipListSet_rcu_gpb_cmp_pascal > SkipListSet_rcu_gpb_cmp_pascal;
3706 class traits_SkipListSet_rcu_gpb_cmp_pascal_stat: public cc::skip_list::make_traits <
3707 co::compare< compare >
3708 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3709 ,co::stat< cc::skip_list::stat<> >
3710 ,co::item_counter< cds::atomicity::item_counter >
3713 typedef cc::SkipListSet< rcu_gpb, key_val, traits_SkipListSet_rcu_gpb_cmp_pascal_stat > SkipListSet_rcu_gpb_cmp_pascal_stat;
3715 class traits_SkipListSet_rcu_gpb_less_xorshift: public cc::skip_list::make_traits <
3717 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3718 ,co::item_counter< cds::atomicity::item_counter >
3721 typedef cc::SkipListSet< rcu_gpb, key_val, traits_SkipListSet_rcu_gpb_less_xorshift > SkipListSet_rcu_gpb_less_xorshift;
3723 class traits_SkipListSet_rcu_gpb_less_xorshift_stat: public cc::skip_list::make_traits <
3725 ,co::item_counter< cds::atomicity::item_counter >
3726 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3727 ,co::stat< cc::skip_list::stat<> >
3730 typedef cc::SkipListSet< rcu_gpb, key_val, traits_SkipListSet_rcu_gpb_less_xorshift_stat > SkipListSet_rcu_gpb_less_xorshift_stat;
3732 class traits_SkipListSet_rcu_gpb_cmp_xorshift: public cc::skip_list::make_traits <
3733 co::compare< compare >
3734 ,co::item_counter< cds::atomicity::item_counter >
3735 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3738 typedef cc::SkipListSet< rcu_gpb, key_val, traits_SkipListSet_rcu_gpb_cmp_xorshift > SkipListSet_rcu_gpb_cmp_xorshift;
3740 class traits_SkipListSet_rcu_gpb_cmp_xorshift_stat: public cc::skip_list::make_traits <
3741 co::compare< compare >
3742 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3743 ,co::stat< cc::skip_list::stat<> >
3744 ,co::item_counter< cds::atomicity::item_counter >
3747 typedef cc::SkipListSet< rcu_gpb, key_val, traits_SkipListSet_rcu_gpb_cmp_xorshift_stat > SkipListSet_rcu_gpb_cmp_xorshift_stat;
3749 // ***************************************************************************
3750 // SkipListSet - RCU general_threaded
3752 class traits_SkipListSet_rcu_gpt_less_pascal: public cc::skip_list::make_traits <
3754 ,co::item_counter< cds::atomicity::item_counter >
3755 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3758 typedef cc::SkipListSet< rcu_gpt, key_val, traits_SkipListSet_rcu_gpt_less_pascal > SkipListSet_rcu_gpt_less_pascal;
3760 class traits_SkipListSet_rcu_gpt_less_pascal_seqcst: public cc::skip_list::make_traits <
3762 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3763 ,co::memory_model< co::v::sequential_consistent >
3764 ,co::item_counter< cds::atomicity::item_counter >
3767 typedef cc::SkipListSet< rcu_gpt, key_val, traits_SkipListSet_rcu_gpt_less_pascal_seqcst > SkipListSet_rcu_gpt_less_pascal_seqcst;
3769 class traits_SkipListSet_rcu_gpt_less_pascal_stat: public cc::skip_list::make_traits <
3771 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3772 ,co::stat< cc::skip_list::stat<> >
3773 ,co::item_counter< cds::atomicity::item_counter >
3776 typedef cc::SkipListSet< rcu_gpt, key_val, traits_SkipListSet_rcu_gpt_less_pascal_stat > SkipListSet_rcu_gpt_less_pascal_stat;
3778 class traits_SkipListSet_rcu_gpt_cmp_pascal: public cc::skip_list::make_traits <
3779 co::compare< compare >
3780 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3781 ,co::item_counter< cds::atomicity::item_counter >
3784 typedef cc::SkipListSet< rcu_gpt, key_val, traits_SkipListSet_rcu_gpt_cmp_pascal > SkipListSet_rcu_gpt_cmp_pascal;
3786 class traits_SkipListSet_rcu_gpt_cmp_pascal_stat: public cc::skip_list::make_traits <
3787 co::compare< compare >
3788 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3789 ,co::stat< cc::skip_list::stat<> >
3790 ,co::item_counter< cds::atomicity::item_counter >
3793 typedef cc::SkipListSet< rcu_gpt, key_val, traits_SkipListSet_rcu_gpt_cmp_pascal_stat > SkipListSet_rcu_gpt_cmp_pascal_stat;
3795 class traits_SkipListSet_rcu_gpt_less_xorshift: public cc::skip_list::make_traits <
3797 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3798 ,co::item_counter< cds::atomicity::item_counter >
3801 typedef cc::SkipListSet< rcu_gpt, key_val, traits_SkipListSet_rcu_gpt_less_xorshift > SkipListSet_rcu_gpt_less_xorshift;
3803 class traits_SkipListSet_rcu_gpt_less_xorshift_stat: public cc::skip_list::make_traits <
3805 ,co::item_counter< cds::atomicity::item_counter >
3806 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3807 ,co::stat< cc::skip_list::stat<> >
3810 typedef cc::SkipListSet< rcu_gpt, key_val, traits_SkipListSet_rcu_gpt_less_xorshift_stat > SkipListSet_rcu_gpt_less_xorshift_stat;
3812 class traits_SkipListSet_rcu_gpt_cmp_xorshift: public cc::skip_list::make_traits <
3813 co::compare< compare >
3814 ,co::item_counter< cds::atomicity::item_counter >
3815 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3818 typedef cc::SkipListSet< rcu_gpt, key_val, traits_SkipListSet_rcu_gpt_cmp_xorshift > SkipListSet_rcu_gpt_cmp_xorshift;
3820 class traits_SkipListSet_rcu_gpt_cmp_xorshift_stat: public cc::skip_list::make_traits <
3821 co::compare< compare >
3822 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3823 ,co::stat< cc::skip_list::stat<> >
3824 ,co::item_counter< cds::atomicity::item_counter >
3827 typedef cc::SkipListSet< rcu_gpt, key_val, traits_SkipListSet_rcu_gpt_cmp_xorshift_stat > SkipListSet_rcu_gpt_cmp_xorshift_stat;
3829 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
3830 // ***************************************************************************
3831 // SkipListSet - RCU signal_buffered
3833 class traits_SkipListSet_rcu_shb_less_pascal: public cc::skip_list::make_traits <
3835 ,co::item_counter< cds::atomicity::item_counter >
3836 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3839 typedef cc::SkipListSet< rcu_shb, key_val, traits_SkipListSet_rcu_shb_less_pascal > SkipListSet_rcu_shb_less_pascal;
3841 class traits_SkipListSet_rcu_shb_less_pascal_seqcst: public cc::skip_list::make_traits <
3843 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3844 ,co::memory_model< co::v::sequential_consistent >
3845 ,co::item_counter< cds::atomicity::item_counter >
3848 typedef cc::SkipListSet< rcu_shb, key_val, traits_SkipListSet_rcu_shb_less_pascal_seqcst > SkipListSet_rcu_shb_less_pascal_seqcst;
3850 class traits_SkipListSet_rcu_shb_less_pascal_stat: public cc::skip_list::make_traits <
3852 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3853 ,co::stat< cc::skip_list::stat<> >
3854 ,co::item_counter< cds::atomicity::item_counter >
3857 typedef cc::SkipListSet< rcu_shb, key_val, traits_SkipListSet_rcu_shb_less_pascal_stat > SkipListSet_rcu_shb_less_pascal_stat;
3859 class traits_SkipListSet_rcu_shb_cmp_pascal: public cc::skip_list::make_traits <
3860 co::compare< compare >
3861 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3862 ,co::item_counter< cds::atomicity::item_counter >
3865 typedef cc::SkipListSet< rcu_shb, key_val, traits_SkipListSet_rcu_shb_cmp_pascal > SkipListSet_rcu_shb_cmp_pascal;
3867 class traits_SkipListSet_rcu_shb_cmp_pascal_stat: public cc::skip_list::make_traits <
3868 co::compare< compare >
3869 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3870 ,co::stat< cc::skip_list::stat<> >
3871 ,co::item_counter< cds::atomicity::item_counter >
3874 typedef cc::SkipListSet< rcu_shb, key_val, traits_SkipListSet_rcu_shb_cmp_pascal_stat > SkipListSet_rcu_shb_cmp_pascal_stat;
3876 class traits_SkipListSet_rcu_shb_less_xorshift: public cc::skip_list::make_traits <
3878 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3879 ,co::item_counter< cds::atomicity::item_counter >
3882 typedef cc::SkipListSet< rcu_shb, key_val, traits_SkipListSet_rcu_shb_less_xorshift > SkipListSet_rcu_shb_less_xorshift;
3884 class traits_SkipListSet_rcu_shb_less_xorshift_stat: public cc::skip_list::make_traits <
3886 ,co::item_counter< cds::atomicity::item_counter >
3887 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3888 ,co::stat< cc::skip_list::stat<> >
3891 typedef cc::SkipListSet< rcu_shb, key_val, traits_SkipListSet_rcu_shb_less_xorshift_stat > SkipListSet_rcu_shb_less_xorshift_stat;
3893 class traits_SkipListSet_rcu_shb_cmp_xorshift: public cc::skip_list::make_traits <
3894 co::compare< compare >
3895 ,co::item_counter< cds::atomicity::item_counter >
3896 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3899 typedef cc::SkipListSet< rcu_shb, key_val, traits_SkipListSet_rcu_shb_cmp_xorshift > SkipListSet_rcu_shb_cmp_xorshift;
3901 class traits_SkipListSet_rcu_shb_cmp_xorshift_stat: public cc::skip_list::make_traits <
3902 co::compare< compare >
3903 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3904 ,co::stat< cc::skip_list::stat<> >
3905 ,co::item_counter< cds::atomicity::item_counter >
3908 typedef cc::SkipListSet< rcu_shb, key_val, traits_SkipListSet_rcu_shb_cmp_xorshift_stat > SkipListSet_rcu_shb_cmp_xorshift_stat;
3910 // ***************************************************************************
3911 // SkipListSet - RCU signal_threaded
3913 class traits_SkipListSet_rcu_sht_less_pascal: public cc::skip_list::make_traits <
3915 ,co::item_counter< cds::atomicity::item_counter >
3916 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3919 typedef cc::SkipListSet< rcu_sht, key_val, traits_SkipListSet_rcu_sht_less_pascal > SkipListSet_rcu_sht_less_pascal;
3921 class traits_SkipListSet_rcu_sht_less_pascal_seqcst: public cc::skip_list::make_traits <
3923 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3924 ,co::memory_model< co::v::sequential_consistent >
3925 ,co::item_counter< cds::atomicity::item_counter >
3928 typedef cc::SkipListSet< rcu_sht, key_val, traits_SkipListSet_rcu_sht_less_pascal_seqcst > SkipListSet_rcu_sht_less_pascal_seqcst;
3930 class traits_SkipListSet_rcu_sht_less_pascal_stat: public cc::skip_list::make_traits <
3932 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3933 ,co::stat< cc::skip_list::stat<> >
3934 ,co::item_counter< cds::atomicity::item_counter >
3937 typedef cc::SkipListSet< rcu_sht, key_val, traits_SkipListSet_rcu_sht_less_pascal_stat > SkipListSet_rcu_sht_less_pascal_stat;
3939 class traits_SkipListSet_rcu_sht_cmp_pascal: public cc::skip_list::make_traits <
3940 co::compare< compare >
3941 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3942 ,co::item_counter< cds::atomicity::item_counter >
3945 typedef cc::SkipListSet< rcu_sht, key_val, traits_SkipListSet_rcu_sht_cmp_pascal > SkipListSet_rcu_sht_cmp_pascal;
3947 class traits_SkipListSet_rcu_sht_cmp_pascal_stat: public cc::skip_list::make_traits <
3948 co::compare< compare >
3949 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3950 ,co::stat< cc::skip_list::stat<> >
3951 ,co::item_counter< cds::atomicity::item_counter >
3954 typedef cc::SkipListSet< rcu_sht, key_val, traits_SkipListSet_rcu_sht_cmp_pascal_stat > SkipListSet_rcu_sht_cmp_pascal_stat;
3956 class traits_SkipListSet_rcu_sht_less_xorshift: public cc::skip_list::make_traits <
3958 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3959 ,co::item_counter< cds::atomicity::item_counter >
3962 typedef cc::SkipListSet< rcu_sht, key_val, traits_SkipListSet_rcu_sht_less_xorshift > SkipListSet_rcu_sht_less_xorshift;
3964 class traits_SkipListSet_rcu_sht_less_xorshift_stat: public cc::skip_list::make_traits <
3966 ,co::item_counter< cds::atomicity::item_counter >
3967 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3968 ,co::stat< cc::skip_list::stat<> >
3971 typedef cc::SkipListSet< rcu_sht, key_val, traits_SkipListSet_rcu_sht_less_xorshift_stat > SkipListSet_rcu_sht_less_xorshift_stat;
3973 class traits_SkipListSet_rcu_sht_cmp_xorshift: public cc::skip_list::make_traits <
3974 co::compare< compare >
3975 ,co::item_counter< cds::atomicity::item_counter >
3976 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3979 typedef cc::SkipListSet< rcu_sht, key_val, traits_SkipListSet_rcu_sht_cmp_xorshift > SkipListSet_rcu_sht_cmp_xorshift;
3981 class traits_SkipListSet_rcu_sht_cmp_xorshift_stat: public cc::skip_list::make_traits <
3982 co::compare< compare >
3983 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3984 ,co::stat< cc::skip_list::stat<> >
3985 ,co::item_counter< cds::atomicity::item_counter >
3988 typedef cc::SkipListSet< rcu_sht, key_val, traits_SkipListSet_rcu_sht_cmp_xorshift_stat > SkipListSet_rcu_sht_cmp_xorshift_stat;
3991 // ***************************************************************************
3993 struct ellen_bintree_props {
3994 struct key_extractor {
3995 void operator()( key_type& dest, key_val const& src ) const
4002 bool operator()( key_val const& v1, key_val const& v2 ) const
4004 return key_less()( v1.key, v2.key );
4006 bool operator()( key_type const& k, key_val const& v ) const
4008 return key_less()( k, v.key );
4010 bool operator()( key_val const& v, key_type const& k ) const
4012 return key_less()( v.key, k );
4014 bool operator()( key_type const& k1, key_type const& k2 ) const
4016 return key_less()( k1, k2 );
4021 typedef cc::ellen_bintree::node<cds::gc::HP, key_val> leaf_node;
4022 typedef cc::ellen_bintree::internal_node< key_type, leaf_node > internal_node;
4023 typedef cc::ellen_bintree::update_desc< leaf_node, internal_node > update_desc;
4027 typedef cc::ellen_bintree::node<cds::gc::PTB, key_val> leaf_node;
4028 typedef cc::ellen_bintree::internal_node< key_type, leaf_node > internal_node;
4029 typedef cc::ellen_bintree::update_desc< leaf_node, internal_node > update_desc;
4033 typedef cc::ellen_bintree::node<rcu_gpi, key_val> leaf_node;
4034 typedef cc::ellen_bintree::internal_node< key_type, leaf_node > internal_node;
4035 typedef cc::ellen_bintree::update_desc< leaf_node, internal_node > update_desc;
4038 typedef cc::ellen_bintree::node<rcu_gpb, key_val> leaf_node;
4039 typedef cc::ellen_bintree::internal_node< key_type, leaf_node > internal_node;
4040 typedef cc::ellen_bintree::update_desc< leaf_node, internal_node > update_desc;
4043 typedef cc::ellen_bintree::node<rcu_gpt, key_val> leaf_node;
4044 typedef cc::ellen_bintree::internal_node< key_type, leaf_node > internal_node;
4045 typedef cc::ellen_bintree::update_desc< leaf_node, internal_node > update_desc;
4047 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
4049 typedef cc::ellen_bintree::node<rcu_shb, key_val> leaf_node;
4050 typedef cc::ellen_bintree::internal_node< key_type, leaf_node > internal_node;
4051 typedef cc::ellen_bintree::update_desc< leaf_node, internal_node > update_desc;
4054 typedef cc::ellen_bintree::node<rcu_sht, key_val> leaf_node;
4055 typedef cc::ellen_bintree::internal_node< key_type, leaf_node > internal_node;
4056 typedef cc::ellen_bintree::update_desc< leaf_node, internal_node > update_desc;
4062 // ***************************************************************************
4063 // EllenBinTreeSet - HP
4065 class traits_EllenBinTreeSet_hp: public cc::ellen_bintree::make_set_traits<
4066 cc::ellen_bintree::key_extractor< typename ellen_bintree_props::key_extractor >
4067 ,co::less< typename ellen_bintree_props::less >
4068 ,cc::ellen_bintree::update_desc_allocator<
4069 cds::memory::pool_allocator< typename ellen_bintree_props::hp_gc::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
4071 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
4074 typedef cc::EllenBinTreeSet< cds::gc::HP, key_type, key_val, traits_EllenBinTreeSet_hp > EllenBinTreeSet_hp;
4076 class traits_EllenBinTreeSet_hp_stat: public cc::ellen_bintree::make_set_traits<
4077 cc::ellen_bintree::key_extractor< typename ellen_bintree_props::key_extractor >
4078 ,co::less< typename ellen_bintree_props::less >
4079 ,cc::ellen_bintree::update_desc_allocator<
4080 cds::memory::pool_allocator< typename ellen_bintree_props::hp_gc::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
4082 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
4083 ,co::stat< cc::ellen_bintree::stat<> >
4086 typedef cc::EllenBinTreeSet< cds::gc::HP, key_type, key_val, traits_EllenBinTreeSet_hp_stat > EllenBinTreeSet_hp_stat;
4088 // ***************************************************************************
4089 // EllenBinTreeSet - PTB
4091 class traits_EllenBinTreeSet_ptb: public cc::ellen_bintree::make_set_traits<
4092 cc::ellen_bintree::key_extractor< typename ellen_bintree_props::key_extractor >
4093 ,co::less< typename ellen_bintree_props::less >
4094 ,cc::ellen_bintree::update_desc_allocator<
4095 cds::memory::pool_allocator< typename ellen_bintree_props::ptb_gc::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
4097 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
4100 typedef cc::EllenBinTreeSet< cds::gc::PTB, key_type, key_val, traits_EllenBinTreeSet_ptb > EllenBinTreeSet_ptb;
4102 class traits_EllenBinTreeSet_ptb_stat: public cc::ellen_bintree::make_set_traits<
4103 cc::ellen_bintree::key_extractor< typename ellen_bintree_props::key_extractor >
4104 ,co::less< typename ellen_bintree_props::less >
4105 ,cc::ellen_bintree::update_desc_allocator<
4106 cds::memory::pool_allocator< typename ellen_bintree_props::ptb_gc::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
4108 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
4109 ,co::stat< cc::ellen_bintree::stat<> >
4112 typedef cc::EllenBinTreeSet< cds::gc::PTB, key_type, key_val, traits_EllenBinTreeSet_ptb_stat > EllenBinTreeSet_ptb_stat;
4115 // ***************************************************************************
4116 // EllenBinTreeSet - RCU
4118 class traits_EllenBinTreeSet_rcu_gpi: public cc::ellen_bintree::make_set_traits<
4119 cc::ellen_bintree::key_extractor< typename ellen_bintree_props::key_extractor >
4120 ,co::less< typename ellen_bintree_props::less >
4121 ,cc::ellen_bintree::update_desc_allocator<
4122 cds::memory::pool_allocator< typename ellen_bintree_props::gpi::update_desc, ellen_bintree_pool::bounded_update_desc_pool_accessor >
4124 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
4127 typedef cc::EllenBinTreeSet< rcu_gpi, key_type, key_val, traits_EllenBinTreeSet_rcu_gpi > EllenBinTreeSet_rcu_gpi;
4129 class traits_EllenBinTreeSet_rcu_gpi_stat: public cc::ellen_bintree::make_set_traits<
4130 cc::ellen_bintree::key_extractor< typename ellen_bintree_props::key_extractor >
4131 ,co::less< typename ellen_bintree_props::less >
4132 ,cc::ellen_bintree::update_desc_allocator<
4133 cds::memory::pool_allocator< typename ellen_bintree_props::gpi::update_desc, ellen_bintree_pool::bounded_update_desc_pool_accessor >
4135 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
4136 ,co::stat< cc::ellen_bintree::stat<> >
4139 typedef cc::EllenBinTreeSet< rcu_gpi, key_type, key_val, traits_EllenBinTreeSet_rcu_gpi_stat > EllenBinTreeSet_rcu_gpi_stat;
4141 class traits_EllenBinTreeSet_rcu_gpb: public cc::ellen_bintree::make_set_traits<
4142 cc::ellen_bintree::key_extractor< typename ellen_bintree_props::key_extractor >
4143 ,co::less< typename ellen_bintree_props::less >
4144 ,cc::ellen_bintree::update_desc_allocator<
4145 cds::memory::pool_allocator< typename ellen_bintree_props::gpb::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
4147 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
4150 typedef cc::EllenBinTreeSet< rcu_gpb, key_type, key_val, traits_EllenBinTreeSet_rcu_gpb > EllenBinTreeSet_rcu_gpb;
4152 class traits_EllenBinTreeSet_rcu_gpb_stat: public cc::ellen_bintree::make_set_traits<
4153 cc::ellen_bintree::key_extractor< typename ellen_bintree_props::key_extractor >
4154 ,co::less< typename ellen_bintree_props::less >
4155 ,cc::ellen_bintree::update_desc_allocator<
4156 cds::memory::pool_allocator< typename ellen_bintree_props::gpb::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
4158 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
4159 ,co::stat< cc::ellen_bintree::stat<> >
4162 typedef cc::EllenBinTreeSet< rcu_gpb, key_type, key_val, traits_EllenBinTreeSet_rcu_gpb_stat > EllenBinTreeSet_rcu_gpb_stat;
4164 class traits_EllenBinTreeSet_rcu_gpt: public cc::ellen_bintree::make_set_traits<
4165 cc::ellen_bintree::key_extractor< typename ellen_bintree_props::key_extractor >
4166 ,co::less< typename ellen_bintree_props::less >
4167 ,cc::ellen_bintree::update_desc_allocator<
4168 cds::memory::pool_allocator< typename ellen_bintree_props::gpt::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
4170 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
4173 typedef cc::EllenBinTreeSet< rcu_gpt, key_type, key_val, traits_EllenBinTreeSet_rcu_gpt > EllenBinTreeSet_rcu_gpt;
4175 class traits_EllenBinTreeSet_rcu_gpt_stat: public cc::ellen_bintree::make_set_traits<
4176 cc::ellen_bintree::key_extractor< typename ellen_bintree_props::key_extractor >
4177 ,co::less< typename ellen_bintree_props::less >
4178 ,cc::ellen_bintree::update_desc_allocator<
4179 cds::memory::pool_allocator< typename ellen_bintree_props::gpt::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
4181 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
4182 ,co::stat< cc::ellen_bintree::stat<> >
4185 typedef cc::EllenBinTreeSet< rcu_gpt, key_type, key_val, traits_EllenBinTreeSet_rcu_gpt_stat > EllenBinTreeSet_rcu_gpt_stat;
4187 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
4188 class traits_EllenBinTreeSet_rcu_shb: public cc::ellen_bintree::make_set_traits<
4189 cc::ellen_bintree::key_extractor< typename ellen_bintree_props::key_extractor >
4190 ,co::less< typename ellen_bintree_props::less >
4191 ,cc::ellen_bintree::update_desc_allocator<
4192 cds::memory::pool_allocator< typename ellen_bintree_props::shb::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
4194 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
4197 typedef cc::EllenBinTreeSet< rcu_shb, key_type, key_val, traits_EllenBinTreeSet_rcu_shb > EllenBinTreeSet_rcu_shb;
4199 class traits_EllenBinTreeSet_rcu_shb_stat: public cc::ellen_bintree::make_set_traits<
4200 cc::ellen_bintree::key_extractor< typename ellen_bintree_props::key_extractor >
4201 ,co::less< typename ellen_bintree_props::less >
4202 ,cc::ellen_bintree::update_desc_allocator<
4203 cds::memory::pool_allocator< typename ellen_bintree_props::shb::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
4205 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
4206 ,co::stat< cc::ellen_bintree::stat<> >
4209 typedef cc::EllenBinTreeSet< rcu_shb, key_type, key_val, traits_EllenBinTreeSet_rcu_shb_stat > EllenBinTreeSet_rcu_shb_stat;
4211 class traits_EllenBinTreeSet_rcu_sht: public cc::ellen_bintree::make_set_traits<
4212 cc::ellen_bintree::key_extractor< typename ellen_bintree_props::key_extractor >
4213 ,co::less< typename ellen_bintree_props::less >
4214 ,cc::ellen_bintree::update_desc_allocator<
4215 cds::memory::pool_allocator< typename ellen_bintree_props::sht::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
4217 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
4220 typedef cc::EllenBinTreeSet< rcu_sht, key_type, key_val, traits_EllenBinTreeSet_rcu_sht > EllenBinTreeSet_rcu_sht;
4222 class traits_EllenBinTreeSet_rcu_sht_stat: public cc::ellen_bintree::make_set_traits<
4223 cc::ellen_bintree::key_extractor< typename ellen_bintree_props::key_extractor >
4224 ,co::less< typename ellen_bintree_props::less >
4225 ,cc::ellen_bintree::update_desc_allocator<
4226 cds::memory::pool_allocator< typename ellen_bintree_props::sht::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
4228 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
4229 ,co::stat< cc::ellen_bintree::stat<> >
4232 typedef cc::EllenBinTreeSet< rcu_sht, key_type, key_val, traits_EllenBinTreeSet_rcu_sht_stat > EllenBinTreeSet_rcu_sht_stat;
4236 // ***************************************************************************
4237 // Standard implementations
4239 typedef StdSet< key_val, less, cds::SpinLock > StdSet_Spin;
4240 typedef StdSet< key_val, less, lock::NoLock> StdSet_NoLock;
4242 typedef StdHashSet< key_val, hash, less, equal_to, cds::SpinLock > StdHashSet_Spin;
4243 typedef StdHashSet< key_val, hash, less, equal_to, lock::NoLock > StdHashSet_NoLock;
4248 // *************************************************
4250 // *************************************************
4252 template <typename Set>
4253 static inline void print_stat( Set const& s )
4256 template <typename GC, typename T, typename Traits>
4257 static inline void print_stat( cc::SkipListSet<GC, T, Traits> const& s )
4259 CPPUNIT_MSG( s.statistics() );
4262 template <typename GC, typename Key, typename T, typename Traits>
4263 static inline void print_stat( cc::EllenBinTreeSet<GC, Key, T, Traits> const& s )
4265 CPPUNIT_MSG( s.statistics() );
4268 template <typename T, typename Traits >
4269 static inline void print_stat( cc::CuckooSet< T, Traits > const& s )
4271 CPPUNIT_MSG( s.statistics() << s.mutex_policy_statistics() );
4274 template <typename V, typename... Options>
4275 static inline void print_stat( CuckooStripedSet< V, Options... > const& s )
4277 typedef CuckooStripedSet< V, Options... > set_type;
4278 print_stat( static_cast<typename set_type::cuckoo_base_class const&>(s) );
4281 template <typename V, typename... Options>
4282 static inline void print_stat( CuckooRefinableSet< V, Options... > const& s )
4284 typedef CuckooRefinableSet< V, Options... > set_type;
4285 print_stat( static_cast<typename set_type::cuckoo_base_class const&>(s) );
4290 //*******************************************************
4292 //*******************************************************
4294 template <typename Set>
4295 static inline void additional_check( Set& set )
4298 template <typename Set>
4299 static inline void additional_cleanup( Set& set )
4302 namespace ellen_bintree_check {
4303 static inline void check_stat( cds::intrusive::ellen_bintree::empty_stat const& s )
4305 // Not true for threaded RCU
4307 CPPUNIT_CHECK_CURRENT_EX( ellen_bintree_pool::internal_node_counter::m_nAlloc.get() == ellen_bintree_pool::internal_node_counter::m_nFree.get(),
4308 "m_nAlloc=" << ellen_bintree_pool::internal_node_counter::m_nAlloc.get()
4309 << ", m_nFree=" << ellen_bintree_pool::internal_node_counter::m_nFree.get()
4314 static inline void check_stat( cds::intrusive::ellen_bintree::stat<> const& stat )
4316 CPPUNIT_CHECK_CURRENT( stat.m_nInternalNodeCreated == stat.m_nInternalNodeDeleted );
4317 CPPUNIT_CHECK_CURRENT( stat.m_nUpdateDescCreated == stat.m_nUpdateDescDeleted );
4318 //CPPUNIT_CHECK_CURRENT( ellen_bintree_pool::internal_node_counter::m_nAlloc.get() == ellen_bintree_pool::internal_node_counter::m_nFree.get() );
4319 CPPUNIT_CHECK_CURRENT( ellen_bintree_pool::internal_node_counter::m_nAlloc.get() == stat.m_nInternalNodeCreated );
4320 // true if RCU is not threaded
4321 //CPPUNIT_CHECK_CURRENT( stat.m_nInternalNodeDeleted == ellen_bintree_pool::internal_node_counter::m_nFree.get() );
4323 } // namespace ellen_bintree_check
4325 template <typename GC, typename Key, typename T, typename Traits>
4326 static inline void additional_check( cc::EllenBinTreeSet<GC, Key, T, Traits>& s )
4328 GC::force_dispose();
4329 ellen_bintree_check::check_stat( s.statistics() );
4332 template <typename GC, typename Key, typename T, typename Traits>
4333 static inline void additional_cleanup( cc::EllenBinTreeSet<GC, Key, T, Traits>& s )
4335 ellen_bintree_pool::internal_node_counter::reset();
4340 #endif // ifndef _CDSUNIT_SET2_SET_TYPES_H