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