88304a24a4a840ba78c4bba0eb90ba0670b682b4
[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_dhp.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_dhp.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 #   include <cds/container/striped_set/boost_flat_set.h>
49 #endif
50 #include <cds/container/striped_set.h>
51
52 #include <cds/lock/spinlock.h>
53 #include <boost/functional/hash/hash.hpp>
54
55 #include "cppunit/cppunit_mini.h"
56 #include "lock/nolock.h"
57 #include "set2/std_set.h"
58 #include "set2/std_hash_set.h"
59 #include "michael_alloc.h"
60 #include "print_cuckoo_stat.h"
61 #include "print_skip_list_stat.h"
62 #include "print_ellenbintree_stat.h"
63 #include "ellen_bintree_update_desc_pool.h"
64
65 namespace set2 {
66     namespace cc = cds::container;
67     namespace co = cds::opt;
68
69     typedef cds::urcu::gc< cds::urcu::general_instant<> >   rcu_gpi;
70     typedef cds::urcu::gc< cds::urcu::general_buffered<> >  rcu_gpb;
71     typedef cds::urcu::gc< cds::urcu::general_threaded<> >  rcu_gpt;
72 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
73     typedef cds::urcu::gc< cds::urcu::signal_buffered<> >  rcu_shb;
74     typedef cds::urcu::gc< cds::urcu::signal_threaded<> >  rcu_sht;
75 #endif
76
77     template <typename V, typename... Options>
78     class CuckooStripedSet:
79         public cc::CuckooSet< V,
80             typename cc::cuckoo::make_traits<
81                 co::mutex_policy< cc::cuckoo::striping<> >
82                 ,Options...
83             >::type
84         >
85     {
86     public:
87         typedef typename cc::cuckoo::make_traits<
88             co::mutex_policy< cc::cuckoo::striping<> >
89             ,Options...
90         >::type cuckoo_traits;
91
92         typedef cc::CuckooSet< V, cuckoo_traits > cuckoo_base_class;
93
94     public:
95         CuckooStripedSet( size_t nCapacity, size_t nLoadFactor )
96             : cuckoo_base_class( nCapacity / (nLoadFactor * 16), (unsigned int) 4 )
97         {}
98
99         template <typename Q, typename Pred>
100         bool erase_with( Q const& key, Pred pred )
101         {
102             return cuckoo_base_class::erase_with( key, typename std::conditional< cuckoo_base_class::c_isSorted, Pred, typename Pred::equal_to>::type() );
103         }
104     };
105
106     template <typename V, typename... Options>
107     class CuckooRefinableSet:
108         public cc::CuckooSet< V,
109             typename cc::cuckoo::make_traits<
110                 co::mutex_policy< cc::cuckoo::refinable<> >
111                 ,Options...
112             >::type
113         >
114     {
115     public:
116         typedef typename cc::cuckoo::make_traits<
117             co::mutex_policy< cc::cuckoo::refinable<> >
118             ,Options...
119         >::type cuckoo_traits;
120
121         typedef cc::CuckooSet< V, cuckoo_traits > cuckoo_base_class;
122
123     public:
124         CuckooRefinableSet( size_t nCapacity, size_t nLoadFactor )
125             : cuckoo_base_class( nCapacity / (nLoadFactor * 16), (unsigned int) 4 )
126         {}
127
128         template <typename Q, typename Pred>
129         bool erase_with( Q const& key, Pred pred )
130         {
131             return cuckoo_base_class::erase_with( key, typename std::conditional< cuckoo_base_class::c_isSorted, Pred, typename Pred::equal_to>::type() );
132         }
133     };
134
135     template <typename Key>
136     struct cmp {
137         int operator ()(Key const& k1, Key const& k2) const
138         {
139             if ( std::less<Key>( k1, k2 ) )
140                 return -1;
141             return std::less<Key>( k2, k1 ) ? 1 : 0;
142         }
143     };
144
145 #define CDSUNIT_INT_COMPARE(t)  template <> struct cmp<t> { int operator()( t k1, t k2 ){ return (int)(k1 - k2); } }
146     CDSUNIT_INT_COMPARE(char);
147     CDSUNIT_INT_COMPARE(unsigned char);
148     CDSUNIT_INT_COMPARE(int);
149     CDSUNIT_INT_COMPARE(unsigned int);
150     CDSUNIT_INT_COMPARE(long);
151     CDSUNIT_INT_COMPARE(unsigned long);
152     CDSUNIT_INT_COMPARE(long long);
153     CDSUNIT_INT_COMPARE(unsigned long long);
154 #undef CDSUNIT_INT_COMPARE
155
156     template <>
157     struct cmp<std::string>
158     {
159         int operator()(std::string const& s1, std::string const& s2)
160         {
161             return s1.compare( s2 );
162         }
163         int operator()(std::string const& s1, char const * s2)
164         {
165             return s1.compare( s2 );
166         }
167         int operator()(char const * s1, std::string const& s2)
168         {
169             return -s2.compare( s1 );
170         }
171     };
172
173     template <typename Key, typename Value>
174     struct SetTypes {
175
176         typedef Key     key_type;
177         typedef Value   value_type;
178
179         struct key_val {
180             key_type    key;
181             value_type  val;
182
183             /*explicit*/ key_val( key_type const& k ): key(k), val() {}
184             key_val( key_type const& k, value_type const& v ): key(k), val(v) {}
185
186             template <typename K>
187             /*explicit*/ key_val( K const& k ): key(k) {}
188
189             template <typename K, typename T>
190             key_val( K const& k, T const& v ): key(k), val(v) {}
191         };
192
193         typedef co::v::hash<key_type>   key_hash;
194         typedef std::less<key_type>     key_less;
195         typedef cmp<key_type>           key_compare;
196
197         struct less {
198             bool operator()( key_val const& k1, key_val const& k2 ) const
199             {
200                 return key_less()( k1.key, k2.key );
201             }
202             bool operator()( key_type const& k1, key_val const& k2 ) const
203             {
204                 return key_less()( k1, k2.key );
205             }
206             bool operator()( key_val const& k1, key_type const& k2 ) const
207             {
208                 return key_less()( k1.key, k2 );
209             }
210         };
211
212         struct compare {
213             int operator()( key_val const& k1, key_val const& k2 ) const
214             {
215                 return key_compare()( k1.key, k2.key );
216             }
217             int operator()( key_type const& k1, key_val const& k2 ) const
218             {
219                 return key_compare()( k1, k2.key );
220             }
221             int operator()( key_val const& k1, key_type const& k2 ) const
222             {
223                 return key_compare()( k1.key, k2 );
224             }
225         };
226
227         struct equal_to {
228             bool operator()( key_val const& k1, key_val const& k2 ) const
229             {
230                 return key_compare()( k1.key, k2.key ) == 0;
231             }
232             bool operator()( key_type const& k1, key_val const& k2 ) const
233             {
234                 return key_compare()( k1, k2.key ) == 0;
235             }
236             bool operator()( key_val const& k1, key_type const& k2 ) const
237             {
238                 return key_compare()( k1.key, k2 ) == 0;
239             }
240         };
241
242
243         struct hash: public key_hash
244         {
245             size_t operator()( key_val const& v ) const
246             {
247                 return key_hash::operator()( v.key );
248             }
249             size_t operator()( key_type const& key ) const
250             {
251                 return key_hash::operator()( key );
252             }
253             template <typename Q>
254             size_t operator()( Q const& k ) const
255             {
256                 return key_hash::operator()( k );
257             }
258         };
259
260         struct hash2: public hash
261         {
262             size_t operator()( key_val const& k ) const
263             {
264                 size_t seed = ~hash::operator ()( k );
265                 boost::hash_combine( seed, k.key );
266                 return seed;
267             }
268             size_t operator()( key_type const& k ) const
269             {
270                 size_t seed = ~hash::operator ()( k );
271                 boost::hash_combine( seed, k );
272                 return seed;
273             }
274             template <typename Q>
275             size_t operator()( Q const& k ) const
276             {
277                 return key_hash::operator()( k );
278             }
279         };
280
281 #if (CDS_COMPILER == CDS_COMPILER_MSVC || (CDS_COMPILER == CDS_COMPILER_INTEL && CDS_OS_INTERFACE == CDS_OSI_WINDOWS)) && _MSC_VER < 1600
282         struct hash_less: public stdext::hash_compare< key_type, std::less<key_type> >
283         {
284             typedef stdext::hash_compare< key_type, std::less<key_type> > base_class;
285             size_t operator()(const key_val& kv) const
286             {
287                 return hash()(kv);
288             }
289             size_t operator()(const key_type& k ) const
290             {
291                 return hash()(k);
292             }
293
294             bool operator()(const key_val& kv1, const key_val& kv2) const
295             {
296                 return less()( kv1, kv2 );
297             }
298             bool operator()(const key_type& k1, const key_val& kv2) const
299             {
300                 return less()( k1, kv2 );
301             }
302             bool operator()(const key_val& kv1, const key_type& k2) const
303             {
304                 return less()( kv1, k2 );
305             }
306         };
307 #endif
308
309         // ***************************************************************************
310         // MichaelList
311
312         typedef cc::MichaelList< cds::gc::HP, key_val,
313             typename cc::michael_list::make_traits<
314                 co::compare< compare >
315             >::type
316         >   MichaelList_HP_cmp_stdAlloc;
317
318         typedef cc::MichaelList< cds::gc::HP, key_val,
319             typename cc::michael_list::make_traits<
320                 co::compare< compare >
321                 ,co::memory_model< co::v::sequential_consistent >
322             >::type
323         >   MichaelList_HP_cmp_stdAlloc_seqcst;
324
325         typedef cc::MichaelList< cds::gc::HP, key_val,
326             typename cc::michael_list::make_traits<
327                 co::compare< compare >,
328                 co::allocator< memory::MichaelAllocator<int> >
329             >::type
330         >   MichaelList_HP_cmp_michaelAlloc;
331
332         typedef cc::MichaelList< cds::gc::HP, key_val,
333             typename cc::michael_list::make_traits<
334                 co::less< less >
335             >::type
336         >   MichaelList_HP_less_stdAlloc;
337
338         typedef cc::MichaelList< cds::gc::HP, key_val,
339             typename cc::michael_list::make_traits<
340                 co::less< less >
341                 ,co::memory_model< co::v::sequential_consistent >
342             >::type
343         >   MichaelList_HP_less_stdAlloc_seqcst;
344
345         typedef cc::MichaelList< cds::gc::HP, key_val,
346             typename cc::michael_list::make_traits<
347                 co::less< less >,
348                 co::allocator< memory::MichaelAllocator<int> >
349             >::type
350         >   MichaelList_HP_less_michaelAlloc;
351
352         typedef cc::MichaelList< cds::gc::DHP, key_val,
353             typename cc::michael_list::make_traits<
354                 co::compare< compare >
355             >::type
356         >   MichaelList_DHP_cmp_stdAlloc;
357
358         typedef cc::MichaelList< cds::gc::DHP, key_val,
359             typename cc::michael_list::make_traits<
360                 co::compare< compare >
361                 ,co::memory_model< co::v::sequential_consistent >
362             >::type
363         >   MichaelList_DHP_cmp_stdAlloc_seqcst;
364
365         typedef cc::MichaelList< cds::gc::DHP, key_val,
366             typename cc::michael_list::make_traits<
367                 co::compare< compare >,
368                 co::allocator< memory::MichaelAllocator<int> >
369             >::type
370         >   MichaelList_DHP_cmp_michaelAlloc;
371
372         typedef cc::MichaelList< cds::gc::DHP, key_val,
373             typename cc::michael_list::make_traits<
374                 co::less< less >
375             >::type
376         >   MichaelList_DHP_less_stdAlloc;
377
378         typedef cc::MichaelList< cds::gc::DHP, key_val,
379             typename cc::michael_list::make_traits<
380                 co::less< less >
381                 ,co::memory_model< co::v::sequential_consistent >
382             >::type
383         >   MichaelList_DHP_less_stdAlloc_seqcst;
384
385         typedef cc::MichaelList< cds::gc::DHP, key_val,
386             typename cc::michael_list::make_traits<
387                 co::less< less >,
388                 co::allocator< memory::MichaelAllocator<int> >
389             >::type
390         >   MichaelList_DHP_less_michaelAlloc;
391
392
393         typedef cc::MichaelList< rcu_gpi, key_val,
394             typename cc::michael_list::make_traits<
395                 co::compare< compare >
396             >::type
397         >   MichaelList_RCU_GPI_cmp_stdAlloc;
398
399         typedef cc::MichaelList< rcu_gpi, key_val,
400             typename cc::michael_list::make_traits<
401                 co::compare< compare >
402                 ,co::memory_model< co::v::sequential_consistent >
403             >::type
404         >   MichaelList_RCU_GPI_cmp_stdAlloc_seqcst;
405
406         typedef cc::MichaelList< rcu_gpi, key_val,
407             typename cc::michael_list::make_traits<
408                 co::compare< compare >,
409                 co::allocator< memory::MichaelAllocator<int> >
410             >::type
411         >   MichaelList_RCU_GPI_cmp_michaelAlloc;
412
413         typedef cc::MichaelList< rcu_gpi, key_val,
414             typename cc::michael_list::make_traits<
415                 co::less< less >
416             >::type
417         >   MichaelList_RCU_GPI_less_stdAlloc;
418
419         typedef cc::MichaelList< rcu_gpi, key_val,
420             typename cc::michael_list::make_traits<
421                 co::less< less >
422                 ,co::memory_model< co::v::sequential_consistent >
423             >::type
424         >   MichaelList_RCU_GPI_less_stdAlloc_seqcst;
425
426         typedef cc::MichaelList< rcu_gpi, key_val,
427             typename cc::michael_list::make_traits<
428                 co::less< less >,
429                 co::allocator< memory::MichaelAllocator<int> >
430             >::type
431         >   MichaelList_RCU_GPI_less_michaelAlloc;
432
433
434         typedef cc::MichaelList< rcu_gpb, key_val,
435             typename cc::michael_list::make_traits<
436                 co::compare< compare >
437             >::type
438         >   MichaelList_RCU_GPB_cmp_stdAlloc;
439
440         typedef cc::MichaelList< rcu_gpb, key_val,
441             typename cc::michael_list::make_traits<
442                 co::compare< compare >
443                 ,co::memory_model< co::v::sequential_consistent >
444             >::type
445         >   MichaelList_RCU_GPB_cmp_stdAlloc_seqcst;
446
447         typedef cc::MichaelList< rcu_gpb, key_val,
448             typename cc::michael_list::make_traits<
449                 co::compare< compare >,
450                 co::allocator< memory::MichaelAllocator<int> >
451             >::type
452         >   MichaelList_RCU_GPB_cmp_michaelAlloc;
453
454         typedef cc::MichaelList< rcu_gpb, key_val,
455             typename cc::michael_list::make_traits<
456                 co::less< less >
457             >::type
458         >   MichaelList_RCU_GPB_less_stdAlloc;
459
460         typedef cc::MichaelList< rcu_gpb, key_val,
461             typename cc::michael_list::make_traits<
462                 co::less< less >
463                 ,co::memory_model< co::v::sequential_consistent >
464             >::type
465         >   MichaelList_RCU_GPB_less_stdAlloc_seqcst;
466
467         typedef cc::MichaelList< rcu_gpb, key_val,
468             typename cc::michael_list::make_traits<
469                 co::less< less >,
470                 co::allocator< memory::MichaelAllocator<int> >
471             >::type
472         >   MichaelList_RCU_GPB_less_michaelAlloc;
473
474
475         typedef cc::MichaelList< rcu_gpt, key_val,
476             typename cc::michael_list::make_traits<
477                 co::compare< compare >
478             >::type
479         >   MichaelList_RCU_GPT_cmp_stdAlloc;
480
481         typedef cc::MichaelList< rcu_gpt, key_val,
482             typename cc::michael_list::make_traits<
483                 co::compare< compare >
484                 ,co::memory_model< co::v::sequential_consistent >
485             >::type
486         >   MichaelList_RCU_GPT_cmp_stdAlloc_seqcst;
487
488         typedef cc::MichaelList< rcu_gpt, key_val,
489             typename cc::michael_list::make_traits<
490                 co::compare< compare >,
491                 co::allocator< memory::MichaelAllocator<int> >
492             >::type
493         >   MichaelList_RCU_GPT_cmp_michaelAlloc;
494
495         typedef cc::MichaelList< rcu_gpt, key_val,
496             typename cc::michael_list::make_traits<
497                 co::less< less >
498             >::type
499         >   MichaelList_RCU_GPT_less_stdAlloc;
500
501         typedef cc::MichaelList< rcu_gpt, key_val,
502             typename cc::michael_list::make_traits<
503                 co::less< less >
504                 ,co::memory_model< co::v::sequential_consistent >
505             >::type
506         >   MichaelList_RCU_GPT_less_stdAlloc_seqcst;
507
508         typedef cc::MichaelList< rcu_gpt, key_val,
509             typename cc::michael_list::make_traits<
510                 co::less< less >,
511                 co::allocator< memory::MichaelAllocator<int> >
512             >::type
513         >   MichaelList_RCU_GPT_less_michaelAlloc;
514
515 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
516         typedef cc::MichaelList< rcu_shb, key_val,
517             typename cc::michael_list::make_traits<
518                 co::compare< compare >
519             >::type
520         >   MichaelList_RCU_SHB_cmp_stdAlloc;
521
522         typedef cc::MichaelList< rcu_shb, key_val,
523             typename cc::michael_list::make_traits<
524                 co::compare< compare >
525                 ,co::memory_model< co::v::sequential_consistent >
526             >::type
527         >   MichaelList_RCU_SHB_cmp_stdAlloc_seqcst;
528
529         typedef cc::MichaelList< rcu_shb, key_val,
530             typename cc::michael_list::make_traits<
531                 co::compare< compare >,
532                 co::allocator< memory::MichaelAllocator<int> >
533             >::type
534         >   MichaelList_RCU_SHB_cmp_michaelAlloc;
535
536         typedef cc::MichaelList< rcu_shb, key_val,
537             typename cc::michael_list::make_traits<
538                 co::less< less >
539             >::type
540         >   MichaelList_RCU_SHB_less_stdAlloc;
541
542         typedef cc::MichaelList< rcu_shb, key_val,
543             typename cc::michael_list::make_traits<
544                 co::less< less >
545                 ,co::memory_model< co::v::sequential_consistent >
546             >::type
547         >   MichaelList_RCU_SHB_less_stdAlloc_seqcst;
548
549         typedef cc::MichaelList< rcu_shb, key_val,
550             typename cc::michael_list::make_traits<
551                 co::less< less >,
552                 co::allocator< memory::MichaelAllocator<int> >
553             >::type
554         >   MichaelList_RCU_SHB_less_michaelAlloc;
555
556
557         typedef cc::MichaelList< rcu_sht, key_val,
558             typename cc::michael_list::make_traits<
559                 co::compare< compare >
560             >::type
561         >   MichaelList_RCU_SHT_cmp_stdAlloc;
562
563         typedef cc::MichaelList< rcu_sht, key_val,
564             typename cc::michael_list::make_traits<
565                 co::compare< compare >
566                 ,co::memory_model< co::v::sequential_consistent >
567             >::type
568         >   MichaelList_RCU_SHT_cmp_stdAlloc_seqcst;
569
570         typedef cc::MichaelList< rcu_sht, key_val,
571             typename cc::michael_list::make_traits<
572                 co::compare< compare >,
573                 co::allocator< memory::MichaelAllocator<int> >
574             >::type
575         >   MichaelList_RCU_SHT_cmp_michaelAlloc;
576
577         typedef cc::MichaelList< rcu_sht, key_val,
578             typename cc::michael_list::make_traits<
579                 co::less< less >
580             >::type
581         >   MichaelList_RCU_SHT_less_stdAlloc;
582
583         typedef cc::MichaelList< rcu_sht, key_val,
584             typename cc::michael_list::make_traits<
585                 co::less< less >
586                 ,co::memory_model< co::v::sequential_consistent >
587             >::type
588         >   MichaelList_RCU_SHT_less_stdAlloc_seqcst;
589
590         typedef cc::MichaelList< rcu_sht, key_val,
591             typename cc::michael_list::make_traits<
592                 co::less< less >,
593                 co::allocator< memory::MichaelAllocator<int> >
594             >::type
595         >   MichaelList_RCU_SHT_less_michaelAlloc;
596 #endif
597
598         // ***************************************************************************
599         // MichaelHashSet based on MichaelList
600
601         typedef cc::MichaelHashSet< cds::gc::HP, MichaelList_HP_cmp_stdAlloc,
602             typename cc::michael_set::make_traits<
603                 co::hash< hash >
604             >::type
605         >   MichaelSet_HP_cmp_stdAlloc;
606
607         typedef cc::MichaelHashSet< cds::gc::HP, MichaelList_HP_cmp_stdAlloc_seqcst,
608             typename cc::michael_set::make_traits<
609                 co::hash< hash >
610             >::type
611         >   MichaelSet_HP_cmp_stdAlloc_seqcst;
612
613         typedef cc::MichaelHashSet< cds::gc::HP, MichaelList_HP_cmp_michaelAlloc,
614             typename cc::michael_set::make_traits<
615                 co::hash< hash >,
616                 co::allocator< memory::MichaelAllocator<int> >
617             >::type
618         >   MichaelSet_HP_cmp_michaelAlloc;
619
620         typedef cc::MichaelHashSet< cds::gc::HP, MichaelList_HP_less_stdAlloc,
621             typename cc::michael_set::make_traits<
622                 co::hash< hash >
623             >::type
624         >   MichaelSet_HP_less_stdAlloc;
625
626         typedef cc::MichaelHashSet< cds::gc::HP, MichaelList_HP_less_stdAlloc_seqcst,
627             typename cc::michael_set::make_traits<
628                 co::hash< hash >
629             >::type
630         >   MichaelSet_HP_less_stdAlloc_seqcst;
631
632         typedef cc::MichaelHashSet< cds::gc::HP, MichaelList_HP_less_michaelAlloc,
633             typename cc::michael_set::make_traits<
634                 co::hash< hash >,
635                 co::allocator< memory::MichaelAllocator<int> >
636             >::type
637         >   MichaelSet_HP_less_michaelAlloc;
638
639         typedef cc::MichaelHashSet< cds::gc::DHP, MichaelList_DHP_cmp_stdAlloc,
640             typename cc::michael_set::make_traits<
641                 co::hash< hash >
642             >::type
643         >   MichaelSet_DHP_cmp_stdAlloc;
644
645         typedef cc::MichaelHashSet< cds::gc::DHP, MichaelList_DHP_cmp_stdAlloc_seqcst,
646             typename cc::michael_set::make_traits<
647                 co::hash< hash >
648             >::type
649         >   MichaelSet_DHP_cmp_stdAlloc_seqcst;
650
651         typedef cc::MichaelHashSet< cds::gc::DHP, MichaelList_DHP_cmp_michaelAlloc,
652             typename cc::michael_set::make_traits<
653                 co::hash< hash >,
654                 co::allocator< memory::MichaelAllocator<int> >
655             >::type
656         >   MichaelSet_DHP_cmp_michaelAlloc;
657
658         typedef cc::MichaelHashSet< cds::gc::DHP, MichaelList_DHP_less_stdAlloc,
659             typename cc::michael_set::make_traits<
660                 co::hash< hash >
661             >::type
662         >   MichaelSet_DHP_less_stdAlloc;
663
664         typedef cc::MichaelHashSet< cds::gc::DHP, MichaelList_DHP_less_stdAlloc_seqcst,
665             typename cc::michael_set::make_traits<
666                 co::hash< hash >
667             >::type
668         >   MichaelSet_DHP_less_stdAlloc_seqcst;
669
670         typedef cc::MichaelHashSet< cds::gc::DHP, MichaelList_DHP_less_michaelAlloc,
671             typename cc::michael_set::make_traits<
672                 co::hash< hash >,
673                 co::allocator< memory::MichaelAllocator<int> >
674             >::type
675         >   MichaelSet_DHP_less_michaelAlloc;
676
677         // general_instant RCU
678         typedef cc::MichaelHashSet< rcu_gpi, MichaelList_RCU_GPI_cmp_stdAlloc,
679             typename cc::michael_set::make_traits<
680                 co::hash< hash >
681             >::type
682         >   MichaelSet_RCU_GPI_cmp_stdAlloc;
683
684         typedef cc::MichaelHashSet< rcu_gpi, MichaelList_RCU_GPI_cmp_stdAlloc_seqcst,
685             typename cc::michael_set::make_traits<
686                 co::hash< hash >
687             >::type
688         >   MichaelSet_RCU_GPI_cmp_stdAlloc_seqcst;
689
690         typedef cc::MichaelHashSet< rcu_gpi, MichaelList_RCU_GPI_cmp_michaelAlloc,
691             typename cc::michael_set::make_traits<
692                 co::hash< hash >,
693                 co::allocator< memory::MichaelAllocator<int> >
694             >::type
695         >   MichaelSet_RCU_GPI_cmp_michaelAlloc;
696
697         typedef cc::MichaelHashSet< rcu_gpi, MichaelList_RCU_GPI_less_stdAlloc,
698             typename cc::michael_set::make_traits<
699                 co::hash< hash >
700             >::type
701         >   MichaelSet_RCU_GPI_less_stdAlloc;
702
703         typedef cc::MichaelHashSet< rcu_gpi, MichaelList_RCU_GPI_less_stdAlloc_seqcst,
704             typename cc::michael_set::make_traits<
705                 co::hash< hash >
706             >::type
707         >   MichaelSet_RCU_GPI_less_stdAlloc_seqcst;
708
709         typedef cc::MichaelHashSet< rcu_gpi, MichaelList_RCU_GPI_less_michaelAlloc,
710             typename cc::michael_set::make_traits<
711                 co::hash< hash >,
712                 co::allocator< memory::MichaelAllocator<int> >
713             >::type
714         >   MichaelSet_RCU_GPI_less_michaelAlloc;
715
716         // general_buffered RCU
717         typedef cc::MichaelHashSet< rcu_gpb, MichaelList_RCU_GPB_cmp_stdAlloc,
718             typename cc::michael_set::make_traits<
719                 co::hash< hash >
720             >::type
721         >   MichaelSet_RCU_GPB_cmp_stdAlloc;
722
723         typedef cc::MichaelHashSet< rcu_gpb, MichaelList_RCU_GPB_cmp_stdAlloc_seqcst,
724             typename cc::michael_set::make_traits<
725                 co::hash< hash >
726             >::type
727         >   MichaelSet_RCU_GPB_cmp_stdAlloc_seqcst;
728
729         typedef cc::MichaelHashSet< rcu_gpb, MichaelList_RCU_GPB_cmp_michaelAlloc,
730             typename cc::michael_set::make_traits<
731                 co::hash< hash >,
732                 co::allocator< memory::MichaelAllocator<int> >
733             >::type
734         >   MichaelSet_RCU_GPB_cmp_michaelAlloc;
735
736         typedef cc::MichaelHashSet< rcu_gpb, MichaelList_RCU_GPB_less_stdAlloc,
737             typename cc::michael_set::make_traits<
738                 co::hash< hash >
739             >::type
740         >   MichaelSet_RCU_GPB_less_stdAlloc;
741
742         typedef cc::MichaelHashSet< rcu_gpb, MichaelList_RCU_GPB_less_stdAlloc_seqcst,
743             typename cc::michael_set::make_traits<
744                 co::hash< hash >
745             >::type
746         >   MichaelSet_RCU_GPB_less_stdAlloc_seqcst;
747
748         typedef cc::MichaelHashSet< rcu_gpb, MichaelList_RCU_GPB_less_michaelAlloc,
749             typename cc::michael_set::make_traits<
750                 co::hash< hash >,
751                 co::allocator< memory::MichaelAllocator<int> >
752             >::type
753         >   MichaelSet_RCU_GPB_less_michaelAlloc;
754
755         // general_threaded RCU
756         typedef cc::MichaelHashSet< rcu_gpt, MichaelList_RCU_GPT_cmp_stdAlloc,
757             typename cc::michael_set::make_traits<
758                 co::hash< hash >
759             >::type
760         >   MichaelSet_RCU_GPT_cmp_stdAlloc;
761
762         typedef cc::MichaelHashSet< rcu_gpt, MichaelList_RCU_GPT_cmp_stdAlloc_seqcst,
763             typename cc::michael_set::make_traits<
764                 co::hash< hash >
765             >::type
766         >   MichaelSet_RCU_GPT_cmp_stdAlloc_seqcst;
767
768         typedef cc::MichaelHashSet< rcu_gpt, MichaelList_RCU_GPT_cmp_michaelAlloc,
769             typename cc::michael_set::make_traits<
770                 co::hash< hash >,
771                 co::allocator< memory::MichaelAllocator<int> >
772             >::type
773         >   MichaelSet_RCU_GPT_cmp_michaelAlloc;
774
775         typedef cc::MichaelHashSet< rcu_gpt, MichaelList_RCU_GPT_less_stdAlloc,
776             typename cc::michael_set::make_traits<
777                 co::hash< hash >
778             >::type
779         >   MichaelSet_RCU_GPT_less_stdAlloc;
780
781         typedef cc::MichaelHashSet< rcu_gpt, MichaelList_RCU_GPT_less_stdAlloc_seqcst,
782             typename cc::michael_set::make_traits<
783                 co::hash< hash >
784             >::type
785         >   MichaelSet_RCU_GPT_less_stdAlloc_seqcst;
786
787         typedef cc::MichaelHashSet< rcu_gpt, MichaelList_RCU_GPT_less_michaelAlloc,
788             typename cc::michael_set::make_traits<
789                 co::hash< hash >,
790                 co::allocator< memory::MichaelAllocator<int> >
791             >::type
792         >   MichaelSet_RCU_GPT_less_michaelAlloc;
793
794 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
795         // signal_buffered RCU
796         typedef cc::MichaelHashSet< rcu_shb, MichaelList_RCU_SHB_cmp_stdAlloc,
797             typename cc::michael_set::make_traits<
798                 co::hash< hash >
799             >::type
800         >   MichaelSet_RCU_SHB_cmp_stdAlloc;
801
802         typedef cc::MichaelHashSet< rcu_shb, MichaelList_RCU_SHB_cmp_stdAlloc_seqcst,
803             typename cc::michael_set::make_traits<
804                 co::hash< hash >
805             >::type
806         >   MichaelSet_RCU_SHB_cmp_stdAlloc_seqcst;
807
808         typedef cc::MichaelHashSet< rcu_shb, MichaelList_RCU_SHB_cmp_michaelAlloc,
809             typename cc::michael_set::make_traits<
810                 co::hash< hash >,
811                 co::allocator< memory::MichaelAllocator<int> >
812             >::type
813         >   MichaelSet_RCU_SHB_cmp_michaelAlloc;
814
815         typedef cc::MichaelHashSet< rcu_shb, MichaelList_RCU_SHB_less_stdAlloc,
816             typename cc::michael_set::make_traits<
817                 co::hash< hash >
818             >::type
819         >   MichaelSet_RCU_SHB_less_stdAlloc;
820
821         typedef cc::MichaelHashSet< rcu_shb, MichaelList_RCU_SHB_less_stdAlloc_seqcst,
822             typename cc::michael_set::make_traits<
823                 co::hash< hash >
824             >::type
825         >   MichaelSet_RCU_SHB_less_stdAlloc_seqcst;
826
827         typedef cc::MichaelHashSet< rcu_shb, MichaelList_RCU_SHB_less_michaelAlloc,
828             typename cc::michael_set::make_traits<
829                 co::hash< hash >,
830                 co::allocator< memory::MichaelAllocator<int> >
831             >::type
832         >   MichaelSet_RCU_SHB_less_michaelAlloc;
833
834         // signal_threaded RCU
835         typedef cc::MichaelHashSet< rcu_sht, MichaelList_RCU_SHT_cmp_stdAlloc,
836             typename cc::michael_set::make_traits<
837                 co::hash< hash >
838             >::type
839         >   MichaelSet_RCU_SHT_cmp_stdAlloc;
840
841         typedef cc::MichaelHashSet< rcu_sht, MichaelList_RCU_SHT_cmp_stdAlloc_seqcst,
842             typename cc::michael_set::make_traits<
843                 co::hash< hash >
844             >::type
845         >   MichaelSet_RCU_SHT_cmp_stdAlloc_seqcst;
846
847         typedef cc::MichaelHashSet< rcu_sht, MichaelList_RCU_SHT_cmp_michaelAlloc,
848             typename cc::michael_set::make_traits<
849                 co::hash< hash >,
850                 co::allocator< memory::MichaelAllocator<int> >
851             >::type
852         >   MichaelSet_RCU_SHT_cmp_michaelAlloc;
853
854         typedef cc::MichaelHashSet< rcu_sht, MichaelList_RCU_SHT_less_stdAlloc,
855             typename cc::michael_set::make_traits<
856                 co::hash< hash >
857             >::type
858         >   MichaelSet_RCU_SHT_less_stdAlloc;
859
860         typedef cc::MichaelHashSet< rcu_sht, MichaelList_RCU_SHT_less_stdAlloc_seqcst,
861             typename cc::michael_set::make_traits<
862                 co::hash< hash >
863             >::type
864         >   MichaelSet_RCU_SHT_less_stdAlloc_seqcst;
865
866         typedef cc::MichaelHashSet< rcu_sht, MichaelList_RCU_SHT_less_michaelAlloc,
867             typename cc::michael_set::make_traits<
868                 co::hash< hash >,
869                 co::allocator< memory::MichaelAllocator<int> >
870             >::type
871         >   MichaelSet_RCU_SHT_less_michaelAlloc;
872
873 #endif
874
875         // ***************************************************************************
876         // LazyList
877
878         typedef cc::LazyList< cds::gc::HP, key_val,
879             typename cc::lazy_list::make_traits<
880                 co::compare< compare >
881             >::type
882         >   LazyList_HP_cmp_stdAlloc;
883
884         typedef cc::LazyList< cds::gc::HP, key_val,
885             typename cc::lazy_list::make_traits<
886                 co::compare< compare >
887                 ,co::memory_model< co::v::sequential_consistent >
888             >::type
889         >   LazyList_HP_cmp_stdAlloc_seqcst;
890
891         typedef cc::LazyList< cds::gc::HP, key_val,
892             typename cc::lazy_list::make_traits<
893                 co::compare< compare >,
894                 co::allocator< memory::MichaelAllocator<int> >
895             >::type
896         >   LazyList_HP_cmp_michaelAlloc;
897
898         typedef cc::LazyList< cds::gc::HP, key_val,
899             typename cc::lazy_list::make_traits<
900                 co::less< less >
901             >::type
902         >   LazyList_HP_less_stdAlloc;
903
904         typedef cc::LazyList< cds::gc::HP, key_val,
905             typename cc::lazy_list::make_traits<
906                 co::less< less >
907                 ,co::memory_model< co::v::sequential_consistent >
908             >::type
909         >   LazyList_HP_less_stdAlloc_seqcst;
910
911         typedef cc::LazyList< cds::gc::HP, key_val,
912             typename cc::lazy_list::make_traits<
913                 co::less< less >,
914                 co::allocator< memory::MichaelAllocator<int> >
915             >::type
916         >   LazyList_HP_less_michaelAlloc;
917
918         typedef cc::LazyList< cds::gc::DHP, key_val,
919             typename cc::lazy_list::make_traits<
920                 co::compare< compare >
921             >::type
922         >   LazyList_DHP_cmp_stdAlloc;
923
924         typedef cc::LazyList< cds::gc::DHP, key_val,
925             typename cc::lazy_list::make_traits<
926                 co::compare< compare >
927                 ,co::memory_model< co::v::sequential_consistent >
928             >::type
929         >   LazyList_DHP_cmp_stdAlloc_seqcst;
930
931         typedef cc::LazyList< cds::gc::DHP, key_val,
932             typename cc::lazy_list::make_traits<
933                 co::compare< compare >,
934                 co::allocator< memory::MichaelAllocator<int> >
935             >::type
936         >   LazyList_DHP_cmp_michaelAlloc;
937
938         typedef cc::LazyList< cds::gc::DHP, key_val,
939             typename cc::lazy_list::make_traits<
940                 co::less< less >
941             >::type
942         >   LazyList_DHP_less_stdAlloc;
943
944         typedef cc::LazyList< cds::gc::DHP, key_val,
945             typename cc::lazy_list::make_traits<
946                 co::less< less >
947                 ,co::memory_model< co::v::sequential_consistent >
948             >::type
949         >   LazyList_DHP_less_stdAlloc_seqcst;
950
951         typedef cc::LazyList< cds::gc::DHP, key_val,
952             typename cc::lazy_list::make_traits<
953                 co::less< less >,
954                 co::allocator< memory::MichaelAllocator<int> >
955             >::type
956         >   LazyList_DHP_less_michaelAlloc;
957
958         // RCU
959         typedef cc::LazyList< rcu_gpi, key_val,
960             typename cc::lazy_list::make_traits<
961                 co::compare< compare >
962             >::type
963         >   LazyList_RCU_GPI_cmp_stdAlloc;
964
965         typedef cc::LazyList< rcu_gpi, key_val,
966             typename cc::lazy_list::make_traits<
967                 co::compare< compare >
968                 ,co::memory_model< co::v::sequential_consistent >
969             >::type
970         >   LazyList_RCU_GPI_cmp_stdAlloc_seqcst;
971
972         typedef cc::LazyList< rcu_gpi, key_val,
973             typename cc::lazy_list::make_traits<
974                 co::compare< compare >,
975                 co::allocator< memory::MichaelAllocator<int> >
976             >::type
977         >   LazyList_RCU_GPI_cmp_michaelAlloc;
978
979         typedef cc::LazyList< rcu_gpi, key_val,
980             typename cc::lazy_list::make_traits<
981                 co::less< less >
982             >::type
983         >   LazyList_RCU_GPI_less_stdAlloc;
984
985         typedef cc::LazyList< rcu_gpi, key_val,
986             typename cc::lazy_list::make_traits<
987                 co::less< less >
988                 ,co::memory_model< co::v::sequential_consistent >
989             >::type
990         >   LazyList_RCU_GPI_less_stdAlloc_seqcst;
991
992         typedef cc::LazyList< rcu_gpi, key_val,
993             typename cc::lazy_list::make_traits<
994                 co::less< less >,
995                 co::allocator< memory::MichaelAllocator<int> >
996             >::type
997         >   LazyList_RCU_GPI_less_michaelAlloc;
998
999         typedef cc::LazyList< rcu_gpb, key_val,
1000             typename cc::lazy_list::make_traits<
1001                 co::compare< compare >
1002             >::type
1003         >   LazyList_RCU_GPB_cmp_stdAlloc;
1004
1005         typedef cc::LazyList< rcu_gpb, key_val,
1006             typename cc::lazy_list::make_traits<
1007                 co::compare< compare >
1008                 ,co::memory_model< co::v::sequential_consistent >
1009             >::type
1010         >   LazyList_RCU_GPB_cmp_stdAlloc_seqcst;
1011
1012         typedef cc::LazyList< rcu_gpb, key_val,
1013             typename cc::lazy_list::make_traits<
1014                 co::compare< compare >,
1015                 co::allocator< memory::MichaelAllocator<int> >
1016             >::type
1017         >   LazyList_RCU_GPB_cmp_michaelAlloc;
1018
1019         typedef cc::LazyList< rcu_gpb, key_val,
1020             typename cc::lazy_list::make_traits<
1021                 co::less< less >
1022             >::type
1023         >   LazyList_RCU_GPB_less_stdAlloc;
1024
1025         typedef cc::LazyList< rcu_gpb, key_val,
1026             typename cc::lazy_list::make_traits<
1027                 co::less< less >
1028                 ,co::memory_model< co::v::sequential_consistent >
1029             >::type
1030         >   LazyList_RCU_GPB_less_stdAlloc_seqcst;
1031
1032         typedef cc::LazyList< rcu_gpb, key_val,
1033             typename cc::lazy_list::make_traits<
1034                 co::less< less >,
1035                 co::allocator< memory::MichaelAllocator<int> >
1036             >::type
1037         >   LazyList_RCU_GPB_less_michaelAlloc;
1038
1039         //
1040         typedef cc::LazyList< rcu_gpt, key_val,
1041             typename cc::lazy_list::make_traits<
1042                 co::compare< compare >
1043             >::type
1044         >   LazyList_RCU_GPT_cmp_stdAlloc;
1045
1046         typedef cc::LazyList< rcu_gpt, key_val,
1047             typename cc::lazy_list::make_traits<
1048                 co::compare< compare >
1049                 ,co::memory_model< co::v::sequential_consistent >
1050             >::type
1051         >   LazyList_RCU_GPT_cmp_stdAlloc_seqcst;
1052
1053         typedef cc::LazyList< rcu_gpt, key_val,
1054             typename cc::lazy_list::make_traits<
1055                 co::compare< compare >,
1056                 co::allocator< memory::MichaelAllocator<int> >
1057             >::type
1058         >   LazyList_RCU_GPT_cmp_michaelAlloc;
1059
1060         typedef cc::LazyList< rcu_gpt, key_val,
1061             typename cc::lazy_list::make_traits<
1062                 co::less< less >
1063             >::type
1064         >   LazyList_RCU_GPT_less_stdAlloc;
1065
1066         typedef cc::LazyList< rcu_gpt, key_val,
1067             typename cc::lazy_list::make_traits<
1068                 co::less< less >
1069                 ,co::memory_model< co::v::sequential_consistent >
1070             >::type
1071         >   LazyList_RCU_GPT_less_stdAlloc_seqcst;
1072
1073         typedef cc::LazyList< rcu_gpt, key_val,
1074             typename cc::lazy_list::make_traits<
1075                 co::less< less >,
1076                 co::allocator< memory::MichaelAllocator<int> >
1077             >::type
1078         >   LazyList_RCU_GPT_less_michaelAlloc;
1079
1080 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
1081         typedef cc::LazyList< rcu_shb, key_val,
1082             typename cc::lazy_list::make_traits<
1083                 co::compare< compare >
1084             >::type
1085         >   LazyList_RCU_SHB_cmp_stdAlloc;
1086
1087         typedef cc::LazyList< rcu_shb, key_val,
1088             typename cc::lazy_list::make_traits<
1089                 co::compare< compare >
1090                 ,co::memory_model< co::v::sequential_consistent >
1091             >::type
1092         >   LazyList_RCU_SHB_cmp_stdAlloc_seqcst;
1093
1094         typedef cc::LazyList< rcu_shb, key_val,
1095             typename cc::lazy_list::make_traits<
1096                 co::compare< compare >,
1097                 co::allocator< memory::MichaelAllocator<int> >
1098             >::type
1099         >   LazyList_RCU_SHB_cmp_michaelAlloc;
1100
1101         typedef cc::LazyList< rcu_shb, key_val,
1102             typename cc::lazy_list::make_traits<
1103                 co::less< less >
1104             >::type
1105         >   LazyList_RCU_SHB_less_stdAlloc;
1106
1107         typedef cc::LazyList< rcu_shb, key_val,
1108             typename cc::lazy_list::make_traits<
1109                 co::less< less >
1110                 ,co::memory_model< co::v::sequential_consistent >
1111             >::type
1112         >   LazyList_RCU_SHB_less_stdAlloc_seqcst;
1113
1114         typedef cc::LazyList< rcu_shb, key_val,
1115             typename cc::lazy_list::make_traits<
1116                 co::less< less >,
1117                 co::allocator< memory::MichaelAllocator<int> >
1118             >::type
1119         >   LazyList_RCU_SHB_less_michaelAlloc;
1120
1121         //
1122         typedef cc::LazyList< rcu_sht, key_val,
1123             typename cc::lazy_list::make_traits<
1124                 co::compare< compare >
1125             >::type
1126         >   LazyList_RCU_SHT_cmp_stdAlloc;
1127
1128         typedef cc::LazyList< rcu_sht, key_val,
1129             typename cc::lazy_list::make_traits<
1130                 co::compare< compare >
1131                 ,co::memory_model< co::v::sequential_consistent >
1132             >::type
1133         >   LazyList_RCU_SHT_cmp_stdAlloc_seqcst;
1134
1135         typedef cc::LazyList< rcu_sht, key_val,
1136             typename cc::lazy_list::make_traits<
1137                 co::compare< compare >,
1138                 co::allocator< memory::MichaelAllocator<int> >
1139             >::type
1140         >   LazyList_RCU_SHT_cmp_michaelAlloc;
1141
1142         typedef cc::LazyList< rcu_sht, key_val,
1143             typename cc::lazy_list::make_traits<
1144                 co::less< less >
1145             >::type
1146         >   LazyList_RCU_SHT_less_stdAlloc;
1147
1148         typedef cc::LazyList< rcu_sht, key_val,
1149             typename cc::lazy_list::make_traits<
1150                 co::less< less >
1151                 ,co::memory_model< co::v::sequential_consistent >
1152             >::type
1153         >   LazyList_RCU_SHT_less_stdAlloc_seqcst;
1154
1155         typedef cc::LazyList< rcu_sht, key_val,
1156             typename cc::lazy_list::make_traits<
1157                 co::less< less >,
1158                 co::allocator< memory::MichaelAllocator<int> >
1159             >::type
1160         >   LazyList_RCU_SHT_less_michaelAlloc;
1161
1162 #endif
1163
1164         // ***************************************************************************
1165         // MichaelHashSet based on LazyList
1166
1167         typedef cc::MichaelHashSet< cds::gc::HP, LazyList_HP_cmp_stdAlloc,
1168             typename cc::michael_set::make_traits<
1169                 co::hash< hash >
1170             >::type
1171         >   MichaelSet_Lazy_HP_cmp_stdAlloc;
1172
1173         typedef cc::MichaelHashSet< cds::gc::HP, LazyList_HP_cmp_stdAlloc_seqcst,
1174             typename cc::michael_set::make_traits<
1175                 co::hash< hash >
1176             >::type
1177         >   MichaelSet_Lazy_HP_cmp_stdAlloc_seqcst;
1178
1179         typedef cc::MichaelHashSet< cds::gc::HP, LazyList_HP_cmp_michaelAlloc,
1180             typename cc::michael_set::make_traits<
1181                 co::hash< hash >,
1182                 co::allocator< memory::MichaelAllocator<int> >
1183             >::type
1184         >   MichaelSet_Lazy_HP_cmp_michaelAlloc;
1185
1186         typedef cc::MichaelHashSet< cds::gc::HP, LazyList_HP_less_stdAlloc,
1187             typename cc::michael_set::make_traits<
1188                 co::hash< hash >
1189             >::type
1190         >   MichaelSet_Lazy_HP_less_stdAlloc;
1191
1192         typedef cc::MichaelHashSet< cds::gc::HP, LazyList_HP_less_stdAlloc_seqcst,
1193             typename cc::michael_set::make_traits<
1194                 co::hash< hash >
1195             >::type
1196         >   MichaelSet_Lazy_HP_less_stdAlloc_seqcst;
1197
1198         typedef cc::MichaelHashSet< cds::gc::HP, LazyList_HP_less_michaelAlloc,
1199             typename cc::michael_set::make_traits<
1200                 co::hash< hash >,
1201                 co::allocator< memory::MichaelAllocator<int> >
1202             >::type
1203         >   MichaelSet_Lazy_HP_less_michaelAlloc;
1204
1205         typedef cc::MichaelHashSet< cds::gc::DHP, LazyList_DHP_cmp_stdAlloc,
1206             typename cc::michael_set::make_traits<
1207                 co::hash< hash >
1208             >::type
1209         >   MichaelSet_Lazy_DHP_cmp_stdAlloc;
1210
1211         typedef cc::MichaelHashSet< cds::gc::DHP, LazyList_DHP_cmp_stdAlloc_seqcst,
1212             typename cc::michael_set::make_traits<
1213                 co::hash< hash >
1214             >::type
1215         >   MichaelSet_Lazy_DHP_cmp_stdAlloc_seqcst;
1216
1217         typedef cc::MichaelHashSet< cds::gc::DHP, LazyList_DHP_cmp_michaelAlloc,
1218             typename cc::michael_set::make_traits<
1219                 co::hash< hash >,
1220                 co::allocator< memory::MichaelAllocator<int> >
1221             >::type
1222         >   MichaelSet_Lazy_DHP_cmp_michaelAlloc;
1223
1224         typedef cc::MichaelHashSet< cds::gc::DHP, LazyList_DHP_less_stdAlloc,
1225             typename cc::michael_set::make_traits<
1226                 co::hash< hash >
1227             >::type
1228         >   MichaelSet_Lazy_DHP_less_stdAlloc;
1229
1230         typedef cc::MichaelHashSet< cds::gc::DHP, LazyList_DHP_less_stdAlloc_seqcst,
1231             typename cc::michael_set::make_traits<
1232                 co::hash< hash >
1233             >::type
1234         >   MichaelSet_Lazy_DHP_less_stdAlloc_seqcst;
1235
1236         typedef cc::MichaelHashSet< cds::gc::DHP, LazyList_DHP_less_michaelAlloc,
1237             typename cc::michael_set::make_traits<
1238                 co::hash< hash >,
1239                 co::allocator< memory::MichaelAllocator<int> >
1240             >::type
1241         >   MichaelSet_Lazy_DHP_less_michaelAlloc;
1242
1243         // RCU
1244         typedef cc::MichaelHashSet< rcu_gpi, LazyList_RCU_GPI_cmp_stdAlloc,
1245             typename cc::michael_set::make_traits<
1246                 co::hash< hash >
1247             >::type
1248         >   MichaelSet_Lazy_RCU_GPI_cmp_stdAlloc;
1249
1250         typedef cc::MichaelHashSet< rcu_gpi, LazyList_RCU_GPI_cmp_stdAlloc_seqcst,
1251             typename cc::michael_set::make_traits<
1252                 co::hash< hash >
1253             >::type
1254         >   MichaelSet_Lazy_RCU_GPI_cmp_stdAlloc_seqcst;
1255
1256         typedef cc::MichaelHashSet< rcu_gpi, LazyList_RCU_GPI_cmp_michaelAlloc,
1257             typename cc::michael_set::make_traits<
1258                 co::hash< hash >,
1259                 co::allocator< memory::MichaelAllocator<int> >
1260             >::type
1261         >   MichaelSet_Lazy_RCU_GPI_cmp_michaelAlloc;
1262
1263         typedef cc::MichaelHashSet< rcu_gpi, LazyList_RCU_GPI_less_stdAlloc,
1264             typename cc::michael_set::make_traits<
1265                 co::hash< hash >
1266             >::type
1267         >   MichaelSet_Lazy_RCU_GPI_less_stdAlloc;
1268
1269         typedef cc::MichaelHashSet< rcu_gpi, LazyList_RCU_GPI_less_stdAlloc_seqcst,
1270             typename cc::michael_set::make_traits<
1271                 co::hash< hash >
1272             >::type
1273         >   MichaelSet_Lazy_RCU_GPI_less_stdAlloc_seqcst;
1274
1275         typedef cc::MichaelHashSet< rcu_gpi, LazyList_RCU_GPI_less_michaelAlloc,
1276             typename cc::michael_set::make_traits<
1277                 co::hash< hash >,
1278                 co::allocator< memory::MichaelAllocator<int> >
1279             >::type
1280         >   MichaelSet_Lazy_RCU_GPI_less_michaelAlloc;
1281
1282
1283         typedef cc::MichaelHashSet< rcu_gpb, LazyList_RCU_GPB_cmp_stdAlloc,
1284             typename cc::michael_set::make_traits<
1285                 co::hash< hash >
1286             >::type
1287         >   MichaelSet_Lazy_RCU_GPB_cmp_stdAlloc;
1288
1289         typedef cc::MichaelHashSet< rcu_gpb, LazyList_RCU_GPB_cmp_stdAlloc_seqcst,
1290             typename cc::michael_set::make_traits<
1291                 co::hash< hash >
1292             >::type
1293         >   MichaelSet_Lazy_RCU_GPB_cmp_stdAlloc_seqcst;
1294
1295         typedef cc::MichaelHashSet< rcu_gpb, LazyList_RCU_GPB_cmp_michaelAlloc,
1296             typename cc::michael_set::make_traits<
1297                 co::hash< hash >,
1298                 co::allocator< memory::MichaelAllocator<int> >
1299             >::type
1300         >   MichaelSet_Lazy_RCU_GPB_cmp_michaelAlloc;
1301
1302         typedef cc::MichaelHashSet< rcu_gpb, LazyList_RCU_GPB_less_stdAlloc,
1303             typename cc::michael_set::make_traits<
1304                 co::hash< hash >
1305             >::type
1306         >   MichaelSet_Lazy_RCU_GPB_less_stdAlloc;
1307
1308         typedef cc::MichaelHashSet< rcu_gpb, LazyList_RCU_GPB_less_stdAlloc_seqcst,
1309             typename cc::michael_set::make_traits<
1310                 co::hash< hash >
1311             >::type
1312         >   MichaelSet_Lazy_RCU_GPB_less_stdAlloc_seqcst;
1313
1314         typedef cc::MichaelHashSet< rcu_gpb, LazyList_RCU_GPB_less_michaelAlloc,
1315             typename cc::michael_set::make_traits<
1316                 co::hash< hash >,
1317                 co::allocator< memory::MichaelAllocator<int> >
1318             >::type
1319         >   MichaelSet_Lazy_RCU_GPB_less_michaelAlloc;
1320
1321
1322         typedef cc::MichaelHashSet< rcu_gpt, LazyList_RCU_GPT_cmp_stdAlloc,
1323             typename cc::michael_set::make_traits<
1324                 co::hash< hash >
1325             >::type
1326         >   MichaelSet_Lazy_RCU_GPT_cmp_stdAlloc;
1327
1328         typedef cc::MichaelHashSet< rcu_gpt, LazyList_RCU_GPT_cmp_stdAlloc_seqcst,
1329             typename cc::michael_set::make_traits<
1330                 co::hash< hash >
1331             >::type
1332         >   MichaelSet_Lazy_RCU_GPT_cmp_stdAlloc_seqcst;
1333
1334         typedef cc::MichaelHashSet< rcu_gpt, LazyList_RCU_GPT_cmp_michaelAlloc,
1335             typename cc::michael_set::make_traits<
1336                 co::hash< hash >,
1337                 co::allocator< memory::MichaelAllocator<int> >
1338             >::type
1339         >   MichaelSet_Lazy_RCU_GPT_cmp_michaelAlloc;
1340
1341         typedef cc::MichaelHashSet< rcu_gpt, LazyList_RCU_GPT_less_stdAlloc,
1342             typename cc::michael_set::make_traits<
1343                 co::hash< hash >
1344             >::type
1345         >   MichaelSet_Lazy_RCU_GPT_less_stdAlloc;
1346
1347         typedef cc::MichaelHashSet< rcu_gpt, LazyList_RCU_GPT_less_stdAlloc_seqcst,
1348             typename cc::michael_set::make_traits<
1349                 co::hash< hash >
1350             >::type
1351         >   MichaelSet_Lazy_RCU_GPT_less_stdAlloc_seqcst;
1352
1353         typedef cc::MichaelHashSet< rcu_gpt, LazyList_RCU_GPT_less_michaelAlloc,
1354             typename cc::michael_set::make_traits<
1355                 co::hash< hash >,
1356                 co::allocator< memory::MichaelAllocator<int> >
1357             >::type
1358         >   MichaelSet_Lazy_RCU_GPT_less_michaelAlloc;
1359
1360 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
1361         typedef cc::MichaelHashSet< rcu_shb, LazyList_RCU_SHB_cmp_stdAlloc,
1362             typename cc::michael_set::make_traits<
1363                 co::hash< hash >
1364             >::type
1365         >   MichaelSet_Lazy_RCU_SHB_cmp_stdAlloc;
1366
1367         typedef cc::MichaelHashSet< rcu_shb, LazyList_RCU_SHB_cmp_stdAlloc_seqcst,
1368             typename cc::michael_set::make_traits<
1369                 co::hash< hash >
1370             >::type
1371         >   MichaelSet_Lazy_RCU_SHB_cmp_stdAlloc_seqcst;
1372
1373         typedef cc::MichaelHashSet< rcu_shb, LazyList_RCU_SHB_cmp_michaelAlloc,
1374             typename cc::michael_set::make_traits<
1375                 co::hash< hash >,
1376                 co::allocator< memory::MichaelAllocator<int> >
1377             >::type
1378         >   MichaelSet_Lazy_RCU_SHB_cmp_michaelAlloc;
1379
1380         typedef cc::MichaelHashSet< rcu_shb, LazyList_RCU_SHB_less_stdAlloc,
1381             typename cc::michael_set::make_traits<
1382                 co::hash< hash >
1383             >::type
1384         >   MichaelSet_Lazy_RCU_SHB_less_stdAlloc;
1385
1386         typedef cc::MichaelHashSet< rcu_shb, LazyList_RCU_SHB_less_stdAlloc_seqcst,
1387             typename cc::michael_set::make_traits<
1388                 co::hash< hash >
1389             >::type
1390         >   MichaelSet_Lazy_RCU_SHB_less_stdAlloc_seqcst;
1391
1392         typedef cc::MichaelHashSet< rcu_shb, LazyList_RCU_SHB_less_michaelAlloc,
1393             typename cc::michael_set::make_traits<
1394                 co::hash< hash >,
1395                 co::allocator< memory::MichaelAllocator<int> >
1396             >::type
1397         >   MichaelSet_Lazy_RCU_SHB_less_michaelAlloc;
1398
1399
1400         typedef cc::MichaelHashSet< rcu_sht, LazyList_RCU_SHT_cmp_stdAlloc,
1401             typename cc::michael_set::make_traits<
1402                 co::hash< hash >
1403             >::type
1404         >   MichaelSet_Lazy_RCU_SHT_cmp_stdAlloc;
1405
1406         typedef cc::MichaelHashSet< rcu_sht, LazyList_RCU_SHT_cmp_stdAlloc_seqcst,
1407             typename cc::michael_set::make_traits<
1408                 co::hash< hash >
1409             >::type
1410         >   MichaelSet_Lazy_RCU_SHT_cmp_stdAlloc_seqcst;
1411
1412         typedef cc::MichaelHashSet< rcu_sht, LazyList_RCU_SHT_cmp_michaelAlloc,
1413             typename cc::michael_set::make_traits<
1414                 co::hash< hash >,
1415                 co::allocator< memory::MichaelAllocator<int> >
1416             >::type
1417         >   MichaelSet_Lazy_RCU_SHT_cmp_michaelAlloc;
1418
1419         typedef cc::MichaelHashSet< rcu_sht, LazyList_RCU_SHT_less_stdAlloc,
1420             typename cc::michael_set::make_traits<
1421                 co::hash< hash >
1422             >::type
1423         >   MichaelSet_Lazy_RCU_SHT_less_stdAlloc;
1424
1425         typedef cc::MichaelHashSet< rcu_sht, LazyList_RCU_SHT_less_stdAlloc_seqcst,
1426             typename cc::michael_set::make_traits<
1427                 co::hash< hash >
1428             >::type
1429         >   MichaelSet_Lazy_RCU_SHT_less_stdAlloc_seqcst;
1430
1431         typedef cc::MichaelHashSet< rcu_sht, LazyList_RCU_SHT_less_michaelAlloc,
1432             typename cc::michael_set::make_traits<
1433                 co::hash< hash >,
1434                 co::allocator< memory::MichaelAllocator<int> >
1435             >::type
1436         >   MichaelSet_Lazy_RCU_SHT_less_michaelAlloc;
1437 #endif
1438
1439         // ***************************************************************************
1440         // SplitListSet based on MichaelList
1441
1442         // HP
1443         typedef cc::SplitListSet< cds::gc::HP, key_val,
1444             typename cc::split_list::make_traits<
1445                 cc::split_list::ordered_list<cc::michael_list_tag>
1446                 ,co::hash< hash >
1447                 ,cc::split_list::ordered_list_traits<
1448                     typename cc::michael_list::make_traits<
1449                         co::compare< compare >
1450                     >::type
1451                 >
1452             >::type
1453         > SplitList_Michael_HP_dyn_cmp;
1454
1455         typedef cc::SplitListSet< cds::gc::HP, key_val,
1456             typename cc::split_list::make_traits<
1457                 cc::split_list::ordered_list<cc::michael_list_tag>
1458                 ,co::hash< hash >
1459                 ,co::memory_model< co::v::sequential_consistent >
1460                 ,cc::split_list::ordered_list_traits<
1461                     typename cc::michael_list::make_traits<
1462                         co::compare< compare >
1463                         ,co::memory_model< co::v::sequential_consistent >
1464                     >::type
1465                 >
1466             >::type
1467         > SplitList_Michael_HP_dyn_cmp_seqcst;
1468
1469         typedef cc::SplitListSet< cds::gc::HP, key_val,
1470             typename cc::split_list::make_traits<
1471                 cc::split_list::ordered_list<cc::michael_list_tag>
1472                 ,cc::split_list::dynamic_bucket_table< false >
1473                 ,co::hash< hash >
1474                 ,cc::split_list::ordered_list_traits<
1475                     typename cc::michael_list::make_traits<
1476                         co::compare< compare >
1477                     >::type
1478                 >
1479             >::type
1480         > SplitList_Michael_HP_st_cmp;
1481
1482         typedef cc::SplitListSet< cds::gc::HP, key_val,
1483             typename cc::split_list::make_traits<
1484                 cc::split_list::ordered_list<cc::michael_list_tag>
1485                 ,co::hash< hash >
1486                 ,cc::split_list::dynamic_bucket_table< false >
1487                 ,co::memory_model< co::v::sequential_consistent >
1488                 ,cc::split_list::ordered_list_traits<
1489                     typename cc::michael_list::make_traits<
1490                         co::compare< compare >
1491                         ,co::memory_model< co::v::sequential_consistent >
1492                     >::type
1493                 >
1494             >::type
1495         > SplitList_Michael_HP_st_cmp_seqcst;
1496
1497         //HP + less
1498         typedef cc::SplitListSet< cds::gc::HP, key_val,
1499             typename cc::split_list::make_traits<
1500                 cc::split_list::ordered_list<cc::michael_list_tag>
1501                 ,co::hash< hash >
1502                 ,cc::split_list::ordered_list_traits<
1503                     typename cc::michael_list::make_traits<
1504                         co::less< less >
1505                     >::type
1506                 >
1507             >::type
1508         > SplitList_Michael_HP_dyn_less;
1509
1510         typedef cc::SplitListSet< cds::gc::HP, key_val,
1511             typename cc::split_list::make_traits<
1512                 cc::split_list::ordered_list<cc::michael_list_tag>
1513                 ,co::hash< hash >
1514                 ,co::memory_model< co::v::sequential_consistent >
1515                 ,cc::split_list::ordered_list_traits<
1516                     typename cc::michael_list::make_traits<
1517                         co::less< less >
1518                         ,co::memory_model< co::v::sequential_consistent >
1519                     >::type
1520                 >
1521             >::type
1522         > SplitList_Michael_HP_dyn_less_seqcst;
1523
1524         typedef cc::SplitListSet< cds::gc::HP, key_val,
1525             typename cc::split_list::make_traits<
1526                 cc::split_list::ordered_list<cc::michael_list_tag>
1527                 ,cc::split_list::dynamic_bucket_table< false >
1528                 ,co::hash< hash >
1529                 ,cc::split_list::ordered_list_traits<
1530                     typename cc::michael_list::make_traits<
1531                         co::less< less >
1532                     >::type
1533                 >
1534             >::type
1535         > SplitList_Michael_HP_st_less;
1536
1537         typedef cc::SplitListSet< cds::gc::HP, key_val,
1538             typename cc::split_list::make_traits<
1539                 cc::split_list::ordered_list<cc::michael_list_tag>
1540                 ,co::hash< hash >
1541                 ,cc::split_list::dynamic_bucket_table< false >
1542                 ,co::memory_model< co::v::sequential_consistent >
1543                 ,cc::split_list::ordered_list_traits<
1544                     typename cc::michael_list::make_traits<
1545                         co::less< less >
1546                         ,co::memory_model< co::v::sequential_consistent >
1547                     >::type
1548                 >
1549             >::type
1550         > SplitList_Michael_HP_st_less_seqcst;
1551
1552         // DHP
1553         typedef cc::SplitListSet< cds::gc::DHP, key_val,
1554             typename cc::split_list::make_traits<
1555                 cc::split_list::ordered_list<cc::michael_list_tag>
1556                 ,co::hash< hash >
1557                 ,cc::split_list::ordered_list_traits<
1558                     typename cc::michael_list::make_traits<
1559                         co::compare< compare >
1560                     >::type
1561                 >
1562             >::type
1563         > SplitList_Michael_DHP_dyn_cmp;
1564
1565         typedef cc::SplitListSet< cds::gc::DHP, key_val,
1566             typename cc::split_list::make_traits<
1567                 cc::split_list::ordered_list<cc::michael_list_tag>
1568                 ,co::hash< hash >
1569                 ,co::memory_model< co::v::sequential_consistent >
1570                 ,cc::split_list::ordered_list_traits<
1571                     typename cc::michael_list::make_traits<
1572                         co::compare< compare >
1573                         ,co::memory_model< co::v::sequential_consistent >
1574                     >::type
1575                 >
1576             >::type
1577         > SplitList_Michael_DHP_dyn_cmp_seqcst;
1578
1579         typedef cc::SplitListSet< cds::gc::DHP, key_val,
1580             typename cc::split_list::make_traits<
1581                 cc::split_list::ordered_list<cc::michael_list_tag>
1582                 ,cc::split_list::dynamic_bucket_table< false >
1583                 ,co::hash< hash >
1584                 ,cc::split_list::ordered_list_traits<
1585                     typename cc::michael_list::make_traits<
1586                         co::compare< compare >
1587                     >::type
1588                 >
1589             >::type
1590         > SplitList_Michael_DHP_st_cmp;
1591
1592         typedef cc::SplitListSet< cds::gc::DHP, key_val,
1593             typename cc::split_list::make_traits<
1594                 cc::split_list::ordered_list<cc::michael_list_tag>
1595                 ,co::hash< hash >
1596                 ,cc::split_list::dynamic_bucket_table< false >
1597                 ,co::memory_model< co::v::sequential_consistent >
1598                 ,cc::split_list::ordered_list_traits<
1599                     typename cc::michael_list::make_traits<
1600                         co::compare< compare >
1601                         ,co::memory_model< co::v::sequential_consistent >
1602                     >::type
1603                 >
1604             >::type
1605         > SplitList_Michael_DHP_st_cmp_seqcst;
1606
1607         // DHP + less
1608         typedef cc::SplitListSet< cds::gc::DHP, key_val,
1609             typename cc::split_list::make_traits<
1610                 cc::split_list::ordered_list<cc::michael_list_tag>
1611                 ,co::hash< hash >
1612                 ,cc::split_list::ordered_list_traits<
1613                     typename cc::michael_list::make_traits<
1614                         co::less< less >
1615                     >::type
1616                 >
1617             >::type
1618         > SplitList_Michael_DHP_dyn_less;
1619
1620         typedef cc::SplitListSet< cds::gc::DHP, key_val,
1621             typename cc::split_list::make_traits<
1622                 cc::split_list::ordered_list<cc::michael_list_tag>
1623                 ,co::hash< hash >
1624                 ,co::memory_model< co::v::sequential_consistent >
1625                 ,cc::split_list::ordered_list_traits<
1626                     typename cc::michael_list::make_traits<
1627                         co::less< less >
1628                         ,co::memory_model< co::v::sequential_consistent >
1629                     >::type
1630                 >
1631             >::type
1632         > SplitList_Michael_DHP_dyn_less_seqcst;
1633
1634         typedef cc::SplitListSet< cds::gc::DHP, key_val,
1635             typename cc::split_list::make_traits<
1636                 cc::split_list::ordered_list<cc::michael_list_tag>
1637                 ,cc::split_list::dynamic_bucket_table< false >
1638                 ,co::hash< hash >
1639                 ,cc::split_list::ordered_list_traits<
1640                     typename cc::michael_list::make_traits<
1641                         co::less< less >
1642                     >::type
1643                 >
1644             >::type
1645         > SplitList_Michael_DHP_st_less;
1646
1647         typedef cc::SplitListSet< cds::gc::DHP, key_val,
1648             typename cc::split_list::make_traits<
1649                 cc::split_list::ordered_list<cc::michael_list_tag>
1650                 ,co::hash< hash >
1651                 ,cc::split_list::dynamic_bucket_table< false >
1652                 ,co::memory_model< co::v::sequential_consistent >
1653                 ,cc::split_list::ordered_list_traits<
1654                     typename cc::michael_list::make_traits<
1655                         co::less< less >
1656                         ,co::memory_model< co::v::sequential_consistent >
1657                     >::type
1658                 >
1659             >::type
1660         > SplitList_Michael_DHP_st_less_seqcst;
1661
1662         // RCU
1663         typedef cc::SplitListSet< rcu_gpi, key_val,
1664             typename cc::split_list::make_traits<
1665                 cc::split_list::ordered_list<cc::michael_list_tag>
1666                 ,co::hash< hash >
1667                 ,cc::split_list::ordered_list_traits<
1668                     typename cc::michael_list::make_traits<
1669                         co::compare< compare >
1670                     >::type
1671                 >
1672             >::type
1673         > SplitList_Michael_RCU_GPI_dyn_cmp;
1674
1675         typedef cc::SplitListSet< rcu_gpi, key_val,
1676             typename cc::split_list::make_traits<
1677                 cc::split_list::ordered_list<cc::michael_list_tag>
1678                 ,co::hash< hash >
1679                 ,co::memory_model< co::v::sequential_consistent >
1680                 ,cc::split_list::ordered_list_traits<
1681                     typename cc::michael_list::make_traits<
1682                         co::compare< compare >
1683                         ,co::memory_model< co::v::sequential_consistent >
1684                     >::type
1685                 >
1686             >::type
1687         > SplitList_Michael_RCU_GPI_dyn_cmp_seqcst;
1688
1689         typedef cc::SplitListSet< rcu_gpi, key_val,
1690             typename cc::split_list::make_traits<
1691                 cc::split_list::ordered_list<cc::michael_list_tag>
1692                 ,cc::split_list::dynamic_bucket_table< false >
1693                 ,co::hash< hash >
1694                 ,cc::split_list::ordered_list_traits<
1695                     typename cc::michael_list::make_traits<
1696                         co::compare< compare >
1697                     >::type
1698                 >
1699             >::type
1700         > SplitList_Michael_RCU_GPI_st_cmp;
1701
1702         typedef cc::SplitListSet< rcu_gpi, key_val,
1703             typename cc::split_list::make_traits<
1704                 cc::split_list::ordered_list<cc::michael_list_tag>
1705                 ,co::hash< hash >
1706                 ,cc::split_list::dynamic_bucket_table< false >
1707                 ,co::memory_model< co::v::sequential_consistent >
1708                 ,cc::split_list::ordered_list_traits<
1709                     typename cc::michael_list::make_traits<
1710                         co::compare< compare >
1711                         ,co::memory_model< co::v::sequential_consistent >
1712                     >::type
1713                 >
1714             >::type
1715         > SplitList_Michael_RCU_GPI_st_cmp_seqcst;
1716
1717         // RCU_GPI + less
1718         typedef cc::SplitListSet< rcu_gpi, key_val,
1719             typename cc::split_list::make_traits<
1720                 cc::split_list::ordered_list<cc::michael_list_tag>
1721                 ,co::hash< hash >
1722                 ,cc::split_list::ordered_list_traits<
1723                     typename cc::michael_list::make_traits<
1724                         co::less< less >
1725                     >::type
1726                 >
1727             >::type
1728         > SplitList_Michael_RCU_GPI_dyn_less;
1729
1730         typedef cc::SplitListSet< rcu_gpi, key_val,
1731             typename cc::split_list::make_traits<
1732                 cc::split_list::ordered_list<cc::michael_list_tag>
1733                 ,co::hash< hash >
1734                 ,co::memory_model< co::v::sequential_consistent >
1735                 ,cc::split_list::ordered_list_traits<
1736                     typename cc::michael_list::make_traits<
1737                         co::less< less >
1738                         ,co::memory_model< co::v::sequential_consistent >
1739                     >::type
1740                 >
1741             >::type
1742         > SplitList_Michael_RCU_GPI_dyn_less_seqcst;
1743
1744         typedef cc::SplitListSet< rcu_gpi, key_val,
1745             typename cc::split_list::make_traits<
1746                 cc::split_list::ordered_list<cc::michael_list_tag>
1747                 ,cc::split_list::dynamic_bucket_table< false >
1748                 ,co::hash< hash >
1749                 ,cc::split_list::ordered_list_traits<
1750                     typename cc::michael_list::make_traits<
1751                         co::less< less >
1752                     >::type
1753                 >
1754             >::type
1755         > SplitList_Michael_RCU_GPI_st_less;
1756
1757         typedef cc::SplitListSet< rcu_gpi, key_val,
1758             typename cc::split_list::make_traits<
1759                 cc::split_list::ordered_list<cc::michael_list_tag>
1760                 ,co::hash< hash >
1761                 ,cc::split_list::dynamic_bucket_table< false >
1762                 ,co::memory_model< co::v::sequential_consistent >
1763                 ,cc::split_list::ordered_list_traits<
1764                     typename cc::michael_list::make_traits<
1765                         co::less< less >
1766                         ,co::memory_model< co::v::sequential_consistent >
1767                     >::type
1768                 >
1769             >::type
1770         > SplitList_Michael_RCU_GPI_st_less_seqcst;
1771
1772
1773         //
1774         typedef cc::SplitListSet< rcu_gpb, key_val,
1775             typename cc::split_list::make_traits<
1776                 cc::split_list::ordered_list<cc::michael_list_tag>
1777                 ,co::hash< hash >
1778                 ,cc::split_list::ordered_list_traits<
1779                     typename cc::michael_list::make_traits<
1780                         co::compare< compare >
1781                     >::type
1782                 >
1783             >::type
1784         > SplitList_Michael_RCU_GPB_dyn_cmp;
1785
1786         typedef cc::SplitListSet< rcu_gpb, key_val,
1787             typename cc::split_list::make_traits<
1788                 cc::split_list::ordered_list<cc::michael_list_tag>
1789                 ,co::hash< hash >
1790                 ,co::memory_model< co::v::sequential_consistent >
1791                 ,cc::split_list::ordered_list_traits<
1792                     typename cc::michael_list::make_traits<
1793                         co::compare< compare >
1794                         ,co::memory_model< co::v::sequential_consistent >
1795                     >::type
1796                 >
1797             >::type
1798         > SplitList_Michael_RCU_GPB_dyn_cmp_seqcst;
1799
1800         typedef cc::SplitListSet< rcu_gpb, key_val,
1801             typename cc::split_list::make_traits<
1802                 cc::split_list::ordered_list<cc::michael_list_tag>
1803                 ,cc::split_list::dynamic_bucket_table< false >
1804                 ,co::hash< hash >
1805                 ,cc::split_list::ordered_list_traits<
1806                     typename cc::michael_list::make_traits<
1807                         co::compare< compare >
1808                     >::type
1809                 >
1810             >::type
1811         > SplitList_Michael_RCU_GPB_st_cmp;
1812
1813         typedef cc::SplitListSet< rcu_gpb, key_val,
1814             typename cc::split_list::make_traits<
1815                 cc::split_list::ordered_list<cc::michael_list_tag>
1816                 ,co::hash< hash >
1817                 ,cc::split_list::dynamic_bucket_table< false >
1818                 ,co::memory_model< co::v::sequential_consistent >
1819                 ,cc::split_list::ordered_list_traits<
1820                     typename cc::michael_list::make_traits<
1821                         co::compare< compare >
1822                         ,co::memory_model< co::v::sequential_consistent >
1823                     >::type
1824                 >
1825             >::type
1826         > SplitList_Michael_RCU_GPB_st_cmp_seqcst;
1827
1828         // RCU_GPB + less
1829         typedef cc::SplitListSet< rcu_gpb, key_val,
1830             typename cc::split_list::make_traits<
1831                 cc::split_list::ordered_list<cc::michael_list_tag>
1832                 ,co::hash< hash >
1833                 ,cc::split_list::ordered_list_traits<
1834                     typename cc::michael_list::make_traits<
1835                         co::less< less >
1836                     >::type
1837                 >
1838             >::type
1839         > SplitList_Michael_RCU_GPB_dyn_less;
1840
1841         typedef cc::SplitListSet< rcu_gpb, key_val,
1842             typename cc::split_list::make_traits<
1843                 cc::split_list::ordered_list<cc::michael_list_tag>
1844                 ,co::hash< hash >
1845                 ,co::memory_model< co::v::sequential_consistent >
1846                 ,cc::split_list::ordered_list_traits<
1847                     typename cc::michael_list::make_traits<
1848                         co::less< less >
1849                         ,co::memory_model< co::v::sequential_consistent >
1850                     >::type
1851                 >
1852             >::type
1853         > SplitList_Michael_RCU_GPB_dyn_less_seqcst;
1854
1855         typedef cc::SplitListSet< rcu_gpb, key_val,
1856             typename cc::split_list::make_traits<
1857                 cc::split_list::ordered_list<cc::michael_list_tag>
1858                 ,cc::split_list::dynamic_bucket_table< false >
1859                 ,co::hash< hash >
1860                 ,cc::split_list::ordered_list_traits<
1861                     typename cc::michael_list::make_traits<
1862                         co::less< less >
1863                     >::type
1864                 >
1865             >::type
1866         > SplitList_Michael_RCU_GPB_st_less;
1867
1868         typedef cc::SplitListSet< rcu_gpb, key_val,
1869             typename cc::split_list::make_traits<
1870                 cc::split_list::ordered_list<cc::michael_list_tag>
1871                 ,co::hash< hash >
1872                 ,cc::split_list::dynamic_bucket_table< false >
1873                 ,co::memory_model< co::v::sequential_consistent >
1874                 ,cc::split_list::ordered_list_traits<
1875                     typename cc::michael_list::make_traits<
1876                         co::less< less >
1877                         ,co::memory_model< co::v::sequential_consistent >
1878                     >::type
1879                 >
1880             >::type
1881         > SplitList_Michael_RCU_GPB_st_less_seqcst;
1882
1883         //
1884         typedef cc::SplitListSet< rcu_gpt, key_val,
1885             typename cc::split_list::make_traits<
1886                 cc::split_list::ordered_list<cc::michael_list_tag>
1887                 ,co::hash< hash >
1888                 ,cc::split_list::ordered_list_traits<
1889                     typename cc::michael_list::make_traits<
1890                         co::compare< compare >
1891                     >::type
1892                 >
1893             >::type
1894         > SplitList_Michael_RCU_GPT_dyn_cmp;
1895
1896         typedef cc::SplitListSet< rcu_gpt, key_val,
1897             typename cc::split_list::make_traits<
1898                 cc::split_list::ordered_list<cc::michael_list_tag>
1899                 ,co::hash< hash >
1900                 ,co::memory_model< co::v::sequential_consistent >
1901                 ,cc::split_list::ordered_list_traits<
1902                     typename cc::michael_list::make_traits<
1903                         co::compare< compare >
1904                         ,co::memory_model< co::v::sequential_consistent >
1905                     >::type
1906                 >
1907             >::type
1908         > SplitList_Michael_RCU_GPT_dyn_cmp_seqcst;
1909
1910         typedef cc::SplitListSet< rcu_gpt, key_val,
1911             typename cc::split_list::make_traits<
1912                 cc::split_list::ordered_list<cc::michael_list_tag>
1913                 ,cc::split_list::dynamic_bucket_table< false >
1914                 ,co::hash< hash >
1915                 ,cc::split_list::ordered_list_traits<
1916                     typename cc::michael_list::make_traits<
1917                         co::compare< compare >
1918                     >::type
1919                 >
1920             >::type
1921         > SplitList_Michael_RCU_GPT_st_cmp;
1922
1923         typedef cc::SplitListSet< rcu_gpt, key_val,
1924             typename cc::split_list::make_traits<
1925                 cc::split_list::ordered_list<cc::michael_list_tag>
1926                 ,co::hash< hash >
1927                 ,cc::split_list::dynamic_bucket_table< false >
1928                 ,co::memory_model< co::v::sequential_consistent >
1929                 ,cc::split_list::ordered_list_traits<
1930                     typename cc::michael_list::make_traits<
1931                         co::compare< compare >
1932                         ,co::memory_model< co::v::sequential_consistent >
1933                     >::type
1934                 >
1935             >::type
1936         > SplitList_Michael_RCU_GPT_st_cmp_seqcst;
1937
1938         // RCU_GPT + less
1939         typedef cc::SplitListSet< rcu_gpt, key_val,
1940             typename cc::split_list::make_traits<
1941                 cc::split_list::ordered_list<cc::michael_list_tag>
1942                 ,co::hash< hash >
1943                 ,cc::split_list::ordered_list_traits<
1944                     typename cc::michael_list::make_traits<
1945                         co::less< less >
1946                     >::type
1947                 >
1948             >::type
1949         > SplitList_Michael_RCU_GPT_dyn_less;
1950
1951         typedef cc::SplitListSet< rcu_gpt, key_val,
1952             typename cc::split_list::make_traits<
1953                 cc::split_list::ordered_list<cc::michael_list_tag>
1954                 ,co::hash< hash >
1955                 ,co::memory_model< co::v::sequential_consistent >
1956                 ,cc::split_list::ordered_list_traits<
1957                     typename cc::michael_list::make_traits<
1958                         co::less< less >
1959                         ,co::memory_model< co::v::sequential_consistent >
1960                     >::type
1961                 >
1962             >::type
1963         > SplitList_Michael_RCU_GPT_dyn_less_seqcst;
1964
1965         typedef cc::SplitListSet< rcu_gpt, key_val,
1966             typename cc::split_list::make_traits<
1967                 cc::split_list::ordered_list<cc::michael_list_tag>
1968                 ,cc::split_list::dynamic_bucket_table< false >
1969                 ,co::hash< hash >
1970                 ,cc::split_list::ordered_list_traits<
1971                     typename cc::michael_list::make_traits<
1972                         co::less< less >
1973                     >::type
1974                 >
1975             >::type
1976         > SplitList_Michael_RCU_GPT_st_less;
1977
1978         typedef cc::SplitListSet< rcu_gpt, key_val,
1979             typename cc::split_list::make_traits<
1980                 cc::split_list::ordered_list<cc::michael_list_tag>
1981                 ,co::hash< hash >
1982                 ,cc::split_list::dynamic_bucket_table< false >
1983                 ,co::memory_model< co::v::sequential_consistent >
1984                 ,cc::split_list::ordered_list_traits<
1985                     typename cc::michael_list::make_traits<
1986                         co::less< less >
1987                         ,co::memory_model< co::v::sequential_consistent >
1988                     >::type
1989                 >
1990             >::type
1991         > SplitList_Michael_RCU_GPT_st_less_seqcst;
1992
1993 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
1994         typedef cc::SplitListSet< rcu_shb, key_val,
1995             typename cc::split_list::make_traits<
1996                 cc::split_list::ordered_list<cc::michael_list_tag>
1997                 ,co::hash< hash >
1998                 ,cc::split_list::ordered_list_traits<
1999                     typename cc::michael_list::make_traits<
2000                         co::compare< compare >
2001                     >::type
2002                 >
2003             >::type
2004         > SplitList_Michael_RCU_SHB_dyn_cmp;
2005
2006         typedef cc::SplitListSet< rcu_shb, key_val,
2007             typename cc::split_list::make_traits<
2008                 cc::split_list::ordered_list<cc::michael_list_tag>
2009                 ,co::hash< hash >
2010                 ,co::memory_model< co::v::sequential_consistent >
2011                 ,cc::split_list::ordered_list_traits<
2012                     typename cc::michael_list::make_traits<
2013                         co::compare< compare >
2014                         ,co::memory_model< co::v::sequential_consistent >
2015                     >::type
2016                 >
2017             >::type
2018         > SplitList_Michael_RCU_SHB_dyn_cmp_seqcst;
2019
2020         typedef cc::SplitListSet< rcu_shb, key_val,
2021             typename cc::split_list::make_traits<
2022                 cc::split_list::ordered_list<cc::michael_list_tag>
2023                 ,cc::split_list::dynamic_bucket_table< false >
2024                 ,co::hash< hash >
2025                 ,cc::split_list::ordered_list_traits<
2026                     typename cc::michael_list::make_traits<
2027                         co::compare< compare >
2028                     >::type
2029                 >
2030             >::type
2031         > SplitList_Michael_RCU_SHB_st_cmp;
2032
2033         typedef cc::SplitListSet< rcu_shb, key_val,
2034             typename cc::split_list::make_traits<
2035                 cc::split_list::ordered_list<cc::michael_list_tag>
2036                 ,co::hash< hash >
2037                 ,cc::split_list::dynamic_bucket_table< false >
2038                 ,co::memory_model< co::v::sequential_consistent >
2039                 ,cc::split_list::ordered_list_traits<
2040                     typename cc::michael_list::make_traits<
2041                         co::compare< compare >
2042                         ,co::memory_model< co::v::sequential_consistent >
2043                     >::type
2044                 >
2045             >::type
2046         > SplitList_Michael_RCU_SHB_st_cmp_seqcst;
2047
2048         // RCU_SHB + less
2049         typedef cc::SplitListSet< rcu_shb, key_val,
2050             typename cc::split_list::make_traits<
2051                 cc::split_list::ordered_list<cc::michael_list_tag>
2052                 ,co::hash< hash >
2053                 ,cc::split_list::ordered_list_traits<
2054                     typename cc::michael_list::make_traits<
2055                         co::less< less >
2056                     >::type
2057                 >
2058             >::type
2059         > SplitList_Michael_RCU_SHB_dyn_less;
2060
2061         typedef cc::SplitListSet< rcu_shb, key_val,
2062             typename cc::split_list::make_traits<
2063                 cc::split_list::ordered_list<cc::michael_list_tag>
2064                 ,co::hash< hash >
2065                 ,co::memory_model< co::v::sequential_consistent >
2066                 ,cc::split_list::ordered_list_traits<
2067                     typename cc::michael_list::make_traits<
2068                         co::less< less >
2069                         ,co::memory_model< co::v::sequential_consistent >
2070                     >::type
2071                 >
2072             >::type
2073         > SplitList_Michael_RCU_SHB_dyn_less_seqcst;
2074
2075         typedef cc::SplitListSet< rcu_shb, key_val,
2076             typename cc::split_list::make_traits<
2077                 cc::split_list::ordered_list<cc::michael_list_tag>
2078                 ,cc::split_list::dynamic_bucket_table< false >
2079                 ,co::hash< hash >
2080                 ,cc::split_list::ordered_list_traits<
2081                     typename cc::michael_list::make_traits<
2082                         co::less< less >
2083                     >::type
2084                 >
2085             >::type
2086         > SplitList_Michael_RCU_SHB_st_less;
2087
2088         typedef cc::SplitListSet< rcu_shb, key_val,
2089             typename cc::split_list::make_traits<
2090                 cc::split_list::ordered_list<cc::michael_list_tag>
2091                 ,co::hash< hash >
2092                 ,cc::split_list::dynamic_bucket_table< false >
2093                 ,co::memory_model< co::v::sequential_consistent >
2094                 ,cc::split_list::ordered_list_traits<
2095                     typename cc::michael_list::make_traits<
2096                         co::less< less >
2097                         ,co::memory_model< co::v::sequential_consistent >
2098                     >::type
2099                 >
2100             >::type
2101         > SplitList_Michael_RCU_SHB_st_less_seqcst;
2102
2103         //
2104         typedef cc::SplitListSet< rcu_sht, key_val,
2105             typename cc::split_list::make_traits<
2106                 cc::split_list::ordered_list<cc::michael_list_tag>
2107                 ,co::hash< hash >
2108                 ,cc::split_list::ordered_list_traits<
2109                     typename cc::michael_list::make_traits<
2110                         co::compare< compare >
2111                     >::type
2112                 >
2113             >::type
2114         > SplitList_Michael_RCU_SHT_dyn_cmp;
2115
2116         typedef cc::SplitListSet< rcu_sht, key_val,
2117             typename cc::split_list::make_traits<
2118                 cc::split_list::ordered_list<cc::michael_list_tag>
2119                 ,co::hash< hash >
2120                 ,co::memory_model< co::v::sequential_consistent >
2121                 ,cc::split_list::ordered_list_traits<
2122                     typename cc::michael_list::make_traits<
2123                         co::compare< compare >
2124                         ,co::memory_model< co::v::sequential_consistent >
2125                     >::type
2126                 >
2127             >::type
2128         > SplitList_Michael_RCU_SHT_dyn_cmp_seqcst;
2129
2130         typedef cc::SplitListSet< rcu_sht, key_val,
2131             typename cc::split_list::make_traits<
2132                 cc::split_list::ordered_list<cc::michael_list_tag>
2133                 ,cc::split_list::dynamic_bucket_table< false >
2134                 ,co::hash< hash >
2135                 ,cc::split_list::ordered_list_traits<
2136                     typename cc::michael_list::make_traits<
2137                         co::compare< compare >
2138                     >::type
2139                 >
2140             >::type
2141         > SplitList_Michael_RCU_SHT_st_cmp;
2142
2143         typedef cc::SplitListSet< rcu_sht, key_val,
2144             typename cc::split_list::make_traits<
2145                 cc::split_list::ordered_list<cc::michael_list_tag>
2146                 ,co::hash< hash >
2147                 ,cc::split_list::dynamic_bucket_table< false >
2148                 ,co::memory_model< co::v::sequential_consistent >
2149                 ,cc::split_list::ordered_list_traits<
2150                     typename cc::michael_list::make_traits<
2151                         co::compare< compare >
2152                         ,co::memory_model< co::v::sequential_consistent >
2153                     >::type
2154                 >
2155             >::type
2156         > SplitList_Michael_RCU_SHT_st_cmp_seqcst;
2157
2158         // RCU_SHT + less
2159         typedef cc::SplitListSet< rcu_sht, key_val,
2160             typename cc::split_list::make_traits<
2161                 cc::split_list::ordered_list<cc::michael_list_tag>
2162                 ,co::hash< hash >
2163                 ,cc::split_list::ordered_list_traits<
2164                     typename cc::michael_list::make_traits<
2165                         co::less< less >
2166                     >::type
2167                 >
2168             >::type
2169         > SplitList_Michael_RCU_SHT_dyn_less;
2170
2171         typedef cc::SplitListSet< rcu_sht, key_val,
2172             typename cc::split_list::make_traits<
2173                 cc::split_list::ordered_list<cc::michael_list_tag>
2174                 ,co::hash< hash >
2175                 ,co::memory_model< co::v::sequential_consistent >
2176                 ,cc::split_list::ordered_list_traits<
2177                     typename cc::michael_list::make_traits<
2178                         co::less< less >
2179                         ,co::memory_model< co::v::sequential_consistent >
2180                     >::type
2181                 >
2182             >::type
2183         > SplitList_Michael_RCU_SHT_dyn_less_seqcst;
2184
2185         typedef cc::SplitListSet< rcu_sht, key_val,
2186             typename cc::split_list::make_traits<
2187                 cc::split_list::ordered_list<cc::michael_list_tag>
2188                 ,cc::split_list::dynamic_bucket_table< false >
2189                 ,co::hash< hash >
2190                 ,cc::split_list::ordered_list_traits<
2191                     typename cc::michael_list::make_traits<
2192                         co::less< less >
2193                     >::type
2194                 >
2195             >::type
2196         > SplitList_Michael_RCU_SHT_st_less;
2197
2198         typedef cc::SplitListSet< rcu_sht, key_val,
2199             typename cc::split_list::make_traits<
2200                 cc::split_list::ordered_list<cc::michael_list_tag>
2201                 ,co::hash< hash >
2202                 ,cc::split_list::dynamic_bucket_table< false >
2203                 ,co::memory_model< co::v::sequential_consistent >
2204                 ,cc::split_list::ordered_list_traits<
2205                     typename cc::michael_list::make_traits<
2206                         co::less< less >
2207                         ,co::memory_model< co::v::sequential_consistent >
2208                     >::type
2209                 >
2210             >::type
2211         > SplitList_Michael_RCU_SHT_st_less_seqcst;
2212 #endif
2213
2214         // ***************************************************************************
2215         // SplitListSet based on LazyList
2216
2217         // HP
2218         typedef cc::SplitListSet< cds::gc::HP, key_val,
2219             typename cc::split_list::make_traits<
2220                 cc::split_list::ordered_list<cc::lazy_list_tag>
2221                 ,co::hash< hash >
2222                 ,cc::split_list::ordered_list_traits<
2223                     typename cc::lazy_list::make_traits<
2224                         co::compare< compare >
2225                     >::type
2226                 >
2227             >::type
2228         > SplitList_Lazy_HP_dyn_cmp;
2229
2230         typedef cc::SplitListSet< cds::gc::HP, key_val,
2231             typename cc::split_list::make_traits<
2232                 cc::split_list::ordered_list<cc::lazy_list_tag>
2233                 ,co::hash< hash >
2234                 ,co::memory_model< co::v::sequential_consistent >
2235                 ,cc::split_list::ordered_list_traits<
2236                     typename cc::lazy_list::make_traits<
2237                         co::compare< compare >
2238                         ,co::memory_model< co::v::sequential_consistent >
2239                     >::type
2240                 >
2241             >::type
2242         > SplitList_Lazy_HP_dyn_cmp_seqcst;
2243
2244         typedef cc::SplitListSet< cds::gc::HP, key_val,
2245             typename cc::split_list::make_traits<
2246                 cc::split_list::ordered_list<cc::lazy_list_tag>
2247                 ,cc::split_list::dynamic_bucket_table< false >
2248                 ,co::hash< hash >
2249                 ,cc::split_list::ordered_list_traits<
2250                     typename cc::lazy_list::make_traits<
2251                         co::compare< compare >
2252                     >::type
2253                 >
2254             >::type
2255         > SplitList_Lazy_HP_st_cmp;
2256
2257         typedef cc::SplitListSet< cds::gc::HP, key_val,
2258             typename cc::split_list::make_traits<
2259                 cc::split_list::ordered_list<cc::lazy_list_tag>
2260                 ,co::hash< hash >
2261                 ,cc::split_list::dynamic_bucket_table< false >
2262                 ,co::memory_model< co::v::sequential_consistent >
2263                 ,cc::split_list::ordered_list_traits<
2264                     typename cc::lazy_list::make_traits<
2265                         co::compare< compare >
2266                         ,co::memory_model< co::v::sequential_consistent >
2267                     >::type
2268                 >
2269             >::type
2270         > SplitList_Lazy_HP_st_cmp_seqcst;
2271
2272
2273         // HP + less
2274         typedef cc::SplitListSet< cds::gc::HP, key_val,
2275             typename cc::split_list::make_traits<
2276                 cc::split_list::ordered_list<cc::lazy_list_tag>
2277                 ,co::hash< hash >
2278                 ,cc::split_list::ordered_list_traits<
2279                     typename cc::lazy_list::make_traits<
2280                         co::less< less >
2281                     >::type
2282                 >
2283             >::type
2284         > SplitList_Lazy_HP_dyn_less;
2285
2286         typedef cc::SplitListSet< cds::gc::HP, key_val,
2287             typename cc::split_list::make_traits<
2288                 cc::split_list::ordered_list<cc::lazy_list_tag>
2289                 ,co::hash< hash >
2290                 ,co::memory_model< co::v::sequential_consistent >
2291                 ,cc::split_list::ordered_list_traits<
2292                     typename cc::lazy_list::make_traits<
2293                         co::less< less >
2294                         ,co::memory_model< co::v::sequential_consistent >
2295                     >::type
2296                 >
2297             >::type
2298         > SplitList_Lazy_HP_dyn_less_seqcst;
2299
2300         typedef cc::SplitListSet< cds::gc::HP, key_val,
2301             typename cc::split_list::make_traits<
2302                 cc::split_list::ordered_list<cc::lazy_list_tag>
2303                 ,cc::split_list::dynamic_bucket_table< false >
2304                 ,co::hash< hash >
2305                 ,cc::split_list::ordered_list_traits<
2306                     typename cc::lazy_list::make_traits<
2307                         co::less< less >
2308                     >::type
2309                 >
2310             >::type
2311         > SplitList_Lazy_HP_st_less;
2312
2313         typedef cc::SplitListSet< cds::gc::HP, key_val,
2314             typename cc::split_list::make_traits<
2315                 cc::split_list::ordered_list<cc::lazy_list_tag>
2316                 ,co::hash< hash >
2317                 ,cc::split_list::dynamic_bucket_table< false >
2318                 ,co::memory_model< co::v::sequential_consistent >
2319                 ,cc::split_list::ordered_list_traits<
2320                     typename cc::lazy_list::make_traits<
2321                         co::less< less >
2322                         ,co::memory_model< co::v::sequential_consistent >
2323                     >::type
2324                 >
2325             >::type
2326         > SplitList_Lazy_HP_st_less_seqcst;
2327
2328         // DHP
2329         typedef cc::SplitListSet< cds::gc::DHP, key_val,
2330             typename cc::split_list::make_traits<
2331                 cc::split_list::ordered_list<cc::lazy_list_tag>
2332                 ,co::hash< hash >
2333                 ,cc::split_list::ordered_list_traits<
2334                     typename cc::lazy_list::make_traits<
2335                         co::compare< compare >
2336                     >::type
2337                 >
2338             >::type
2339         > SplitList_Lazy_DHP_dyn_cmp;
2340
2341         typedef cc::SplitListSet< cds::gc::DHP, key_val,
2342             typename cc::split_list::make_traits<
2343                 cc::split_list::ordered_list<cc::lazy_list_tag>
2344                 ,co::hash< hash >
2345                 ,co::memory_model< co::v::sequential_consistent >
2346                 ,cc::split_list::ordered_list_traits<
2347                     typename cc::lazy_list::make_traits<
2348                         co::compare< compare >
2349                         ,co::memory_model< co::v::sequential_consistent >
2350                     >::type
2351                 >
2352             >::type
2353         > SplitList_Lazy_DHP_dyn_cmp_seqcst;
2354
2355         typedef cc::SplitListSet< cds::gc::DHP, key_val,
2356             typename cc::split_list::make_traits<
2357                 cc::split_list::ordered_list<cc::lazy_list_tag>
2358                 ,cc::split_list::dynamic_bucket_table< false >
2359                 ,co::hash< hash >
2360                 ,cc::split_list::ordered_list_traits<
2361                     typename cc::lazy_list::make_traits<
2362                         co::compare< compare >
2363                     >::type
2364                 >
2365             >::type
2366         > SplitList_Lazy_DHP_st_cmp;
2367
2368         typedef cc::SplitListSet< cds::gc::DHP, key_val,
2369             typename cc::split_list::make_traits<
2370                 cc::split_list::ordered_list<cc::lazy_list_tag>
2371                 ,co::hash< hash >
2372                 ,cc::split_list::dynamic_bucket_table< false >
2373                 ,co::memory_model< co::v::sequential_consistent >
2374                 ,cc::split_list::ordered_list_traits<
2375                     typename cc::lazy_list::make_traits<
2376                         co::compare< compare >
2377                         ,co::memory_model< co::v::sequential_consistent >
2378                     >::type
2379                 >
2380             >::type
2381         > SplitList_Lazy_DHP_st_cmp_seqcst;
2382
2383         // DHP + less
2384         typedef cc::SplitListSet< cds::gc::DHP, key_val,
2385             typename cc::split_list::make_traits<
2386                 cc::split_list::ordered_list<cc::lazy_list_tag>
2387                 ,co::hash< hash >
2388                 ,cc::split_list::ordered_list_traits<
2389                     typename cc::lazy_list::make_traits<
2390                         co::less< less >
2391                     >::type
2392                 >
2393             >::type
2394         > SplitList_Lazy_DHP_dyn_less;
2395
2396         typedef cc::SplitListSet< cds::gc::DHP, key_val,
2397             typename cc::split_list::make_traits<
2398                 cc::split_list::ordered_list<cc::lazy_list_tag>
2399                 ,co::hash< hash >
2400                 ,co::memory_model< co::v::sequential_consistent >
2401                 ,cc::split_list::ordered_list_traits<
2402                     typename cc::lazy_list::make_traits<
2403                         co::less< less >
2404                         ,co::memory_model< co::v::sequential_consistent >
2405                     >::type
2406                 >
2407             >::type
2408         > SplitList_Lazy_DHP_dyn_less_seqcst;
2409
2410         typedef cc::SplitListSet< cds::gc::DHP, key_val,
2411             typename cc::split_list::make_traits<
2412                 cc::split_list::ordered_list<cc::lazy_list_tag>
2413                 ,cc::split_list::dynamic_bucket_table< false >
2414                 ,co::hash< hash >
2415                 ,cc::split_list::ordered_list_traits<
2416                     typename cc::lazy_list::make_traits<
2417                         co::less< less >
2418                     >::type
2419                 >
2420             >::type
2421         > SplitList_Lazy_DHP_st_less;
2422
2423         typedef cc::SplitListSet< cds::gc::DHP, key_val,
2424             typename cc::split_list::make_traits<
2425                 cc::split_list::ordered_list<cc::lazy_list_tag>
2426                 ,co::hash< hash >
2427                 ,cc::split_list::dynamic_bucket_table< false >
2428                 ,co::memory_model< co::v::sequential_consistent >
2429                 ,cc::split_list::ordered_list_traits<
2430                     typename cc::lazy_list::make_traits<
2431                         co::less< less >
2432                         ,co::memory_model< co::v::sequential_consistent >
2433                     >::type
2434                 >
2435             >::type
2436         > SplitList_Lazy_DHP_st_less_seqcst;
2437
2438
2439         // RCU
2440         typedef cc::SplitListSet< rcu_gpi, key_val,
2441             typename cc::split_list::make_traits<
2442                 cc::split_list::ordered_list<cc::lazy_list_tag>
2443                 ,co::hash< hash >
2444                 ,cc::split_list::ordered_list_traits<
2445                     typename cc::lazy_list::make_traits<
2446                         co::compare< compare >
2447                     >::type
2448                 >
2449             >::type
2450         > SplitList_Lazy_RCU_GPI_dyn_cmp;
2451
2452         typedef cc::SplitListSet< rcu_gpi, key_val,
2453             typename cc::split_list::make_traits<
2454                 cc::split_list::ordered_list<cc::lazy_list_tag>
2455                 ,co::hash< hash >
2456                 ,co::memory_model< co::v::sequential_consistent >
2457                 ,cc::split_list::ordered_list_traits<
2458                     typename cc::lazy_list::make_traits<
2459                         co::compare< compare >
2460                         ,co::memory_model< co::v::sequential_consistent >
2461                     >::type
2462                 >
2463             >::type
2464         > SplitList_Lazy_RCU_GPI_dyn_cmp_seqcst;
2465
2466         typedef cc::SplitListSet< rcu_gpi, key_val,
2467             typename cc::split_list::make_traits<
2468                 cc::split_list::ordered_list<cc::lazy_list_tag>
2469                 ,cc::split_list::dynamic_bucket_table< false >
2470                 ,co::hash< hash >
2471                 ,cc::split_list::ordered_list_traits<
2472                     typename cc::lazy_list::make_traits<
2473                         co::compare< compare >
2474                     >::type
2475                 >
2476             >::type
2477         > SplitList_Lazy_RCU_GPI_st_cmp;
2478
2479         typedef cc::SplitListSet< rcu_gpi, key_val,
2480             typename cc::split_list::make_traits<
2481                 cc::split_list::ordered_list<cc::lazy_list_tag>
2482                 ,co::hash< hash >
2483                 ,cc::split_list::dynamic_bucket_table< false >
2484                 ,co::memory_model< co::v::sequential_consistent >
2485                 ,cc::split_list::ordered_list_traits<
2486                     typename cc::lazy_list::make_traits<
2487                         co::compare< compare >
2488                         ,co::memory_model< co::v::sequential_consistent >
2489                     >::type
2490                 >
2491             >::type
2492         > SplitList_Lazy_RCU_GPI_st_cmp_seqcst;
2493
2494         // RCU_GPI + less
2495         typedef cc::SplitListSet< rcu_gpi, key_val,
2496             typename cc::split_list::make_traits<
2497                 cc::split_list::ordered_list<cc::lazy_list_tag>
2498                 ,co::hash< hash >
2499                 ,cc::split_list::ordered_list_traits<
2500                     typename cc::lazy_list::make_traits<
2501                         co::less< less >
2502                     >::type
2503                 >
2504             >::type
2505         > SplitList_Lazy_RCU_GPI_dyn_less;
2506
2507         typedef cc::SplitListSet< rcu_gpi, key_val,
2508             typename cc::split_list::make_traits<
2509                 cc::split_list::ordered_list<cc::lazy_list_tag>
2510                 ,co::hash< hash >
2511                 ,co::memory_model< co::v::sequential_consistent >
2512                 ,cc::split_list::ordered_list_traits<
2513                     typename cc::lazy_list::make_traits<
2514                         co::less< less >
2515                         ,co::memory_model< co::v::sequential_consistent >
2516                     >::type
2517                 >
2518             >::type
2519         > SplitList_Lazy_RCU_GPI_dyn_less_seqcst;
2520
2521         typedef cc::SplitListSet< rcu_gpi, key_val,
2522             typename cc::split_list::make_traits<
2523                 cc::split_list::ordered_list<cc::lazy_list_tag>
2524                 ,cc::split_list::dynamic_bucket_table< false >
2525                 ,co::hash< hash >
2526                 ,cc::split_list::ordered_list_traits<
2527                     typename cc::lazy_list::make_traits<
2528                         co::less< less >
2529                     >::type
2530                 >
2531             >::type
2532         > SplitList_Lazy_RCU_GPI_st_less;
2533
2534         typedef cc::SplitListSet< rcu_gpi, key_val,
2535             typename cc::split_list::make_traits<
2536                 cc::split_list::ordered_list<cc::lazy_list_tag>
2537                 ,co::hash< hash >
2538                 ,cc::split_list::dynamic_bucket_table< false >
2539                 ,co::memory_model< co::v::sequential_consistent >
2540                 ,cc::split_list::ordered_list_traits<
2541                     typename cc::lazy_list::make_traits<
2542                         co::less< less >
2543                         ,co::memory_model< co::v::sequential_consistent >
2544                     >::type
2545                 >
2546             >::type
2547         > SplitList_Lazy_RCU_GPI_st_less_seqcst;
2548
2549         //
2550         typedef cc::SplitListSet< rcu_gpb, key_val,
2551             typename cc::split_list::make_traits<
2552                 cc::split_list::ordered_list<cc::lazy_list_tag>
2553                 ,co::hash< hash >
2554                 ,cc::split_list::ordered_list_traits<
2555                     typename cc::lazy_list::make_traits<
2556                         co::compare< compare >
2557                     >::type
2558                 >
2559             >::type
2560         > SplitList_Lazy_RCU_GPB_dyn_cmp;
2561
2562         typedef cc::SplitListSet< rcu_gpb, key_val,
2563             typename cc::split_list::make_traits<
2564                 cc::split_list::ordered_list<cc::lazy_list_tag>
2565                 ,co::hash< hash >
2566                 ,co::memory_model< co::v::sequential_consistent >
2567                 ,cc::split_list::ordered_list_traits<
2568                     typename cc::lazy_list::make_traits<
2569                         co::compare< compare >
2570                         ,co::memory_model< co::v::sequential_consistent >
2571                     >::type
2572                 >
2573             >::type
2574         > SplitList_Lazy_RCU_GPB_dyn_cmp_seqcst;
2575
2576         typedef cc::SplitListSet< rcu_gpb, key_val,
2577             typename cc::split_list::make_traits<
2578                 cc::split_list::ordered_list<cc::lazy_list_tag>
2579                 ,cc::split_list::dynamic_bucket_table< false >
2580                 ,co::hash< hash >
2581                 ,cc::split_list::ordered_list_traits<
2582                     typename cc::lazy_list::make_traits<
2583                         co::compare< compare >
2584                     >::type
2585                 >
2586             >::type
2587         > SplitList_Lazy_RCU_GPB_st_cmp;
2588
2589         typedef cc::SplitListSet< rcu_gpb, key_val,
2590             typename cc::split_list::make_traits<
2591                 cc::split_list::ordered_list<cc::lazy_list_tag>
2592                 ,co::hash< hash >
2593                 ,cc::split_list::dynamic_bucket_table< false >
2594                 ,co::memory_model< co::v::sequential_consistent >
2595                 ,cc::split_list::ordered_list_traits<
2596                     typename cc::lazy_list::make_traits<
2597                         co::compare< compare >
2598                         ,co::memory_model< co::v::sequential_consistent >
2599                     >::type
2600                 >
2601             >::type
2602         > SplitList_Lazy_RCU_GPB_st_cmp_seqcst;
2603
2604         // RCU_GPB + less
2605         typedef cc::SplitListSet< rcu_gpb, key_val,
2606             typename cc::split_list::make_traits<
2607                 cc::split_list::ordered_list<cc::lazy_list_tag>
2608                 ,co::hash< hash >
2609                 ,cc::split_list::ordered_list_traits<
2610                     typename cc::lazy_list::make_traits<
2611                         co::less< less >
2612                     >::type
2613                 >
2614             >::type
2615         > SplitList_Lazy_RCU_GPB_dyn_less;
2616
2617         typedef cc::SplitListSet< rcu_gpb, key_val,
2618             typename cc::split_list::make_traits<
2619                 cc::split_list::ordered_list<cc::lazy_list_tag>
2620                 ,co::hash< hash >
2621                 ,co::memory_model< co::v::sequential_consistent >
2622                 ,cc::split_list::ordered_list_traits<
2623                     typename cc::lazy_list::make_traits<
2624                         co::less< less >
2625                         ,co::memory_model< co::v::sequential_consistent >
2626                     >::type
2627                 >
2628             >::type
2629         > SplitList_Lazy_RCU_GPB_dyn_less_seqcst;
2630
2631         typedef cc::SplitListSet< rcu_gpb, key_val,
2632             typename cc::split_list::make_traits<
2633                 cc::split_list::ordered_list<cc::lazy_list_tag>
2634                 ,cc::split_list::dynamic_bucket_table< false >
2635                 ,co::hash< hash >
2636                 ,cc::split_list::ordered_list_traits<
2637                     typename cc::lazy_list::make_traits<
2638                         co::less< less >
2639                     >::type
2640                 >
2641             >::type
2642         > SplitList_Lazy_RCU_GPB_st_less;
2643
2644         typedef cc::SplitListSet< rcu_gpb, key_val,
2645             typename cc::split_list::make_traits<
2646                 cc::split_list::ordered_list<cc::lazy_list_tag>
2647                 ,co::hash< hash >
2648                 ,cc::split_list::dynamic_bucket_table< false >
2649                 ,co::memory_model< co::v::sequential_consistent >
2650                 ,cc::split_list::ordered_list_traits<
2651                     typename cc::lazy_list::make_traits<
2652                         co::less< less >
2653                         ,co::memory_model< co::v::sequential_consistent >
2654                     >::type
2655                 >
2656             >::type
2657         > SplitList_Lazy_RCU_GPB_st_less_seqcst;
2658
2659         //
2660         typedef cc::SplitListSet< rcu_gpt, key_val,
2661             typename cc::split_list::make_traits<
2662                 cc::split_list::ordered_list<cc::lazy_list_tag>
2663                 ,co::hash< hash >
2664                 ,cc::split_list::ordered_list_traits<
2665                     typename cc::lazy_list::make_traits<
2666                         co::compare< compare >
2667                     >::type
2668                 >
2669             >::type
2670         > SplitList_Lazy_RCU_GPT_dyn_cmp;
2671
2672         typedef cc::SplitListSet< rcu_gpt, key_val,
2673             typename cc::split_list::make_traits<
2674                 cc::split_list::ordered_list<cc::lazy_list_tag>
2675                 ,co::hash< hash >
2676                 ,co::memory_model< co::v::sequential_consistent >
2677                 ,cc::split_list::ordered_list_traits<
2678                     typename cc::lazy_list::make_traits<
2679                         co::compare< compare >
2680                         ,co::memory_model< co::v::sequential_consistent >
2681                     >::type
2682                 >
2683             >::type
2684         > SplitList_Lazy_RCU_GPT_dyn_cmp_seqcst;
2685
2686         typedef cc::SplitListSet< rcu_gpt, key_val,
2687             typename cc::split_list::make_traits<
2688                 cc::split_list::ordered_list<cc::lazy_list_tag>
2689                 ,cc::split_list::dynamic_bucket_table< false >
2690                 ,co::hash< hash >
2691                 ,cc::split_list::ordered_list_traits<
2692                     typename cc::lazy_list::make_traits<
2693                         co::compare< compare >
2694                     >::type
2695                 >
2696             >::type
2697         > SplitList_Lazy_RCU_GPT_st_cmp;
2698
2699         typedef cc::SplitListSet< rcu_gpt, key_val,
2700             typename cc::split_list::make_traits<
2701                 cc::split_list::ordered_list<cc::lazy_list_tag>
2702                 ,co::hash< hash >
2703                 ,cc::split_list::dynamic_bucket_table< false >
2704                 ,co::memory_model< co::v::sequential_consistent >
2705                 ,cc::split_list::ordered_list_traits<
2706                     typename cc::lazy_list::make_traits<
2707                         co::compare< compare >
2708                         ,co::memory_model< co::v::sequential_consistent >
2709                     >::type
2710                 >
2711             >::type
2712         > SplitList_Lazy_RCU_GPT_st_cmp_seqcst;
2713
2714         // RCU_GPT + less
2715         typedef cc::SplitListSet< rcu_gpt, key_val,
2716             typename cc::split_list::make_traits<
2717                 cc::split_list::ordered_list<cc::lazy_list_tag>
2718                 ,co::hash< hash >
2719                 ,cc::split_list::ordered_list_traits<
2720                     typename cc::lazy_list::make_traits<
2721                         co::less< less >
2722                     >::type
2723                 >
2724             >::type
2725         > SplitList_Lazy_RCU_GPT_dyn_less;
2726
2727         typedef cc::SplitListSet< rcu_gpt, key_val,
2728             typename cc::split_list::make_traits<
2729                 cc::split_list::ordered_list<cc::lazy_list_tag>
2730                 ,co::hash< hash >
2731                 ,co::memory_model< co::v::sequential_consistent >
2732                 ,cc::split_list::ordered_list_traits<
2733                     typename cc::lazy_list::make_traits<
2734                         co::less< less >
2735                         ,co::memory_model< co::v::sequential_consistent >
2736                     >::type
2737                 >
2738             >::type
2739         > SplitList_Lazy_RCU_GPT_dyn_less_seqcst;
2740
2741         typedef cc::SplitListSet< rcu_gpt, key_val,
2742             typename cc::split_list::make_traits<
2743                 cc::split_list::ordered_list<cc::lazy_list_tag>
2744                 ,cc::split_list::dynamic_bucket_table< false >
2745                 ,co::hash< hash >
2746                 ,cc::split_list::ordered_list_traits<
2747                     typename cc::lazy_list::make_traits<
2748                         co::less< less >
2749                     >::type
2750                 >
2751             >::type
2752         > SplitList_Lazy_RCU_GPT_st_less;
2753
2754         typedef cc::SplitListSet< rcu_gpt, key_val,
2755             typename cc::split_list::make_traits<
2756                 cc::split_list::ordered_list<cc::lazy_list_tag>
2757                 ,co::hash< hash >
2758                 ,cc::split_list::dynamic_bucket_table< false >
2759                 ,co::memory_model< co::v::sequential_consistent >
2760                 ,cc::split_list::ordered_list_traits<
2761                     typename cc::lazy_list::make_traits<
2762                         co::less< less >
2763                         ,co::memory_model< co::v::sequential_consistent >
2764                     >::type
2765                 >
2766             >::type
2767         > SplitList_Lazy_RCU_GPT_st_less_seqcst;
2768
2769 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
2770         typedef cc::SplitListSet< rcu_shb, key_val,
2771             typename cc::split_list::make_traits<
2772                 cc::split_list::ordered_list<cc::lazy_list_tag>
2773                 ,co::hash< hash >
2774                 ,cc::split_list::ordered_list_traits<
2775                     typename cc::lazy_list::make_traits<
2776                         co::compare< compare >
2777                     >::type
2778                 >
2779             >::type
2780         > SplitList_Lazy_RCU_SHB_dyn_cmp;
2781
2782         typedef cc::SplitListSet< rcu_shb, key_val,
2783             typename cc::split_list::make_traits<
2784                 cc::split_list::ordered_list<cc::lazy_list_tag>
2785                 ,co::hash< hash >
2786                 ,co::memory_model< co::v::sequential_consistent >
2787                 ,cc::split_list::ordered_list_traits<
2788                     typename cc::lazy_list::make_traits<
2789                         co::compare< compare >
2790                         ,co::memory_model< co::v::sequential_consistent >
2791                     >::type
2792                 >
2793             >::type
2794         > SplitList_Lazy_RCU_SHB_dyn_cmp_seqcst;
2795
2796         typedef cc::SplitListSet< rcu_shb, key_val,
2797             typename cc::split_list::make_traits<
2798                 cc::split_list::ordered_list<cc::lazy_list_tag>
2799                 ,cc::split_list::dynamic_bucket_table< false >
2800                 ,co::hash< hash >
2801                 ,cc::split_list::ordered_list_traits<
2802                     typename cc::lazy_list::make_traits<
2803                         co::compare< compare >
2804                     >::type
2805                 >
2806             >::type
2807         > SplitList_Lazy_RCU_SHB_st_cmp;
2808
2809         typedef cc::SplitListSet< rcu_shb, key_val,
2810             typename cc::split_list::make_traits<
2811                 cc::split_list::ordered_list<cc::lazy_list_tag>
2812                 ,co::hash< hash >
2813                 ,cc::split_list::dynamic_bucket_table< false >
2814                 ,co::memory_model< co::v::sequential_consistent >
2815                 ,cc::split_list::ordered_list_traits<
2816                     typename cc::lazy_list::make_traits<
2817                         co::compare< compare >
2818                         ,co::memory_model< co::v::sequential_consistent >
2819                     >::type
2820                 >
2821             >::type
2822         > SplitList_Lazy_RCU_SHB_st_cmp_seqcst;
2823
2824         // RCU_SHB + less
2825         typedef cc::SplitListSet< rcu_shb, key_val,
2826             typename cc::split_list::make_traits<
2827                 cc::split_list::ordered_list<cc::lazy_list_tag>
2828                 ,co::hash< hash >
2829                 ,cc::split_list::ordered_list_traits<
2830                     typename cc::lazy_list::make_traits<
2831                         co::less< less >
2832                     >::type
2833                 >
2834             >::type
2835         > SplitList_Lazy_RCU_SHB_dyn_less;
2836
2837         typedef cc::SplitListSet< rcu_shb, key_val,
2838             typename cc::split_list::make_traits<
2839                 cc::split_list::ordered_list<cc::lazy_list_tag>
2840                 ,co::hash< hash >
2841                 ,co::memory_model< co::v::sequential_consistent >
2842                 ,cc::split_list::ordered_list_traits<
2843                     typename cc::lazy_list::make_traits<
2844                         co::less< less >
2845                         ,co::memory_model< co::v::sequential_consistent >
2846                     >::type
2847                 >
2848             >::type
2849         > SplitList_Lazy_RCU_SHB_dyn_less_seqcst;
2850
2851         typedef cc::SplitListSet< rcu_shb, key_val,
2852             typename cc::split_list::make_traits<
2853                 cc::split_list::ordered_list<cc::lazy_list_tag>
2854                 ,cc::split_list::dynamic_bucket_table< false >
2855                 ,co::hash< hash >
2856                 ,cc::split_list::ordered_list_traits<
2857                     typename cc::lazy_list::make_traits<
2858                         co::less< less >
2859                     >::type
2860                 >
2861             >::type
2862         > SplitList_Lazy_RCU_SHB_st_less;
2863
2864         typedef cc::SplitListSet< rcu_shb, key_val,
2865             typename cc::split_list::make_traits<
2866                 cc::split_list::ordered_list<cc::lazy_list_tag>
2867                 ,co::hash< hash >
2868                 ,cc::split_list::dynamic_bucket_table< false >
2869                 ,co::memory_model< co::v::sequential_consistent >
2870                 ,cc::split_list::ordered_list_traits<
2871                     typename cc::lazy_list::make_traits<
2872                         co::less< less >
2873                         ,co::memory_model< co::v::sequential_consistent >
2874                     >::type
2875                 >
2876             >::type
2877         > SplitList_Lazy_RCU_SHB_st_less_seqcst;
2878
2879         //
2880         typedef cc::SplitListSet< rcu_sht, key_val,
2881             typename cc::split_list::make_traits<
2882                 cc::split_list::ordered_list<cc::lazy_list_tag>
2883                 ,co::hash< hash >
2884                 ,cc::split_list::ordered_list_traits<
2885                     typename cc::lazy_list::make_traits<
2886                         co::compare< compare >
2887                     >::type
2888                 >
2889             >::type
2890         > SplitList_Lazy_RCU_SHT_dyn_cmp;
2891
2892         typedef cc::SplitListSet< rcu_sht, key_val,
2893             typename cc::split_list::make_traits<
2894                 cc::split_list::ordered_list<cc::lazy_list_tag>
2895                 ,co::hash< hash >
2896                 ,co::memory_model< co::v::sequential_consistent >
2897                 ,cc::split_list::ordered_list_traits<
2898                     typename cc::lazy_list::make_traits<
2899                         co::compare< compare >
2900                         ,co::memory_model< co::v::sequential_consistent >
2901                     >::type
2902                 >
2903             >::type
2904         > SplitList_Lazy_RCU_SHT_dyn_cmp_seqcst;
2905
2906         typedef cc::SplitListSet< rcu_sht, key_val,
2907             typename cc::split_list::make_traits<
2908                 cc::split_list::ordered_list<cc::lazy_list_tag>
2909                 ,cc::split_list::dynamic_bucket_table< false >
2910                 ,co::hash< hash >
2911                 ,cc::split_list::ordered_list_traits<
2912                     typename cc::lazy_list::make_traits<
2913                         co::compare< compare >
2914                     >::type
2915                 >
2916             >::type
2917         > SplitList_Lazy_RCU_SHT_st_cmp;
2918
2919         typedef cc::SplitListSet< rcu_sht, key_val,
2920             typename cc::split_list::make_traits<
2921                 cc::split_list::ordered_list<cc::lazy_list_tag>
2922                 ,co::hash< hash >
2923                 ,cc::split_list::dynamic_bucket_table< false >
2924                 ,co::memory_model< co::v::sequential_consistent >
2925                 ,cc::split_list::ordered_list_traits<
2926                     typename cc::lazy_list::make_traits<
2927                         co::compare< compare >
2928                         ,co::memory_model< co::v::sequential_consistent >
2929                     >::type
2930                 >
2931             >::type
2932         > SplitList_Lazy_RCU_SHT_st_cmp_seqcst;
2933
2934         // RCU_SHT + less
2935         typedef cc::SplitListSet< rcu_sht, key_val,
2936             typename cc::split_list::make_traits<
2937                 cc::split_list::ordered_list<cc::lazy_list_tag>
2938                 ,co::hash< hash >
2939                 ,cc::split_list::ordered_list_traits<
2940                     typename cc::lazy_list::make_traits<
2941                         co::less< less >
2942                     >::type
2943                 >
2944             >::type
2945         > SplitList_Lazy_RCU_SHT_dyn_less;
2946
2947         typedef cc::SplitListSet< rcu_sht, key_val,
2948             typename cc::split_list::make_traits<
2949                 cc::split_list::ordered_list<cc::lazy_list_tag>
2950                 ,co::hash< hash >
2951                 ,co::memory_model< co::v::sequential_consistent >
2952                 ,cc::split_list::ordered_list_traits<
2953                     typename cc::lazy_list::make_traits<
2954                         co::less< less >
2955                         ,co::memory_model< co::v::sequential_consistent >
2956                     >::type
2957                 >
2958             >::type
2959         > SplitList_Lazy_RCU_SHT_dyn_less_seqcst;
2960
2961         typedef cc::SplitListSet< rcu_sht, key_val,
2962             typename cc::split_list::make_traits<
2963                 cc::split_list::ordered_list<cc::lazy_list_tag>
2964                 ,cc::split_list::dynamic_bucket_table< false >
2965                 ,co::hash< hash >
2966                 ,cc::split_list::ordered_list_traits<
2967                     typename cc::lazy_list::make_traits<
2968                         co::less< less >
2969                     >::type
2970                 >
2971             >::type
2972         > SplitList_Lazy_RCU_SHT_st_less;
2973
2974         typedef cc::SplitListSet< rcu_sht, key_val,
2975             typename cc::split_list::make_traits<
2976                 cc::split_list::ordered_list<cc::lazy_list_tag>
2977                 ,co::hash< hash >
2978                 ,cc::split_list::dynamic_bucket_table< false >
2979                 ,co::memory_model< co::v::sequential_consistent >
2980                 ,cc::split_list::ordered_list_traits<
2981                     typename cc::lazy_list::make_traits<
2982                         co::less< less >
2983                         ,co::memory_model< co::v::sequential_consistent >
2984                     >::type
2985                 >
2986             >::type
2987         > SplitList_Lazy_RCU_SHT_st_less_seqcst;
2988
2989 #endif
2990         // ***************************************************************************
2991         // StripedSet
2992
2993         // for sequential containers
2994         template <class BucketEntry, typename... Options>
2995         class StripedHashSet_seq:
2996             public cc::StripedSet< BucketEntry,
2997                 co::mutex_policy< cc::striped_set::striping<> >
2998                 ,co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
2999                 , Options...
3000             >
3001         {
3002             typedef cc::StripedSet< BucketEntry,
3003                 co::mutex_policy< cc::striped_set::striping<> >
3004                 ,co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
3005                 , Options...
3006             > base_class;
3007             typedef typename base_class::resizing_policy resizing_policy_t;
3008
3009             resizing_policy_t   m_placeHolder;
3010         public:
3011             StripedHashSet_seq( size_t nCapacity, size_t nLoadFactor )
3012                 : base_class( nCapacity / nLoadFactor / 16, *(new(&m_placeHolder) resizing_policy_t( nLoadFactor )) )
3013             {}
3014
3015             template <typename Q, typename Less>
3016             bool erase_with( Q const& v, Less pred )
3017             {
3018                 return base_class::erase( v );
3019             }
3020         };
3021
3022         // for non-sequential ordered containers
3023         template <class BucketEntry, typename... Options>
3024         class StripedHashSet_ord:
3025             public cc::StripedSet< BucketEntry,
3026                 co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
3027                 ,co::mutex_policy< cc::striped_set::striping<> >
3028                 , Options...
3029             >
3030         {
3031             typedef cc::StripedSet< BucketEntry,
3032                co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
3033                 ,co::mutex_policy< cc::striped_set::striping<> >
3034                 , Options...
3035             > base_class;
3036             typedef typename base_class::resizing_policy resizing_policy_t;
3037
3038             resizing_policy_t   m_placeHolder;
3039         public:
3040             StripedHashSet_ord( size_t nCapacity, size_t nLoadFactor )
3041                 : base_class( 0, *(new(&m_placeHolder) resizing_policy_t( nLoadFactor * 1024 )) )
3042             {}
3043
3044             template <typename Q, typename Less>
3045             bool erase_with( Q const& v, Less pred )
3046             {
3047                 return base_class::erase( v );
3048             }
3049         };
3050
3051         typedef StripedHashSet_seq<
3052             std::list< key_val >
3053             , co::hash< hash2 >
3054             , co::less< less >
3055         > StripedSet_list;
3056
3057         typedef StripedHashSet_seq<
3058             std::vector< key_val >
3059             , co::hash< hash2 >
3060             , co::less< less >
3061         > StripedSet_vector;
3062
3063 #if BOOST_VERSION >= 104800
3064         typedef StripedHashSet_seq<
3065             boost::container::slist< key_val >
3066             , co::hash< hash2 >
3067             , co::less< less >
3068         > StripedSet_boost_slist;
3069
3070         typedef StripedHashSet_seq<
3071             boost::container::list< key_val >
3072             , co::hash< hash2 >
3073             , co::less< less >
3074         > StripedSet_boost_list;
3075
3076         typedef StripedHashSet_seq<
3077             boost::container::vector< key_val >
3078             , co::hash< hash2 >
3079             , co::less< less >
3080         > StripedSet_boost_vector;
3081
3082         typedef StripedHashSet_seq<
3083             boost::container::stable_vector< key_val >
3084             , co::hash< hash2 >
3085             , co::less< less >
3086         > StripedSet_boost_stable_vector;
3087 #endif
3088
3089         typedef StripedHashSet_ord<
3090             std::set< key_val, less >
3091             , co::hash< hash2 >
3092         > StripedSet_set;
3093
3094 #if (CDS_COMPILER == CDS_COMPILER_MSVC || (CDS_COMPILER == CDS_COMPILER_INTEL && CDS_OS_INTERFACE == CDS_OSI_WINDOWS)) && _MSC_VER < 1600
3095         typedef StripedHashSet_ord<
3096             stdext::hash_set< key_val, hash_less >
3097             , co::hash< hash2 >
3098         > StripedSet_hashset;
3099 #else
3100         typedef StripedHashSet_ord<
3101             std::unordered_set< key_val, hash, equal_to >
3102             , co::hash< hash2 >
3103         > StripedSet_hashset;
3104 #endif
3105
3106 #if BOOST_VERSION >= 104800
3107         typedef StripedHashSet_ord<
3108             boost::container::set< key_val, less >
3109             , co::hash< hash2 >
3110         > StripedSet_boost_set;
3111
3112         typedef StripedHashSet_ord<
3113             boost::container::flat_set< key_val, less >
3114             , co::hash< hash2 >
3115         > StripedSet_boost_flat_set;
3116 #endif
3117
3118         typedef StripedHashSet_ord<
3119             boost::unordered_set< key_val, hash, equal_to >
3120             , co::hash< hash2 >
3121         > StripedSet_boost_unordered_set;
3122
3123
3124
3125         // ***************************************************************************
3126         // RefinableSet
3127
3128         // for sequential containers
3129         template <class BucketEntry, typename... Options>
3130         class RefinableHashSet_seq:
3131             public cc::StripedSet< BucketEntry,
3132             co::mutex_policy< cc::striped_set::refinable<> >
3133             ,co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
3134             , Options...
3135             >
3136         {
3137             typedef cc::StripedSet< BucketEntry,
3138                 co::mutex_policy< cc::striped_set::refinable<> >
3139                 ,co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
3140                 , Options...
3141             > base_class;
3142             typedef typename base_class::resizing_policy resizing_policy_t;
3143
3144             resizing_policy_t   m_placeHolder;
3145         public:
3146             RefinableHashSet_seq( size_t nCapacity, size_t nLoadFactor )
3147                 : base_class( nCapacity / nLoadFactor / 16, *(new(&m_placeHolder) resizing_policy_t( nLoadFactor )) )
3148             {}
3149
3150             template <typename Q, typename Less>
3151             bool erase_with( Q const& v, Less pred )
3152             {
3153                 return base_class::erase( v );
3154             }
3155         };
3156
3157         // for non-sequential ordered containers
3158         template <class BucketEntry, typename... Options>
3159         class RefinableHashSet_ord:
3160             public cc::StripedSet< BucketEntry,
3161                 co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
3162                 ,co::mutex_policy< cc::striped_set::refinable<> >
3163                 , Options...
3164             >
3165         {
3166             typedef cc::StripedSet< BucketEntry,
3167                 co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
3168                 ,co::mutex_policy< cc::striped_set::refinable<> >
3169                 , Options...
3170             > base_class;
3171             typedef typename base_class::resizing_policy resizing_policy_t;
3172
3173             resizing_policy_t   m_placeHolder;
3174         public:
3175             RefinableHashSet_ord( size_t nCapacity, size_t nLoadFactor )
3176                 : base_class( 0, *(new(&m_placeHolder) resizing_policy_t( nLoadFactor * 1024 )) )
3177             {}
3178
3179             template <typename Q, typename Less>
3180             bool erase_with( Q const& v, Less pred )
3181             {
3182                 return base_class::erase( v );
3183             }
3184         };
3185
3186         typedef RefinableHashSet_seq<
3187             std::list< key_val >
3188             , co::hash< hash2 >
3189             , co::less< less >
3190         > RefinableSet_list;
3191
3192         typedef RefinableHashSet_seq<
3193             std::vector< key_val >
3194             , co::hash< hash2 >
3195             , co::less< less >
3196         > RefinableSet_vector;
3197
3198 #if BOOST_VERSION >= 104800
3199         typedef RefinableHashSet_seq<
3200             boost::container::slist< key_val >
3201             , co::hash< hash2 >
3202             , co::less< less >
3203         > RefinableSet_boost_slist;
3204
3205         typedef RefinableHashSet_seq<
3206             boost::container::list< key_val >
3207             , co::hash< hash2 >
3208             , co::less< less >
3209         > RefinableSet_boost_list;
3210
3211         typedef RefinableHashSet_seq<
3212             boost::container::vector< key_val >
3213             , co::hash< hash2 >
3214             , co::less< less >
3215         > RefinableSet_boost_vector;
3216
3217         typedef RefinableHashSet_seq<
3218             boost::container::stable_vector< key_val >
3219             , co::hash< hash2 >
3220             , co::less< less >
3221         > RefinableSet_boost_stable_vector;
3222 #endif
3223
3224         typedef RefinableHashSet_ord<
3225             std::set< key_val, less >
3226             , co::hash< hash2 >
3227         > RefinableSet_set;
3228
3229 #if (CDS_COMPILER == CDS_COMPILER_MSVC || (CDS_COMPILER == CDS_COMPILER_INTEL && CDS_OS_INTERFACE == CDS_OSI_WINDOWS)) && _MSC_VER < 1600
3230         typedef RefinableHashSet_ord<
3231             stdext::hash_set< key_val, hash_less >
3232             , co::hash< hash2 >
3233         > RefinableSet_hashset;
3234 #else
3235         typedef RefinableHashSet_ord<
3236             std::unordered_set< key_val, hash, equal_to >
3237             , co::hash< hash2 >
3238         > RefinableSet_hashset;
3239 #endif
3240
3241 #if BOOST_VERSION >= 104800
3242         typedef RefinableHashSet_ord<
3243             boost::container::set< key_val, less >
3244             , co::hash< hash2 >
3245         > RefinableSet_boost_set;
3246
3247         typedef RefinableHashSet_ord<
3248             boost::container::flat_set< key_val, less >
3249             , co::hash< hash2 >
3250         > RefinableSet_boost_flat_set;
3251 #endif
3252
3253         typedef RefinableHashSet_ord<
3254             boost::unordered_set< key_val, hash, equal_to >
3255             , co::hash< hash2 >
3256         > RefinableSet_boost_unordered_set;
3257
3258
3259
3260         // ***************************************************************************
3261         // CuckooSet
3262
3263         typedef CuckooStripedSet< key_val,
3264             cc::cuckoo::probeset_type< cc::cuckoo::list >
3265             ,co::equal_to< equal_to >
3266             ,co::hash< std::tuple< hash, hash2 > >
3267         > CuckooStripedSet_list_unord;
3268
3269         typedef CuckooStripedSet< key_val,
3270             cc::cuckoo::probeset_type< cc::cuckoo::list >
3271             ,co::equal_to< equal_to >
3272             ,co::hash< std::tuple< hash, hash2 > >
3273             ,co::stat< cc::cuckoo::stat >
3274         > CuckooStripedSet_list_unord_stat;
3275
3276         typedef CuckooStripedSet< key_val,
3277             cc::cuckoo::probeset_type< cc::cuckoo::list >
3278             ,co::equal_to< equal_to >
3279             ,co::hash< std::tuple< hash, hash2 > >
3280             ,cc::cuckoo::store_hash< true >
3281         > CuckooStripedSet_list_unord_storehash;
3282
3283         typedef CuckooStripedSet< key_val,
3284             cc::cuckoo::probeset_type< cc::cuckoo::list >
3285             ,co::compare< compare >
3286             ,co::hash< std::tuple< hash, hash2 > >
3287         > CuckooStripedSet_list_ord;
3288
3289         typedef CuckooStripedSet< key_val,
3290             cc::cuckoo::probeset_type< cc::cuckoo::list >
3291             ,co::compare< compare >
3292             ,co::hash< std::tuple< hash, hash2 > >
3293             ,co::stat< cc::cuckoo::stat >
3294         > CuckooStripedSet_list_ord_stat;
3295
3296         typedef CuckooStripedSet< key_val,
3297             cc::cuckoo::probeset_type< cc::cuckoo::list >
3298             ,co::compare< compare >
3299             ,co::hash< std::tuple< hash, hash2 > >
3300             ,cc::cuckoo::store_hash< true >
3301         > CuckooStripedSet_list_ord_storehash;
3302
3303         typedef CuckooStripedSet< key_val,
3304             cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
3305             ,co::equal_to< equal_to >
3306             ,co::hash< std::tuple< hash, hash2 > >
3307         > CuckooStripedSet_vector_unord;
3308
3309         typedef CuckooStripedSet< key_val,
3310             cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
3311             ,co::equal_to< equal_to >
3312             ,co::hash< std::tuple< hash, hash2 > >
3313             ,co::stat< cc::cuckoo::stat >
3314         > CuckooStripedSet_vector_unord_stat;
3315
3316         typedef CuckooStripedSet< key_val,
3317             cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
3318             ,co::equal_to< equal_to >
3319             ,co::hash< std::tuple< hash, hash2 > >
3320             ,cc::cuckoo::store_hash< true >
3321         > CuckooStripedSet_vector_unord_storehash;
3322
3323         typedef CuckooStripedSet< key_val,
3324             cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
3325             ,co::compare< compare >
3326             ,co::hash< std::tuple< hash, hash2 > >
3327         > CuckooStripedSet_vector_ord;
3328
3329         typedef CuckooStripedSet< key_val,
3330             cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
3331             ,co::compare< compare >
3332             ,co::hash< std::tuple< hash, hash2 > >
3333             ,co::stat< cc::cuckoo::stat >
3334         > CuckooStripedSet_vector_ord_stat;
3335
3336         typedef CuckooStripedSet< key_val,
3337             cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
3338             ,co::compare< compare >
3339             ,co::hash< std::tuple< hash, hash2 > >
3340             ,cc::cuckoo::store_hash< true >
3341         > CuckooStripedSet_vector_ord_storehash;
3342
3343         typedef CuckooRefinableSet< key_val,
3344             cc::cuckoo::probeset_type< cc::cuckoo::list >
3345             ,co::equal_to< equal_to >
3346             ,co::hash< std::tuple< hash, hash2 > >
3347         > CuckooRefinableSet_list_unord;
3348
3349         typedef CuckooRefinableSet< key_val,
3350             cc::cuckoo::probeset_type< cc::cuckoo::list >
3351             ,co::equal_to< equal_to >
3352             ,co::hash< std::tuple< hash, hash2 > >
3353             ,co::stat< cc::cuckoo::stat >
3354         > CuckooRefinableSet_list_unord_stat;
3355
3356         typedef CuckooRefinableSet< key_val,
3357             cc::cuckoo::probeset_type< cc::cuckoo::list >
3358             ,co::equal_to< equal_to >
3359             ,co::hash< std::tuple< hash, hash2 > >
3360             ,cc::cuckoo::store_hash< true >
3361         > CuckooRefinableSet_list_unord_storehash;
3362
3363         typedef CuckooRefinableSet< key_val,
3364             cc::cuckoo::probeset_type< cc::cuckoo::list >
3365             ,co::compare< compare >
3366             ,co::hash< std::tuple< hash, hash2 > >
3367         > CuckooRefinableSet_list_ord;
3368
3369         typedef CuckooRefinableSet< key_val,
3370             cc::cuckoo::probeset_type< cc::cuckoo::list >
3371             ,co::compare< compare >
3372             ,co::hash< std::tuple< hash, hash2 > >
3373             ,co::stat< cc::cuckoo::stat >
3374         > CuckooRefinableSet_list_ord_stat;
3375
3376         typedef CuckooRefinableSet< key_val,
3377             cc::cuckoo::probeset_type< cc::cuckoo::list >
3378             ,co::compare< compare >
3379             ,co::hash< std::tuple< hash, hash2 > >
3380             ,cc::cuckoo::store_hash< true >
3381         > CuckooRefinableSet_list_ord_storehash;
3382
3383         typedef CuckooRefinableSet< key_val,
3384             cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
3385             ,co::equal_to< equal_to >
3386             ,co::hash< std::tuple< hash, hash2 > >
3387         > CuckooRefinableSet_vector_unord;
3388
3389         typedef CuckooRefinableSet< key_val,
3390             cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
3391             ,co::equal_to< equal_to >
3392             ,co::hash< std::tuple< hash, hash2 > >
3393             ,co::stat< cc::cuckoo::stat >
3394         > CuckooRefinableSet_vector_unord_stat;
3395
3396         typedef CuckooRefinableSet< key_val,
3397             cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
3398             ,co::equal_to< equal_to >
3399             ,co::hash< std::tuple< hash, hash2 > >
3400             ,cc::cuckoo::store_hash< true >
3401         > CuckooRefinableSet_vector_unord_storehash;
3402
3403         typedef CuckooRefinableSet< key_val,
3404             cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
3405             ,co::compare< compare >
3406             ,co::hash< std::tuple< hash, hash2 > >
3407         > CuckooRefinableSet_vector_ord;
3408
3409         typedef CuckooRefinableSet< key_val,
3410             cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
3411             ,co::compare< compare >
3412             ,co::hash< std::tuple< hash, hash2 > >
3413             ,co::stat< cc::cuckoo::stat >
3414         > CuckooRefinableSet_vector_ord_stat;
3415
3416         typedef CuckooRefinableSet< key_val,
3417             cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
3418             ,co::compare< compare >
3419             ,co::hash< std::tuple< hash, hash2 > >
3420             ,cc::cuckoo::store_hash< true >
3421         > CuckooRefinableSet_vector_ord_storehash;
3422
3423
3424         // ***************************************************************************
3425         // SkipListSet - HP
3426
3427         class traits_SkipListSet_hp_less_pascal: public cc::skip_list::make_traits <
3428                 co::less< less >
3429                 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3430                 ,co::item_counter< cds::atomicity::item_counter >
3431             >::type
3432         {};
3433         typedef cc::SkipListSet< cds::gc::HP, key_val, traits_SkipListSet_hp_less_pascal > SkipListSet_hp_less_pascal;
3434
3435         class traits_SkipListSet_hp_less_pascal_seqcst: public cc::skip_list::make_traits <
3436                 co::less< less >
3437                 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3438                 ,co::memory_model< co::v::sequential_consistent >
3439                 ,co::item_counter< cds::atomicity::item_counter >
3440             >::type
3441         {};
3442         typedef cc::SkipListSet< cds::gc::HP, key_val, traits_SkipListSet_hp_less_pascal_seqcst > SkipListSet_hp_less_pascal_seqcst;
3443
3444         class traits_SkipListSet_hp_less_pascal_stat: public cc::skip_list::make_traits <
3445                 co::less< less >
3446                 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3447                 ,co::stat< cc::skip_list::stat<> >
3448                 ,co::item_counter< cds::atomicity::item_counter >
3449             >::type
3450         {};
3451         typedef cc::SkipListSet< cds::gc::HP, key_val, traits_SkipListSet_hp_less_pascal_stat > SkipListSet_hp_less_pascal_stat;
3452
3453         class traits_SkipListSet_hp_cmp_pascal: public cc::skip_list::make_traits <
3454             co::compare< compare >
3455             ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3456             ,co::item_counter< cds::atomicity::item_counter >
3457         >::type
3458         {};
3459         typedef cc::SkipListSet< cds::gc::HP, key_val, traits_SkipListSet_hp_cmp_pascal > SkipListSet_hp_cmp_pascal;
3460
3461         class traits_SkipListSet_hp_cmp_pascal_stat: public cc::skip_list::make_traits <
3462             co::compare< compare >
3463             ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3464             ,co::stat< cc::skip_list::stat<> >
3465             ,co::item_counter< cds::atomicity::item_counter >
3466         >::type
3467         {};
3468         typedef cc::SkipListSet< cds::gc::HP, key_val, traits_SkipListSet_hp_cmp_pascal_stat > SkipListSet_hp_cmp_pascal_stat;
3469
3470         class traits_SkipListSet_hp_less_xorshift: public cc::skip_list::make_traits <
3471             co::less< less >
3472             ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3473             ,co::item_counter< cds::atomicity::item_counter >
3474         >::type
3475         {};
3476         typedef cc::SkipListSet< cds::gc::HP, key_val, traits_SkipListSet_hp_less_xorshift > SkipListSet_hp_less_xorshift;
3477
3478         class traits_SkipListSet_hp_less_xorshift_stat: public cc::skip_list::make_traits <
3479             co::less< less >
3480             ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3481             ,co::stat< cc::skip_list::stat<> >
3482             ,co::item_counter< cds::atomicity::item_counter >
3483         >::type
3484         {};
3485         typedef cc::SkipListSet< cds::gc::HP, key_val, traits_SkipListSet_hp_less_xorshift_stat > SkipListSet_hp_less_xorshift_stat;
3486
3487         class traits_SkipListSet_hp_cmp_xorshift: public cc::skip_list::make_traits <
3488             co::compare< compare >
3489             ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3490             ,co::item_counter< cds::atomicity::item_counter >
3491         >::type
3492         {};
3493         typedef cc::SkipListSet< cds::gc::HP, key_val, traits_SkipListSet_hp_cmp_xorshift > SkipListSet_hp_cmp_xorshift;
3494
3495         class traits_SkipListSet_hp_cmp_xorshift_stat: public cc::skip_list::make_traits <
3496             co::compare< compare >
3497             ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3498             ,co::stat< cc::skip_list::stat<> >
3499             ,co::item_counter< cds::atomicity::item_counter >
3500         >::type
3501         {};
3502         typedef cc::SkipListSet< cds::gc::HP, key_val, traits_SkipListSet_hp_cmp_xorshift_stat > SkipListSet_hp_cmp_xorshift_stat;
3503
3504         // ***************************************************************************
3505         // SkipListSet - DHP
3506
3507         class traits_SkipListSet_ptb_less_pascal: public cc::skip_list::make_traits <
3508             co::less< less >
3509             ,co::item_counter< cds::atomicity::item_counter >
3510             ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3511         >::type
3512         {};
3513         typedef cc::SkipListSet< cds::gc::DHP, key_val, traits_SkipListSet_ptb_less_pascal > SkipListSet_ptb_less_pascal;
3514
3515         class traits_SkipListSet_ptb_less_pascal_seqcst: public cc::skip_list::make_traits <
3516             co::less< less >
3517             ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3518             ,co::memory_model< co::v::sequential_consistent >
3519             ,co::item_counter< cds::atomicity::item_counter >
3520         >::type
3521         {};
3522         typedef cc::SkipListSet< cds::gc::DHP, key_val, traits_SkipListSet_ptb_less_pascal_seqcst > SkipListSet_ptb_less_pascal_seqcst;
3523
3524         class traits_SkipListSet_ptb_less_pascal_stat: public cc::skip_list::make_traits <
3525             co::less< less >
3526             ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3527             ,co::stat< cc::skip_list::stat<> >
3528             ,co::item_counter< cds::atomicity::item_counter >
3529         >::type
3530         {};
3531         typedef cc::SkipListSet< cds::gc::DHP, key_val, traits_SkipListSet_ptb_less_pascal_stat > SkipListSet_ptb_less_pascal_stat;
3532
3533         class traits_SkipListSet_ptb_cmp_pascal: public cc::skip_list::make_traits <
3534             co::compare< compare >
3535             ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3536             ,co::item_counter< cds::atomicity::item_counter >
3537         >::type
3538         {};
3539         typedef cc::SkipListSet< cds::gc::DHP, key_val, traits_SkipListSet_ptb_cmp_pascal > SkipListSet_ptb_cmp_pascal;
3540
3541         class traits_SkipListSet_ptb_cmp_pascal_stat: public cc::skip_list::make_traits <
3542             co::compare< compare >
3543             ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3544             ,co::stat< cc::skip_list::stat<> >
3545             ,co::item_counter< cds::atomicity::item_counter >
3546         >::type
3547         {};
3548         typedef cc::SkipListSet< cds::gc::DHP, key_val, traits_SkipListSet_ptb_cmp_pascal_stat > SkipListSet_ptb_cmp_pascal_stat;
3549
3550         class traits_SkipListSet_ptb_less_xorshift: public cc::skip_list::make_traits <
3551             co::less< less >
3552             ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3553             ,co::item_counter< cds::atomicity::item_counter >
3554         >::type
3555         {};
3556         typedef cc::SkipListSet< cds::gc::DHP, key_val, traits_SkipListSet_ptb_less_xorshift > SkipListSet_ptb_less_xorshift;
3557
3558         class traits_SkipListSet_ptb_less_xorshift_stat: public cc::skip_list::make_traits <
3559             co::less< less >
3560             ,co::item_counter< cds::atomicity::item_counter >
3561             ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3562             ,co::stat< cc::skip_list::stat<> >
3563         >::type
3564         {};
3565         typedef cc::SkipListSet< cds::gc::DHP, key_val, traits_SkipListSet_ptb_less_xorshift_stat > SkipListSet_ptb_less_xorshift_stat;
3566
3567         class traits_SkipListSet_ptb_cmp_xorshift: public cc::skip_list::make_traits <
3568             co::compare< compare >
3569             ,co::item_counter< cds::atomicity::item_counter >
3570             ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3571         >::type
3572         {};
3573         typedef cc::SkipListSet< cds::gc::DHP, key_val, traits_SkipListSet_ptb_cmp_xorshift> SkipListSet_ptb_cmp_xorshift;
3574
3575         class traits_SkipListSet_ptb_cmp_xorshift_stat: public cc::skip_list::make_traits <
3576             co::compare< compare >
3577             ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3578             ,co::stat< cc::skip_list::stat<> >
3579             ,co::item_counter< cds::atomicity::item_counter >
3580         >::type
3581         {};
3582         typedef cc::SkipListSet< cds::gc::DHP, key_val, traits_SkipListSet_ptb_cmp_xorshift_stat > SkipListSet_ptb_cmp_xorshift_stat;
3583
3584
3585         // ***************************************************************************
3586         // SkipListSet - RCU general_instant
3587
3588         class traits_SkipListSet_rcu_gpi_less_pascal: public cc::skip_list::make_traits <
3589             co::less< less >
3590             ,co::item_counter< cds::atomicity::item_counter >
3591             ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3592         >::type
3593         {};
3594         typedef cc::SkipListSet< rcu_gpi, key_val, traits_SkipListSet_rcu_gpi_less_pascal > SkipListSet_rcu_gpi_less_pascal;
3595
3596         class traits_SkipListSet_rcu_gpi_less_pascal_seqcst: public cc::skip_list::make_traits <
3597             co::less< less >
3598             ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3599             ,co::memory_model< co::v::sequential_consistent >
3600             ,co::item_counter< cds::atomicity::item_counter >
3601         >::type
3602         {};
3603         typedef cc::SkipListSet< rcu_gpi, key_val, traits_SkipListSet_rcu_gpi_less_pascal_seqcst > SkipListSet_rcu_gpi_less_pascal_seqcst;
3604
3605         class traits_SkipListSet_rcu_gpi_less_pascal_stat: public cc::skip_list::make_traits <
3606             co::less< less >
3607             ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3608             ,co::stat< cc::skip_list::stat<> >
3609             ,co::item_counter< cds::atomicity::item_counter >
3610         >::type
3611         {};
3612         typedef cc::SkipListSet< rcu_gpi, key_val, traits_SkipListSet_rcu_gpi_less_pascal_stat > SkipListSet_rcu_gpi_less_pascal_stat;
3613
3614         class traits_SkipListSet_rcu_gpi_cmp_pascal: public cc::skip_list::make_traits <
3615             co::compare< compare >
3616             ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3617             ,co::item_counter< cds::atomicity::item_counter >
3618         >::type
3619         {};
3620         typedef cc::SkipListSet< rcu_gpi, key_val, traits_SkipListSet_rcu_gpi_cmp_pascal > SkipListSet_rcu_gpi_cmp_pascal;
3621
3622         class traits_SkipListSet_rcu_gpi_cmp_pascal_stat: public cc::skip_list::make_traits <
3623             co::compare< compare >
3624             ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3625             ,co::stat< cc::skip_list::stat<> >
3626             ,co::item_counter< cds::atomicity::item_counter >
3627         >::type
3628         {};
3629         typedef cc::SkipListSet< rcu_gpi, key_val, traits_SkipListSet_rcu_gpi_cmp_pascal_stat > SkipListSet_rcu_gpi_cmp_pascal_stat;
3630
3631         class traits_SkipListSet_rcu_gpi_less_xorshift: public cc::skip_list::make_traits <
3632             co::less< less >
3633             ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3634             ,co::item_counter< cds::atomicity::item_counter >
3635         >::type
3636         {};
3637         typedef cc::SkipListSet< rcu_gpi, key_val, traits_SkipListSet_rcu_gpi_less_xorshift > SkipListSet_rcu_gpi_less_xorshift;
3638
3639         class traits_SkipListSet_rcu_gpi_less_xorshift_stat: public cc::skip_list::make_traits <
3640             co::less< less >
3641             ,co::item_counter< cds::atomicity::item_counter >
3642             ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3643             ,co::stat< cc::skip_list::stat<> >
3644         >::type
3645         {};
3646         typedef cc::SkipListSet< rcu_gpi, key_val, traits_SkipListSet_rcu_gpi_less_xorshift_stat > SkipListSet_rcu_gpi_less_xorshift_stat;
3647
3648         class traits_SkipListSet_rcu_gpi_cmp_xorshift: public cc::skip_list::make_traits <
3649             co::compare< compare >
3650             ,co::item_counter< cds::atomicity::item_counter >
3651             ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3652         >::type
3653         {};
3654         typedef cc::SkipListSet< rcu_gpi, key_val, traits_SkipListSet_rcu_gpi_cmp_xorshift > SkipListSet_rcu_gpi_cmp_xorshift;
3655
3656         class traits_SkipListSet_rcu_gpi_cmp_xorshift_stat: public cc::skip_list::make_traits <
3657             co::compare< compare >
3658             ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3659             ,co::stat< cc::skip_list::stat<> >
3660             ,co::item_counter< cds::atomicity::item_counter >
3661         >::type
3662         {};
3663         typedef cc::SkipListSet< rcu_gpi, key_val, traits_SkipListSet_rcu_gpi_cmp_xorshift_stat > SkipListSet_rcu_gpi_cmp_xorshift_stat;
3664
3665
3666         // ***************************************************************************
3667         // SkipListSet - RCU general_buffered
3668
3669         class traits_SkipListSet_rcu_gpb_less_pascal: public cc::skip_list::make_traits <
3670             co::less< less >
3671             ,co::item_counter< cds::atomicity::item_counter >
3672             ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3673         >::type
3674         {};
3675         typedef cc::SkipListSet< rcu_gpb, key_val, traits_SkipListSet_rcu_gpb_less_pascal > SkipListSet_rcu_gpb_less_pascal;
3676
3677         class traits_SkipListSet_rcu_gpb_less_pascal_seqcst: public cc::skip_list::make_traits <
3678             co::less< less >
3679             ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3680             ,co::memory_model< co::v::sequential_consistent >
3681             ,co::item_counter< cds::atomicity::item_counter >
3682         >::type
3683         {};
3684         typedef cc::SkipListSet< rcu_gpb, key_val, traits_SkipListSet_rcu_gpb_less_pascal_seqcst > SkipListSet_rcu_gpb_less_pascal_seqcst;
3685
3686         class traits_SkipListSet_rcu_gpb_less_pascal_stat: public cc::skip_list::make_traits <
3687             co::less< less >
3688             ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3689             ,co::stat< cc::skip_list::stat<> >
3690             ,co::item_counter< cds::atomicity::item_counter >
3691         >::type
3692         {};
3693         typedef cc::SkipListSet< rcu_gpb, key_val, traits_SkipListSet_rcu_gpb_less_pascal_stat > SkipListSet_rcu_gpb_less_pascal_stat;
3694
3695         class traits_SkipListSet_rcu_gpb_cmp_pascal: public cc::skip_list::make_traits <
3696             co::compare< compare >
3697             ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3698             ,co::item_counter< cds::atomicity::item_counter >
3699         >::type
3700         {};
3701         typedef cc::SkipListSet< rcu_gpb, key_val, traits_SkipListSet_rcu_gpb_cmp_pascal > SkipListSet_rcu_gpb_cmp_pascal;
3702
3703         class traits_SkipListSet_rcu_gpb_cmp_pascal_stat: public cc::skip_list::make_traits <
3704             co::compare< compare >
3705             ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3706             ,co::stat< cc::skip_list::stat<> >
3707             ,co::item_counter< cds::atomicity::item_counter >
3708         >::type
3709         {};
3710         typedef cc::SkipListSet< rcu_gpb, key_val, traits_SkipListSet_rcu_gpb_cmp_pascal_stat > SkipListSet_rcu_gpb_cmp_pascal_stat;
3711
3712         class traits_SkipListSet_rcu_gpb_less_xorshift: public cc::skip_list::make_traits <
3713             co::less< less >
3714             ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3715             ,co::item_counter< cds::atomicity::item_counter >
3716         >::type
3717         {};
3718         typedef cc::SkipListSet< rcu_gpb, key_val, traits_SkipListSet_rcu_gpb_less_xorshift > SkipListSet_rcu_gpb_less_xorshift;
3719
3720         class traits_SkipListSet_rcu_gpb_less_xorshift_stat: public cc::skip_list::make_traits <
3721             co::less< less >
3722             ,co::item_counter< cds::atomicity::item_counter >
3723             ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3724             ,co::stat< cc::skip_list::stat<> >
3725         >::type
3726         {};
3727         typedef cc::SkipListSet< rcu_gpb, key_val, traits_SkipListSet_rcu_gpb_less_xorshift_stat > SkipListSet_rcu_gpb_less_xorshift_stat;
3728
3729         class traits_SkipListSet_rcu_gpb_cmp_xorshift: public cc::skip_list::make_traits <
3730             co::compare< compare >
3731             ,co::item_counter< cds::atomicity::item_counter >
3732             ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3733         >::type
3734         {};
3735         typedef cc::SkipListSet< rcu_gpb, key_val, traits_SkipListSet_rcu_gpb_cmp_xorshift > SkipListSet_rcu_gpb_cmp_xorshift;
3736
3737         class traits_SkipListSet_rcu_gpb_cmp_xorshift_stat: public cc::skip_list::make_traits <
3738             co::compare< compare >
3739             ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3740             ,co::stat< cc::skip_list::stat<> >
3741             ,co::item_counter< cds::atomicity::item_counter >
3742         >::type
3743         {};
3744         typedef cc::SkipListSet< rcu_gpb, key_val, traits_SkipListSet_rcu_gpb_cmp_xorshift_stat > SkipListSet_rcu_gpb_cmp_xorshift_stat;
3745
3746         // ***************************************************************************
3747         // SkipListSet - RCU general_threaded
3748
3749         class traits_SkipListSet_rcu_gpt_less_pascal: public cc::skip_list::make_traits <
3750             co::less< less >
3751             ,co::item_counter< cds::atomicity::item_counter >
3752             ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3753         >::type
3754         {};
3755         typedef cc::SkipListSet< rcu_gpt, key_val, traits_SkipListSet_rcu_gpt_less_pascal > SkipListSet_rcu_gpt_less_pascal;
3756
3757         class traits_SkipListSet_rcu_gpt_less_pascal_seqcst: public cc::skip_list::make_traits <
3758             co::less< less >
3759             ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3760             ,co::memory_model< co::v::sequential_consistent >
3761             ,co::item_counter< cds::atomicity::item_counter >
3762         >::type
3763         {};
3764         typedef cc::SkipListSet< rcu_gpt, key_val, traits_SkipListSet_rcu_gpt_less_pascal_seqcst > SkipListSet_rcu_gpt_less_pascal_seqcst;
3765
3766         class traits_SkipListSet_rcu_gpt_less_pascal_stat: public cc::skip_list::make_traits <
3767             co::less< less >
3768             ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3769             ,co::stat< cc::skip_list::stat<> >
3770             ,co::item_counter< cds::atomicity::item_counter >
3771         >::type
3772         {};
3773         typedef cc::SkipListSet< rcu_gpt, key_val, traits_SkipListSet_rcu_gpt_less_pascal_stat > SkipListSet_rcu_gpt_less_pascal_stat;
3774
3775         class traits_SkipListSet_rcu_gpt_cmp_pascal: public cc::skip_list::make_traits <
3776             co::compare< compare >
3777             ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3778             ,co::item_counter< cds::atomicity::item_counter >
3779         >::type
3780         {};
3781         typedef cc::SkipListSet< rcu_gpt, key_val, traits_SkipListSet_rcu_gpt_cmp_pascal > SkipListSet_rcu_gpt_cmp_pascal;
3782
3783         class traits_SkipListSet_rcu_gpt_cmp_pascal_stat: public cc::skip_list::make_traits <
3784             co::compare< compare >
3785             ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3786             ,co::stat< cc::skip_list::stat<> >
3787             ,co::item_counter< cds::atomicity::item_counter >
3788         >::type
3789         {};
3790         typedef cc::SkipListSet< rcu_gpt, key_val, traits_SkipListSet_rcu_gpt_cmp_pascal_stat > SkipListSet_rcu_gpt_cmp_pascal_stat;
3791
3792         class traits_SkipListSet_rcu_gpt_less_xorshift: public cc::skip_list::make_traits <
3793             co::less< less >
3794             ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3795             ,co::item_counter< cds::atomicity::item_counter >
3796         >::type
3797         {};
3798         typedef cc::SkipListSet< rcu_gpt, key_val, traits_SkipListSet_rcu_gpt_less_xorshift > SkipListSet_rcu_gpt_less_xorshift;
3799
3800         class traits_SkipListSet_rcu_gpt_less_xorshift_stat: public cc::skip_list::make_traits <
3801             co::less< less >
3802             ,co::item_counter< cds::atomicity::item_counter >
3803             ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3804             ,co::stat< cc::skip_list::stat<> >
3805         >::type
3806         {};
3807         typedef cc::SkipListSet< rcu_gpt, key_val, traits_SkipListSet_rcu_gpt_less_xorshift_stat > SkipListSet_rcu_gpt_less_xorshift_stat;
3808
3809         class traits_SkipListSet_rcu_gpt_cmp_xorshift: public cc::skip_list::make_traits <
3810             co::compare< compare >
3811             ,co::item_counter< cds::atomicity::item_counter >
3812             ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3813         >::type
3814         {};
3815         typedef cc::SkipListSet< rcu_gpt, key_val, traits_SkipListSet_rcu_gpt_cmp_xorshift > SkipListSet_rcu_gpt_cmp_xorshift;
3816
3817         class traits_SkipListSet_rcu_gpt_cmp_xorshift_stat: public cc::skip_list::make_traits <
3818             co::compare< compare >
3819             ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3820             ,co::stat< cc::skip_list::stat<> >
3821             ,co::item_counter< cds::atomicity::item_counter >
3822         >::type
3823         {};
3824         typedef cc::SkipListSet< rcu_gpt, key_val, traits_SkipListSet_rcu_gpt_cmp_xorshift_stat > SkipListSet_rcu_gpt_cmp_xorshift_stat;
3825
3826 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
3827         // ***************************************************************************
3828         // SkipListSet - RCU signal_buffered
3829
3830         class traits_SkipListSet_rcu_shb_less_pascal: public cc::skip_list::make_traits <
3831             co::less< less >
3832             ,co::item_counter< cds::atomicity::item_counter >
3833             ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3834         >::type
3835         {};
3836         typedef cc::SkipListSet< rcu_shb, key_val, traits_SkipListSet_rcu_shb_less_pascal > SkipListSet_rcu_shb_less_pascal;
3837
3838         class traits_SkipListSet_rcu_shb_less_pascal_seqcst: public cc::skip_list::make_traits <
3839             co::less< less >
3840             ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3841             ,co::memory_model< co::v::sequential_consistent >
3842             ,co::item_counter< cds::atomicity::item_counter >
3843         >::type
3844         {};
3845         typedef cc::SkipListSet< rcu_shb, key_val, traits_SkipListSet_rcu_shb_less_pascal_seqcst > SkipListSet_rcu_shb_less_pascal_seqcst;
3846
3847         class traits_SkipListSet_rcu_shb_less_pascal_stat: public cc::skip_list::make_traits <
3848             co::less< less >
3849             ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3850             ,co::stat< cc::skip_list::stat<> >
3851             ,co::item_counter< cds::atomicity::item_counter >
3852         >::type
3853         {};
3854         typedef cc::SkipListSet< rcu_shb, key_val, traits_SkipListSet_rcu_shb_less_pascal_stat > SkipListSet_rcu_shb_less_pascal_stat;
3855
3856         class traits_SkipListSet_rcu_shb_cmp_pascal: public cc::skip_list::make_traits <
3857             co::compare< compare >
3858             ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3859             ,co::item_counter< cds::atomicity::item_counter >
3860         >::type
3861         {};
3862         typedef cc::SkipListSet< rcu_shb, key_val, traits_SkipListSet_rcu_shb_cmp_pascal > SkipListSet_rcu_shb_cmp_pascal;
3863
3864         class traits_SkipListSet_rcu_shb_cmp_pascal_stat: public cc::skip_list::make_traits <
3865             co::compare< compare >
3866             ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3867             ,co::stat< cc::skip_list::stat<> >
3868             ,co::item_counter< cds::atomicity::item_counter >
3869         >::type
3870         {};
3871         typedef cc::SkipListSet< rcu_shb, key_val, traits_SkipListSet_rcu_shb_cmp_pascal_stat > SkipListSet_rcu_shb_cmp_pascal_stat;
3872
3873         class traits_SkipListSet_rcu_shb_less_xorshift: public cc::skip_list::make_traits <
3874             co::less< less >
3875             ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3876             ,co::item_counter< cds::atomicity::item_counter >
3877         >::type
3878         {};
3879         typedef cc::SkipListSet< rcu_shb, key_val, traits_SkipListSet_rcu_shb_less_xorshift > SkipListSet_rcu_shb_less_xorshift;
3880
3881         class traits_SkipListSet_rcu_shb_less_xorshift_stat: public cc::skip_list::make_traits <
3882             co::less< less >
3883             ,co::item_counter< cds::atomicity::item_counter >
3884             ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3885             ,co::stat< cc::skip_list::stat<> >
3886         >::type
3887         {};
3888         typedef cc::SkipListSet< rcu_shb, key_val, traits_SkipListSet_rcu_shb_less_xorshift_stat > SkipListSet_rcu_shb_less_xorshift_stat;
3889
3890         class traits_SkipListSet_rcu_shb_cmp_xorshift: public cc::skip_list::make_traits <
3891             co::compare< compare >
3892             ,co::item_counter< cds::atomicity::item_counter >
3893             ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3894         >::type
3895         {};
3896         typedef cc::SkipListSet< rcu_shb, key_val, traits_SkipListSet_rcu_shb_cmp_xorshift > SkipListSet_rcu_shb_cmp_xorshift;
3897
3898         class traits_SkipListSet_rcu_shb_cmp_xorshift_stat: public cc::skip_list::make_traits <
3899             co::compare< compare >
3900             ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3901             ,co::stat< cc::skip_list::stat<> >
3902             ,co::item_counter< cds::atomicity::item_counter >
3903         >::type
3904         {};
3905         typedef cc::SkipListSet< rcu_shb, key_val, traits_SkipListSet_rcu_shb_cmp_xorshift_stat > SkipListSet_rcu_shb_cmp_xorshift_stat;
3906
3907         // ***************************************************************************
3908         // SkipListSet - RCU signal_threaded
3909
3910         class traits_SkipListSet_rcu_sht_less_pascal: public cc::skip_list::make_traits <
3911             co::less< less >
3912             ,co::item_counter< cds::atomicity::item_counter >
3913             ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3914         >::type
3915         {};
3916         typedef cc::SkipListSet< rcu_sht, key_val, traits_SkipListSet_rcu_sht_less_pascal > SkipListSet_rcu_sht_less_pascal;
3917
3918         class traits_SkipListSet_rcu_sht_less_pascal_seqcst: public cc::skip_list::make_traits <
3919             co::less< less >
3920             ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3921             ,co::memory_model< co::v::sequential_consistent >
3922             ,co::item_counter< cds::atomicity::item_counter >
3923         >::type
3924         {};
3925         typedef cc::SkipListSet< rcu_sht, key_val, traits_SkipListSet_rcu_sht_less_pascal_seqcst > SkipListSet_rcu_sht_less_pascal_seqcst;
3926
3927         class traits_SkipListSet_rcu_sht_less_pascal_stat: public cc::skip_list::make_traits <
3928             co::less< less >
3929             ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3930             ,co::stat< cc::skip_list::stat<> >
3931             ,co::item_counter< cds::atomicity::item_counter >
3932         >::type
3933         {};
3934         typedef cc::SkipListSet< rcu_sht, key_val, traits_SkipListSet_rcu_sht_less_pascal_stat > SkipListSet_rcu_sht_less_pascal_stat;
3935
3936         class traits_SkipListSet_rcu_sht_cmp_pascal: public cc::skip_list::make_traits <
3937             co::compare< compare >
3938             ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3939             ,co::item_counter< cds::atomicity::item_counter >
3940         >::type
3941         {};
3942         typedef cc::SkipListSet< rcu_sht, key_val, traits_SkipListSet_rcu_sht_cmp_pascal > SkipListSet_rcu_sht_cmp_pascal;
3943
3944         class traits_SkipListSet_rcu_sht_cmp_pascal_stat: public cc::skip_list::make_traits <
3945             co::compare< compare >
3946             ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3947             ,co::stat< cc::skip_list::stat<> >
3948             ,co::item_counter< cds::atomicity::item_counter >
3949         >::type
3950         {};
3951         typedef cc::SkipListSet< rcu_sht, key_val, traits_SkipListSet_rcu_sht_cmp_pascal_stat > SkipListSet_rcu_sht_cmp_pascal_stat;
3952
3953         class traits_SkipListSet_rcu_sht_less_xorshift: public cc::skip_list::make_traits <
3954             co::less< less >
3955             ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3956             ,co::item_counter< cds::atomicity::item_counter >
3957         >::type
3958         {};
3959         typedef cc::SkipListSet< rcu_sht, key_val, traits_SkipListSet_rcu_sht_less_xorshift > SkipListSet_rcu_sht_less_xorshift;
3960
3961         class traits_SkipListSet_rcu_sht_less_xorshift_stat: public cc::skip_list::make_traits <
3962             co::less< less >
3963             ,co::item_counter< cds::atomicity::item_counter >
3964             ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3965             ,co::stat< cc::skip_list::stat<> >
3966         >::type
3967         {};
3968         typedef cc::SkipListSet< rcu_sht, key_val, traits_SkipListSet_rcu_sht_less_xorshift_stat > SkipListSet_rcu_sht_less_xorshift_stat;
3969
3970         class traits_SkipListSet_rcu_sht_cmp_xorshift: public cc::skip_list::make_traits <
3971             co::compare< compare >
3972             ,co::item_counter< cds::atomicity::item_counter >
3973             ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3974         >::type
3975         {};
3976         typedef cc::SkipListSet< rcu_sht, key_val, traits_SkipListSet_rcu_sht_cmp_xorshift > SkipListSet_rcu_sht_cmp_xorshift;
3977
3978         class traits_SkipListSet_rcu_sht_cmp_xorshift_stat: public cc::skip_list::make_traits <
3979             co::compare< compare >
3980             ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3981             ,co::stat< cc::skip_list::stat<> >
3982             ,co::item_counter< cds::atomicity::item_counter >
3983         >::type
3984         {};
3985         typedef cc::SkipListSet< rcu_sht, key_val, traits_SkipListSet_rcu_sht_cmp_xorshift_stat > SkipListSet_rcu_sht_cmp_xorshift_stat;
3986 #endif
3987
3988         // ***************************************************************************
3989         // EllenBinTreeSet
3990         struct ellen_bintree_props {
3991             struct key_extractor {
3992                 void operator()( key_type& dest, key_val const& src ) const
3993                 {
3994                     dest = src.key;
3995                 }
3996             };
3997
3998             struct less {
3999                 bool operator()( key_val const& v1, key_val const& v2 ) const
4000                 {
4001                     return key_less()( v1.key, v2.key );
4002                 }
4003                 bool operator()( key_type const& k, key_val const& v ) const
4004                 {
4005                     return key_less()( k, v.key );
4006                 }
4007                 bool operator()( key_val const& v, key_type const& k ) const
4008                 {
4009                     return key_less()( v.key, k );
4010                 }
4011                 bool operator()( key_type const& k1, key_type const& k2 ) const
4012                 {
4013                     return key_less()( k1, k2 );
4014                 }
4015             };
4016
4017             struct hp_gc {
4018                 typedef cc::ellen_bintree::node<cds::gc::HP, key_val>               leaf_node;
4019                 typedef cc::ellen_bintree::internal_node< key_type, leaf_node >     internal_node;
4020                 typedef cc::ellen_bintree::update_desc< leaf_node, internal_node >  update_desc;
4021             };
4022
4023             struct ptb_gc {
4024                 typedef cc::ellen_bintree::node<cds::gc::DHP, key_val>              leaf_node;
4025                 typedef cc::ellen_bintree::internal_node< key_type, leaf_node >     internal_node;
4026                 typedef cc::ellen_bintree::update_desc< leaf_node, internal_node >  update_desc;
4027             };
4028
4029             struct gpi {
4030                 typedef cc::ellen_bintree::node<rcu_gpi, key_val>                   leaf_node;
4031                 typedef cc::ellen_bintree::internal_node< key_type, leaf_node >     internal_node;
4032                 typedef cc::ellen_bintree::update_desc< leaf_node, internal_node >  update_desc;
4033             };
4034             struct gpb {
4035                 typedef cc::ellen_bintree::node<rcu_gpb, key_val>                   leaf_node;
4036                 typedef cc::ellen_bintree::internal_node< key_type, leaf_node >     internal_node;
4037                 typedef cc::ellen_bintree::update_desc< leaf_node, internal_node >  update_desc;
4038             };
4039             struct gpt {
4040                 typedef cc::ellen_bintree::node<rcu_gpt, key_val>                   leaf_node;
4041                 typedef cc::ellen_bintree::internal_node< key_type, leaf_node >     internal_node;
4042                 typedef cc::ellen_bintree::update_desc< leaf_node, internal_node >  update_desc;
4043             };
4044 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
4045             struct shb {
4046                 typedef cc::ellen_bintree::node<rcu_shb, key_val>                   leaf_node;
4047                 typedef cc::ellen_bintree::internal_node< key_type, leaf_node >     internal_node;
4048                 typedef cc::ellen_bintree::update_desc< leaf_node, internal_node >  update_desc;
4049             };
4050             struct sht {
4051                 typedef cc::ellen_bintree::node<rcu_sht, key_val>                   leaf_node;
4052                 typedef cc::ellen_bintree::internal_node< key_type, leaf_node >     internal_node;
4053                 typedef cc::ellen_bintree::update_desc< leaf_node, internal_node >  update_desc;
4054             };
4055 #endif
4056         };
4057
4058
4059         // ***************************************************************************
4060         // EllenBinTreeSet - HP
4061
4062         class traits_EllenBinTreeSet_hp: public cc::ellen_bintree::make_set_traits<
4063             cc::ellen_bintree::key_extractor< typename ellen_bintree_props::key_extractor >
4064             ,co::less< typename ellen_bintree_props::less >
4065             ,cc::ellen_bintree::update_desc_allocator<
4066                 cds::memory::pool_allocator< typename ellen_bintree_props::hp_gc::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
4067             >
4068             ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
4069         >::type
4070         {};
4071         typedef cc::EllenBinTreeSet< cds::gc::HP, key_type, key_val, traits_EllenBinTreeSet_hp > EllenBinTreeSet_hp;
4072
4073         class traits_EllenBinTreeSet_hp_stat: public cc::ellen_bintree::make_set_traits<
4074             cc::ellen_bintree::key_extractor< typename ellen_bintree_props::key_extractor >
4075             ,co::less< typename ellen_bintree_props::less >
4076             ,cc::ellen_bintree::update_desc_allocator<
4077                 cds::memory::pool_allocator< typename ellen_bintree_props::hp_gc::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
4078             >
4079             ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
4080             ,co::stat< cc::ellen_bintree::stat<> >
4081         >::type
4082         {};
4083         typedef cc::EllenBinTreeSet< cds::gc::HP, key_type, key_val, traits_EllenBinTreeSet_hp_stat > EllenBinTreeSet_hp_stat;
4084
4085         // ***************************************************************************
4086         // EllenBinTreeSet - DHP
4087
4088         class traits_EllenBinTreeSet_ptb: public cc::ellen_bintree::make_set_traits<
4089             cc::ellen_bintree::key_extractor< typename ellen_bintree_props::key_extractor >
4090             ,co::less< typename ellen_bintree_props::less >
4091             ,cc::ellen_bintree::update_desc_allocator<
4092                 cds::memory::pool_allocator< typename ellen_bintree_props::ptb_gc::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
4093             >
4094             ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
4095         >::type
4096         {};
4097         typedef cc::EllenBinTreeSet< cds::gc::DHP, key_type, key_val, traits_EllenBinTreeSet_ptb > EllenBinTreeSet_ptb;
4098
4099         class traits_EllenBinTreeSet_ptb_stat: public cc::ellen_bintree::make_set_traits<
4100             cc::ellen_bintree::key_extractor< typename ellen_bintree_props::key_extractor >
4101             ,co::less< typename ellen_bintree_props::less >
4102             ,cc::ellen_bintree::update_desc_allocator<
4103                 cds::memory::pool_allocator< typename ellen_bintree_props::ptb_gc::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
4104             >
4105             ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
4106             ,co::stat< cc::ellen_bintree::stat<> >
4107         >::type
4108         {};
4109         typedef cc::EllenBinTreeSet< cds::gc::DHP, key_type, key_val, traits_EllenBinTreeSet_ptb_stat > EllenBinTreeSet_ptb_stat;
4110
4111
4112         // ***************************************************************************
4113         // EllenBinTreeSet - RCU
4114
4115         class traits_EllenBinTreeSet_rcu_gpi: public cc::ellen_bintree::make_set_traits<
4116             cc::ellen_bintree::key_extractor< typename ellen_bintree_props::key_extractor >
4117             ,co::less< typename ellen_bintree_props::less >
4118             ,cc::ellen_bintree::update_desc_allocator<
4119                 cds::memory::pool_allocator< typename ellen_bintree_props::gpi::update_desc, ellen_bintree_pool::bounded_update_desc_pool_accessor >
4120             >
4121             ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
4122         >::type
4123         {};
4124         typedef cc::EllenBinTreeSet< rcu_gpi, key_type, key_val, traits_EllenBinTreeSet_rcu_gpi > EllenBinTreeSet_rcu_gpi;
4125
4126         class traits_EllenBinTreeSet_rcu_gpi_stat: public cc::ellen_bintree::make_set_traits<
4127             cc::ellen_bintree::key_extractor< typename ellen_bintree_props::key_extractor >
4128             ,co::less< typename ellen_bintree_props::less >
4129             ,cc::ellen_bintree::update_desc_allocator<
4130                 cds::memory::pool_allocator< typename ellen_bintree_props::gpi::update_desc, ellen_bintree_pool::bounded_update_desc_pool_accessor >
4131             >
4132             ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
4133             ,co::stat< cc::ellen_bintree::stat<> >
4134         >::type
4135         {};
4136         typedef cc::EllenBinTreeSet< rcu_gpi, key_type, key_val, traits_EllenBinTreeSet_rcu_gpi_stat > EllenBinTreeSet_rcu_gpi_stat;
4137
4138         class traits_EllenBinTreeSet_rcu_gpb: public cc::ellen_bintree::make_set_traits<
4139             cc::ellen_bintree::key_extractor< typename ellen_bintree_props::key_extractor >
4140             ,co::less< typename ellen_bintree_props::less >
4141             ,cc::ellen_bintree::update_desc_allocator<
4142                 cds::memory::pool_allocator< typename ellen_bintree_props::gpb::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
4143             >
4144             ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
4145         >::type
4146         {};
4147         typedef cc::EllenBinTreeSet< rcu_gpb, key_type, key_val, traits_EllenBinTreeSet_rcu_gpb > EllenBinTreeSet_rcu_gpb;
4148
4149         class traits_EllenBinTreeSet_rcu_gpb_stat: public cc::ellen_bintree::make_set_traits<
4150             cc::ellen_bintree::key_extractor< typename ellen_bintree_props::key_extractor >
4151             ,co::less< typename ellen_bintree_props::less >
4152             ,cc::ellen_bintree::update_desc_allocator<
4153                 cds::memory::pool_allocator< typename ellen_bintree_props::gpb::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
4154             >
4155             ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
4156             ,co::stat< cc::ellen_bintree::stat<> >
4157         >::type
4158         {};
4159         typedef cc::EllenBinTreeSet< rcu_gpb, key_type, key_val, traits_EllenBinTreeSet_rcu_gpb_stat > EllenBinTreeSet_rcu_gpb_stat;
4160
4161         class traits_EllenBinTreeSet_rcu_gpt: public cc::ellen_bintree::make_set_traits<
4162             cc::ellen_bintree::key_extractor< typename ellen_bintree_props::key_extractor >
4163             ,co::less< typename ellen_bintree_props::less >
4164             ,cc::ellen_bintree::update_desc_allocator<
4165                 cds::memory::pool_allocator< typename ellen_bintree_props::gpt::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
4166             >
4167             ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
4168         >::type
4169         {};
4170         typedef cc::EllenBinTreeSet< rcu_gpt, key_type, key_val, traits_EllenBinTreeSet_rcu_gpt > EllenBinTreeSet_rcu_gpt;
4171
4172         class traits_EllenBinTreeSet_rcu_gpt_stat: public cc::ellen_bintree::make_set_traits<
4173             cc::ellen_bintree::key_extractor< typename ellen_bintree_props::key_extractor >
4174             ,co::less< typename ellen_bintree_props::less >
4175             ,cc::ellen_bintree::update_desc_allocator<
4176                 cds::memory::pool_allocator< typename ellen_bintree_props::gpt::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
4177             >
4178             ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
4179             ,co::stat< cc::ellen_bintree::stat<> >
4180         >::type
4181         {};
4182         typedef cc::EllenBinTreeSet< rcu_gpt, key_type, key_val, traits_EllenBinTreeSet_rcu_gpt_stat > EllenBinTreeSet_rcu_gpt_stat;
4183
4184 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
4185         class traits_EllenBinTreeSet_rcu_shb: public cc::ellen_bintree::make_set_traits<
4186             cc::ellen_bintree::key_extractor< typename ellen_bintree_props::key_extractor >
4187             ,co::less< typename ellen_bintree_props::less >
4188             ,cc::ellen_bintree::update_desc_allocator<
4189                 cds::memory::pool_allocator< typename ellen_bintree_props::shb::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
4190             >
4191             ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
4192         >::type
4193         {};
4194         typedef cc::EllenBinTreeSet< rcu_shb, key_type, key_val, traits_EllenBinTreeSet_rcu_shb > EllenBinTreeSet_rcu_shb;
4195
4196         class traits_EllenBinTreeSet_rcu_shb_stat: public cc::ellen_bintree::make_set_traits<
4197             cc::ellen_bintree::key_extractor< typename ellen_bintree_props::key_extractor >
4198             ,co::less< typename ellen_bintree_props::less >
4199             ,cc::ellen_bintree::update_desc_allocator<
4200                 cds::memory::pool_allocator< typename ellen_bintree_props::shb::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
4201             >
4202             ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
4203             ,co::stat< cc::ellen_bintree::stat<> >
4204         >::type
4205         {};
4206         typedef cc::EllenBinTreeSet< rcu_shb, key_type, key_val, traits_EllenBinTreeSet_rcu_shb_stat > EllenBinTreeSet_rcu_shb_stat;
4207
4208         class traits_EllenBinTreeSet_rcu_sht: public cc::ellen_bintree::make_set_traits<
4209             cc::ellen_bintree::key_extractor< typename ellen_bintree_props::key_extractor >
4210             ,co::less< typename ellen_bintree_props::less >
4211             ,cc::ellen_bintree::update_desc_allocator<
4212                 cds::memory::pool_allocator< typename ellen_bintree_props::sht::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
4213             >
4214             ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
4215         >::type
4216         {};
4217         typedef cc::EllenBinTreeSet< rcu_sht, key_type, key_val, traits_EllenBinTreeSet_rcu_sht > EllenBinTreeSet_rcu_sht;
4218
4219         class traits_EllenBinTreeSet_rcu_sht_stat: public cc::ellen_bintree::make_set_traits<
4220             cc::ellen_bintree::key_extractor< typename ellen_bintree_props::key_extractor >
4221             ,co::less< typename ellen_bintree_props::less >
4222             ,cc::ellen_bintree::update_desc_allocator<
4223                 cds::memory::pool_allocator< typename ellen_bintree_props::sht::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
4224             >
4225             ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
4226             ,co::stat< cc::ellen_bintree::stat<> >
4227         >::type
4228         {};
4229         typedef cc::EllenBinTreeSet< rcu_sht, key_type, key_val, traits_EllenBinTreeSet_rcu_sht_stat > EllenBinTreeSet_rcu_sht_stat;
4230
4231 #endif
4232
4233         // ***************************************************************************
4234         // Standard implementations
4235
4236         typedef StdSet< key_val, less, cds::SpinLock >                  StdSet_Spin;
4237         typedef StdSet< key_val, less, lock::NoLock>                    StdSet_NoLock;
4238
4239         typedef StdHashSet< key_val, hash, less, equal_to, cds::SpinLock >    StdHashSet_Spin;
4240         typedef StdHashSet< key_val, hash, less, equal_to, lock::NoLock >     StdHashSet_NoLock;
4241
4242     };
4243
4244
4245     // *************************************************
4246     // print_stat
4247     // *************************************************
4248
4249     template <typename Set>
4250     static inline void print_stat( Set const& s )
4251     {}
4252
4253     template <typename GC, typename T, typename Traits>
4254     static inline void print_stat( cc::SkipListSet<GC, T, Traits> const& s )
4255     {
4256         CPPUNIT_MSG( s.statistics() );
4257     }
4258
4259     template <typename GC, typename Key, typename T, typename Traits>
4260     static inline void print_stat( cc::EllenBinTreeSet<GC, Key, T, Traits> const& s )
4261     {
4262         CPPUNIT_MSG( s.statistics() );
4263     }
4264
4265     template <typename T, typename Traits >
4266     static inline void print_stat( cc::CuckooSet< T, Traits > const& s )
4267     {
4268         CPPUNIT_MSG( s.statistics() << s.mutex_policy_statistics() );
4269     }
4270
4271     template <typename V, typename... Options>
4272     static inline void print_stat( CuckooStripedSet< V, Options... > const& s )
4273     {
4274         typedef CuckooStripedSet< V, Options... > set_type;
4275         print_stat( static_cast<typename set_type::cuckoo_base_class const&>(s) );
4276     }
4277
4278     template <typename V, typename... Options>
4279     static inline void print_stat( CuckooRefinableSet< V, Options... > const& s )
4280     {
4281         typedef CuckooRefinableSet< V, Options... > set_type;
4282         print_stat( static_cast<typename set_type::cuckoo_base_class const&>(s) );
4283     }
4284
4285
4286
4287     //*******************************************************
4288     // additional_check
4289     //*******************************************************
4290
4291     template <typename Set>
4292     static inline void additional_check( Set& set )
4293     {}
4294
4295     template <typename Set>
4296     static inline void additional_cleanup( Set& set )
4297     {}
4298
4299     namespace ellen_bintree_check {
4300         static inline void check_stat( cds::intrusive::ellen_bintree::empty_stat const& s )
4301         {
4302             // Not true for threaded RCU
4303             /*
4304             CPPUNIT_CHECK_CURRENT_EX( ellen_bintree_pool::internal_node_counter::m_nAlloc.get() == ellen_bintree_pool::internal_node_counter::m_nFree.get(),
4305                 "m_nAlloc=" << ellen_bintree_pool::internal_node_counter::m_nAlloc.get()
4306                 << ", m_nFree=" << ellen_bintree_pool::internal_node_counter::m_nFree.get()
4307                 );
4308             */
4309         }
4310
4311         static inline void check_stat( cds::intrusive::ellen_bintree::stat<> const& stat )
4312         {
4313             CPPUNIT_CHECK_CURRENT( stat.m_nInternalNodeCreated == stat.m_nInternalNodeDeleted );
4314             CPPUNIT_CHECK_CURRENT( stat.m_nUpdateDescCreated == stat.m_nUpdateDescDeleted );
4315             //CPPUNIT_CHECK_CURRENT( ellen_bintree_pool::internal_node_counter::m_nAlloc.get() == ellen_bintree_pool::internal_node_counter::m_nFree.get() );
4316             CPPUNIT_CHECK_CURRENT( ellen_bintree_pool::internal_node_counter::m_nAlloc.get() == stat.m_nInternalNodeCreated );
4317             // true if RCU is not threaded
4318             //CPPUNIT_CHECK_CURRENT( stat.m_nInternalNodeDeleted == ellen_bintree_pool::internal_node_counter::m_nFree.get() );
4319         }
4320     }   // namespace ellen_bintree_check
4321
4322     template <typename GC, typename Key, typename T, typename Traits>
4323     static inline void additional_check( cc::EllenBinTreeSet<GC, Key, T, Traits>& s )
4324     {
4325         GC::force_dispose();
4326         ellen_bintree_check::check_stat( s.statistics() );
4327     }
4328
4329     template <typename GC, typename Key, typename T, typename Traits>
4330     static inline void additional_cleanup( cc::EllenBinTreeSet<GC, Key, T, Traits>& s )
4331     {
4332         ellen_bintree_pool::internal_node_counter::reset();
4333     }
4334
4335 }   // namespace set2
4336
4337 #endif // ifndef _CDSUNIT_SET2_SET_TYPES_H