remove michael_list_hrc.h
[libcds.git] / tests / unit / set2 / set_types.h
1 //$$CDS-header$$
2
3 #ifndef _CDSUNIT_SET2_SET_TYPES_H
4 #define _CDSUNIT_SET2_SET_TYPES_H
5
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>
11
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>
18
19 #include <cds/container/michael_set.h>
20 #include <cds/container/michael_set_rcu.h>
21
22 #include <cds/container/split_list_set.h>
23 #include <cds/container/split_list_set_rcu.h>
24
25 #include <cds/container/cuckoo_set.h>
26
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>
30
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>
34
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>
40
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>
51 //#   endif
52 #endif
53 #include <cds/container/striped_set.h>
54
55 #include <cds/lock/spinlock.h>
56 #include <boost/functional/hash/hash.hpp>
57
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"
67
68 namespace set2 {
69     namespace cc = cds::container;
70     namespace co = cds::opt;
71
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;
78 #endif
79
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<> >
85                 ,Options...
86             >::type
87         >
88     {
89     public:
90         typedef typename cc::cuckoo::make_traits<
91             co::mutex_policy< cc::cuckoo::striping<> >
92             ,Options...
93         >::type cuckoo_traits;
94
95         typedef cc::CuckooSet< V, cuckoo_traits > cuckoo_base_class;
96
97     public:
98         CuckooStripedSet( size_t nCapacity, size_t nLoadFactor )
99             : cuckoo_base_class( nCapacity / (nLoadFactor * 16), (unsigned int) 4 )
100         {}
101
102         template <typename Q, typename Pred>
103         bool erase_with( Q const& key, Pred pred )
104         {
105             return cuckoo_base_class::erase_with( key, typename std::conditional< cuckoo_base_class::c_isSorted, Pred, typename Pred::equal_to>::type() );
106         }
107     };
108
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<> >
114                 ,Options...
115             >::type
116         >
117     {
118     public:
119         typedef typename cc::cuckoo::make_traits<
120             co::mutex_policy< cc::cuckoo::refinable<> >
121             ,Options...
122         >::type cuckoo_traits;
123
124         typedef cc::CuckooSet< V, cuckoo_traits > cuckoo_base_class;
125
126     public:
127         CuckooRefinableSet( size_t nCapacity, size_t nLoadFactor )
128             : cuckoo_base_class( nCapacity / (nLoadFactor * 16), (unsigned int) 4 )
129         {}
130
131         template <typename Q, typename Pred>
132         bool erase_with( Q const& key, Pred pred )
133         {
134             return cuckoo_base_class::erase_with( key, typename std::conditional< cuckoo_base_class::c_isSorted, Pred, typename Pred::equal_to>::type() );
135         }
136     };
137
138     template <typename Key>
139     struct cmp {
140         int operator ()(Key const& k1, Key const& k2) const
141         {
142             if ( std::less<Key>( k1, k2 ) )
143                 return -1;
144             return std::less<Key>( k2, k1 ) ? 1 : 0;
145         }
146     };
147
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
158
159     template <>
160     struct cmp<std::string>
161     {
162         int operator()(std::string const& s1, std::string const& s2)
163         {
164             return s1.compare( s2 );
165         }
166         int operator()(std::string const& s1, char const * s2)
167         {
168             return s1.compare( s2 );
169         }
170         int operator()(char const * s1, std::string const& s2)
171         {
172             return -s2.compare( s1 );
173         }
174     };
175
176     template <typename Key, typename Value>
177     struct SetTypes {
178
179         typedef Key     key_type;
180         typedef Value   value_type;
181
182         struct key_val {
183             key_type    key;
184             value_type  val;
185
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) {}
188
189             template <typename K>
190             /*explicit*/ key_val( K const& k ): key(k) {}
191
192             template <typename K, typename T>
193             key_val( K const& k, T const& v ): key(k), val(v) {}
194         };
195
196         typedef co::v::hash<key_type>   key_hash;
197         typedef std::less<key_type>     key_less;
198         typedef cmp<key_type>           key_compare;
199
200         struct less {
201             bool operator()( key_val const& k1, key_val const& k2 ) const
202             {
203                 return key_less()( k1.key, k2.key );
204             }
205             bool operator()( key_type const& k1, key_val const& k2 ) const
206             {
207                 return key_less()( k1, k2.key );
208             }
209             bool operator()( key_val const& k1, key_type const& k2 ) const
210             {
211                 return key_less()( k1.key, k2 );
212             }
213         };
214
215         struct compare {
216             int operator()( key_val const& k1, key_val const& k2 ) const
217             {
218                 return key_compare()( k1.key, k2.key );
219             }
220             int operator()( key_type const& k1, key_val const& k2 ) const
221             {
222                 return key_compare()( k1, k2.key );
223             }
224             int operator()( key_val const& k1, key_type const& k2 ) const
225             {
226                 return key_compare()( k1.key, k2 );
227             }
228         };
229
230         struct equal_to {
231             bool operator()( key_val const& k1, key_val const& k2 ) const
232             {
233                 return key_compare()( k1.key, k2.key ) == 0;
234             }
235             bool operator()( key_type const& k1, key_val const& k2 ) const
236             {
237                 return key_compare()( k1, k2.key ) == 0;
238             }
239             bool operator()( key_val const& k1, key_type const& k2 ) const
240             {
241                 return key_compare()( k1.key, k2 ) == 0;
242             }
243         };
244
245
246         struct hash: public key_hash
247         {
248             size_t operator()( key_val const& v ) const
249             {
250                 return key_hash::operator()( v.key );
251             }
252             size_t operator()( key_type const& key ) const
253             {
254                 return key_hash::operator()( key );
255             }
256             template <typename Q>
257             size_t operator()( Q const& k ) const
258             {
259                 return key_hash::operator()( k );
260             }
261         };
262
263         struct hash2: public hash
264         {
265             size_t operator()( key_val const& k ) const
266             {
267                 size_t seed = ~hash::operator ()( k );
268                 boost::hash_combine( seed, k.key );
269                 return seed;
270             }
271             size_t operator()( key_type const& k ) const
272             {
273                 size_t seed = ~hash::operator ()( k );
274                 boost::hash_combine( seed, k );
275                 return seed;
276             }
277             template <typename Q>
278             size_t operator()( Q const& k ) const
279             {
280                 return key_hash::operator()( k );
281             }
282         };
283
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> >
286         {
287             typedef stdext::hash_compare< key_type, std::less<key_type> > base_class;
288             size_t operator()(const key_val& kv) const
289             {
290                 return hash()(kv);
291             }
292             size_t operator()(const key_type& k ) const
293             {
294                 return hash()(k);
295             }
296
297             bool operator()(const key_val& kv1, const key_val& kv2) const
298             {
299                 return less()( kv1, kv2 );
300             }
301             bool operator()(const key_type& k1, const key_val& kv2) const
302             {
303                 return less()( k1, kv2 );
304             }
305             bool operator()(const key_val& kv1, const key_type& k2) const
306             {
307                 return less()( kv1, k2 );
308             }
309         };
310 #endif
311
312         // ***************************************************************************
313         // MichaelList
314
315         typedef cc::MichaelList< cds::gc::HP, key_val,
316             typename cc::michael_list::make_traits<
317                 co::compare< compare >
318             >::type
319         >   MichaelList_HP_cmp_stdAlloc;
320
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 >
325             >::type
326         >   MichaelList_HP_cmp_stdAlloc_seqcst;
327
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> >
332             >::type
333         >   MichaelList_HP_cmp_michaelAlloc;
334
335         typedef cc::MichaelList< cds::gc::HP, key_val,
336             typename cc::michael_list::make_traits<
337                 co::less< less >
338             >::type
339         >   MichaelList_HP_less_stdAlloc;
340
341         typedef cc::MichaelList< cds::gc::HP, key_val,
342             typename cc::michael_list::make_traits<
343                 co::less< less >
344                 ,co::memory_model< co::v::sequential_consistent >
345             >::type
346         >   MichaelList_HP_less_stdAlloc_seqcst;
347
348         typedef cc::MichaelList< cds::gc::HP, key_val,
349             typename cc::michael_list::make_traits<
350                 co::less< less >,
351                 co::allocator< memory::MichaelAllocator<int> >
352             >::type
353         >   MichaelList_HP_less_michaelAlloc;
354
355         typedef cc::MichaelList< cds::gc::PTB, key_val,
356             typename cc::michael_list::make_traits<
357                 co::compare< compare >
358             >::type
359         >   MichaelList_PTB_cmp_stdAlloc;
360
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 >
365             >::type
366         >   MichaelList_PTB_cmp_stdAlloc_seqcst;
367
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> >
372             >::type
373         >   MichaelList_PTB_cmp_michaelAlloc;
374
375         typedef cc::MichaelList< cds::gc::PTB, key_val,
376             typename cc::michael_list::make_traits<
377                 co::less< less >
378             >::type
379         >   MichaelList_PTB_less_stdAlloc;
380
381         typedef cc::MichaelList< cds::gc::PTB, key_val,
382             typename cc::michael_list::make_traits<
383                 co::less< less >
384                 ,co::memory_model< co::v::sequential_consistent >
385             >::type
386         >   MichaelList_PTB_less_stdAlloc_seqcst;
387
388         typedef cc::MichaelList< cds::gc::PTB, key_val,
389             typename cc::michael_list::make_traits<
390                 co::less< less >,
391                 co::allocator< memory::MichaelAllocator<int> >
392             >::type
393         >   MichaelList_PTB_less_michaelAlloc;
394
395
396         typedef cc::MichaelList< rcu_gpi, key_val,
397             typename cc::michael_list::make_traits<
398                 co::compare< compare >
399             >::type
400         >   MichaelList_RCU_GPI_cmp_stdAlloc;
401
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 >
406             >::type
407         >   MichaelList_RCU_GPI_cmp_stdAlloc_seqcst;
408
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> >
413             >::type
414         >   MichaelList_RCU_GPI_cmp_michaelAlloc;
415
416         typedef cc::MichaelList< rcu_gpi, key_val,
417             typename cc::michael_list::make_traits<
418                 co::less< less >
419             >::type
420         >   MichaelList_RCU_GPI_less_stdAlloc;
421
422         typedef cc::MichaelList< rcu_gpi, key_val,
423             typename cc::michael_list::make_traits<
424                 co::less< less >
425                 ,co::memory_model< co::v::sequential_consistent >
426             >::type
427         >   MichaelList_RCU_GPI_less_stdAlloc_seqcst;
428
429         typedef cc::MichaelList< rcu_gpi, key_val,
430             typename cc::michael_list::make_traits<
431                 co::less< less >,
432                 co::allocator< memory::MichaelAllocator<int> >
433             >::type
434         >   MichaelList_RCU_GPI_less_michaelAlloc;
435
436
437         typedef cc::MichaelList< rcu_gpb, key_val,
438             typename cc::michael_list::make_traits<
439                 co::compare< compare >
440             >::type
441         >   MichaelList_RCU_GPB_cmp_stdAlloc;
442
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 >
447             >::type
448         >   MichaelList_RCU_GPB_cmp_stdAlloc_seqcst;
449
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> >
454             >::type
455         >   MichaelList_RCU_GPB_cmp_michaelAlloc;
456
457         typedef cc::MichaelList< rcu_gpb, key_val,
458             typename cc::michael_list::make_traits<
459                 co::less< less >
460             >::type
461         >   MichaelList_RCU_GPB_less_stdAlloc;
462
463         typedef cc::MichaelList< rcu_gpb, key_val,
464             typename cc::michael_list::make_traits<
465                 co::less< less >
466                 ,co::memory_model< co::v::sequential_consistent >
467             >::type
468         >   MichaelList_RCU_GPB_less_stdAlloc_seqcst;
469
470         typedef cc::MichaelList< rcu_gpb, key_val,
471             typename cc::michael_list::make_traits<
472                 co::less< less >,
473                 co::allocator< memory::MichaelAllocator<int> >
474             >::type
475         >   MichaelList_RCU_GPB_less_michaelAlloc;
476
477
478         typedef cc::MichaelList< rcu_gpt, key_val,
479             typename cc::michael_list::make_traits<
480                 co::compare< compare >
481             >::type
482         >   MichaelList_RCU_GPT_cmp_stdAlloc;
483
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 >
488             >::type
489         >   MichaelList_RCU_GPT_cmp_stdAlloc_seqcst;
490
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> >
495             >::type
496         >   MichaelList_RCU_GPT_cmp_michaelAlloc;
497
498         typedef cc::MichaelList< rcu_gpt, key_val,
499             typename cc::michael_list::make_traits<
500                 co::less< less >
501             >::type
502         >   MichaelList_RCU_GPT_less_stdAlloc;
503
504         typedef cc::MichaelList< rcu_gpt, key_val,
505             typename cc::michael_list::make_traits<
506                 co::less< less >
507                 ,co::memory_model< co::v::sequential_consistent >
508             >::type
509         >   MichaelList_RCU_GPT_less_stdAlloc_seqcst;
510
511         typedef cc::MichaelList< rcu_gpt, key_val,
512             typename cc::michael_list::make_traits<
513                 co::less< less >,
514                 co::allocator< memory::MichaelAllocator<int> >
515             >::type
516         >   MichaelList_RCU_GPT_less_michaelAlloc;
517
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 >
522             >::type
523         >   MichaelList_RCU_SHB_cmp_stdAlloc;
524
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 >
529             >::type
530         >   MichaelList_RCU_SHB_cmp_stdAlloc_seqcst;
531
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> >
536             >::type
537         >   MichaelList_RCU_SHB_cmp_michaelAlloc;
538
539         typedef cc::MichaelList< rcu_shb, key_val,
540             typename cc::michael_list::make_traits<
541                 co::less< less >
542             >::type
543         >   MichaelList_RCU_SHB_less_stdAlloc;
544
545         typedef cc::MichaelList< rcu_shb, key_val,
546             typename cc::michael_list::make_traits<
547                 co::less< less >
548                 ,co::memory_model< co::v::sequential_consistent >
549             >::type
550         >   MichaelList_RCU_SHB_less_stdAlloc_seqcst;
551
552         typedef cc::MichaelList< rcu_shb, key_val,
553             typename cc::michael_list::make_traits<
554                 co::less< less >,
555                 co::allocator< memory::MichaelAllocator<int> >
556             >::type
557         >   MichaelList_RCU_SHB_less_michaelAlloc;
558
559
560         typedef cc::MichaelList< rcu_sht, key_val,
561             typename cc::michael_list::make_traits<
562                 co::compare< compare >
563             >::type
564         >   MichaelList_RCU_SHT_cmp_stdAlloc;
565
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 >
570             >::type
571         >   MichaelList_RCU_SHT_cmp_stdAlloc_seqcst;
572
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> >
577             >::type
578         >   MichaelList_RCU_SHT_cmp_michaelAlloc;
579
580         typedef cc::MichaelList< rcu_sht, key_val,
581             typename cc::michael_list::make_traits<
582                 co::less< less >
583             >::type
584         >   MichaelList_RCU_SHT_less_stdAlloc;
585
586         typedef cc::MichaelList< rcu_sht, key_val,
587             typename cc::michael_list::make_traits<
588                 co::less< less >
589                 ,co::memory_model< co::v::sequential_consistent >
590             >::type
591         >   MichaelList_RCU_SHT_less_stdAlloc_seqcst;
592
593         typedef cc::MichaelList< rcu_sht, key_val,
594             typename cc::michael_list::make_traits<
595                 co::less< less >,
596                 co::allocator< memory::MichaelAllocator<int> >
597             >::type
598         >   MichaelList_RCU_SHT_less_michaelAlloc;
599 #endif
600
601         // ***************************************************************************
602         // MichaelHashSet based on MichaelList
603
604         typedef cc::MichaelHashSet< cds::gc::HP, MichaelList_HP_cmp_stdAlloc,
605             typename cc::michael_set::make_traits<
606                 co::hash< hash >
607             >::type
608         >   MichaelSet_HP_cmp_stdAlloc;
609
610         typedef cc::MichaelHashSet< cds::gc::HP, MichaelList_HP_cmp_stdAlloc_seqcst,
611             typename cc::michael_set::make_traits<
612                 co::hash< hash >
613             >::type
614         >   MichaelSet_HP_cmp_stdAlloc_seqcst;
615
616         typedef cc::MichaelHashSet< cds::gc::HP, MichaelList_HP_cmp_michaelAlloc,
617             typename cc::michael_set::make_traits<
618                 co::hash< hash >,
619                 co::allocator< memory::MichaelAllocator<int> >
620             >::type
621         >   MichaelSet_HP_cmp_michaelAlloc;
622
623         typedef cc::MichaelHashSet< cds::gc::HP, MichaelList_HP_less_stdAlloc,
624             typename cc::michael_set::make_traits<
625                 co::hash< hash >
626             >::type
627         >   MichaelSet_HP_less_stdAlloc;
628
629         typedef cc::MichaelHashSet< cds::gc::HP, MichaelList_HP_less_stdAlloc_seqcst,
630             typename cc::michael_set::make_traits<
631                 co::hash< hash >
632             >::type
633         >   MichaelSet_HP_less_stdAlloc_seqcst;
634
635         typedef cc::MichaelHashSet< cds::gc::HP, MichaelList_HP_less_michaelAlloc,
636             typename cc::michael_set::make_traits<
637                 co::hash< hash >,
638                 co::allocator< memory::MichaelAllocator<int> >
639             >::type
640         >   MichaelSet_HP_less_michaelAlloc;
641
642         typedef cc::MichaelHashSet< cds::gc::PTB, MichaelList_PTB_cmp_stdAlloc,
643             typename cc::michael_set::make_traits<
644                 co::hash< hash >
645             >::type
646         >   MichaelSet_PTB_cmp_stdAlloc;
647
648         typedef cc::MichaelHashSet< cds::gc::PTB, MichaelList_PTB_cmp_stdAlloc_seqcst,
649             typename cc::michael_set::make_traits<
650                 co::hash< hash >
651             >::type
652         >   MichaelSet_PTB_cmp_stdAlloc_seqcst;
653
654         typedef cc::MichaelHashSet< cds::gc::PTB, MichaelList_PTB_cmp_michaelAlloc,
655             typename cc::michael_set::make_traits<
656                 co::hash< hash >,
657                 co::allocator< memory::MichaelAllocator<int> >
658             >::type
659         >   MichaelSet_PTB_cmp_michaelAlloc;
660
661         typedef cc::MichaelHashSet< cds::gc::PTB, MichaelList_PTB_less_stdAlloc,
662             typename cc::michael_set::make_traits<
663                 co::hash< hash >
664             >::type
665         >   MichaelSet_PTB_less_stdAlloc;
666
667         typedef cc::MichaelHashSet< cds::gc::PTB, MichaelList_PTB_less_stdAlloc_seqcst,
668             typename cc::michael_set::make_traits<
669                 co::hash< hash >
670             >::type
671         >   MichaelSet_PTB_less_stdAlloc_seqcst;
672
673         typedef cc::MichaelHashSet< cds::gc::PTB, MichaelList_PTB_less_michaelAlloc,
674             typename cc::michael_set::make_traits<
675                 co::hash< hash >,
676                 co::allocator< memory::MichaelAllocator<int> >
677             >::type
678         >   MichaelSet_PTB_less_michaelAlloc;
679
680         // general_instant RCU
681         typedef cc::MichaelHashSet< rcu_gpi, MichaelList_RCU_GPI_cmp_stdAlloc,
682             typename cc::michael_set::make_traits<
683                 co::hash< hash >
684             >::type
685         >   MichaelSet_RCU_GPI_cmp_stdAlloc;
686
687         typedef cc::MichaelHashSet< rcu_gpi, MichaelList_RCU_GPI_cmp_stdAlloc_seqcst,
688             typename cc::michael_set::make_traits<
689                 co::hash< hash >
690             >::type
691         >   MichaelSet_RCU_GPI_cmp_stdAlloc_seqcst;
692
693         typedef cc::MichaelHashSet< rcu_gpi, MichaelList_RCU_GPI_cmp_michaelAlloc,
694             typename cc::michael_set::make_traits<
695                 co::hash< hash >,
696                 co::allocator< memory::MichaelAllocator<int> >
697             >::type
698         >   MichaelSet_RCU_GPI_cmp_michaelAlloc;
699
700         typedef cc::MichaelHashSet< rcu_gpi, MichaelList_RCU_GPI_less_stdAlloc,
701             typename cc::michael_set::make_traits<
702                 co::hash< hash >
703             >::type
704         >   MichaelSet_RCU_GPI_less_stdAlloc;
705
706         typedef cc::MichaelHashSet< rcu_gpi, MichaelList_RCU_GPI_less_stdAlloc_seqcst,
707             typename cc::michael_set::make_traits<
708                 co::hash< hash >
709             >::type
710         >   MichaelSet_RCU_GPI_less_stdAlloc_seqcst;
711
712         typedef cc::MichaelHashSet< rcu_gpi, MichaelList_RCU_GPI_less_michaelAlloc,
713             typename cc::michael_set::make_traits<
714                 co::hash< hash >,
715                 co::allocator< memory::MichaelAllocator<int> >
716             >::type
717         >   MichaelSet_RCU_GPI_less_michaelAlloc;
718
719         // general_buffered RCU
720         typedef cc::MichaelHashSet< rcu_gpb, MichaelList_RCU_GPB_cmp_stdAlloc,
721             typename cc::michael_set::make_traits<
722                 co::hash< hash >
723             >::type
724         >   MichaelSet_RCU_GPB_cmp_stdAlloc;
725
726         typedef cc::MichaelHashSet< rcu_gpb, MichaelList_RCU_GPB_cmp_stdAlloc_seqcst,
727             typename cc::michael_set::make_traits<
728                 co::hash< hash >
729             >::type
730         >   MichaelSet_RCU_GPB_cmp_stdAlloc_seqcst;
731
732         typedef cc::MichaelHashSet< rcu_gpb, MichaelList_RCU_GPB_cmp_michaelAlloc,
733             typename cc::michael_set::make_traits<
734                 co::hash< hash >,
735                 co::allocator< memory::MichaelAllocator<int> >
736             >::type
737         >   MichaelSet_RCU_GPB_cmp_michaelAlloc;
738
739         typedef cc::MichaelHashSet< rcu_gpb, MichaelList_RCU_GPB_less_stdAlloc,
740             typename cc::michael_set::make_traits<
741                 co::hash< hash >
742             >::type
743         >   MichaelSet_RCU_GPB_less_stdAlloc;
744
745         typedef cc::MichaelHashSet< rcu_gpb, MichaelList_RCU_GPB_less_stdAlloc_seqcst,
746             typename cc::michael_set::make_traits<
747                 co::hash< hash >
748             >::type
749         >   MichaelSet_RCU_GPB_less_stdAlloc_seqcst;
750
751         typedef cc::MichaelHashSet< rcu_gpb, MichaelList_RCU_GPB_less_michaelAlloc,
752             typename cc::michael_set::make_traits<
753                 co::hash< hash >,
754                 co::allocator< memory::MichaelAllocator<int> >
755             >::type
756         >   MichaelSet_RCU_GPB_less_michaelAlloc;
757
758         // general_threaded RCU
759         typedef cc::MichaelHashSet< rcu_gpt, MichaelList_RCU_GPT_cmp_stdAlloc,
760             typename cc::michael_set::make_traits<
761                 co::hash< hash >
762             >::type
763         >   MichaelSet_RCU_GPT_cmp_stdAlloc;
764
765         typedef cc::MichaelHashSet< rcu_gpt, MichaelList_RCU_GPT_cmp_stdAlloc_seqcst,
766             typename cc::michael_set::make_traits<
767                 co::hash< hash >
768             >::type
769         >   MichaelSet_RCU_GPT_cmp_stdAlloc_seqcst;
770
771         typedef cc::MichaelHashSet< rcu_gpt, MichaelList_RCU_GPT_cmp_michaelAlloc,
772             typename cc::michael_set::make_traits<
773                 co::hash< hash >,
774                 co::allocator< memory::MichaelAllocator<int> >
775             >::type
776         >   MichaelSet_RCU_GPT_cmp_michaelAlloc;
777
778         typedef cc::MichaelHashSet< rcu_gpt, MichaelList_RCU_GPT_less_stdAlloc,
779             typename cc::michael_set::make_traits<
780                 co::hash< hash >
781             >::type
782         >   MichaelSet_RCU_GPT_less_stdAlloc;
783
784         typedef cc::MichaelHashSet< rcu_gpt, MichaelList_RCU_GPT_less_stdAlloc_seqcst,
785             typename cc::michael_set::make_traits<
786                 co::hash< hash >
787             >::type
788         >   MichaelSet_RCU_GPT_less_stdAlloc_seqcst;
789
790         typedef cc::MichaelHashSet< rcu_gpt, MichaelList_RCU_GPT_less_michaelAlloc,
791             typename cc::michael_set::make_traits<
792                 co::hash< hash >,
793                 co::allocator< memory::MichaelAllocator<int> >
794             >::type
795         >   MichaelSet_RCU_GPT_less_michaelAlloc;
796
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<
801                 co::hash< hash >
802             >::type
803         >   MichaelSet_RCU_SHB_cmp_stdAlloc;
804
805         typedef cc::MichaelHashSet< rcu_shb, MichaelList_RCU_SHB_cmp_stdAlloc_seqcst,
806             typename cc::michael_set::make_traits<
807                 co::hash< hash >
808             >::type
809         >   MichaelSet_RCU_SHB_cmp_stdAlloc_seqcst;
810
811         typedef cc::MichaelHashSet< rcu_shb, MichaelList_RCU_SHB_cmp_michaelAlloc,
812             typename cc::michael_set::make_traits<
813                 co::hash< hash >,
814                 co::allocator< memory::MichaelAllocator<int> >
815             >::type
816         >   MichaelSet_RCU_SHB_cmp_michaelAlloc;
817
818         typedef cc::MichaelHashSet< rcu_shb, MichaelList_RCU_SHB_less_stdAlloc,
819             typename cc::michael_set::make_traits<
820                 co::hash< hash >
821             >::type
822         >   MichaelSet_RCU_SHB_less_stdAlloc;
823
824         typedef cc::MichaelHashSet< rcu_shb, MichaelList_RCU_SHB_less_stdAlloc_seqcst,
825             typename cc::michael_set::make_traits<
826                 co::hash< hash >
827             >::type
828         >   MichaelSet_RCU_SHB_less_stdAlloc_seqcst;
829
830         typedef cc::MichaelHashSet< rcu_shb, MichaelList_RCU_SHB_less_michaelAlloc,
831             typename cc::michael_set::make_traits<
832                 co::hash< hash >,
833                 co::allocator< memory::MichaelAllocator<int> >
834             >::type
835         >   MichaelSet_RCU_SHB_less_michaelAlloc;
836
837         // signal_threaded RCU
838         typedef cc::MichaelHashSet< rcu_sht, MichaelList_RCU_SHT_cmp_stdAlloc,
839             typename cc::michael_set::make_traits<
840                 co::hash< hash >
841             >::type
842         >   MichaelSet_RCU_SHT_cmp_stdAlloc;
843
844         typedef cc::MichaelHashSet< rcu_sht, MichaelList_RCU_SHT_cmp_stdAlloc_seqcst,
845             typename cc::michael_set::make_traits<
846                 co::hash< hash >
847             >::type
848         >   MichaelSet_RCU_SHT_cmp_stdAlloc_seqcst;
849
850         typedef cc::MichaelHashSet< rcu_sht, MichaelList_RCU_SHT_cmp_michaelAlloc,
851             typename cc::michael_set::make_traits<
852                 co::hash< hash >,
853                 co::allocator< memory::MichaelAllocator<int> >
854             >::type
855         >   MichaelSet_RCU_SHT_cmp_michaelAlloc;
856
857         typedef cc::MichaelHashSet< rcu_sht, MichaelList_RCU_SHT_less_stdAlloc,
858             typename cc::michael_set::make_traits<
859                 co::hash< hash >
860             >::type
861         >   MichaelSet_RCU_SHT_less_stdAlloc;
862
863         typedef cc::MichaelHashSet< rcu_sht, MichaelList_RCU_SHT_less_stdAlloc_seqcst,
864             typename cc::michael_set::make_traits<
865                 co::hash< hash >
866             >::type
867         >   MichaelSet_RCU_SHT_less_stdAlloc_seqcst;
868
869         typedef cc::MichaelHashSet< rcu_sht, MichaelList_RCU_SHT_less_michaelAlloc,
870             typename cc::michael_set::make_traits<
871                 co::hash< hash >,
872                 co::allocator< memory::MichaelAllocator<int> >
873             >::type
874         >   MichaelSet_RCU_SHT_less_michaelAlloc;
875
876 #endif
877
878         // ***************************************************************************
879         // LazyList
880
881         typedef cc::LazyList< cds::gc::HP, key_val,
882             typename cc::lazy_list::make_traits<
883                 co::compare< compare >
884             >::type
885         >   LazyList_HP_cmp_stdAlloc;
886
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 >
891             >::type
892         >   LazyList_HP_cmp_stdAlloc_seqcst;
893
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> >
898             >::type
899         >   LazyList_HP_cmp_michaelAlloc;
900
901         typedef cc::LazyList< cds::gc::HP, key_val,
902             typename cc::lazy_list::make_traits<
903                 co::less< less >
904             >::type
905         >   LazyList_HP_less_stdAlloc;
906
907         typedef cc::LazyList< cds::gc::HP, key_val,
908             typename cc::lazy_list::make_traits<
909                 co::less< less >
910                 ,co::memory_model< co::v::sequential_consistent >
911             >::type
912         >   LazyList_HP_less_stdAlloc_seqcst;
913
914         typedef cc::LazyList< cds::gc::HP, key_val,
915             typename cc::lazy_list::make_traits<
916                 co::less< less >,
917                 co::allocator< memory::MichaelAllocator<int> >
918             >::type
919         >   LazyList_HP_less_michaelAlloc;
920
921         typedef cc::LazyList< cds::gc::PTB, key_val,
922             typename cc::lazy_list::make_traits<
923                 co::compare< compare >
924             >::type
925         >   LazyList_PTB_cmp_stdAlloc;
926
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 >
931             >::type
932         >   LazyList_PTB_cmp_stdAlloc_seqcst;
933
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> >
938             >::type
939         >   LazyList_PTB_cmp_michaelAlloc;
940
941         typedef cc::LazyList< cds::gc::PTB, key_val,
942             typename cc::lazy_list::make_traits<
943                 co::less< less >
944             >::type
945         >   LazyList_PTB_less_stdAlloc;
946
947         typedef cc::LazyList< cds::gc::PTB, key_val,
948             typename cc::lazy_list::make_traits<
949                 co::less< less >
950                 ,co::memory_model< co::v::sequential_consistent >
951             >::type
952         >   LazyList_PTB_less_stdAlloc_seqcst;
953
954         typedef cc::LazyList< cds::gc::PTB, key_val,
955             typename cc::lazy_list::make_traits<
956                 co::less< less >,
957                 co::allocator< memory::MichaelAllocator<int> >
958             >::type
959         >   LazyList_PTB_less_michaelAlloc;
960
961         // RCU
962         typedef cc::LazyList< rcu_gpi, key_val,
963             typename cc::lazy_list::make_traits<
964                 co::compare< compare >
965             >::type
966         >   LazyList_RCU_GPI_cmp_stdAlloc;
967
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 >
972             >::type
973         >   LazyList_RCU_GPI_cmp_stdAlloc_seqcst;
974
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> >
979             >::type
980         >   LazyList_RCU_GPI_cmp_michaelAlloc;
981
982         typedef cc::LazyList< rcu_gpi, key_val,
983             typename cc::lazy_list::make_traits<
984                 co::less< less >
985             >::type
986         >   LazyList_RCU_GPI_less_stdAlloc;
987
988         typedef cc::LazyList< rcu_gpi, key_val,
989             typename cc::lazy_list::make_traits<
990                 co::less< less >
991                 ,co::memory_model< co::v::sequential_consistent >
992             >::type
993         >   LazyList_RCU_GPI_less_stdAlloc_seqcst;
994
995         typedef cc::LazyList< rcu_gpi, key_val,
996             typename cc::lazy_list::make_traits<
997                 co::less< less >,
998                 co::allocator< memory::MichaelAllocator<int> >
999             >::type
1000         >   LazyList_RCU_GPI_less_michaelAlloc;
1001
1002         typedef cc::LazyList< rcu_gpb, key_val,
1003             typename cc::lazy_list::make_traits<
1004                 co::compare< compare >
1005             >::type
1006         >   LazyList_RCU_GPB_cmp_stdAlloc;
1007
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 >
1012             >::type
1013         >   LazyList_RCU_GPB_cmp_stdAlloc_seqcst;
1014
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> >
1019             >::type
1020         >   LazyList_RCU_GPB_cmp_michaelAlloc;
1021
1022         typedef cc::LazyList< rcu_gpb, key_val,
1023             typename cc::lazy_list::make_traits<
1024                 co::less< less >
1025             >::type
1026         >   LazyList_RCU_GPB_less_stdAlloc;
1027
1028         typedef cc::LazyList< rcu_gpb, key_val,
1029             typename cc::lazy_list::make_traits<
1030                 co::less< less >
1031                 ,co::memory_model< co::v::sequential_consistent >
1032             >::type
1033         >   LazyList_RCU_GPB_less_stdAlloc_seqcst;
1034
1035         typedef cc::LazyList< rcu_gpb, key_val,
1036             typename cc::lazy_list::make_traits<
1037                 co::less< less >,
1038                 co::allocator< memory::MichaelAllocator<int> >
1039             >::type
1040         >   LazyList_RCU_GPB_less_michaelAlloc;
1041
1042         //
1043         typedef cc::LazyList< rcu_gpt, key_val,
1044             typename cc::lazy_list::make_traits<
1045                 co::compare< compare >
1046             >::type
1047         >   LazyList_RCU_GPT_cmp_stdAlloc;
1048
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 >
1053             >::type
1054         >   LazyList_RCU_GPT_cmp_stdAlloc_seqcst;
1055
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> >
1060             >::type
1061         >   LazyList_RCU_GPT_cmp_michaelAlloc;
1062
1063         typedef cc::LazyList< rcu_gpt, key_val,
1064             typename cc::lazy_list::make_traits<
1065                 co::less< less >
1066             >::type
1067         >   LazyList_RCU_GPT_less_stdAlloc;
1068
1069         typedef cc::LazyList< rcu_gpt, key_val,
1070             typename cc::lazy_list::make_traits<
1071                 co::less< less >
1072                 ,co::memory_model< co::v::sequential_consistent >
1073             >::type
1074         >   LazyList_RCU_GPT_less_stdAlloc_seqcst;
1075
1076         typedef cc::LazyList< rcu_gpt, key_val,
1077             typename cc::lazy_list::make_traits<
1078                 co::less< less >,
1079                 co::allocator< memory::MichaelAllocator<int> >
1080             >::type
1081         >   LazyList_RCU_GPT_less_michaelAlloc;
1082
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 >
1087             >::type
1088         >   LazyList_RCU_SHB_cmp_stdAlloc;
1089
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 >
1094             >::type
1095         >   LazyList_RCU_SHB_cmp_stdAlloc_seqcst;
1096
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> >
1101             >::type
1102         >   LazyList_RCU_SHB_cmp_michaelAlloc;
1103
1104         typedef cc::LazyList< rcu_shb, key_val,
1105             typename cc::lazy_list::make_traits<
1106                 co::less< less >
1107             >::type
1108         >   LazyList_RCU_SHB_less_stdAlloc;
1109
1110         typedef cc::LazyList< rcu_shb, key_val,
1111             typename cc::lazy_list::make_traits<
1112                 co::less< less >
1113                 ,co::memory_model< co::v::sequential_consistent >
1114             >::type
1115         >   LazyList_RCU_SHB_less_stdAlloc_seqcst;
1116
1117         typedef cc::LazyList< rcu_shb, key_val,
1118             typename cc::lazy_list::make_traits<
1119                 co::less< less >,
1120                 co::allocator< memory::MichaelAllocator<int> >
1121             >::type
1122         >   LazyList_RCU_SHB_less_michaelAlloc;
1123
1124         //
1125         typedef cc::LazyList< rcu_sht, key_val,
1126             typename cc::lazy_list::make_traits<
1127                 co::compare< compare >
1128             >::type
1129         >   LazyList_RCU_SHT_cmp_stdAlloc;
1130
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 >
1135             >::type
1136         >   LazyList_RCU_SHT_cmp_stdAlloc_seqcst;
1137
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> >
1142             >::type
1143         >   LazyList_RCU_SHT_cmp_michaelAlloc;
1144
1145         typedef cc::LazyList< rcu_sht, key_val,
1146             typename cc::lazy_list::make_traits<
1147                 co::less< less >
1148             >::type
1149         >   LazyList_RCU_SHT_less_stdAlloc;
1150
1151         typedef cc::LazyList< rcu_sht, key_val,
1152             typename cc::lazy_list::make_traits<
1153                 co::less< less >
1154                 ,co::memory_model< co::v::sequential_consistent >
1155             >::type
1156         >   LazyList_RCU_SHT_less_stdAlloc_seqcst;
1157
1158         typedef cc::LazyList< rcu_sht, key_val,
1159             typename cc::lazy_list::make_traits<
1160                 co::less< less >,
1161                 co::allocator< memory::MichaelAllocator<int> >
1162             >::type
1163         >   LazyList_RCU_SHT_less_michaelAlloc;
1164
1165 #endif
1166
1167         // ***************************************************************************
1168         // MichaelHashSet based on LazyList
1169
1170         typedef cc::MichaelHashSet< cds::gc::HP, LazyList_HP_cmp_stdAlloc,
1171             typename cc::michael_set::make_traits<
1172                 co::hash< hash >
1173             >::type
1174         >   MichaelSet_Lazy_HP_cmp_stdAlloc;
1175
1176         typedef cc::MichaelHashSet< cds::gc::HP, LazyList_HP_cmp_stdAlloc_seqcst,
1177             typename cc::michael_set::make_traits<
1178                 co::hash< hash >
1179             >::type
1180         >   MichaelSet_Lazy_HP_cmp_stdAlloc_seqcst;
1181
1182         typedef cc::MichaelHashSet< cds::gc::HP, LazyList_HP_cmp_michaelAlloc,
1183             typename cc::michael_set::make_traits<
1184                 co::hash< hash >,
1185                 co::allocator< memory::MichaelAllocator<int> >
1186             >::type
1187         >   MichaelSet_Lazy_HP_cmp_michaelAlloc;
1188
1189         typedef cc::MichaelHashSet< cds::gc::HP, LazyList_HP_less_stdAlloc,
1190             typename cc::michael_set::make_traits<
1191                 co::hash< hash >
1192             >::type
1193         >   MichaelSet_Lazy_HP_less_stdAlloc;
1194
1195         typedef cc::MichaelHashSet< cds::gc::HP, LazyList_HP_less_stdAlloc_seqcst,
1196             typename cc::michael_set::make_traits<
1197                 co::hash< hash >
1198             >::type
1199         >   MichaelSet_Lazy_HP_less_stdAlloc_seqcst;
1200
1201         typedef cc::MichaelHashSet< cds::gc::HP, LazyList_HP_less_michaelAlloc,
1202             typename cc::michael_set::make_traits<
1203                 co::hash< hash >,
1204                 co::allocator< memory::MichaelAllocator<int> >
1205             >::type
1206         >   MichaelSet_Lazy_HP_less_michaelAlloc;
1207
1208         typedef cc::MichaelHashSet< cds::gc::PTB, LazyList_PTB_cmp_stdAlloc,
1209             typename cc::michael_set::make_traits<
1210                 co::hash< hash >
1211             >::type
1212         >   MichaelSet_Lazy_PTB_cmp_stdAlloc;
1213
1214         typedef cc::MichaelHashSet< cds::gc::PTB, LazyList_PTB_cmp_stdAlloc_seqcst,
1215             typename cc::michael_set::make_traits<
1216                 co::hash< hash >
1217             >::type
1218         >   MichaelSet_Lazy_PTB_cmp_stdAlloc_seqcst;
1219
1220         typedef cc::MichaelHashSet< cds::gc::PTB, LazyList_PTB_cmp_michaelAlloc,
1221             typename cc::michael_set::make_traits<
1222                 co::hash< hash >,
1223                 co::allocator< memory::MichaelAllocator<int> >
1224             >::type
1225         >   MichaelSet_Lazy_PTB_cmp_michaelAlloc;
1226
1227         typedef cc::MichaelHashSet< cds::gc::PTB, LazyList_PTB_less_stdAlloc,
1228             typename cc::michael_set::make_traits<
1229                 co::hash< hash >
1230             >::type
1231         >   MichaelSet_Lazy_PTB_less_stdAlloc;
1232
1233         typedef cc::MichaelHashSet< cds::gc::PTB, LazyList_PTB_less_stdAlloc_seqcst,
1234             typename cc::michael_set::make_traits<
1235                 co::hash< hash >
1236             >::type
1237         >   MichaelSet_Lazy_PTB_less_stdAlloc_seqcst;
1238
1239         typedef cc::MichaelHashSet< cds::gc::PTB, LazyList_PTB_less_michaelAlloc,
1240             typename cc::michael_set::make_traits<
1241                 co::hash< hash >,
1242                 co::allocator< memory::MichaelAllocator<int> >
1243             >::type
1244         >   MichaelSet_Lazy_PTB_less_michaelAlloc;
1245
1246         // RCU
1247         typedef cc::MichaelHashSet< rcu_gpi, LazyList_RCU_GPI_cmp_stdAlloc,
1248             typename cc::michael_set::make_traits<
1249                 co::hash< hash >
1250             >::type
1251         >   MichaelSet_Lazy_RCU_GPI_cmp_stdAlloc;
1252
1253         typedef cc::MichaelHashSet< rcu_gpi, LazyList_RCU_GPI_cmp_stdAlloc_seqcst,
1254             typename cc::michael_set::make_traits<
1255                 co::hash< hash >
1256             >::type
1257         >   MichaelSet_Lazy_RCU_GPI_cmp_stdAlloc_seqcst;
1258
1259         typedef cc::MichaelHashSet< rcu_gpi, LazyList_RCU_GPI_cmp_michaelAlloc,
1260             typename cc::michael_set::make_traits<
1261                 co::hash< hash >,
1262                 co::allocator< memory::MichaelAllocator<int> >
1263             >::type
1264         >   MichaelSet_Lazy_RCU_GPI_cmp_michaelAlloc;
1265
1266         typedef cc::MichaelHashSet< rcu_gpi, LazyList_RCU_GPI_less_stdAlloc,
1267             typename cc::michael_set::make_traits<
1268                 co::hash< hash >
1269             >::type
1270         >   MichaelSet_Lazy_RCU_GPI_less_stdAlloc;
1271
1272         typedef cc::MichaelHashSet< rcu_gpi, LazyList_RCU_GPI_less_stdAlloc_seqcst,
1273             typename cc::michael_set::make_traits<
1274                 co::hash< hash >
1275             >::type
1276         >   MichaelSet_Lazy_RCU_GPI_less_stdAlloc_seqcst;
1277
1278         typedef cc::MichaelHashSet< rcu_gpi, LazyList_RCU_GPI_less_michaelAlloc,
1279             typename cc::michael_set::make_traits<
1280                 co::hash< hash >,
1281                 co::allocator< memory::MichaelAllocator<int> >
1282             >::type
1283         >   MichaelSet_Lazy_RCU_GPI_less_michaelAlloc;
1284
1285
1286         typedef cc::MichaelHashSet< rcu_gpb, LazyList_RCU_GPB_cmp_stdAlloc,
1287             typename cc::michael_set::make_traits<
1288                 co::hash< hash >
1289             >::type
1290         >   MichaelSet_Lazy_RCU_GPB_cmp_stdAlloc;
1291
1292         typedef cc::MichaelHashSet< rcu_gpb, LazyList_RCU_GPB_cmp_stdAlloc_seqcst,
1293             typename cc::michael_set::make_traits<
1294                 co::hash< hash >
1295             >::type
1296         >   MichaelSet_Lazy_RCU_GPB_cmp_stdAlloc_seqcst;
1297
1298         typedef cc::MichaelHashSet< rcu_gpb, LazyList_RCU_GPB_cmp_michaelAlloc,
1299             typename cc::michael_set::make_traits<
1300                 co::hash< hash >,
1301                 co::allocator< memory::MichaelAllocator<int> >
1302             >::type
1303         >   MichaelSet_Lazy_RCU_GPB_cmp_michaelAlloc;
1304
1305         typedef cc::MichaelHashSet< rcu_gpb, LazyList_RCU_GPB_less_stdAlloc,
1306             typename cc::michael_set::make_traits<
1307                 co::hash< hash >
1308             >::type
1309         >   MichaelSet_Lazy_RCU_GPB_less_stdAlloc;
1310
1311         typedef cc::MichaelHashSet< rcu_gpb, LazyList_RCU_GPB_less_stdAlloc_seqcst,
1312             typename cc::michael_set::make_traits<
1313                 co::hash< hash >
1314             >::type
1315         >   MichaelSet_Lazy_RCU_GPB_less_stdAlloc_seqcst;
1316
1317         typedef cc::MichaelHashSet< rcu_gpb, LazyList_RCU_GPB_less_michaelAlloc,
1318             typename cc::michael_set::make_traits<
1319                 co::hash< hash >,
1320                 co::allocator< memory::MichaelAllocator<int> >
1321             >::type
1322         >   MichaelSet_Lazy_RCU_GPB_less_michaelAlloc;
1323
1324
1325         typedef cc::MichaelHashSet< rcu_gpt, LazyList_RCU_GPT_cmp_stdAlloc,
1326             typename cc::michael_set::make_traits<
1327                 co::hash< hash >
1328             >::type
1329         >   MichaelSet_Lazy_RCU_GPT_cmp_stdAlloc;
1330
1331         typedef cc::MichaelHashSet< rcu_gpt, LazyList_RCU_GPT_cmp_stdAlloc_seqcst,
1332             typename cc::michael_set::make_traits<
1333                 co::hash< hash >
1334             >::type
1335         >   MichaelSet_Lazy_RCU_GPT_cmp_stdAlloc_seqcst;
1336
1337         typedef cc::MichaelHashSet< rcu_gpt, LazyList_RCU_GPT_cmp_michaelAlloc,
1338             typename cc::michael_set::make_traits<
1339                 co::hash< hash >,
1340                 co::allocator< memory::MichaelAllocator<int> >
1341             >::type
1342         >   MichaelSet_Lazy_RCU_GPT_cmp_michaelAlloc;
1343
1344         typedef cc::MichaelHashSet< rcu_gpt, LazyList_RCU_GPT_less_stdAlloc,
1345             typename cc::michael_set::make_traits<
1346                 co::hash< hash >
1347             >::type
1348         >   MichaelSet_Lazy_RCU_GPT_less_stdAlloc;
1349
1350         typedef cc::MichaelHashSet< rcu_gpt, LazyList_RCU_GPT_less_stdAlloc_seqcst,
1351             typename cc::michael_set::make_traits<
1352                 co::hash< hash >
1353             >::type
1354         >   MichaelSet_Lazy_RCU_GPT_less_stdAlloc_seqcst;
1355
1356         typedef cc::MichaelHashSet< rcu_gpt, LazyList_RCU_GPT_less_michaelAlloc,
1357             typename cc::michael_set::make_traits<
1358                 co::hash< hash >,
1359                 co::allocator< memory::MichaelAllocator<int> >
1360             >::type
1361         >   MichaelSet_Lazy_RCU_GPT_less_michaelAlloc;
1362
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<
1366                 co::hash< hash >
1367             >::type
1368         >   MichaelSet_Lazy_RCU_SHB_cmp_stdAlloc;
1369
1370         typedef cc::MichaelHashSet< rcu_shb, LazyList_RCU_SHB_cmp_stdAlloc_seqcst,
1371             typename cc::michael_set::make_traits<
1372                 co::hash< hash >
1373             >::type
1374         >   MichaelSet_Lazy_RCU_SHB_cmp_stdAlloc_seqcst;
1375
1376         typedef cc::MichaelHashSet< rcu_shb, LazyList_RCU_SHB_cmp_michaelAlloc,
1377             typename cc::michael_set::make_traits<
1378                 co::hash< hash >,
1379                 co::allocator< memory::MichaelAllocator<int> >
1380             >::type
1381         >   MichaelSet_Lazy_RCU_SHB_cmp_michaelAlloc;
1382
1383         typedef cc::MichaelHashSet< rcu_shb, LazyList_RCU_SHB_less_stdAlloc,
1384             typename cc::michael_set::make_traits<
1385                 co::hash< hash >
1386             >::type
1387         >   MichaelSet_Lazy_RCU_SHB_less_stdAlloc;
1388
1389         typedef cc::MichaelHashSet< rcu_shb, LazyList_RCU_SHB_less_stdAlloc_seqcst,
1390             typename cc::michael_set::make_traits<
1391                 co::hash< hash >
1392             >::type
1393         >   MichaelSet_Lazy_RCU_SHB_less_stdAlloc_seqcst;
1394
1395         typedef cc::MichaelHashSet< rcu_shb, LazyList_RCU_SHB_less_michaelAlloc,
1396             typename cc::michael_set::make_traits<
1397                 co::hash< hash >,
1398                 co::allocator< memory::MichaelAllocator<int> >
1399             >::type
1400         >   MichaelSet_Lazy_RCU_SHB_less_michaelAlloc;
1401
1402
1403         typedef cc::MichaelHashSet< rcu_sht, LazyList_RCU_SHT_cmp_stdAlloc,
1404             typename cc::michael_set::make_traits<
1405                 co::hash< hash >
1406             >::type
1407         >   MichaelSet_Lazy_RCU_SHT_cmp_stdAlloc;
1408
1409         typedef cc::MichaelHashSet< rcu_sht, LazyList_RCU_SHT_cmp_stdAlloc_seqcst,
1410             typename cc::michael_set::make_traits<
1411                 co::hash< hash >
1412             >::type
1413         >   MichaelSet_Lazy_RCU_SHT_cmp_stdAlloc_seqcst;
1414
1415         typedef cc::MichaelHashSet< rcu_sht, LazyList_RCU_SHT_cmp_michaelAlloc,
1416             typename cc::michael_set::make_traits<
1417                 co::hash< hash >,
1418                 co::allocator< memory::MichaelAllocator<int> >
1419             >::type
1420         >   MichaelSet_Lazy_RCU_SHT_cmp_michaelAlloc;
1421
1422         typedef cc::MichaelHashSet< rcu_sht, LazyList_RCU_SHT_less_stdAlloc,
1423             typename cc::michael_set::make_traits<
1424                 co::hash< hash >
1425             >::type
1426         >   MichaelSet_Lazy_RCU_SHT_less_stdAlloc;
1427
1428         typedef cc::MichaelHashSet< rcu_sht, LazyList_RCU_SHT_less_stdAlloc_seqcst,
1429             typename cc::michael_set::make_traits<
1430                 co::hash< hash >
1431             >::type
1432         >   MichaelSet_Lazy_RCU_SHT_less_stdAlloc_seqcst;
1433
1434         typedef cc::MichaelHashSet< rcu_sht, LazyList_RCU_SHT_less_michaelAlloc,
1435             typename cc::michael_set::make_traits<
1436                 co::hash< hash >,
1437                 co::allocator< memory::MichaelAllocator<int> >
1438             >::type
1439         >   MichaelSet_Lazy_RCU_SHT_less_michaelAlloc;
1440 #endif
1441
1442         // ***************************************************************************
1443         // SplitListSet based on MichaelList
1444
1445         // HP
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>
1449                 ,co::hash< hash >
1450                 ,cc::split_list::ordered_list_traits<
1451                     typename cc::michael_list::make_traits<
1452                         co::compare< compare >
1453                     >::type
1454                 >
1455             >::type
1456         > SplitList_Michael_HP_dyn_cmp;
1457
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>
1461                 ,co::hash< hash >
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 >
1467                     >::type
1468                 >
1469             >::type
1470         > SplitList_Michael_HP_dyn_cmp_seqcst;
1471
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 >
1476                 ,co::hash< hash >
1477                 ,cc::split_list::ordered_list_traits<
1478                     typename cc::michael_list::make_traits<
1479                         co::compare< compare >
1480                     >::type
1481                 >
1482             >::type
1483         > SplitList_Michael_HP_st_cmp;
1484
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>
1488                 ,co::hash< hash >
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 >
1495                     >::type
1496                 >
1497             >::type
1498         > SplitList_Michael_HP_st_cmp_seqcst;
1499
1500         //HP + less
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>
1504                 ,co::hash< hash >
1505                 ,cc::split_list::ordered_list_traits<
1506                     typename cc::michael_list::make_traits<
1507                         co::less< less >
1508                     >::type
1509                 >
1510             >::type
1511         > SplitList_Michael_HP_dyn_less;
1512
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>
1516                 ,co::hash< hash >
1517                 ,co::memory_model< co::v::sequential_consistent >
1518                 ,cc::split_list::ordered_list_traits<
1519                     typename cc::michael_list::make_traits<
1520                         co::less< less >
1521                         ,co::memory_model< co::v::sequential_consistent >
1522                     >::type
1523                 >
1524             >::type
1525         > SplitList_Michael_HP_dyn_less_seqcst;
1526
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 >
1531                 ,co::hash< hash >
1532                 ,cc::split_list::ordered_list_traits<
1533                     typename cc::michael_list::make_traits<
1534                         co::less< less >
1535                     >::type
1536                 >
1537             >::type
1538         > SplitList_Michael_HP_st_less;
1539
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>
1543                 ,co::hash< hash >
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<
1548                         co::less< less >
1549                         ,co::memory_model< co::v::sequential_consistent >
1550                     >::type
1551                 >
1552             >::type
1553         > SplitList_Michael_HP_st_less_seqcst;
1554
1555         // PTB
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>
1559                 ,co::hash< hash >
1560                 ,cc::split_list::ordered_list_traits<
1561                     typename cc::michael_list::make_traits<
1562                         co::compare< compare >
1563                     >::type
1564                 >
1565             >::type
1566         > SplitList_Michael_PTB_dyn_cmp;
1567
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>
1571                 ,co::hash< hash >
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 >
1577                     >::type
1578                 >
1579             >::type
1580         > SplitList_Michael_PTB_dyn_cmp_seqcst;
1581
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 >
1586                 ,co::hash< hash >
1587                 ,cc::split_list::ordered_list_traits<
1588                     typename cc::michael_list::make_traits<
1589                         co::compare< compare >
1590                     >::type
1591                 >
1592             >::type
1593         > SplitList_Michael_PTB_st_cmp;
1594
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>
1598                 ,co::hash< hash >
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 >
1605                     >::type
1606                 >
1607             >::type
1608         > SplitList_Michael_PTB_st_cmp_seqcst;
1609
1610         // PTB + less
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>
1614                 ,co::hash< hash >
1615                 ,cc::split_list::ordered_list_traits<
1616                     typename cc::michael_list::make_traits<
1617                         co::less< less >
1618                     >::type
1619                 >
1620             >::type
1621         > SplitList_Michael_PTB_dyn_less;
1622
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>
1626                 ,co::hash< hash >
1627                 ,co::memory_model< co::v::sequential_consistent >
1628                 ,cc::split_list::ordered_list_traits<
1629                     typename cc::michael_list::make_traits<
1630                         co::less< less >
1631                         ,co::memory_model< co::v::sequential_consistent >
1632                     >::type
1633                 >
1634             >::type
1635         > SplitList_Michael_PTB_dyn_less_seqcst;
1636
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 >
1641                 ,co::hash< hash >
1642                 ,cc::split_list::ordered_list_traits<
1643                     typename cc::michael_list::make_traits<
1644                         co::less< less >
1645                     >::type
1646                 >
1647             >::type
1648         > SplitList_Michael_PTB_st_less;
1649
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>
1653                 ,co::hash< hash >
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<
1658                         co::less< less >
1659                         ,co::memory_model< co::v::sequential_consistent >
1660                     >::type
1661                 >
1662             >::type
1663         > SplitList_Michael_PTB_st_less_seqcst;
1664
1665         // RCU
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>
1669                 ,co::hash< hash >
1670                 ,cc::split_list::ordered_list_traits<
1671                     typename cc::michael_list::make_traits<
1672                         co::compare< compare >
1673                     >::type
1674                 >
1675             >::type
1676         > SplitList_Michael_RCU_GPI_dyn_cmp;
1677
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>
1681                 ,co::hash< hash >
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 >
1687                     >::type
1688                 >
1689             >::type
1690         > SplitList_Michael_RCU_GPI_dyn_cmp_seqcst;
1691
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 >
1696                 ,co::hash< hash >
1697                 ,cc::split_list::ordered_list_traits<
1698                     typename cc::michael_list::make_traits<
1699                         co::compare< compare >
1700                     >::type
1701                 >
1702             >::type
1703         > SplitList_Michael_RCU_GPI_st_cmp;
1704
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>
1708                 ,co::hash< hash >
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 >
1715                     >::type
1716                 >
1717             >::type
1718         > SplitList_Michael_RCU_GPI_st_cmp_seqcst;
1719
1720         // RCU_GPI + less
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>
1724                 ,co::hash< hash >
1725                 ,cc::split_list::ordered_list_traits<
1726                     typename cc::michael_list::make_traits<
1727                         co::less< less >
1728                     >::type
1729                 >
1730             >::type
1731         > SplitList_Michael_RCU_GPI_dyn_less;
1732
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>
1736                 ,co::hash< hash >
1737                 ,co::memory_model< co::v::sequential_consistent >
1738                 ,cc::split_list::ordered_list_traits<
1739                     typename cc::michael_list::make_traits<
1740                         co::less< less >
1741                         ,co::memory_model< co::v::sequential_consistent >
1742                     >::type
1743                 >
1744             >::type
1745         > SplitList_Michael_RCU_GPI_dyn_less_seqcst;
1746
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 >
1751                 ,co::hash< hash >
1752                 ,cc::split_list::ordered_list_traits<
1753                     typename cc::michael_list::make_traits<
1754                         co::less< less >
1755                     >::type
1756                 >
1757             >::type
1758         > SplitList_Michael_RCU_GPI_st_less;
1759
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>
1763                 ,co::hash< hash >
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<
1768                         co::less< less >
1769                         ,co::memory_model< co::v::sequential_consistent >
1770                     >::type
1771                 >
1772             >::type
1773         > SplitList_Michael_RCU_GPI_st_less_seqcst;
1774
1775
1776         //
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>
1780                 ,co::hash< hash >
1781                 ,cc::split_list::ordered_list_traits<
1782                     typename cc::michael_list::make_traits<
1783                         co::compare< compare >
1784                     >::type
1785                 >
1786             >::type
1787         > SplitList_Michael_RCU_GPB_dyn_cmp;
1788
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>
1792                 ,co::hash< hash >
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 >
1798                     >::type
1799                 >
1800             >::type
1801         > SplitList_Michael_RCU_GPB_dyn_cmp_seqcst;
1802
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 >
1807                 ,co::hash< hash >
1808                 ,cc::split_list::ordered_list_traits<
1809                     typename cc::michael_list::make_traits<
1810                         co::compare< compare >
1811                     >::type
1812                 >
1813             >::type
1814         > SplitList_Michael_RCU_GPB_st_cmp;
1815
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>
1819                 ,co::hash< hash >
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 >
1826                     >::type
1827                 >
1828             >::type
1829         > SplitList_Michael_RCU_GPB_st_cmp_seqcst;
1830
1831         // RCU_GPB + less
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>
1835                 ,co::hash< hash >
1836                 ,cc::split_list::ordered_list_traits<
1837                     typename cc::michael_list::make_traits<
1838                         co::less< less >
1839                     >::type
1840                 >
1841             >::type
1842         > SplitList_Michael_RCU_GPB_dyn_less;
1843
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>
1847                 ,co::hash< hash >
1848                 ,co::memory_model< co::v::sequential_consistent >
1849                 ,cc::split_list::ordered_list_traits<
1850                     typename cc::michael_list::make_traits<
1851                         co::less< less >
1852                         ,co::memory_model< co::v::sequential_consistent >
1853                     >::type
1854                 >
1855             >::type
1856         > SplitList_Michael_RCU_GPB_dyn_less_seqcst;
1857
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 >
1862                 ,co::hash< hash >
1863                 ,cc::split_list::ordered_list_traits<
1864                     typename cc::michael_list::make_traits<
1865                         co::less< less >
1866                     >::type
1867                 >
1868             >::type
1869         > SplitList_Michael_RCU_GPB_st_less;
1870
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>
1874                 ,co::hash< hash >
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<
1879                         co::less< less >
1880                         ,co::memory_model< co::v::sequential_consistent >
1881                     >::type
1882                 >
1883             >::type
1884         > SplitList_Michael_RCU_GPB_st_less_seqcst;
1885
1886         //
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>
1890                 ,co::hash< hash >
1891                 ,cc::split_list::ordered_list_traits<
1892                     typename cc::michael_list::make_traits<
1893                         co::compare< compare >
1894                     >::type
1895                 >
1896             >::type
1897         > SplitList_Michael_RCU_GPT_dyn_cmp;
1898
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>
1902                 ,co::hash< hash >
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 >
1908                     >::type
1909                 >
1910             >::type
1911         > SplitList_Michael_RCU_GPT_dyn_cmp_seqcst;
1912
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 >
1917                 ,co::hash< hash >
1918                 ,cc::split_list::ordered_list_traits<
1919                     typename cc::michael_list::make_traits<
1920                         co::compare< compare >
1921                     >::type
1922                 >
1923             >::type
1924         > SplitList_Michael_RCU_GPT_st_cmp;
1925
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>
1929                 ,co::hash< hash >
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 >
1936                     >::type
1937                 >
1938             >::type
1939         > SplitList_Michael_RCU_GPT_st_cmp_seqcst;
1940
1941         // RCU_GPT + less
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>
1945                 ,co::hash< hash >
1946                 ,cc::split_list::ordered_list_traits<
1947                     typename cc::michael_list::make_traits<
1948                         co::less< less >
1949                     >::type
1950                 >
1951             >::type
1952         > SplitList_Michael_RCU_GPT_dyn_less;
1953
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>
1957                 ,co::hash< hash >
1958                 ,co::memory_model< co::v::sequential_consistent >
1959                 ,cc::split_list::ordered_list_traits<
1960                     typename cc::michael_list::make_traits<
1961                         co::less< less >
1962                         ,co::memory_model< co::v::sequential_consistent >
1963                     >::type
1964                 >
1965             >::type
1966         > SplitList_Michael_RCU_GPT_dyn_less_seqcst;
1967
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 >
1972                 ,co::hash< hash >
1973                 ,cc::split_list::ordered_list_traits<
1974                     typename cc::michael_list::make_traits<
1975                         co::less< less >
1976                     >::type
1977                 >
1978             >::type
1979         > SplitList_Michael_RCU_GPT_st_less;
1980
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>
1984                 ,co::hash< hash >
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<
1989                         co::less< less >
1990                         ,co::memory_model< co::v::sequential_consistent >
1991                     >::type
1992                 >
1993             >::type
1994         > SplitList_Michael_RCU_GPT_st_less_seqcst;
1995
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>
2000                 ,co::hash< hash >
2001                 ,cc::split_list::ordered_list_traits<
2002                     typename cc::michael_list::make_traits<
2003                         co::compare< compare >
2004                     >::type
2005                 >
2006             >::type
2007         > SplitList_Michael_RCU_SHB_dyn_cmp;
2008
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>
2012                 ,co::hash< hash >
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 >
2018                     >::type
2019                 >
2020             >::type
2021         > SplitList_Michael_RCU_SHB_dyn_cmp_seqcst;
2022
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 >
2027                 ,co::hash< hash >
2028                 ,cc::split_list::ordered_list_traits<
2029                     typename cc::michael_list::make_traits<
2030                         co::compare< compare >
2031                     >::type
2032                 >
2033             >::type
2034         > SplitList_Michael_RCU_SHB_st_cmp;
2035
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>
2039                 ,co::hash< hash >
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 >
2046                     >::type
2047                 >
2048             >::type
2049         > SplitList_Michael_RCU_SHB_st_cmp_seqcst;
2050
2051         // RCU_SHB + less
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>
2055                 ,co::hash< hash >
2056                 ,cc::split_list::ordered_list_traits<
2057                     typename cc::michael_list::make_traits<
2058                         co::less< less >
2059                     >::type
2060                 >
2061             >::type
2062         > SplitList_Michael_RCU_SHB_dyn_less;
2063
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>
2067                 ,co::hash< hash >
2068                 ,co::memory_model< co::v::sequential_consistent >
2069                 ,cc::split_list::ordered_list_traits<
2070                     typename cc::michael_list::make_traits<
2071                         co::less< less >
2072                         ,co::memory_model< co::v::sequential_consistent >
2073                     >::type
2074                 >
2075             >::type
2076         > SplitList_Michael_RCU_SHB_dyn_less_seqcst;
2077
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 >
2082                 ,co::hash< hash >
2083                 ,cc::split_list::ordered_list_traits<
2084                     typename cc::michael_list::make_traits<
2085                         co::less< less >
2086                     >::type
2087                 >
2088             >::type
2089         > SplitList_Michael_RCU_SHB_st_less;
2090
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>
2094                 ,co::hash< hash >
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<
2099                         co::less< less >
2100                         ,co::memory_model< co::v::sequential_consistent >
2101                     >::type
2102                 >
2103             >::type
2104         > SplitList_Michael_RCU_SHB_st_less_seqcst;
2105
2106         //
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>
2110                 ,co::hash< hash >
2111                 ,cc::split_list::ordered_list_traits<
2112                     typename cc::michael_list::make_traits<
2113                         co::compare< compare >
2114                     >::type
2115                 >
2116             >::type
2117         > SplitList_Michael_RCU_SHT_dyn_cmp;
2118
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>
2122                 ,co::hash< hash >
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 >
2128                     >::type
2129                 >
2130             >::type
2131         > SplitList_Michael_RCU_SHT_dyn_cmp_seqcst;
2132
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 >
2137                 ,co::hash< hash >
2138                 ,cc::split_list::ordered_list_traits<
2139                     typename cc::michael_list::make_traits<
2140                         co::compare< compare >
2141                     >::type
2142                 >
2143             >::type
2144         > SplitList_Michael_RCU_SHT_st_cmp;
2145
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>
2149                 ,co::hash< hash >
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 >
2156                     >::type
2157                 >
2158             >::type
2159         > SplitList_Michael_RCU_SHT_st_cmp_seqcst;
2160
2161         // RCU_SHT + less
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>
2165                 ,co::hash< hash >
2166                 ,cc::split_list::ordered_list_traits<
2167                     typename cc::michael_list::make_traits<
2168                         co::less< less >
2169                     >::type
2170                 >
2171             >::type
2172         > SplitList_Michael_RCU_SHT_dyn_less;
2173
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>
2177                 ,co::hash< hash >
2178                 ,co::memory_model< co::v::sequential_consistent >
2179                 ,cc::split_list::ordered_list_traits<
2180                     typename cc::michael_list::make_traits<
2181                         co::less< less >
2182                         ,co::memory_model< co::v::sequential_consistent >
2183                     >::type
2184                 >
2185             >::type
2186         > SplitList_Michael_RCU_SHT_dyn_less_seqcst;
2187
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 >
2192                 ,co::hash< hash >
2193                 ,cc::split_list::ordered_list_traits<
2194                     typename cc::michael_list::make_traits<
2195                         co::less< less >
2196                     >::type
2197                 >
2198             >::type
2199         > SplitList_Michael_RCU_SHT_st_less;
2200
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>
2204                 ,co::hash< hash >
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<
2209                         co::less< less >
2210                         ,co::memory_model< co::v::sequential_consistent >
2211                     >::type
2212                 >
2213             >::type
2214         > SplitList_Michael_RCU_SHT_st_less_seqcst;
2215 #endif
2216
2217         // ***************************************************************************
2218         // SplitListSet based on LazyList
2219
2220         // HP
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>
2224                 ,co::hash< hash >
2225                 ,cc::split_list::ordered_list_traits<
2226                     typename cc::lazy_list::make_traits<
2227                         co::compare< compare >
2228                     >::type
2229                 >
2230             >::type
2231         > SplitList_Lazy_HP_dyn_cmp;
2232
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>
2236                 ,co::hash< hash >
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 >
2242                     >::type
2243                 >
2244             >::type
2245         > SplitList_Lazy_HP_dyn_cmp_seqcst;
2246
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 >
2251                 ,co::hash< hash >
2252                 ,cc::split_list::ordered_list_traits<
2253                     typename cc::lazy_list::make_traits<
2254                         co::compare< compare >
2255                     >::type
2256                 >
2257             >::type
2258         > SplitList_Lazy_HP_st_cmp;
2259
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>
2263                 ,co::hash< hash >
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 >
2270                     >::type
2271                 >
2272             >::type
2273         > SplitList_Lazy_HP_st_cmp_seqcst;
2274
2275
2276         // HP + less
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>
2280                 ,co::hash< hash >
2281                 ,cc::split_list::ordered_list_traits<
2282                     typename cc::lazy_list::make_traits<
2283                         co::less< less >
2284                     >::type
2285                 >
2286             >::type
2287         > SplitList_Lazy_HP_dyn_less;
2288
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>
2292                 ,co::hash< hash >
2293                 ,co::memory_model< co::v::sequential_consistent >
2294                 ,cc::split_list::ordered_list_traits<
2295                     typename cc::lazy_list::make_traits<
2296                         co::less< less >
2297                         ,co::memory_model< co::v::sequential_consistent >
2298                     >::type
2299                 >
2300             >::type
2301         > SplitList_Lazy_HP_dyn_less_seqcst;
2302
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 >
2307                 ,co::hash< hash >
2308                 ,cc::split_list::ordered_list_traits<
2309                     typename cc::lazy_list::make_traits<
2310                         co::less< less >
2311                     >::type
2312                 >
2313             >::type
2314         > SplitList_Lazy_HP_st_less;
2315
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>
2319                 ,co::hash< hash >
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<
2324                         co::less< less >
2325                         ,co::memory_model< co::v::sequential_consistent >
2326                     >::type
2327                 >
2328             >::type
2329         > SplitList_Lazy_HP_st_less_seqcst;
2330
2331         // PTB
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>
2335                 ,co::hash< hash >
2336                 ,cc::split_list::ordered_list_traits<
2337                     typename cc::lazy_list::make_traits<
2338                         co::compare< compare >
2339                     >::type
2340                 >
2341             >::type
2342         > SplitList_Lazy_PTB_dyn_cmp;
2343
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>
2347                 ,co::hash< hash >
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 >
2353                     >::type
2354                 >
2355             >::type
2356         > SplitList_Lazy_PTB_dyn_cmp_seqcst;
2357
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 >
2362                 ,co::hash< hash >
2363                 ,cc::split_list::ordered_list_traits<
2364                     typename cc::lazy_list::make_traits<
2365                         co::compare< compare >
2366                     >::type
2367                 >
2368             >::type
2369         > SplitList_Lazy_PTB_st_cmp;
2370
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>
2374                 ,co::hash< hash >
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 >
2381                     >::type
2382                 >
2383             >::type
2384         > SplitList_Lazy_PTB_st_cmp_seqcst;
2385
2386         // PTB + less
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>
2390                 ,co::hash< hash >
2391                 ,cc::split_list::ordered_list_traits<
2392                     typename cc::lazy_list::make_traits<
2393                         co::less< less >
2394                     >::type
2395                 >
2396             >::type
2397         > SplitList_Lazy_PTB_dyn_less;
2398
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>
2402                 ,co::hash< hash >
2403                 ,co::memory_model< co::v::sequential_consistent >
2404                 ,cc::split_list::ordered_list_traits<
2405                     typename cc::lazy_list::make_traits<
2406                         co::less< less >
2407                         ,co::memory_model< co::v::sequential_consistent >
2408                     >::type
2409                 >
2410             >::type
2411         > SplitList_Lazy_PTB_dyn_less_seqcst;
2412
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 >
2417                 ,co::hash< hash >
2418                 ,cc::split_list::ordered_list_traits<
2419                     typename cc::lazy_list::make_traits<
2420                         co::less< less >
2421                     >::type
2422                 >
2423             >::type
2424         > SplitList_Lazy_PTB_st_less;
2425
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>
2429                 ,co::hash< hash >
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<
2434                         co::less< less >
2435                         ,co::memory_model< co::v::sequential_consistent >
2436                     >::type
2437                 >
2438             >::type
2439         > SplitList_Lazy_PTB_st_less_seqcst;
2440
2441
2442         // RCU
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>
2446                 ,co::hash< hash >
2447                 ,cc::split_list::ordered_list_traits<
2448                     typename cc::lazy_list::make_traits<
2449                         co::compare< compare >
2450                     >::type
2451                 >
2452             >::type
2453         > SplitList_Lazy_RCU_GPI_dyn_cmp;
2454
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>
2458                 ,co::hash< hash >
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 >
2464                     >::type
2465                 >
2466             >::type
2467         > SplitList_Lazy_RCU_GPI_dyn_cmp_seqcst;
2468
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 >
2473                 ,co::hash< hash >
2474                 ,cc::split_list::ordered_list_traits<
2475                     typename cc::lazy_list::make_traits<
2476                         co::compare< compare >
2477                     >::type
2478                 >
2479             >::type
2480         > SplitList_Lazy_RCU_GPI_st_cmp;
2481
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>
2485                 ,co::hash< hash >
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 >
2492                     >::type
2493                 >
2494             >::type
2495         > SplitList_Lazy_RCU_GPI_st_cmp_seqcst;
2496
2497         // RCU_GPI + less
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>
2501                 ,co::hash< hash >
2502                 ,cc::split_list::ordered_list_traits<
2503                     typename cc::lazy_list::make_traits<
2504                         co::less< less >
2505                     >::type
2506                 >
2507             >::type
2508         > SplitList_Lazy_RCU_GPI_dyn_less;
2509
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>
2513                 ,co::hash< hash >
2514                 ,co::memory_model< co::v::sequential_consistent >
2515                 ,cc::split_list::ordered_list_traits<
2516                     typename cc::lazy_list::make_traits<
2517                         co::less< less >
2518                         ,co::memory_model< co::v::sequential_consistent >
2519                     >::type
2520                 >
2521             >::type
2522         > SplitList_Lazy_RCU_GPI_dyn_less_seqcst;
2523
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 >
2528                 ,co::hash< hash >
2529                 ,cc::split_list::ordered_list_traits<
2530                     typename cc::lazy_list::make_traits<
2531                         co::less< less >
2532                     >::type
2533                 >
2534             >::type
2535         > SplitList_Lazy_RCU_GPI_st_less;
2536
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>
2540                 ,co::hash< hash >
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<
2545                         co::less< less >
2546                         ,co::memory_model< co::v::sequential_consistent >
2547                     >::type
2548                 >
2549             >::type
2550         > SplitList_Lazy_RCU_GPI_st_less_seqcst;
2551
2552         //
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>
2556                 ,co::hash< hash >
2557                 ,cc::split_list::ordered_list_traits<
2558                     typename cc::lazy_list::make_traits<
2559                         co::compare< compare >
2560                     >::type
2561                 >
2562             >::type
2563         > SplitList_Lazy_RCU_GPB_dyn_cmp;
2564
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>
2568                 ,co::hash< hash >
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 >
2574                     >::type
2575                 >
2576             >::type
2577         > SplitList_Lazy_RCU_GPB_dyn_cmp_seqcst;
2578
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 >
2583                 ,co::hash< hash >
2584                 ,cc::split_list::ordered_list_traits<
2585                     typename cc::lazy_list::make_traits<
2586                         co::compare< compare >
2587                     >::type
2588                 >
2589             >::type
2590         > SplitList_Lazy_RCU_GPB_st_cmp;
2591
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>
2595                 ,co::hash< hash >
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 >
2602                     >::type
2603                 >
2604             >::type
2605         > SplitList_Lazy_RCU_GPB_st_cmp_seqcst;
2606
2607         // RCU_GPB + less
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>
2611                 ,co::hash< hash >
2612                 ,cc::split_list::ordered_list_traits<
2613                     typename cc::lazy_list::make_traits<
2614                         co::less< less >
2615                     >::type
2616                 >
2617             >::type
2618         > SplitList_Lazy_RCU_GPB_dyn_less;
2619
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>
2623                 ,co::hash< hash >
2624                 ,co::memory_model< co::v::sequential_consistent >
2625                 ,cc::split_list::ordered_list_traits<
2626                     typename cc::lazy_list::make_traits<
2627                         co::less< less >
2628                         ,co::memory_model< co::v::sequential_consistent >
2629                     >::type
2630                 >
2631             >::type
2632         > SplitList_Lazy_RCU_GPB_dyn_less_seqcst;
2633
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 >
2638                 ,co::hash< hash >
2639                 ,cc::split_list::ordered_list_traits<
2640                     typename cc::lazy_list::make_traits<
2641                         co::less< less >
2642                     >::type
2643                 >
2644             >::type
2645         > SplitList_Lazy_RCU_GPB_st_less;
2646
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>
2650                 ,co::hash< hash >
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<
2655                         co::less< less >
2656                         ,co::memory_model< co::v::sequential_consistent >
2657                     >::type
2658                 >
2659             >::type
2660         > SplitList_Lazy_RCU_GPB_st_less_seqcst;
2661
2662         //
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>
2666                 ,co::hash< hash >
2667                 ,cc::split_list::ordered_list_traits<
2668                     typename cc::lazy_list::make_traits<
2669                         co::compare< compare >
2670                     >::type
2671                 >
2672             >::type
2673         > SplitList_Lazy_RCU_GPT_dyn_cmp;
2674
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>
2678                 ,co::hash< hash >
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 >
2684                     >::type
2685                 >
2686             >::type
2687         > SplitList_Lazy_RCU_GPT_dyn_cmp_seqcst;
2688
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 >
2693                 ,co::hash< hash >
2694                 ,cc::split_list::ordered_list_traits<
2695                     typename cc::lazy_list::make_traits<
2696                         co::compare< compare >
2697                     >::type
2698                 >
2699             >::type
2700         > SplitList_Lazy_RCU_GPT_st_cmp;
2701
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>
2705                 ,co::hash< hash >
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 >
2712                     >::type
2713                 >
2714             >::type
2715         > SplitList_Lazy_RCU_GPT_st_cmp_seqcst;
2716
2717         // RCU_GPT + less
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>
2721                 ,co::hash< hash >
2722                 ,cc::split_list::ordered_list_traits<
2723                     typename cc::lazy_list::make_traits<
2724                         co::less< less >
2725                     >::type
2726                 >
2727             >::type
2728         > SplitList_Lazy_RCU_GPT_dyn_less;
2729
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>
2733                 ,co::hash< hash >
2734                 ,co::memory_model< co::v::sequential_consistent >
2735                 ,cc::split_list::ordered_list_traits<
2736                     typename cc::lazy_list::make_traits<
2737                         co::less< less >
2738                         ,co::memory_model< co::v::sequential_consistent >
2739                     >::type
2740                 >
2741             >::type
2742         > SplitList_Lazy_RCU_GPT_dyn_less_seqcst;
2743
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 >
2748                 ,co::hash< hash >
2749                 ,cc::split_list::ordered_list_traits<
2750                     typename cc::lazy_list::make_traits<
2751                         co::less< less >
2752                     >::type
2753                 >
2754             >::type
2755         > SplitList_Lazy_RCU_GPT_st_less;
2756
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>
2760                 ,co::hash< hash >
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<
2765                         co::less< less >
2766                         ,co::memory_model< co::v::sequential_consistent >
2767                     >::type
2768                 >
2769             >::type
2770         > SplitList_Lazy_RCU_GPT_st_less_seqcst;
2771
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>
2776                 ,co::hash< hash >
2777                 ,cc::split_list::ordered_list_traits<
2778                     typename cc::lazy_list::make_traits<
2779                         co::compare< compare >
2780                     >::type
2781                 >
2782             >::type
2783         > SplitList_Lazy_RCU_SHB_dyn_cmp;
2784
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>
2788                 ,co::hash< hash >
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 >
2794                     >::type
2795                 >
2796             >::type
2797         > SplitList_Lazy_RCU_SHB_dyn_cmp_seqcst;
2798
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 >
2803                 ,co::hash< hash >
2804                 ,cc::split_list::ordered_list_traits<
2805                     typename cc::lazy_list::make_traits<
2806                         co::compare< compare >
2807                     >::type
2808                 >
2809             >::type
2810         > SplitList_Lazy_RCU_SHB_st_cmp;
2811
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>
2815                 ,co::hash< hash >
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 >
2822                     >::type
2823                 >
2824             >::type
2825         > SplitList_Lazy_RCU_SHB_st_cmp_seqcst;
2826
2827         // RCU_SHB + less
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>
2831                 ,co::hash< hash >
2832                 ,cc::split_list::ordered_list_traits<
2833                     typename cc::lazy_list::make_traits<
2834                         co::less< less >
2835                     >::type
2836                 >
2837             >::type
2838         > SplitList_Lazy_RCU_SHB_dyn_less;
2839
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>
2843                 ,co::hash< hash >
2844                 ,co::memory_model< co::v::sequential_consistent >
2845                 ,cc::split_list::ordered_list_traits<
2846                     typename cc::lazy_list::make_traits<
2847                         co::less< less >
2848                         ,co::memory_model< co::v::sequential_consistent >
2849                     >::type
2850                 >
2851             >::type
2852         > SplitList_Lazy_RCU_SHB_dyn_less_seqcst;
2853
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 >
2858                 ,co::hash< hash >
2859                 ,cc::split_list::ordered_list_traits<
2860                     typename cc::lazy_list::make_traits<
2861                         co::less< less >
2862                     >::type
2863                 >
2864             >::type
2865         > SplitList_Lazy_RCU_SHB_st_less;
2866
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>
2870                 ,co::hash< hash >
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<
2875                         co::less< less >
2876                         ,co::memory_model< co::v::sequential_consistent >
2877                     >::type
2878                 >
2879             >::type
2880         > SplitList_Lazy_RCU_SHB_st_less_seqcst;
2881
2882         //
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>
2886                 ,co::hash< hash >
2887                 ,cc::split_list::ordered_list_traits<
2888                     typename cc::lazy_list::make_traits<
2889                         co::compare< compare >
2890                     >::type
2891                 >
2892             >::type
2893         > SplitList_Lazy_RCU_SHT_dyn_cmp;
2894
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>
2898                 ,co::hash< hash >
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 >
2904                     >::type
2905                 >
2906             >::type
2907         > SplitList_Lazy_RCU_SHT_dyn_cmp_seqcst;
2908
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 >
2913                 ,co::hash< hash >
2914                 ,cc::split_list::ordered_list_traits<
2915                     typename cc::lazy_list::make_traits<
2916                         co::compare< compare >
2917                     >::type
2918                 >
2919             >::type
2920         > SplitList_Lazy_RCU_SHT_st_cmp;
2921
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>
2925                 ,co::hash< hash >
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 >
2932                     >::type
2933                 >
2934             >::type
2935         > SplitList_Lazy_RCU_SHT_st_cmp_seqcst;
2936
2937         // RCU_SHT + less
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>
2941                 ,co::hash< hash >
2942                 ,cc::split_list::ordered_list_traits<
2943                     typename cc::lazy_list::make_traits<
2944                         co::less< less >
2945                     >::type
2946                 >
2947             >::type
2948         > SplitList_Lazy_RCU_SHT_dyn_less;
2949
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>
2953                 ,co::hash< hash >
2954                 ,co::memory_model< co::v::sequential_consistent >
2955                 ,cc::split_list::ordered_list_traits<
2956                     typename cc::lazy_list::make_traits<
2957                         co::less< less >
2958                         ,co::memory_model< co::v::sequential_consistent >
2959                     >::type
2960                 >
2961             >::type
2962         > SplitList_Lazy_RCU_SHT_dyn_less_seqcst;
2963
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 >
2968                 ,co::hash< hash >
2969                 ,cc::split_list::ordered_list_traits<
2970                     typename cc::lazy_list::make_traits<
2971                         co::less< less >
2972                     >::type
2973                 >
2974             >::type
2975         > SplitList_Lazy_RCU_SHT_st_less;
2976
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>
2980                 ,co::hash< hash >
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<
2985                         co::less< less >
2986                         ,co::memory_model< co::v::sequential_consistent >
2987                     >::type
2988                 >
2989             >::type
2990         > SplitList_Lazy_RCU_SHT_st_less_seqcst;
2991
2992 #endif
2993         // ***************************************************************************
2994         // StripedSet
2995
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> >
3002                 , Options...
3003             >
3004         {
3005             typedef cc::StripedSet< BucketEntry,
3006                 co::mutex_policy< cc::striped_set::striping<> >
3007                 ,co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
3008                 , Options...
3009             > base_class;
3010             typedef typename base_class::resizing_policy resizing_policy_t;
3011
3012             resizing_policy_t   m_placeHolder;
3013         public:
3014             StripedHashSet_seq( size_t nCapacity, size_t nLoadFactor )
3015                 : base_class( nCapacity / nLoadFactor / 16, *(new(&m_placeHolder) resizing_policy_t( nLoadFactor )) )
3016             {}
3017
3018             template <typename Q, typename Less>
3019             bool erase_with( Q const& v, Less pred )
3020             {
3021                 return base_class::erase( v );
3022             }
3023         };
3024
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<> >
3031                 , Options...
3032             >
3033         {
3034             typedef cc::StripedSet< BucketEntry,
3035                co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
3036                 ,co::mutex_policy< cc::striped_set::striping<> >
3037                 , Options...
3038             > base_class;
3039             typedef typename base_class::resizing_policy resizing_policy_t;
3040
3041             resizing_policy_t   m_placeHolder;
3042         public:
3043             StripedHashSet_ord( size_t nCapacity, size_t nLoadFactor )
3044                 : base_class( 0, *(new(&m_placeHolder) resizing_policy_t( nLoadFactor * 1024 )) )
3045             {}
3046
3047             template <typename Q, typename Less>
3048             bool erase_with( Q const& v, Less pred )
3049             {
3050                 return base_class::erase( v );
3051             }
3052         };
3053
3054         typedef StripedHashSet_seq<
3055             std::list< key_val >
3056             , co::hash< hash2 >
3057             , co::less< less >
3058         > StripedSet_list;
3059
3060         typedef StripedHashSet_seq<
3061             std::vector< key_val >
3062             , co::hash< hash2 >
3063             , co::less< less >
3064         > StripedSet_vector;
3065
3066 #if BOOST_VERSION >= 104800
3067         typedef StripedHashSet_seq<
3068             boost::container::slist< key_val >
3069             , co::hash< hash2 >
3070             , co::less< less >
3071         > StripedSet_boost_slist;
3072
3073         typedef StripedHashSet_seq<
3074             boost::container::list< key_val >
3075             , co::hash< hash2 >
3076             , co::less< less >
3077         > StripedSet_boost_list;
3078
3079         typedef StripedHashSet_seq<
3080             boost::container::vector< key_val >
3081             , co::hash< hash2 >
3082             , co::less< less >
3083         > StripedSet_boost_vector;
3084
3085         typedef StripedHashSet_seq<
3086             boost::container::stable_vector< key_val >
3087             , co::hash< hash2 >
3088             , co::less< less >
3089         > StripedSet_boost_stable_vector;
3090 #endif
3091
3092         typedef StripedHashSet_ord<
3093             std::set< key_val, less >
3094             , co::hash< hash2 >
3095         > StripedSet_set;
3096
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 >
3100             , co::hash< hash2 >
3101         > StripedSet_hashset;
3102 #else
3103         typedef StripedHashSet_ord<
3104             std::unordered_set< key_val, hash, equal_to >
3105             , co::hash< hash2 >
3106         > StripedSet_hashset;
3107 #endif
3108
3109 #if BOOST_VERSION >= 104800
3110         typedef StripedHashSet_ord<
3111             boost::container::set< key_val, less >
3112             , co::hash< hash2 >
3113         > StripedSet_boost_set;
3114
3115         typedef StripedHashSet_ord<
3116             boost::container::flat_set< key_val, less >
3117             , co::hash< hash2 >
3118         > StripedSet_boost_flat_set;
3119 #endif
3120
3121         typedef StripedHashSet_ord<
3122             boost::unordered_set< key_val, hash, equal_to >
3123             , co::hash< hash2 >
3124         > StripedSet_boost_unordered_set;
3125
3126
3127
3128         // ***************************************************************************
3129         // RefinableSet
3130
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> >
3137             , Options...
3138             >
3139         {
3140             typedef cc::StripedSet< BucketEntry,
3141                 co::mutex_policy< cc::striped_set::refinable<> >
3142                 ,co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
3143                 , Options...
3144             > base_class;
3145             typedef typename base_class::resizing_policy resizing_policy_t;
3146
3147             resizing_policy_t   m_placeHolder;
3148         public:
3149             RefinableHashSet_seq( size_t nCapacity, size_t nLoadFactor )
3150                 : base_class( nCapacity / nLoadFactor / 16, *(new(&m_placeHolder) resizing_policy_t( nLoadFactor )) )
3151             {}
3152
3153             template <typename Q, typename Less>
3154             bool erase_with( Q const& v, Less pred )
3155             {
3156                 return base_class::erase( v );
3157             }
3158         };
3159
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<> >
3166                 , Options...
3167             >
3168         {
3169             typedef cc::StripedSet< BucketEntry,
3170                 co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
3171                 ,co::mutex_policy< cc::striped_set::refinable<> >
3172                 , Options...
3173             > base_class;
3174             typedef typename base_class::resizing_policy resizing_policy_t;
3175
3176             resizing_policy_t   m_placeHolder;
3177         public:
3178             RefinableHashSet_ord( size_t nCapacity, size_t nLoadFactor )
3179                 : base_class( 0, *(new(&m_placeHolder) resizing_policy_t( nLoadFactor * 1024 )) )
3180             {}
3181
3182             template <typename Q, typename Less>
3183             bool erase_with( Q const& v, Less pred )
3184             {
3185                 return base_class::erase( v );
3186             }
3187         };
3188
3189         typedef RefinableHashSet_seq<
3190             std::list< key_val >
3191             , co::hash< hash2 >
3192             , co::less< less >
3193         > RefinableSet_list;
3194
3195         typedef RefinableHashSet_seq<
3196             std::vector< key_val >
3197             , co::hash< hash2 >
3198             , co::less< less >
3199         > RefinableSet_vector;
3200
3201 #if BOOST_VERSION >= 104800
3202         typedef RefinableHashSet_seq<
3203             boost::container::slist< key_val >
3204             , co::hash< hash2 >
3205             , co::less< less >
3206         > RefinableSet_boost_slist;
3207
3208         typedef RefinableHashSet_seq<
3209             boost::container::list< key_val >
3210             , co::hash< hash2 >
3211             , co::less< less >
3212         > RefinableSet_boost_list;
3213
3214         typedef RefinableHashSet_seq<
3215             boost::container::vector< key_val >
3216             , co::hash< hash2 >
3217             , co::less< less >
3218         > RefinableSet_boost_vector;
3219
3220         typedef RefinableHashSet_seq<
3221             boost::container::stable_vector< key_val >
3222             , co::hash< hash2 >
3223             , co::less< less >
3224         > RefinableSet_boost_stable_vector;
3225 #endif
3226
3227         typedef RefinableHashSet_ord<
3228             std::set< key_val, less >
3229             , co::hash< hash2 >
3230         > RefinableSet_set;
3231
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 >
3235             , co::hash< hash2 >
3236         > RefinableSet_hashset;
3237 #else
3238         typedef RefinableHashSet_ord<
3239             std::unordered_set< key_val, hash, equal_to >
3240             , co::hash< hash2 >
3241         > RefinableSet_hashset;
3242 #endif
3243
3244 #if BOOST_VERSION >= 104800
3245         typedef RefinableHashSet_ord<
3246             boost::container::set< key_val, less >
3247             , co::hash< hash2 >
3248         > RefinableSet_boost_set;
3249
3250         typedef RefinableHashSet_ord<
3251             boost::container::flat_set< key_val, less >
3252             , co::hash< hash2 >
3253         > RefinableSet_boost_flat_set;
3254 #endif
3255
3256         typedef RefinableHashSet_ord<
3257             boost::unordered_set< key_val, hash, equal_to >
3258             , co::hash< hash2 >
3259         > RefinableSet_boost_unordered_set;
3260
3261
3262
3263         // ***************************************************************************
3264         // CuckooSet
3265
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;
3271
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;
3278
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;
3285
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;
3291
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;
3298
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;
3305
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;
3311
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;
3318
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;
3325
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;
3331
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;
3338
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;
3345
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;
3351
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;
3358
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;
3365
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;
3371
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;
3378
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;
3385
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;
3391
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;
3398
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;
3405
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;
3411
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;
3418
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;
3425
3426
3427         // ***************************************************************************
3428         // SkipListSet - HP
3429
3430         class traits_SkipListSet_hp_less_pascal: public cc::skip_list::make_traits <
3431                 co::less< less >
3432                 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3433                 ,co::item_counter< cds::atomicity::item_counter >
3434             >::type
3435         {};
3436         typedef cc::SkipListSet< cds::gc::HP, key_val, traits_SkipListSet_hp_less_pascal > SkipListSet_hp_less_pascal;
3437
3438         class traits_SkipListSet_hp_less_pascal_seqcst: public cc::skip_list::make_traits <
3439                 co::less< less >
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 >
3443             >::type
3444         {};
3445         typedef cc::SkipListSet< cds::gc::HP, key_val, traits_SkipListSet_hp_less_pascal_seqcst > SkipListSet_hp_less_pascal_seqcst;
3446
3447         class traits_SkipListSet_hp_less_pascal_stat: public cc::skip_list::make_traits <
3448                 co::less< less >
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 >
3452             >::type
3453         {};
3454         typedef cc::SkipListSet< cds::gc::HP, key_val, traits_SkipListSet_hp_less_pascal_stat > SkipListSet_hp_less_pascal_stat;
3455
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 >
3460         >::type
3461         {};
3462         typedef cc::SkipListSet< cds::gc::HP, key_val, traits_SkipListSet_hp_cmp_pascal > SkipListSet_hp_cmp_pascal;
3463
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 >
3469         >::type
3470         {};
3471         typedef cc::SkipListSet< cds::gc::HP, key_val, traits_SkipListSet_hp_cmp_pascal_stat > SkipListSet_hp_cmp_pascal_stat;
3472
3473         class traits_SkipListSet_hp_less_xorshift: public cc::skip_list::make_traits <
3474             co::less< less >
3475             ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3476             ,co::item_counter< cds::atomicity::item_counter >
3477         >::type
3478         {};
3479         typedef cc::SkipListSet< cds::gc::HP, key_val, traits_SkipListSet_hp_less_xorshift > SkipListSet_hp_less_xorshift;
3480
3481         class traits_SkipListSet_hp_less_xorshift_stat: public cc::skip_list::make_traits <
3482             co::less< less >
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 >
3486         >::type
3487         {};
3488         typedef cc::SkipListSet< cds::gc::HP, key_val, traits_SkipListSet_hp_less_xorshift_stat > SkipListSet_hp_less_xorshift_stat;
3489
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 >
3494         >::type
3495         {};
3496         typedef cc::SkipListSet< cds::gc::HP, key_val, traits_SkipListSet_hp_cmp_xorshift > SkipListSet_hp_cmp_xorshift;
3497
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 >
3503         >::type
3504         {};
3505         typedef cc::SkipListSet< cds::gc::HP, key_val, traits_SkipListSet_hp_cmp_xorshift_stat > SkipListSet_hp_cmp_xorshift_stat;
3506
3507         // ***************************************************************************
3508         // SkipListSet - PTB
3509
3510         class traits_SkipListSet_ptb_less_pascal: public cc::skip_list::make_traits <
3511             co::less< less >
3512             ,co::item_counter< cds::atomicity::item_counter >
3513             ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3514         >::type
3515         {};
3516         typedef cc::SkipListSet< cds::gc::PTB, key_val, traits_SkipListSet_ptb_less_pascal > SkipListSet_ptb_less_pascal;
3517
3518         class traits_SkipListSet_ptb_less_pascal_seqcst: public cc::skip_list::make_traits <
3519             co::less< less >
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 >
3523         >::type
3524         {};
3525         typedef cc::SkipListSet< cds::gc::PTB, key_val, traits_SkipListSet_ptb_less_pascal_seqcst > SkipListSet_ptb_less_pascal_seqcst;
3526
3527         class traits_SkipListSet_ptb_less_pascal_stat: public cc::skip_list::make_traits <
3528             co::less< less >
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 >
3532         >::type
3533         {};
3534         typedef cc::SkipListSet< cds::gc::PTB, key_val, traits_SkipListSet_ptb_less_pascal_stat > SkipListSet_ptb_less_pascal_stat;
3535
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 >
3540         >::type
3541         {};
3542         typedef cc::SkipListSet< cds::gc::PTB, key_val, traits_SkipListSet_ptb_cmp_pascal > SkipListSet_ptb_cmp_pascal;
3543
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 >
3549         >::type
3550         {};
3551         typedef cc::SkipListSet< cds::gc::PTB, key_val, traits_SkipListSet_ptb_cmp_pascal_stat > SkipListSet_ptb_cmp_pascal_stat;
3552
3553         class traits_SkipListSet_ptb_less_xorshift: public cc::skip_list::make_traits <
3554             co::less< less >
3555             ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3556             ,co::item_counter< cds::atomicity::item_counter >
3557         >::type
3558         {};
3559         typedef cc::SkipListSet< cds::gc::PTB, key_val, traits_SkipListSet_ptb_less_xorshift > SkipListSet_ptb_less_xorshift;
3560
3561         class traits_SkipListSet_ptb_less_xorshift_stat: public cc::skip_list::make_traits <
3562             co::less< less >
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<> >
3566         >::type
3567         {};
3568         typedef cc::SkipListSet< cds::gc::PTB, key_val, traits_SkipListSet_ptb_less_xorshift_stat > SkipListSet_ptb_less_xorshift_stat;
3569
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 >
3574         >::type
3575         {};
3576         typedef cc::SkipListSet< cds::gc::PTB, key_val, traits_SkipListSet_ptb_cmp_xorshift> SkipListSet_ptb_cmp_xorshift;
3577
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 >
3583         >::type
3584         {};
3585         typedef cc::SkipListSet< cds::gc::PTB, key_val, traits_SkipListSet_ptb_cmp_xorshift_stat > SkipListSet_ptb_cmp_xorshift_stat;
3586
3587
3588         // ***************************************************************************
3589         // SkipListSet - RCU general_instant
3590
3591         class traits_SkipListSet_rcu_gpi_less_pascal: public cc::skip_list::make_traits <
3592             co::less< less >
3593             ,co::item_counter< cds::atomicity::item_counter >
3594             ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3595         >::type
3596         {};
3597         typedef cc::SkipListSet< rcu_gpi, key_val, traits_SkipListSet_rcu_gpi_less_pascal > SkipListSet_rcu_gpi_less_pascal;
3598
3599         class traits_SkipListSet_rcu_gpi_less_pascal_seqcst: public cc::skip_list::make_traits <
3600             co::less< less >
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 >
3604         >::type
3605         {};
3606         typedef cc::SkipListSet< rcu_gpi, key_val, traits_SkipListSet_rcu_gpi_less_pascal_seqcst > SkipListSet_rcu_gpi_less_pascal_seqcst;
3607
3608         class traits_SkipListSet_rcu_gpi_less_pascal_stat: public cc::skip_list::make_traits <
3609             co::less< less >
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 >
3613         >::type
3614         {};
3615         typedef cc::SkipListSet< rcu_gpi, key_val, traits_SkipListSet_rcu_gpi_less_pascal_stat > SkipListSet_rcu_gpi_less_pascal_stat;
3616
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 >
3621         >::type
3622         {};
3623         typedef cc::SkipListSet< rcu_gpi, key_val, traits_SkipListSet_rcu_gpi_cmp_pascal > SkipListSet_rcu_gpi_cmp_pascal;
3624
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 >
3630         >::type
3631         {};
3632         typedef cc::SkipListSet< rcu_gpi, key_val, traits_SkipListSet_rcu_gpi_cmp_pascal_stat > SkipListSet_rcu_gpi_cmp_pascal_stat;
3633
3634         class traits_SkipListSet_rcu_gpi_less_xorshift: public cc::skip_list::make_traits <
3635             co::less< less >
3636             ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3637             ,co::item_counter< cds::atomicity::item_counter >
3638         >::type
3639         {};
3640         typedef cc::SkipListSet< rcu_gpi, key_val, traits_SkipListSet_rcu_gpi_less_xorshift > SkipListSet_rcu_gpi_less_xorshift;
3641
3642         class traits_SkipListSet_rcu_gpi_less_xorshift_stat: public cc::skip_list::make_traits <
3643             co::less< less >
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<> >
3647         >::type
3648         {};
3649         typedef cc::SkipListSet< rcu_gpi, key_val, traits_SkipListSet_rcu_gpi_less_xorshift_stat > SkipListSet_rcu_gpi_less_xorshift_stat;
3650
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 >
3655         >::type
3656         {};
3657         typedef cc::SkipListSet< rcu_gpi, key_val, traits_SkipListSet_rcu_gpi_cmp_xorshift > SkipListSet_rcu_gpi_cmp_xorshift;
3658
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 >
3664         >::type
3665         {};
3666         typedef cc::SkipListSet< rcu_gpi, key_val, traits_SkipListSet_rcu_gpi_cmp_xorshift_stat > SkipListSet_rcu_gpi_cmp_xorshift_stat;
3667
3668
3669         // ***************************************************************************
3670         // SkipListSet - RCU general_buffered
3671
3672         class traits_SkipListSet_rcu_gpb_less_pascal: public cc::skip_list::make_traits <
3673             co::less< less >
3674             ,co::item_counter< cds::atomicity::item_counter >
3675             ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3676         >::type
3677         {};
3678         typedef cc::SkipListSet< rcu_gpb, key_val, traits_SkipListSet_rcu_gpb_less_pascal > SkipListSet_rcu_gpb_less_pascal;
3679
3680         class traits_SkipListSet_rcu_gpb_less_pascal_seqcst: public cc::skip_list::make_traits <
3681             co::less< less >
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 >
3685         >::type
3686         {};
3687         typedef cc::SkipListSet< rcu_gpb, key_val, traits_SkipListSet_rcu_gpb_less_pascal_seqcst > SkipListSet_rcu_gpb_less_pascal_seqcst;
3688
3689         class traits_SkipListSet_rcu_gpb_less_pascal_stat: public cc::skip_list::make_traits <
3690             co::less< less >
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 >
3694         >::type
3695         {};
3696         typedef cc::SkipListSet< rcu_gpb, key_val, traits_SkipListSet_rcu_gpb_less_pascal_stat > SkipListSet_rcu_gpb_less_pascal_stat;
3697
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 >
3702         >::type
3703         {};
3704         typedef cc::SkipListSet< rcu_gpb, key_val, traits_SkipListSet_rcu_gpb_cmp_pascal > SkipListSet_rcu_gpb_cmp_pascal;
3705
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 >
3711         >::type
3712         {};
3713         typedef cc::SkipListSet< rcu_gpb, key_val, traits_SkipListSet_rcu_gpb_cmp_pascal_stat > SkipListSet_rcu_gpb_cmp_pascal_stat;
3714
3715         class traits_SkipListSet_rcu_gpb_less_xorshift: public cc::skip_list::make_traits <
3716             co::less< less >
3717             ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3718             ,co::item_counter< cds::atomicity::item_counter >
3719         >::type
3720         {};
3721         typedef cc::SkipListSet< rcu_gpb, key_val, traits_SkipListSet_rcu_gpb_less_xorshift > SkipListSet_rcu_gpb_less_xorshift;
3722
3723         class traits_SkipListSet_rcu_gpb_less_xorshift_stat: public cc::skip_list::make_traits <
3724             co::less< less >
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<> >
3728         >::type
3729         {};
3730         typedef cc::SkipListSet< rcu_gpb, key_val, traits_SkipListSet_rcu_gpb_less_xorshift_stat > SkipListSet_rcu_gpb_less_xorshift_stat;
3731
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 >
3736         >::type
3737         {};
3738         typedef cc::SkipListSet< rcu_gpb, key_val, traits_SkipListSet_rcu_gpb_cmp_xorshift > SkipListSet_rcu_gpb_cmp_xorshift;
3739
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 >
3745         >::type
3746         {};
3747         typedef cc::SkipListSet< rcu_gpb, key_val, traits_SkipListSet_rcu_gpb_cmp_xorshift_stat > SkipListSet_rcu_gpb_cmp_xorshift_stat;
3748
3749         // ***************************************************************************
3750         // SkipListSet - RCU general_threaded
3751
3752         class traits_SkipListSet_rcu_gpt_less_pascal: public cc::skip_list::make_traits <
3753             co::less< less >
3754             ,co::item_counter< cds::atomicity::item_counter >
3755             ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3756         >::type
3757         {};
3758         typedef cc::SkipListSet< rcu_gpt, key_val, traits_SkipListSet_rcu_gpt_less_pascal > SkipListSet_rcu_gpt_less_pascal;
3759
3760         class traits_SkipListSet_rcu_gpt_less_pascal_seqcst: public cc::skip_list::make_traits <
3761             co::less< less >
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 >
3765         >::type
3766         {};
3767         typedef cc::SkipListSet< rcu_gpt, key_val, traits_SkipListSet_rcu_gpt_less_pascal_seqcst > SkipListSet_rcu_gpt_less_pascal_seqcst;
3768
3769         class traits_SkipListSet_rcu_gpt_less_pascal_stat: public cc::skip_list::make_traits <
3770             co::less< less >
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 >
3774         >::type
3775         {};
3776         typedef cc::SkipListSet< rcu_gpt, key_val, traits_SkipListSet_rcu_gpt_less_pascal_stat > SkipListSet_rcu_gpt_less_pascal_stat;
3777
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 >
3782         >::type
3783         {};
3784         typedef cc::SkipListSet< rcu_gpt, key_val, traits_SkipListSet_rcu_gpt_cmp_pascal > SkipListSet_rcu_gpt_cmp_pascal;
3785
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 >
3791         >::type
3792         {};
3793         typedef cc::SkipListSet< rcu_gpt, key_val, traits_SkipListSet_rcu_gpt_cmp_pascal_stat > SkipListSet_rcu_gpt_cmp_pascal_stat;
3794
3795         class traits_SkipListSet_rcu_gpt_less_xorshift: public cc::skip_list::make_traits <
3796             co::less< less >
3797             ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3798             ,co::item_counter< cds::atomicity::item_counter >
3799         >::type
3800         {};
3801         typedef cc::SkipListSet< rcu_gpt, key_val, traits_SkipListSet_rcu_gpt_less_xorshift > SkipListSet_rcu_gpt_less_xorshift;
3802
3803         class traits_SkipListSet_rcu_gpt_less_xorshift_stat: public cc::skip_list::make_traits <
3804             co::less< less >
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<> >
3808         >::type
3809         {};
3810         typedef cc::SkipListSet< rcu_gpt, key_val, traits_SkipListSet_rcu_gpt_less_xorshift_stat > SkipListSet_rcu_gpt_less_xorshift_stat;
3811
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 >
3816         >::type
3817         {};
3818         typedef cc::SkipListSet< rcu_gpt, key_val, traits_SkipListSet_rcu_gpt_cmp_xorshift > SkipListSet_rcu_gpt_cmp_xorshift;
3819
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 >
3825         >::type
3826         {};
3827         typedef cc::SkipListSet< rcu_gpt, key_val, traits_SkipListSet_rcu_gpt_cmp_xorshift_stat > SkipListSet_rcu_gpt_cmp_xorshift_stat;
3828
3829 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
3830         // ***************************************************************************
3831         // SkipListSet - RCU signal_buffered
3832
3833         class traits_SkipListSet_rcu_shb_less_pascal: public cc::skip_list::make_traits <
3834             co::less< less >
3835             ,co::item_counter< cds::atomicity::item_counter >
3836             ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3837         >::type
3838         {};
3839         typedef cc::SkipListSet< rcu_shb, key_val, traits_SkipListSet_rcu_shb_less_pascal > SkipListSet_rcu_shb_less_pascal;
3840
3841         class traits_SkipListSet_rcu_shb_less_pascal_seqcst: public cc::skip_list::make_traits <
3842             co::less< less >
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 >
3846         >::type
3847         {};
3848         typedef cc::SkipListSet< rcu_shb, key_val, traits_SkipListSet_rcu_shb_less_pascal_seqcst > SkipListSet_rcu_shb_less_pascal_seqcst;
3849
3850         class traits_SkipListSet_rcu_shb_less_pascal_stat: public cc::skip_list::make_traits <
3851             co::less< less >
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 >
3855         >::type
3856         {};
3857         typedef cc::SkipListSet< rcu_shb, key_val, traits_SkipListSet_rcu_shb_less_pascal_stat > SkipListSet_rcu_shb_less_pascal_stat;
3858
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 >
3863         >::type
3864         {};
3865         typedef cc::SkipListSet< rcu_shb, key_val, traits_SkipListSet_rcu_shb_cmp_pascal > SkipListSet_rcu_shb_cmp_pascal;
3866
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 >
3872         >::type
3873         {};
3874         typedef cc::SkipListSet< rcu_shb, key_val, traits_SkipListSet_rcu_shb_cmp_pascal_stat > SkipListSet_rcu_shb_cmp_pascal_stat;
3875
3876         class traits_SkipListSet_rcu_shb_less_xorshift: public cc::skip_list::make_traits <
3877             co::less< less >
3878             ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3879             ,co::item_counter< cds::atomicity::item_counter >
3880         >::type
3881         {};
3882         typedef cc::SkipListSet< rcu_shb, key_val, traits_SkipListSet_rcu_shb_less_xorshift > SkipListSet_rcu_shb_less_xorshift;
3883
3884         class traits_SkipListSet_rcu_shb_less_xorshift_stat: public cc::skip_list::make_traits <
3885             co::less< less >
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<> >
3889         >::type
3890         {};
3891         typedef cc::SkipListSet< rcu_shb, key_val, traits_SkipListSet_rcu_shb_less_xorshift_stat > SkipListSet_rcu_shb_less_xorshift_stat;
3892
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 >
3897         >::type
3898         {};
3899         typedef cc::SkipListSet< rcu_shb, key_val, traits_SkipListSet_rcu_shb_cmp_xorshift > SkipListSet_rcu_shb_cmp_xorshift;
3900
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 >
3906         >::type
3907         {};
3908         typedef cc::SkipListSet< rcu_shb, key_val, traits_SkipListSet_rcu_shb_cmp_xorshift_stat > SkipListSet_rcu_shb_cmp_xorshift_stat;
3909
3910         // ***************************************************************************
3911         // SkipListSet - RCU signal_threaded
3912
3913         class traits_SkipListSet_rcu_sht_less_pascal: public cc::skip_list::make_traits <
3914             co::less< less >
3915             ,co::item_counter< cds::atomicity::item_counter >
3916             ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3917         >::type
3918         {};
3919         typedef cc::SkipListSet< rcu_sht, key_val, traits_SkipListSet_rcu_sht_less_pascal > SkipListSet_rcu_sht_less_pascal;
3920
3921         class traits_SkipListSet_rcu_sht_less_pascal_seqcst: public cc::skip_list::make_traits <
3922             co::less< less >
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 >
3926         >::type
3927         {};
3928         typedef cc::SkipListSet< rcu_sht, key_val, traits_SkipListSet_rcu_sht_less_pascal_seqcst > SkipListSet_rcu_sht_less_pascal_seqcst;
3929
3930         class traits_SkipListSet_rcu_sht_less_pascal_stat: public cc::skip_list::make_traits <
3931             co::less< less >
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 >
3935         >::type
3936         {};
3937         typedef cc::SkipListSet< rcu_sht, key_val, traits_SkipListSet_rcu_sht_less_pascal_stat > SkipListSet_rcu_sht_less_pascal_stat;
3938
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 >
3943         >::type
3944         {};
3945         typedef cc::SkipListSet< rcu_sht, key_val, traits_SkipListSet_rcu_sht_cmp_pascal > SkipListSet_rcu_sht_cmp_pascal;
3946
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 >
3952         >::type
3953         {};
3954         typedef cc::SkipListSet< rcu_sht, key_val, traits_SkipListSet_rcu_sht_cmp_pascal_stat > SkipListSet_rcu_sht_cmp_pascal_stat;
3955
3956         class traits_SkipListSet_rcu_sht_less_xorshift: public cc::skip_list::make_traits <
3957             co::less< less >
3958             ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3959             ,co::item_counter< cds::atomicity::item_counter >
3960         >::type
3961         {};
3962         typedef cc::SkipListSet< rcu_sht, key_val, traits_SkipListSet_rcu_sht_less_xorshift > SkipListSet_rcu_sht_less_xorshift;
3963
3964         class traits_SkipListSet_rcu_sht_less_xorshift_stat: public cc::skip_list::make_traits <
3965             co::less< less >
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<> >
3969         >::type
3970         {};
3971         typedef cc::SkipListSet< rcu_sht, key_val, traits_SkipListSet_rcu_sht_less_xorshift_stat > SkipListSet_rcu_sht_less_xorshift_stat;
3972
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 >
3977         >::type
3978         {};
3979         typedef cc::SkipListSet< rcu_sht, key_val, traits_SkipListSet_rcu_sht_cmp_xorshift > SkipListSet_rcu_sht_cmp_xorshift;
3980
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 >
3986         >::type
3987         {};
3988         typedef cc::SkipListSet< rcu_sht, key_val, traits_SkipListSet_rcu_sht_cmp_xorshift_stat > SkipListSet_rcu_sht_cmp_xorshift_stat;
3989 #endif
3990
3991         // ***************************************************************************
3992         // EllenBinTreeSet
3993         struct ellen_bintree_props {
3994             struct key_extractor {
3995                 void operator()( key_type& dest, key_val const& src ) const
3996                 {
3997                     dest = src.key;
3998                 }
3999             };
4000
4001             struct less {
4002                 bool operator()( key_val const& v1, key_val const& v2 ) const
4003                 {
4004                     return key_less()( v1.key, v2.key );
4005                 }
4006                 bool operator()( key_type const& k, key_val const& v ) const
4007                 {
4008                     return key_less()( k, v.key );
4009                 }
4010                 bool operator()( key_val const& v, key_type const& k ) const
4011                 {
4012                     return key_less()( v.key, k );
4013                 }
4014                 bool operator()( key_type const& k1, key_type const& k2 ) const
4015                 {
4016                     return key_less()( k1, k2 );
4017                 }
4018             };
4019
4020             struct hp_gc {
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;
4024             };
4025
4026             struct ptb_gc {
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;
4030             };
4031
4032             struct gpi {
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;
4036             };
4037             struct gpb {
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;
4041             };
4042             struct gpt {
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;
4046             };
4047 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
4048             struct shb {
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;
4052             };
4053             struct sht {
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;
4057             };
4058 #endif
4059         };
4060
4061
4062         // ***************************************************************************
4063         // EllenBinTreeSet - HP
4064
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 >
4070             >
4071             ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
4072         >::type
4073         {};
4074         typedef cc::EllenBinTreeSet< cds::gc::HP, key_type, key_val, traits_EllenBinTreeSet_hp > EllenBinTreeSet_hp;
4075
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 >
4081             >
4082             ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
4083             ,co::stat< cc::ellen_bintree::stat<> >
4084         >::type
4085         {};
4086         typedef cc::EllenBinTreeSet< cds::gc::HP, key_type, key_val, traits_EllenBinTreeSet_hp_stat > EllenBinTreeSet_hp_stat;
4087
4088         // ***************************************************************************
4089         // EllenBinTreeSet - PTB
4090
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 >
4096             >
4097             ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
4098         >::type
4099         {};
4100         typedef cc::EllenBinTreeSet< cds::gc::PTB, key_type, key_val, traits_EllenBinTreeSet_ptb > EllenBinTreeSet_ptb;
4101
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 >
4107             >
4108             ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
4109             ,co::stat< cc::ellen_bintree::stat<> >
4110         >::type
4111         {};
4112         typedef cc::EllenBinTreeSet< cds::gc::PTB, key_type, key_val, traits_EllenBinTreeSet_ptb_stat > EllenBinTreeSet_ptb_stat;
4113
4114
4115         // ***************************************************************************
4116         // EllenBinTreeSet - RCU
4117
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 >
4123             >
4124             ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
4125         >::type
4126         {};
4127         typedef cc::EllenBinTreeSet< rcu_gpi, key_type, key_val, traits_EllenBinTreeSet_rcu_gpi > EllenBinTreeSet_rcu_gpi;
4128
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 >
4134             >
4135             ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
4136             ,co::stat< cc::ellen_bintree::stat<> >
4137         >::type
4138         {};
4139         typedef cc::EllenBinTreeSet< rcu_gpi, key_type, key_val, traits_EllenBinTreeSet_rcu_gpi_stat > EllenBinTreeSet_rcu_gpi_stat;
4140
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 >
4146             >
4147             ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
4148         >::type
4149         {};
4150         typedef cc::EllenBinTreeSet< rcu_gpb, key_type, key_val, traits_EllenBinTreeSet_rcu_gpb > EllenBinTreeSet_rcu_gpb;
4151
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 >
4157             >
4158             ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
4159             ,co::stat< cc::ellen_bintree::stat<> >
4160         >::type
4161         {};
4162         typedef cc::EllenBinTreeSet< rcu_gpb, key_type, key_val, traits_EllenBinTreeSet_rcu_gpb_stat > EllenBinTreeSet_rcu_gpb_stat;
4163
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 >
4169             >
4170             ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
4171         >::type
4172         {};
4173         typedef cc::EllenBinTreeSet< rcu_gpt, key_type, key_val, traits_EllenBinTreeSet_rcu_gpt > EllenBinTreeSet_rcu_gpt;
4174
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 >
4180             >
4181             ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
4182             ,co::stat< cc::ellen_bintree::stat<> >
4183         >::type
4184         {};
4185         typedef cc::EllenBinTreeSet< rcu_gpt, key_type, key_val, traits_EllenBinTreeSet_rcu_gpt_stat > EllenBinTreeSet_rcu_gpt_stat;
4186
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 >
4193             >
4194             ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
4195         >::type
4196         {};
4197         typedef cc::EllenBinTreeSet< rcu_shb, key_type, key_val, traits_EllenBinTreeSet_rcu_shb > EllenBinTreeSet_rcu_shb;
4198
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 >
4204             >
4205             ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
4206             ,co::stat< cc::ellen_bintree::stat<> >
4207         >::type
4208         {};
4209         typedef cc::EllenBinTreeSet< rcu_shb, key_type, key_val, traits_EllenBinTreeSet_rcu_shb_stat > EllenBinTreeSet_rcu_shb_stat;
4210
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 >
4216             >
4217             ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
4218         >::type
4219         {};
4220         typedef cc::EllenBinTreeSet< rcu_sht, key_type, key_val, traits_EllenBinTreeSet_rcu_sht > EllenBinTreeSet_rcu_sht;
4221
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 >
4227             >
4228             ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
4229             ,co::stat< cc::ellen_bintree::stat<> >
4230         >::type
4231         {};
4232         typedef cc::EllenBinTreeSet< rcu_sht, key_type, key_val, traits_EllenBinTreeSet_rcu_sht_stat > EllenBinTreeSet_rcu_sht_stat;
4233
4234 #endif
4235
4236         // ***************************************************************************
4237         // Standard implementations
4238
4239         typedef StdSet< key_val, less, cds::SpinLock >                  StdSet_Spin;
4240         typedef StdSet< key_val, less, lock::NoLock>                    StdSet_NoLock;
4241
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;
4244
4245     };
4246
4247
4248     // *************************************************
4249     // print_stat
4250     // *************************************************
4251
4252     template <typename Set>
4253     static inline void print_stat( Set const& s )
4254     {}
4255
4256     template <typename GC, typename T, typename Traits>
4257     static inline void print_stat( cc::SkipListSet<GC, T, Traits> const& s )
4258     {
4259         CPPUNIT_MSG( s.statistics() );
4260     }
4261
4262     template <typename GC, typename Key, typename T, typename Traits>
4263     static inline void print_stat( cc::EllenBinTreeSet<GC, Key, T, Traits> const& s )
4264     {
4265         CPPUNIT_MSG( s.statistics() );
4266     }
4267
4268     template <typename T, typename Traits >
4269     static inline void print_stat( cc::CuckooSet< T, Traits > const& s )
4270     {
4271         CPPUNIT_MSG( s.statistics() << s.mutex_policy_statistics() );
4272     }
4273
4274     template <typename V, typename... Options>
4275     static inline void print_stat( CuckooStripedSet< V, Options... > const& s )
4276     {
4277         typedef CuckooStripedSet< V, Options... > set_type;
4278         print_stat( static_cast<typename set_type::cuckoo_base_class const&>(s) );
4279     }
4280
4281     template <typename V, typename... Options>
4282     static inline void print_stat( CuckooRefinableSet< V, Options... > const& s )
4283     {
4284         typedef CuckooRefinableSet< V, Options... > set_type;
4285         print_stat( static_cast<typename set_type::cuckoo_base_class const&>(s) );
4286     }
4287
4288
4289
4290     //*******************************************************
4291     // additional_check
4292     //*******************************************************
4293
4294     template <typename Set>
4295     static inline void additional_check( Set& set )
4296     {}
4297
4298     template <typename Set>
4299     static inline void additional_cleanup( Set& set )
4300     {}
4301
4302     namespace ellen_bintree_check {
4303         static inline void check_stat( cds::intrusive::ellen_bintree::empty_stat const& s )
4304         {
4305             // Not true for threaded RCU
4306             /*
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()
4310                 );
4311             */
4312         }
4313
4314         static inline void check_stat( cds::intrusive::ellen_bintree::stat<> const& stat )
4315         {
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() );
4322         }
4323     }   // namespace ellen_bintree_check
4324
4325     template <typename GC, typename Key, typename T, typename Traits>
4326     static inline void additional_check( cc::EllenBinTreeSet<GC, Key, T, Traits>& s )
4327     {
4328         GC::force_dispose();
4329         ellen_bintree_check::check_stat( s.statistics() );
4330     }
4331
4332     template <typename GC, typename Key, typename T, typename Traits>
4333     static inline void additional_cleanup( cc::EllenBinTreeSet<GC, Key, T, Traits>& s )
4334     {
4335         ellen_bintree_pool::internal_node_counter::reset();
4336     }
4337
4338 }   // namespace set2
4339
4340 #endif // ifndef _CDSUNIT_SET2_SET_TYPES_H