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