LazyList refactoring
[libcds.git] / tests / unit / map2 / map_types.h
1 //$$CDS-header$$
2
3 #ifndef _CDSUNIT_MAP2_MAP_TYPES_H
4 #define _CDSUNIT_MAP2_MAP_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_kvlist_hp.h>
13 #include <cds/container/michael_kvlist_dhp.h>
14 #include <cds/container/michael_kvlist_rcu.h>
15 #include <cds/container/michael_kvlist_nogc.h>
16
17 #include <cds/container/lazy_kvlist_hp.h>
18 #include <cds/container/lazy_kvlist_dhp.h>
19 #include <cds/container/lazy_kvlist_rcu.h>
20 #include <cds/container/lazy_kvlist_nogc.h>
21
22 #include <cds/container/michael_map.h>
23 #include <cds/container/michael_map_rcu.h>
24 #include <cds/container/michael_map_nogc.h>
25
26 #include <cds/container/split_list_map.h>
27 #include <cds/container/split_list_map_rcu.h>
28 #include <cds/container/split_list_map_nogc.h>
29
30 #include <cds/container/striped_map/std_list.h>
31 #include <cds/container/striped_map/std_map.h>
32 #include <cds/container/striped_map/std_hash_map.h>
33 #include <cds/container/cuckoo_map.h>
34
35 #include <cds/container/skip_list_map_hp.h>
36 #include <cds/container/skip_list_map_dhp.h>
37 #include <cds/container/skip_list_map_rcu.h>
38 #include <cds/container/skip_list_map_nogc.h>
39
40 #include <cds/container/ellen_bintree_map_rcu.h>
41 #include <cds/container/ellen_bintree_map_hp.h>
42 #include <cds/container/ellen_bintree_map_ptb.h>
43
44 #include <boost/version.hpp>
45 #if BOOST_VERSION >= 104800
46 #   include <cds/container/striped_map/boost_list.h>
47 #   include <cds/container/striped_map/boost_slist.h>
48 #   include <cds/container/striped_map/boost_map.h>
49 #   include <cds/container/striped_map/boost_flat_map.h>
50 #endif
51 #include <cds/container/striped_map/boost_unordered_map.h>
52 #include <cds/container/striped_map.h>
53
54 #include <cds/lock/spinlock.h>
55
56 #include "cppunit/cppunit_mini.h"
57 #include "lock/nolock.h"
58 #include "map2/std_map.h"
59 #include "map2/std_hash_map.h"
60 #include "michael_alloc.h"
61 #include "print_cuckoo_stat.h"
62 #include "print_skip_list_stat.h"
63 #include "print_ellenbintree_stat.h"
64 #include "ellen_bintree_update_desc_pool.h"
65
66 namespace map2 {
67     namespace cc = cds::container;
68     namespace co = cds::opt;
69
70     typedef cds::urcu::gc< cds::urcu::general_instant<> >   rcu_gpi;
71     typedef cds::urcu::gc< cds::urcu::general_buffered<> >  rcu_gpb;
72     typedef cds::urcu::gc< cds::urcu::general_threaded<> >  rcu_gpt;
73 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
74     typedef cds::urcu::gc< cds::urcu::signal_buffered<> >  rcu_shb;
75     typedef cds::urcu::gc< cds::urcu::signal_threaded<> >  rcu_sht;
76 #endif
77
78     template <typename Key>
79     struct cmp {
80         int operator ()(Key const& k1, Key const& k2) const
81         {
82             if ( std::less<Key>( k1, k2 ) )
83                 return -1;
84             return std::less<Key>( k2, k1 ) ? 1 : 0;
85         }
86     };
87
88 #define CDSUNIT_INT_COMPARE(t)  template <> struct cmp<t> { int operator()( t k1, t k2 ){ return (int)(k1 - k2); } }
89     CDSUNIT_INT_COMPARE(char);
90     CDSUNIT_INT_COMPARE(unsigned char);
91     CDSUNIT_INT_COMPARE(int);
92     CDSUNIT_INT_COMPARE(unsigned int);
93     CDSUNIT_INT_COMPARE(long);
94     CDSUNIT_INT_COMPARE(unsigned long);
95     CDSUNIT_INT_COMPARE(long long);
96     CDSUNIT_INT_COMPARE(unsigned long long);
97 #undef CDSUNIT_INT_COMPARE
98
99     template <>
100     struct cmp<std::string>
101     {
102         int operator()(std::string const& s1, std::string const& s2)
103         {
104             return s1.compare( s2 );
105         }
106         int operator()(std::string const& s1, char const * s2)
107         {
108             return s1.compare( s2 );
109         }
110         int operator()(char const * s1, std::string const& s2)
111         {
112             return -s2.compare( s1 );
113         }
114     };
115
116     template <typename K, typename V, typename... Options>
117     class CuckooStripedMap:
118         public cc::CuckooMap< K, V,
119             typename cc::cuckoo::make_traits<
120                 co::mutex_policy< cc::cuckoo::striping<> >
121                 ,Options...
122             >::type
123         >
124     {
125     public:
126         typedef typename cc::cuckoo::make_traits<
127             co::mutex_policy< cc::cuckoo::striping<> >
128             ,Options...
129         >::type cuckoo_traits;
130
131         typedef cc::CuckooMap< K, V, cuckoo_traits > cuckoo_base_class;
132
133     public:
134         CuckooStripedMap( size_t nCapacity, size_t nLoadFactor )
135             : cuckoo_base_class( nCapacity / (nLoadFactor * 16), (unsigned int) 4 )
136         {}
137
138         template <typename Q, typename Pred>
139         bool erase_with( Q const& key, Pred pred )
140         {
141             return cuckoo_base_class::erase_with( key, typename std::conditional< cuckoo_base_class::c_isSorted, Pred, typename Pred::equal_to>::type() );
142         }
143     };
144
145     template <typename K, typename V, typename... Options>
146     class CuckooRefinableMap:
147         public cc::CuckooMap< K, V,
148             typename cc::cuckoo::make_traits<
149                 co::mutex_policy< cc::cuckoo::refinable<> >
150                 ,Options...
151             >::type
152         >
153     {
154     public:
155         typedef typename cc::cuckoo::make_traits<
156             co::mutex_policy< cc::cuckoo::refinable<> >
157             ,Options...
158         >::type cuckoo_traits;
159
160         typedef cc::CuckooMap< K, V, cuckoo_traits > cuckoo_base_class;
161
162     public:
163         CuckooRefinableMap( size_t nCapacity, size_t nLoadFactor )
164             : cuckoo_base_class( nCapacity / (nLoadFactor * 16), (unsigned int) 4 )
165         {}
166
167         template <typename Q, typename Pred>
168         bool erase_with( Q const& key, Pred pred )
169         {
170             return cuckoo_base_class::erase_with( key, typename std::conditional< cuckoo_base_class::c_isSorted, Pred, typename Pred::equal_to>::type() );
171         }
172     };
173
174     template <typename Key, typename Value>
175     struct MapTypes {
176         typedef co::v::hash<Key>    key_hash;
177         typedef std::less<Key>      less;
178         typedef cmp<Key>            compare;
179
180         struct equal_to {
181             bool operator()( Key const& k1, Key const& k2 ) const
182             {
183                 return compare()( k1, k2 ) == 0;
184             }
185         };
186
187         struct hash: public key_hash
188         {
189             size_t operator()( Key const& k ) const
190             {
191                 return key_hash::operator()( k );
192             }
193             template <typename Q>
194             size_t operator()( Q const& k ) const
195             {
196                 return key_hash::operator()( k );
197             }
198         };
199
200         struct hash2: public key_hash
201         {
202             size_t operator()( Key const& k ) const
203             {
204                 size_t seed = ~key_hash::operator ()( k );
205                 boost::hash_combine( seed, k );
206                 return seed;
207             }
208             template <typename Q>
209             size_t operator()( Q const& k ) const
210             {
211                 size_t seed = ~key_hash::operator()( k );
212                 boost::hash_combine( seed, k );
213                 return seed;
214             }
215         };
216
217         // ***************************************************************************
218         // MichaelKVList
219
220         struct traits_MichaelList_cmp_stdAlloc :
221             public cc::michael_list::make_traits<
222                 co::compare< compare >
223             >::type
224         {};
225         typedef cc::MichaelKVList< cds::gc::HP,  Key, Value, traits_MichaelList_cmp_stdAlloc > MichaelList_HP_cmp_stdAlloc;
226         typedef cc::MichaelKVList< cds::gc::DHP, Key, Value, traits_MichaelList_cmp_stdAlloc > MichaelList_DHP_cmp_stdAlloc;
227         typedef cc::MichaelKVList< cds::gc::nogc, Key, Value, traits_MichaelList_cmp_stdAlloc > MichaelList_NOGC_cmp_stdAlloc;
228         typedef cc::MichaelKVList< rcu_gpi, Key, Value, traits_MichaelList_cmp_stdAlloc > MichaelList_RCU_GPI_cmp_stdAlloc;
229         typedef cc::MichaelKVList< rcu_gpb, Key, Value, traits_MichaelList_cmp_stdAlloc > MichaelList_RCU_GPB_cmp_stdAlloc;
230         typedef cc::MichaelKVList< rcu_gpt, Key, Value, traits_MichaelList_cmp_stdAlloc > MichaelList_RCU_GPT_cmp_stdAlloc;
231 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
232         typedef cc::MichaelKVList< rcu_shb, Key, Value, traits_MichaelList_cmp_stdAlloc > MichaelList_RCU_SHB_cmp_stdAlloc;
233         typedef cc::MichaelKVList< rcu_sht, Key, Value, traits_MichaelList_cmp_stdAlloc > MichaelList_RCU_SHT_cmp_stdAlloc;
234 #endif
235
236         struct traits_MichaelList_cmp_stdAlloc_seqcst :
237             public cc::michael_list::make_traits<
238                 co::compare< compare >
239                 ,co::memory_model< co::v::sequential_consistent >
240             >::type
241         {};
242         typedef cc::MichaelKVList< cds::gc::HP,  Key, Value, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_HP_cmp_stdAlloc_seqcst;
243         typedef cc::MichaelKVList< cds::gc::DHP, Key, Value, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_DHP_cmp_stdAlloc_seqcst;
244         typedef cc::MichaelKVList< cds::gc::nogc, Key, Value, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_NOGC_cmp_stdAlloc_seqcst;
245         typedef cc::MichaelKVList< rcu_gpi, Key, Value, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_RCU_GPI_cmp_stdAlloc_seqcst;
246         typedef cc::MichaelKVList< rcu_gpb, Key, Value, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_RCU_GPB_cmp_stdAlloc_seqcst;
247         typedef cc::MichaelKVList< rcu_gpt, Key, Value, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_RCU_GPT_cmp_stdAlloc_seqcst;
248 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
249         typedef cc::MichaelKVList< rcu_shb, Key, Value, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_RCU_SHB_cmp_stdAlloc_seqcst;
250         typedef cc::MichaelKVList< rcu_sht, Key, Value, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_RCU_SHT_cmp_stdAlloc_seqcst;
251 #endif
252
253         struct traits_MichaelList_cmp_michaelAlloc :
254             public cc::michael_list::make_traits<
255                 co::compare< compare >,
256                 co::allocator< memory::MichaelAllocator<int> >
257             >::type
258         {};
259         typedef cc::MichaelKVList< cds::gc::HP,  Key, Value, traits_MichaelList_cmp_michaelAlloc > MichaelList_HP_cmp_michaelAlloc;
260         typedef cc::MichaelKVList< cds::gc::DHP, Key, Value, traits_MichaelList_cmp_michaelAlloc > MichaelList_DHP_cmp_michaelAlloc;
261         typedef cc::MichaelKVList< cds::gc::nogc, Key, Value, traits_MichaelList_cmp_michaelAlloc > MichaelList_NOGC_cmp_michaelAlloc;
262         typedef cc::MichaelKVList< rcu_gpi, Key, Value, traits_MichaelList_cmp_michaelAlloc > MichaelList_RCU_GPI_cmp_michaelAlloc;
263         typedef cc::MichaelKVList< rcu_gpb, Key, Value, traits_MichaelList_cmp_michaelAlloc > MichaelList_RCU_GPB_cmp_michaelAlloc;
264         typedef cc::MichaelKVList< rcu_gpt, Key, Value, traits_MichaelList_cmp_michaelAlloc > MichaelList_RCU_GPT_cmp_michaelAlloc;
265 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
266         typedef cc::MichaelKVList< rcu_shb, Key, Value, traits_MichaelList_cmp_michaelAlloc > MichaelList_RCU_SHB_cmp_michaelAlloc;
267         typedef cc::MichaelKVList< rcu_sht, Key, Value, traits_MichaelList_cmp_michaelAlloc > MichaelList_RCU_SHT_cmp_michaelAlloc;
268 #endif
269
270         struct traits_MichaelList_less_stdAlloc :
271             public cc::michael_list::make_traits<
272                 co::less< less >
273             >::type
274         {};
275         typedef cc::MichaelKVList< cds::gc::HP,  Key, Value, traits_MichaelList_less_stdAlloc > MichaelList_HP_less_stdAlloc;
276         typedef cc::MichaelKVList< cds::gc::DHP, Key, Value, traits_MichaelList_less_stdAlloc > MichaelList_DHP_less_stdAlloc;
277         typedef cc::MichaelKVList< cds::gc::nogc, Key, Value, traits_MichaelList_less_stdAlloc > MichaelList_NOGC_less_stdAlloc;
278         typedef cc::MichaelKVList< rcu_gpi, Key, Value, traits_MichaelList_less_stdAlloc > MichaelList_RCU_GPI_less_stdAlloc;
279         typedef cc::MichaelKVList< rcu_gpb, Key, Value, traits_MichaelList_less_stdAlloc > MichaelList_RCU_GPB_less_stdAlloc;
280         typedef cc::MichaelKVList< rcu_gpt, Key, Value, traits_MichaelList_less_stdAlloc > MichaelList_RCU_GPT_less_stdAlloc;
281 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
282         typedef cc::MichaelKVList< rcu_shb, Key, Value, traits_MichaelList_less_stdAlloc > MichaelList_RCU_SHB_less_stdAlloc;
283         typedef cc::MichaelKVList< rcu_sht, Key, Value, traits_MichaelList_less_stdAlloc > MichaelList_RCU_SHT_less_stdAlloc;
284 #endif
285
286         struct traits_MichaelList_less_stdAlloc_seqcst :
287             public cc::michael_list::make_traits<
288                 co::less< less >
289                 ,co::memory_model< co::v::sequential_consistent >
290             >::type
291         {};
292         typedef cc::MichaelKVList< cds::gc::HP,  Key, Value, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_HP_less_stdAlloc_seqcst;
293         typedef cc::MichaelKVList< cds::gc::DHP, Key, Value, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_DHP_less_stdAlloc_seqcst;
294         typedef cc::MichaelKVList< cds::gc::nogc, Key, Value, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_NOGC_less_stdAlloc_seqcst;
295         typedef cc::MichaelKVList< rcu_gpi, Key, Value, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_RCU_GPI_less_stdAlloc_seqcst;
296         typedef cc::MichaelKVList< rcu_gpb, Key, Value, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_RCU_GPB_less_stdAlloc_seqcst;
297         typedef cc::MichaelKVList< rcu_gpt, Key, Value, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_RCU_GPT_less_stdAlloc_seqcst;
298 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
299         typedef cc::MichaelKVList< rcu_shb, Key, Value, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_RCU_SHB_less_stdAlloc_seqcst;
300         typedef cc::MichaelKVList< rcu_sht, Key, Value, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_RCU_SHT_less_stdAlloc_seqcst;
301 #endif
302
303         struct traits_MichaelList_less_michaelAlloc :
304             public cc::michael_list::make_traits<
305                 co::less< less >,
306                 co::allocator< memory::MichaelAllocator<int> >
307             >::type
308         {};
309         typedef cc::MichaelKVList< cds::gc::HP,  Key, Value, traits_MichaelList_less_michaelAlloc > MichaelList_HP_less_michaelAlloc;
310         typedef cc::MichaelKVList< cds::gc::DHP, Key, Value, traits_MichaelList_less_michaelAlloc > MichaelList_DHP_less_michaelAlloc;
311         typedef cc::MichaelKVList< cds::gc::nogc, Key, Value, traits_MichaelList_less_michaelAlloc > MichaelList_NOGC_less_michaelAlloc;
312         typedef cc::MichaelKVList< rcu_gpi, Key, Value, traits_MichaelList_less_michaelAlloc > MichaelList_RCU_GPI_less_michaelAlloc;
313         typedef cc::MichaelKVList< rcu_gpb, Key, Value, traits_MichaelList_less_michaelAlloc > MichaelList_RCU_GPB_less_michaelAlloc;
314         typedef cc::MichaelKVList< rcu_gpt, Key, Value, traits_MichaelList_less_michaelAlloc > MichaelList_RCU_GPT_less_michaelAlloc;
315 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
316         typedef cc::MichaelKVList< rcu_shb, Key, Value, traits_MichaelList_less_michaelAlloc > MichaelList_RCU_SHB_less_michaelAlloc;
317         typedef cc::MichaelKVList< rcu_sht, Key, Value, traits_MichaelList_less_michaelAlloc > MichaelList_RCU_SHT_less_michaelAlloc;
318 #endif
319
320         template <typename Base>
321         class NogcMapWrapper: public Base
322         {
323             typedef Base    base_class;
324         public:
325             NogcMapWrapper( size_t nMaxItemCount, size_t nLoadFactor )
326                 : base_class( nMaxItemCount, nLoadFactor )
327             {}
328
329             template <typename K>
330             bool insert( K const& key )
331             {
332                 return base_class::insert( key ) != base_class::end();
333             }
334
335             template <typename K, typename V>
336             bool insert( K const& key, V const& val )
337             {
338                 return base_class::insert( key, val ) != base_class::end();
339             }
340
341             template <typename K, typename Func>
342             bool insert_key( K const& key, Func func )
343             {
344                 return base_class::insert_key( key, func ) != base_class::end();
345             }
346
347             template <typename K>
348             bool find( K const& key )
349             {
350                 return base_class::find( key ) != base_class::end();
351             }
352
353             void clear()
354             {
355                 base_class::clear();
356             }
357         };
358
359         template <typename Base>
360         class NogcMapWrapper_dctor: public Base
361         {
362             typedef Base    base_class;
363         public:
364             NogcMapWrapper_dctor()
365             {}
366
367             template <typename K>
368             bool insert( K const& key )
369             {
370                 return base_class::insert( key ) != base_class::end();
371             }
372
373             template <typename K, typename V>
374             bool insert( K const& key, V const& val )
375             {
376                 return base_class::insert( key, val ) != base_class::end();
377             }
378
379             template <typename K, typename Func>
380             bool insert_key( K const& key, Func func )
381             {
382                 return base_class::insert_key( key, func ) != base_class::end();
383             }
384
385             template <typename K>
386             bool find( K const& key )
387             {
388                 return base_class::find( key ) != base_class::end();
389             }
390         };
391
392         // SplitListMap<gc::nogc> has no clear() method
393         template <typename Base>
394         class NogcSplitMapWrapper: public Base
395         {
396             typedef Base    base_class;
397         public:
398             NogcSplitMapWrapper( size_t nMaxItemCount, size_t nLoadFactor )
399                 : base_class( nMaxItemCount, nLoadFactor )
400             {}
401
402             template <typename K>
403             bool insert( K const& key )
404             {
405                 return base_class::insert( key ) != base_class::end();
406             }
407
408             template <typename K, typename V>
409             bool insert( K const& key, V const& val )
410             {
411                 return base_class::insert( key, val ) != base_class::end();
412             }
413
414             template <typename K, typename Func>
415             bool insert_key( K const& key, Func func )
416             {
417                 return base_class::insert_key( key, func ) != base_class::end();
418             }
419
420             template <typename K>
421             bool find( K const& key )
422             {
423                 return base_class::find( key ) != base_class::end();
424             }
425
426             void clear()
427             {}
428         };
429
430
431         // ***************************************************************************
432         // MichaelHashMap based on MichaelKVList
433
434         struct traits_MichaelMap_hash :
435             public cc::michael_map::make_traits<
436                 co::hash< hash >
437             >::type
438         {};
439         typedef cc::MichaelHashMap< cds::gc::HP,  MichaelList_HP_cmp_stdAlloc,  traits_MichaelMap_hash > MichaelMap_HP_cmp_stdAlloc;
440         typedef cc::MichaelHashMap< cds::gc::DHP, MichaelList_DHP_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_DHP_cmp_stdAlloc;
441         typedef cc::MichaelHashMap< cds::gc::nogc, MichaelList_NOGC_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_NOGC_cmp_stdAlloc;
442         typedef cc::MichaelHashMap< rcu_gpi, MichaelList_RCU_GPI_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_RCU_GPI_cmp_stdAlloc;
443         typedef cc::MichaelHashMap< rcu_gpb, MichaelList_RCU_GPB_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_RCU_GPB_cmp_stdAlloc;
444         typedef cc::MichaelHashMap< rcu_gpt, MichaelList_RCU_GPT_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_RCU_GPT_cmp_stdAlloc;
445 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
446         typedef cc::MichaelHashMap< rcu_shb, MichaelList_RCU_SHB_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_RCU_SHB_cmp_stdAlloc;
447         typedef cc::MichaelHashMap< rcu_sht, MichaelList_RCU_SHT_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_RCU_SHT_cmp_stdAlloc;
448 #endif
449
450         typedef cc::MichaelHashMap< cds::gc::HP, MichaelList_HP_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_HP_less_stdAlloc;
451         typedef cc::MichaelHashMap< cds::gc::DHP, MichaelList_DHP_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_DHP_less_stdAlloc;
452         typedef cc::MichaelHashMap< cds::gc::nogc, MichaelList_NOGC_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_NOGC_less_stdAlloc;
453         typedef cc::MichaelHashMap< rcu_gpi, MichaelList_RCU_GPI_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_RCU_GPI_less_stdAlloc;
454         typedef cc::MichaelHashMap< rcu_gpb, MichaelList_RCU_GPB_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_RCU_GPB_less_stdAlloc;
455         typedef cc::MichaelHashMap< rcu_gpt, MichaelList_RCU_GPT_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_RCU_GPT_less_stdAlloc;
456 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
457         typedef cc::MichaelHashMap< rcu_shb, MichaelList_RCU_SHB_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_RCU_SHB_less_stdAlloc;
458         typedef cc::MichaelHashMap< rcu_sht, MichaelList_RCU_SHT_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_RCU_SHT_less_stdAlloc;
459 #endif
460
461         typedef cc::MichaelHashMap< cds::gc::HP, MichaelList_HP_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_HP_cmp_stdAlloc_seqcst;
462         typedef cc::MichaelHashMap< cds::gc::DHP, MichaelList_DHP_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_DHP_cmp_stdAlloc_seqcst;
463         typedef cc::MichaelHashMap< cds::gc::nogc, MichaelList_NOGC_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_NOGC_cmp_stdAlloc_seqcst;
464         typedef cc::MichaelHashMap< rcu_gpi, MichaelList_RCU_GPI_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_GPI_cmp_stdAlloc_seqcst;
465         typedef cc::MichaelHashMap< rcu_gpb, MichaelList_RCU_GPB_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_GPB_cmp_stdAlloc_seqcst;
466         typedef cc::MichaelHashMap< rcu_gpt, MichaelList_RCU_GPT_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_GPT_cmp_stdAlloc_seqcst;
467 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
468         typedef cc::MichaelHashMap< rcu_shb, MichaelList_RCU_SHB_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_SHB_cmp_stdAlloc_seqcst;
469         typedef cc::MichaelHashMap< rcu_sht, MichaelList_RCU_SHT_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_SHT_cmp_stdAlloc_seqcst;
470 #endif
471
472         typedef cc::MichaelHashMap< cds::gc::HP, MichaelList_HP_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_HP_less_stdAlloc_seqcst;
473         typedef cc::MichaelHashMap< cds::gc::DHP, MichaelList_DHP_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_DHP_less_stdAlloc_seqcst;
474         typedef cc::MichaelHashMap< cds::gc::nogc, MichaelList_NOGC_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_NOGC_less_stdAlloc_seqcst;
475         typedef cc::MichaelHashMap< rcu_gpi, MichaelList_RCU_GPI_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_GPI_less_stdAlloc_seqcst;
476         typedef cc::MichaelHashMap< rcu_gpb, MichaelList_RCU_GPB_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_GPB_less_stdAlloc_seqcst;
477         typedef cc::MichaelHashMap< rcu_gpt, MichaelList_RCU_GPT_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_GPT_less_stdAlloc_seqcst;
478 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
479         typedef cc::MichaelHashMap< rcu_shb, MichaelList_RCU_SHB_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_SHB_less_stdAlloc_seqcst;
480         typedef cc::MichaelHashMap< rcu_sht, MichaelList_RCU_SHT_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_SHT_less_stdAlloc_seqcst;
481 #endif
482
483         struct traits_MichaelSet_michaelAlloc :
484             public traits_MichaelMap_hash
485         {
486             typedef cds::memory::MichaelAllocator<int> allocator;
487         };
488         typedef cc::MichaelHashMap< cds::gc::HP, MichaelList_HP_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_HP_cmp_michaelAlloc;
489         typedef cc::MichaelHashMap< cds::gc::DHP, MichaelList_DHP_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_DHP_cmp_michaelAlloc;
490         typedef cc::MichaelHashMap< cds::gc::nogc, MichaelList_NOGC_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_NOGC_cmp_michaelAlloc;
491         typedef cc::MichaelHashMap< rcu_gpi, MichaelList_RCU_GPI_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_RCU_GPI_cmp_michaelAlloc;
492         typedef cc::MichaelHashMap< rcu_gpb, MichaelList_RCU_GPB_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_RCU_GPB_cmp_michaelAlloc;
493         typedef cc::MichaelHashMap< rcu_gpt, MichaelList_RCU_GPT_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_RCU_GPT_cmp_michaelAlloc;
494 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
495         typedef cc::MichaelHashMap< rcu_shb, MichaelList_RCU_SHB_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_RCU_SHB_cmp_michaelAlloc;
496         typedef cc::MichaelHashMap< rcu_sht, MichaelList_RCU_SHT_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_RCU_SHT_cmp_michaelAlloc;
497 #endif
498         typedef cc::MichaelHashMap< cds::gc::HP, MichaelList_HP_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_HP_less_michaelAlloc;
499         typedef cc::MichaelHashMap< cds::gc::DHP, MichaelList_DHP_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_DHP_less_michaelAlloc;
500         typedef cc::MichaelHashMap< cds::gc::nogc, MichaelList_NOGC_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_NOGC_less_michaelAlloc;
501         typedef cc::MichaelHashMap< rcu_gpi, MichaelList_RCU_GPI_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_RCU_GPI_less_michaelAlloc;
502         typedef cc::MichaelHashMap< rcu_gpb, MichaelList_RCU_GPB_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_RCU_GPB_less_michaelAlloc;
503         typedef cc::MichaelHashMap< rcu_gpt, MichaelList_RCU_GPT_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_RCU_GPT_less_michaelAlloc;
504 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
505         typedef cc::MichaelHashMap< rcu_shb, MichaelList_RCU_SHB_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_RCU_SHB_less_michaelAlloc;
506         typedef cc::MichaelHashMap< rcu_sht, MichaelList_RCU_SHT_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_RCU_SHT_less_michaelAlloc;
507 #endif
508
509         // ***************************************************************************
510         // LazyKVList
511
512         struct traits_LazyList_cmp_stdAlloc :
513             public cc::lazy_list::make_traits<
514                 co::compare< compare >
515             >::type
516         {};
517         typedef cc::LazyKVList< cds::gc::HP, Key, Value, traits_LazyList_cmp_stdAlloc > LazyList_HP_cmp_stdAlloc;
518         typedef cc::LazyKVList< cds::gc::DHP, Key, Value, traits_LazyList_cmp_stdAlloc > LazyList_DHP_cmp_stdAlloc;
519         typedef cc::LazyKVList< cds::gc::nogc, Key, Value, traits_LazyList_cmp_stdAlloc > LazyList_NOGC_cmp_stdAlloc;
520         typedef cc::LazyKVList< rcu_gpi, Key, Value, traits_LazyList_cmp_stdAlloc > LazyList_RCU_GPI_cmp_stdAlloc;
521         typedef cc::LazyKVList< rcu_gpb, Key, Value, traits_LazyList_cmp_stdAlloc > LazyList_RCU_GPB_cmp_stdAlloc;
522         typedef cc::LazyKVList< rcu_gpt, Key, Value, traits_LazyList_cmp_stdAlloc > LazyList_RCU_GPT_cmp_stdAlloc;
523 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
524         typedef cc::LazyKVList< rcu_shb, Key, Value, traits_LazyList_cmp_stdAlloc > LazyList_RCU_SHB_cmp_stdAlloc;
525         typedef cc::LazyKVList< rcu_sht, Key, Value, traits_LazyList_cmp_stdAlloc > LazyList_RCU_SHT_cmp_stdAlloc;
526 #endif
527
528         struct traits_LazyList_cmp_stdAlloc_seqcst :
529             public cc::lazy_list::make_traits<
530                 co::compare< compare >
531                 ,co::memory_model< co::v::sequential_consistent >
532             >::type
533         {};
534         typedef cc::LazyKVList< cds::gc::HP, Key, Value, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_HP_cmp_stdAlloc_seqcst;
535         typedef cc::LazyKVList< cds::gc::DHP, Key, Value, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_DHP_cmp_stdAlloc_seqcst;
536         typedef cc::LazyKVList< cds::gc::nogc, Key, Value, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_NOGC_cmp_stdAlloc_seqcst;
537         typedef cc::LazyKVList< rcu_gpi, Key, Value, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_RCU_GPI_cmp_stdAlloc_seqcst;
538         typedef cc::LazyKVList< rcu_gpb, Key, Value, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_RCU_GPB_cmp_stdAlloc_seqcst;
539         typedef cc::LazyKVList< rcu_gpt, Key, Value, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_RCU_GPT_cmp_stdAlloc_seqcst;
540 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
541         typedef cc::LazyKVList< rcu_shb, Key, Value, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_RCU_SHB_cmp_stdAlloc_seqcst;
542         typedef cc::LazyKVList< rcu_sht, Key, Value, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_RCU_SHT_cmp_stdAlloc_seqcst;
543 #endif
544
545         struct traits_LazyList_cmp_michaelAlloc :
546             public cc::lazy_list::make_traits<
547                 co::compare< compare >,
548                 co::allocator< memory::MichaelAllocator<int> >
549             >::type
550         {};
551         typedef cc::LazyKVList< cds::gc::HP, Key, Value, traits_LazyList_cmp_michaelAlloc > LazyList_HP_cmp_michaelAlloc;
552         typedef cc::LazyKVList< cds::gc::DHP, Key, Value, traits_LazyList_cmp_michaelAlloc > LazyList_DHP_cmp_michaelAlloc;
553         typedef cc::LazyKVList< cds::gc::nogc, Key, Value, traits_LazyList_cmp_michaelAlloc > LazyList_NOGC _cmp_michaelAlloc;
554         typedef cc::LazyKVList< rcu_gpi, Key, Value, traits_LazyList_cmp_michaelAlloc > LazyList_RCU_GPI_cmp_michaelAlloc;
555         typedef cc::LazyKVList< rcu_gpb, Key, Value, traits_LazyList_cmp_michaelAlloc > LazyList_RCU_GPB_cmp_michaelAlloc;
556         typedef cc::LazyKVList< rcu_gpt, Key, Value, traits_LazyList_cmp_michaelAlloc > LazyList_RCU_GPT_cmp_michaelAlloc;
557 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
558         typedef cc::LazyKVList< rcu_shb, Key, Value, traits_LazyList_cmp_michaelAlloc > LazyList_RCU_SHB_cmp_michaelAlloc;
559         typedef cc::LazyKVList< rcu_sht, Key, Value, traits_LazyList_cmp_michaelAlloc > LazyList_RCU_SHT_cmp_michaelAlloc;
560 #endif
561         struct traits_LazyList_less_stdAlloc :
562             public cc::lazy_list::make_traits<
563                 co::less< less >
564             >::type
565         {};
566         typedef cc::LazyKVList< cds::gc::HP, Key, Value, traits_LazyList_less_stdAlloc > LazyList_HP_less_stdAlloc;
567         typedef cc::LazyKVList< cds::gc::DHP, Key, Value, traits_LazyList_less_stdAlloc > LazyList_DHP_less_stdAlloc;
568         typedef cc::LazyKVList< cds::gc::nogc, Key, Value, traits_LazyList_less_stdAlloc > LazyList_NOGC_less_stdAlloc;
569         typedef cc::LazyKVList< rcu_gpi, Key, Value, traits_LazyList_less_stdAlloc > LazyList_RCU_GPI_less_stdAlloc;
570         typedef cc::LazyKVList< rcu_gpb, Key, Value, traits_LazyList_less_stdAlloc > LazyList_RCU_GPB_less_stdAlloc;
571         typedef cc::LazyKVList< rcu_gpt, Key, Value, traits_LazyList_less_stdAlloc > LazyList_RCU_GPT_less_stdAlloc;
572 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
573         typedef cc::LazyKVList< rcu_shb, Key, Value, traits_LazyList_less_stdAlloc > LazyList_RCU_SHB_less_stdAlloc;
574         typedef cc::LazyKVList< rcu_sht, Key, Value, traits_LazyList_less_stdAlloc > LazyList_RCU_SHT_less_stdAlloc;
575 #endif
576
577         struct traits_LazyList_less_stdAlloc_seqcst :
578             public cc::lazy_list::make_traits<
579                 co::less< less >
580                 ,co::memory_model< co::v::sequential_consistent >
581             >::type
582         {};
583         typedef cc::LazyKVList< cds::gc::HP, Key, Value, traits_LazyList_less_stdAlloc_seqcst > LazyList_HP_less_stdAlloc_seqcst;
584         typedef cc::LazyKVList< cds::gc::DHP, Key, Value, traits_LazyList_less_stdAlloc_seqcst > LazyList_DHP_less_stdAlloc_seqcst;
585         typedef cc::LazyKVList< cds::gc::nogc, Key, Value, traits_LazyList_less_stdAlloc_seqcst > LazyList_NOGC_less_stdAlloc_seqcst;
586         typedef cc::LazyKVList< rcu_gpi, Key, Value, traits_LazyList_less_stdAlloc_seqcst > LazyList_RCU_GPI_less_stdAlloc_seqcst;
587         typedef cc::LazyKVList< rcu_gpb, Key, Value, traits_LazyList_less_stdAlloc_seqcst > LazyList_RCU_GPB_less_stdAlloc_seqcst;
588         typedef cc::LazyKVList< rcu_gpt, Key, Value, traits_LazyList_less_stdAlloc_seqcst > LazyList_RCU_GPT_less_stdAlloc_seqcst;
589 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
590         typedef cc::LazyKVList< rcu_shb, Key, Value, traits_LazyList_less_stdAlloc_seqcst > LazyList_RCU_SHB_less_stdAlloc_seqcst;
591         typedef cc::LazyKVList< rcu_sht, Key, Value, traits_LazyList_less_stdAlloc_seqcst > LazyList_RCU_SHT_less_stdAlloc_seqcst;
592 #endif
593
594         struct traits_LazyList_less_michaelAlloc :
595             public cc::lazy_list::make_traits<
596                 co::less< less >,
597                 co::allocator< memory::MichaelAllocator<int> >
598             >::type
599         {};
600         typedef cc::LazyKVList< cds::gc::HP, Key, Value, traits_LazyList_less_michaelAlloc > LazyList_HP_less_michaelAlloc;
601         typedef cc::LazyKVList< cds::gc::DHP, Key, Value, traits_LazyList_less_michaelAlloc > LazyList_DHP_less_michaelAlloc;
602         typedef cc::LazyKVList< cds::gc::nogc, Key, Value, traits_LazyList_less_michaelAlloc > LazyList_NOGC_less_michaelAlloc;
603         typedef cc::LazyKVList< rcu_gpi, Key, Value, traits_LazyList_less_michaelAlloc > LazyList_RCU_GPI_less_michaelAlloc;
604         typedef cc::LazyKVList< rcu_gpb, Key, Value, traits_LazyList_less_michaelAlloc > LazyList_RCU_GPB_less_michaelAlloc;
605         typedef cc::LazyKVList< rcu_gpt, Key, Value, traits_LazyList_less_michaelAlloc > LazyList_RCU_GPT_less_michaelAlloc;
606 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
607         typedef cc::LazyKVList< rcu_shb, Key, Value, traits_LazyList_less_michaelAlloc > LazyList_RCU_SHB_less_michaelAlloc;
608         typedef cc::LazyKVList< rcu_sht, Key, Value, traits_LazyList_less_michaelAlloc > LazyList_RCU_SHT_less_michaelAlloc;
609 #endif
610
611         // ***************************************************************************
612         // MichaelHashMap based on LazyKVList
613         typedef cc::MichaelHashMap< cds::gc::HP, LazyList_HP_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_HP_cmp_stdAlloc;
614         typedef cc::MichaelHashMap< cds::gc::DHP, LazyList_DHP_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_DHP_cmp_stdAlloc;
615         typedef cc::MichaelHashMap< cds::gc::nogc, LazyList_NOGC_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_NOGC_cmp_stdAlloc;
616         typedef cc::MichaelHashMap< rcu_gpi, LazyList_RCU_GPI_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPI_cmp_stdAlloc;
617         typedef cc::MichaelHashMap< rcu_gpb, LazyList_RCU_GPB_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPB_cmp_stdAlloc;
618         typedef cc::MichaelHashMap< rcu_gpt, LazyList_RCU_GPT_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPT_cmp_stdAlloc;
619 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
620         typedef cc::MichaelHashMap< rcu_shb, LazyList_RCU_SHB_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_SHB_cmp_stdAlloc;
621         typedef cc::MichaelHashMap< rcu_sht, LazyList_RCU_SHT_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_SHT_cmp_stdAlloc;
622 #endif
623
624         typedef cc::MichaelHashMap< cds::gc::HP, LazyList_HP_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_HP_less_stdAlloc;
625         typedef cc::MichaelHashMap< cds::gc::DHP, LazyList_DHP_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_DHP_less_stdAlloc;
626         typedef cc::MichaelHashMap< cds::gc::nogc, LazyList_NOGC_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_NOGC_less_stdAlloc;
627         typedef cc::MichaelHashMap< rcu_gpi, LazyList_RCU_GPI_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPI_less_stdAlloc;
628         typedef cc::MichaelHashMap< rcu_gpb, LazyList_RCU_GPB_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPB_less_stdAlloc;
629         typedef cc::MichaelHashMap< rcu_gpt, LazyList_RCU_GPT_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPT_less_stdAlloc;
630 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
631         typedef cc::MichaelHashMap< rcu_shb, LazyList_RCU_SHB_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_SHB_less_stdAlloc;
632         typedef cc::MichaelHashMap< rcu_sht, LazyList_RCU_SHT_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_SHT_less_stdAlloc;
633 #endif
634
635         typedef cc::MichaelHashMap< cds::gc::HP, LazyList_HP_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_HP_cmp_stdAlloc_seqcst;
636         typedef cc::MichaelHashMap< cds::gc::DHP, LazyList_DHP_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_DHP_cmp_stdAlloc_seqcst;
637         typedef cc::MichaelHashMap< cds::gc::nogc, LazyList_NOGC_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_NOGC_cmp_stdAlloc_seqcst;
638         typedef cc::MichaelHashMap< rcu_gpi, LazyList_RCU_GPI_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPI_cmp_stdAlloc_seqcst;
639         typedef cc::MichaelHashMap< rcu_gpb, LazyList_RCU_GPB_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPB_cmp_stdAlloc_seqcst;
640         typedef cc::MichaelHashMap< rcu_gpt, LazyList_RCU_GPT_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPT_cmp_stdAlloc_seqcst;
641 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
642         typedef cc::MichaelHashMap< rcu_shb, LazyList_RCU_SHB_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_SHB_cmp_stdAlloc_seqcst;
643         typedef cc::MichaelHashMap< rcu_sht, LazyList_RCU_SHT_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_SHT_cmp_stdAlloc_seqcst;
644 #endif
645
646         typedef cc::MichaelHashMap< cds::gc::HP, LazyList_HP_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_HP_less_stdAlloc_seqcst;
647         typedef cc::MichaelHashMap< cds::gc::DHP, LazyList_DHP_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_DHP_less_stdAlloc_seqcst;
648         typedef cc::MichaelHashMap< cds::gc::nogc, LazyList_NOGC_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_NOGC_less_stdAlloc_seqcst;
649         typedef cc::MichaelHashMap< rcu_gpi, LazyList_RCU_GPI_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPI_less_stdAlloc_seqcst;
650         typedef cc::MichaelHashMap< rcu_gpb, LazyList_RCU_GPB_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPB_less_stdAlloc_seqcst;
651         typedef cc::MichaelHashMap< rcu_gpt, LazyList_RCU_GPT_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPT_less_stdAlloc_seqcst;
652 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
653         typedef cc::MichaelHashMap< rcu_shb, LazyList_RCU_SHB_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_SHB_less_stdAlloc_seqcst;
654         typedef cc::MichaelHashMap< rcu_sht, LazyList_RCU_SHT_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_SHT_less_stdAlloc_seqcst;
655 #endif
656
657         typedef cc::MichaelHashMap< cds::gc::HP, LazyList_HP_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_HP_cmp_michaelAlloc;
658         typedef cc::MichaelHashMap< cds::gc::DHP, LazyList_DHP_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_DHP_cmp_michaelAlloc;
659         typedef cc::MichaelHashMap< cds::gc::nogc, LazyList_NOGC_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_NOGC_cmp_michaelAlloc;
660         typedef cc::MichaelHashMap< rcu_gpi, LazyList_RCU_GPI_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_RCU_GPI_cmp_michaelAlloc;
661         typedef cc::MichaelHashMap< rcu_gpb, LazyList_RCU_GPB_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_RCU_GPB_cmp_michaelAlloc;
662         typedef cc::MichaelHashMap< rcu_gpt, LazyList_RCU_GPT_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_RCU_GPT_cmp_michaelAlloc;
663 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
664         typedef cc::MichaelHashMap< rcu_shb, LazyList_RCU_SHB_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_RCU_SHB_cmp_michaelAlloc;
665         typedef cc::MichaelHashMap< rcu_sht, LazyList_RCU_SHT_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_RCU_SHT_cmp_michaelAlloc;
666 #endif
667         typedef cc::MichaelHashMap< cds::gc::HP, LazyList_HP_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_HP_less_michaelAlloc;
668         typedef cc::MichaelHashMap< cds::gc::DHP, LazyList_DHP_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_DHP_less_michaelAlloc;
669         typedef cc::MichaelHashMap< cds::gc::nogc, LazyList_NOGC_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_NOGC_less_michaelAlloc;
670         typedef cc::MichaelHashMap< rcu_gpi, LazyList_RCU_GPI_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_RCU_GPI_less_michaelAlloc;
671         typedef cc::MichaelHashMap< rcu_gpb, LazyList_RCU_GPB_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_RCU_GPB_less_michaelAlloc;
672         typedef cc::MichaelHashMap< rcu_gpt, LazyList_RCU_GPT_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_RCU_GPT_less_michaelAlloc;
673 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
674         typedef cc::MichaelHashMap< rcu_shb, LazyList_RCU_SHB_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_RCU_SHB_less_michaelAlloc;
675         typedef cc::MichaelHashMap< rcu_sht, LazyList_RCU_SHT_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_RCU_SHT_less_michaelAlloc;
676 #endif
677
678         // ***************************************************************************
679         // SplitListMap based on MichaelList
680
681         // HP
682         class traits_SplitList_Michael_HP_dyn_cmp: public cc::split_list::make_traits<
683                 cc::split_list::ordered_list<cc::michael_list_tag>
684                 ,co::hash< hash >
685                 ,cc::split_list::ordered_list_traits<
686                     typename cc::michael_list::make_traits<
687                         co::compare< compare >
688                     >::type
689                 >
690             >::type
691         {};
692         typedef cc::SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Michael_HP_dyn_cmp > SplitList_Michael_HP_dyn_cmp;
693
694         class traits_SplitList_Michael_HP_dyn_cmp_seqcst: public cc::split_list::make_traits<
695                 cc::split_list::ordered_list<cc::michael_list_tag>
696                 ,co::hash< hash >
697                 ,co::memory_model< co::v::sequential_consistent >
698                 ,cc::split_list::ordered_list_traits<
699                     typename cc::michael_list::make_traits<
700                         co::compare< compare >
701                         ,co::memory_model< co::v::sequential_consistent >
702                     >::type
703                 >
704             >::type
705         {};
706         typedef cc::SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Michael_HP_dyn_cmp_seqcst > SplitList_Michael_HP_dyn_cmp_seqcst;
707
708         class traits_SplitList_Michael_HP_st_cmp: public cc::split_list::make_traits<
709                 cc::split_list::ordered_list<cc::michael_list_tag>
710                 ,cc::split_list::dynamic_bucket_table< false >
711                 ,co::hash< hash >
712                 ,cc::split_list::ordered_list_traits<
713                     typename cc::michael_list::make_traits<
714                         co::compare< compare >
715                     >::type
716                 >
717             >::type
718         {};
719         typedef cc::SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Michael_HP_st_cmp > SplitList_Michael_HP_st_cmp;
720
721         class traits_SplitList_Michael_HP_st_cmp_seqcst: public cc::split_list::make_traits<
722                 cc::split_list::ordered_list<cc::michael_list_tag>
723                 ,co::hash< hash >
724                 ,cc::split_list::dynamic_bucket_table< false >
725                 ,co::memory_model< co::v::sequential_consistent >
726                 ,cc::split_list::ordered_list_traits<
727                     typename cc::michael_list::make_traits<
728                         co::compare< compare >
729                         ,co::memory_model< co::v::sequential_consistent >
730                     >::type
731                 >
732             >::type
733         {};
734         typedef cc::SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Michael_HP_st_cmp_seqcst > SplitList_Michael_HP_st_cmp_seqcst;
735
736         //HP + less
737         class traits_SplitList_Michael_HP_dyn_less: public cc::split_list::make_traits<
738                 cc::split_list::ordered_list<cc::michael_list_tag>
739                 ,co::hash< hash >
740                 ,cc::split_list::ordered_list_traits<
741                     typename cc::michael_list::make_traits<
742                         co::less< less >
743                     >::type
744                 >
745             >::type
746         {};
747         typedef cc::SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Michael_HP_dyn_less > SplitList_Michael_HP_dyn_less;
748
749         class traits_SplitList_Michael_HP_dyn_less_seqcst: public cc::split_list::make_traits<
750                 cc::split_list::ordered_list<cc::michael_list_tag>
751                 ,co::hash< hash >
752                 ,co::memory_model< co::v::sequential_consistent >
753                 ,cc::split_list::ordered_list_traits<
754                     typename cc::michael_list::make_traits<
755                         co::less< less >
756                         ,co::memory_model< co::v::sequential_consistent >
757                     >::type
758                 >
759             >::type
760         {};
761         typedef cc::SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Michael_HP_dyn_less_seqcst > SplitList_Michael_HP_dyn_less_seqcst;
762
763         class traits_SplitList_Michael_HP_st_less: public cc::split_list::make_traits<
764                 cc::split_list::ordered_list<cc::michael_list_tag>
765                 ,cc::split_list::dynamic_bucket_table< false >
766                 ,co::hash< hash >
767                 ,cc::split_list::ordered_list_traits<
768                     typename cc::michael_list::make_traits<
769                         co::less< less >
770                     >::type
771                 >
772             >::type
773         {};
774         typedef cc::SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Michael_HP_st_less > SplitList_Michael_HP_st_less;
775
776         class traits_SplitList_Michael_HP_st_less_seqcst: public cc::split_list::make_traits<
777                 cc::split_list::ordered_list<cc::michael_list_tag>
778                 ,co::hash< hash >
779                 ,cc::split_list::dynamic_bucket_table< false >
780                 ,co::memory_model< co::v::sequential_consistent >
781                 ,cc::split_list::ordered_list_traits<
782                     typename cc::michael_list::make_traits<
783                         co::less< less >
784                         ,co::memory_model< co::v::sequential_consistent >
785                     >::type
786                 >
787             >::type
788         {};
789         typedef cc::SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Michael_HP_st_less_seqcst > SplitList_Michael_HP_st_less_seqcst;
790
791         // DHP
792         typedef cc::SplitListMap< cds::gc::DHP, Key, Value,
793             typename cc::split_list::make_traits<
794                 cc::split_list::ordered_list<cc::michael_list_tag>
795                 ,co::hash< hash >
796                 ,cc::split_list::ordered_list_traits<
797                     typename cc::michael_list::make_traits<
798                         co::compare< compare >
799                     >::type
800                 >
801             >::type
802         > SplitList_Michael_DHP_dyn_cmp;
803
804         typedef cc::SplitListMap< cds::gc::DHP, Key, Value,
805             typename cc::split_list::make_traits<
806                 cc::split_list::ordered_list<cc::michael_list_tag>
807                 ,co::hash< hash >
808                 ,co::memory_model< co::v::sequential_consistent >
809                 ,cc::split_list::ordered_list_traits<
810                     typename cc::michael_list::make_traits<
811                         co::compare< compare >
812                         ,co::memory_model< co::v::sequential_consistent >
813                     >::type
814                 >
815             >::type
816         > SplitList_Michael_DHP_dyn_cmp_seqcst;
817
818         typedef cc::SplitListMap< cds::gc::DHP, Key, Value,
819             typename cc::split_list::make_traits<
820                 cc::split_list::ordered_list<cc::michael_list_tag>
821                 ,cc::split_list::dynamic_bucket_table< false >
822                 ,co::hash< hash >
823                 ,cc::split_list::ordered_list_traits<
824                     typename cc::michael_list::make_traits<
825                         co::compare< compare >
826                     >::type
827                 >
828             >::type
829         > SplitList_Michael_DHP_st_cmp;
830
831         typedef cc::SplitListMap< cds::gc::DHP, Key, Value,
832             typename cc::split_list::make_traits<
833                 cc::split_list::ordered_list<cc::michael_list_tag>
834                 ,co::hash< hash >
835                 ,cc::split_list::dynamic_bucket_table< false >
836                 ,co::memory_model< co::v::sequential_consistent >
837                 ,cc::split_list::ordered_list_traits<
838                     typename cc::michael_list::make_traits<
839                         co::compare< compare >
840                         ,co::memory_model< co::v::sequential_consistent >
841                     >::type
842                 >
843             >::type
844         > SplitList_Michael_DHP_st_cmp_seqcst;
845
846         // DHP + less
847         typedef cc::SplitListMap< cds::gc::DHP, Key, Value,
848             typename cc::split_list::make_traits<
849                 cc::split_list::ordered_list<cc::michael_list_tag>
850                 ,co::hash< hash >
851                 ,cc::split_list::ordered_list_traits<
852                     typename cc::michael_list::make_traits<
853                         co::less< less >
854                     >::type
855                 >
856             >::type
857         > SplitList_Michael_DHP_dyn_less;
858
859         typedef cc::SplitListMap< cds::gc::DHP, Key, Value,
860             typename cc::split_list::make_traits<
861                 cc::split_list::ordered_list<cc::michael_list_tag>
862                 ,co::hash< hash >
863                 ,co::memory_model< co::v::sequential_consistent >
864                 ,cc::split_list::ordered_list_traits<
865                     typename cc::michael_list::make_traits<
866                         co::less< less >
867                         ,co::memory_model< co::v::sequential_consistent >
868                     >::type
869                 >
870             >::type
871         > SplitList_Michael_DHP_dyn_less_seqcst;
872
873         typedef cc::SplitListMap< cds::gc::DHP, Key, Value,
874             typename cc::split_list::make_traits<
875                 cc::split_list::ordered_list<cc::michael_list_tag>
876                 ,cc::split_list::dynamic_bucket_table< false >
877                 ,co::hash< hash >
878                 ,cc::split_list::ordered_list_traits<
879                     typename cc::michael_list::make_traits<
880                         co::less< less >
881                     >::type
882                 >
883             >::type
884         > SplitList_Michael_DHP_st_less;
885
886         typedef cc::SplitListMap< cds::gc::DHP, Key, Value,
887             typename cc::split_list::make_traits<
888                 cc::split_list::ordered_list<cc::michael_list_tag>
889                 ,co::hash< hash >
890                 ,cc::split_list::dynamic_bucket_table< false >
891                 ,co::memory_model< co::v::sequential_consistent >
892                 ,cc::split_list::ordered_list_traits<
893                     typename cc::michael_list::make_traits<
894                         co::less< less >
895                         ,co::memory_model< co::v::sequential_consistent >
896                     >::type
897                 >
898             >::type
899         > SplitList_Michael_DHP_st_less_seqcst;
900
901         // RCU
902         typedef cc::SplitListMap< rcu_gpi, Key, Value,
903             typename cc::split_list::make_traits<
904                 cc::split_list::ordered_list<cc::michael_list_tag>
905                 ,co::hash< hash >
906                 ,cc::split_list::ordered_list_traits<
907                     typename cc::michael_list::make_traits<
908                         co::compare< compare >
909                     >::type
910                 >
911             >::type
912         > SplitList_Michael_RCU_GPI_dyn_cmp;
913
914         typedef cc::SplitListMap< rcu_gpi, Key, Value,
915             typename cc::split_list::make_traits<
916                 cc::split_list::ordered_list<cc::michael_list_tag>
917                 ,co::hash< hash >
918                 ,co::memory_model< co::v::sequential_consistent >
919                 ,cc::split_list::ordered_list_traits<
920                     typename cc::michael_list::make_traits<
921                         co::compare< compare >
922                         ,co::memory_model< co::v::sequential_consistent >
923                     >::type
924                 >
925             >::type
926         > SplitList_Michael_RCU_GPI_dyn_cmp_seqcst;
927
928         typedef cc::SplitListMap< rcu_gpi, Key, Value,
929             typename cc::split_list::make_traits<
930                 cc::split_list::ordered_list<cc::michael_list_tag>
931                 ,cc::split_list::dynamic_bucket_table< false >
932                 ,co::hash< hash >
933                 ,cc::split_list::ordered_list_traits<
934                     typename cc::michael_list::make_traits<
935                         co::compare< compare >
936                     >::type
937                 >
938             >::type
939         > SplitList_Michael_RCU_GPI_st_cmp;
940
941         typedef cc::SplitListMap< rcu_gpi, Key, Value,
942             typename cc::split_list::make_traits<
943                 cc::split_list::ordered_list<cc::michael_list_tag>
944                 ,co::hash< hash >
945                 ,cc::split_list::dynamic_bucket_table< false >
946                 ,co::memory_model< co::v::sequential_consistent >
947                 ,cc::split_list::ordered_list_traits<
948                     typename cc::michael_list::make_traits<
949                         co::compare< compare >
950                         ,co::memory_model< co::v::sequential_consistent >
951                     >::type
952                 >
953             >::type
954         > SplitList_Michael_RCU_GPI_st_cmp_seqcst;
955
956         // RCU_GPI + less
957         typedef cc::SplitListMap< rcu_gpi, Key, Value,
958             typename cc::split_list::make_traits<
959                 cc::split_list::ordered_list<cc::michael_list_tag>
960                 ,co::hash< hash >
961                 ,cc::split_list::ordered_list_traits<
962                     typename cc::michael_list::make_traits<
963                         co::less< less >
964                     >::type
965                 >
966             >::type
967         > SplitList_Michael_RCU_GPI_dyn_less;
968
969         typedef cc::SplitListMap< rcu_gpi, Key, Value,
970             typename cc::split_list::make_traits<
971                 cc::split_list::ordered_list<cc::michael_list_tag>
972                 ,co::hash< hash >
973                 ,co::memory_model< co::v::sequential_consistent >
974                 ,cc::split_list::ordered_list_traits<
975                     typename cc::michael_list::make_traits<
976                         co::less< less >
977                         ,co::memory_model< co::v::sequential_consistent >
978                     >::type
979                 >
980             >::type
981         > SplitList_Michael_RCU_GPI_dyn_less_seqcst;
982
983         typedef cc::SplitListMap< rcu_gpi, Key, Value,
984             typename cc::split_list::make_traits<
985                 cc::split_list::ordered_list<cc::michael_list_tag>
986                 ,cc::split_list::dynamic_bucket_table< false >
987                 ,co::hash< hash >
988                 ,cc::split_list::ordered_list_traits<
989                     typename cc::michael_list::make_traits<
990                         co::less< less >
991                     >::type
992                 >
993             >::type
994         > SplitList_Michael_RCU_GPI_st_less;
995
996         typedef cc::SplitListMap< rcu_gpi, Key, Value,
997             typename cc::split_list::make_traits<
998                 cc::split_list::ordered_list<cc::michael_list_tag>
999                 ,co::hash< hash >
1000                 ,cc::split_list::dynamic_bucket_table< false >
1001                 ,co::memory_model< co::v::sequential_consistent >
1002                 ,cc::split_list::ordered_list_traits<
1003                     typename cc::michael_list::make_traits<
1004                         co::less< less >
1005                         ,co::memory_model< co::v::sequential_consistent >
1006                     >::type
1007                 >
1008             >::type
1009         > SplitList_Michael_RCU_GPI_st_less_seqcst;
1010
1011         //
1012         typedef cc::SplitListMap< rcu_gpb, Key, Value,
1013             typename cc::split_list::make_traits<
1014                 cc::split_list::ordered_list<cc::michael_list_tag>
1015                 ,co::hash< hash >
1016                 ,cc::split_list::ordered_list_traits<
1017                     typename cc::michael_list::make_traits<
1018                         co::compare< compare >
1019                     >::type
1020                 >
1021             >::type
1022         > SplitList_Michael_RCU_GPB_dyn_cmp;
1023
1024         typedef cc::SplitListMap< rcu_gpb, Key, Value,
1025             typename cc::split_list::make_traits<
1026                 cc::split_list::ordered_list<cc::michael_list_tag>
1027                 ,co::hash< hash >
1028                 ,co::memory_model< co::v::sequential_consistent >
1029                 ,cc::split_list::ordered_list_traits<
1030                     typename cc::michael_list::make_traits<
1031                         co::compare< compare >
1032                         ,co::memory_model< co::v::sequential_consistent >
1033                     >::type
1034                 >
1035             >::type
1036         > SplitList_Michael_RCU_GPB_dyn_cmp_seqcst;
1037
1038         typedef cc::SplitListMap< rcu_gpb, Key, Value,
1039             typename cc::split_list::make_traits<
1040                 cc::split_list::ordered_list<cc::michael_list_tag>
1041                 ,cc::split_list::dynamic_bucket_table< false >
1042                 ,co::hash< hash >
1043                 ,cc::split_list::ordered_list_traits<
1044                     typename cc::michael_list::make_traits<
1045                         co::compare< compare >
1046                     >::type
1047                 >
1048             >::type
1049         > SplitList_Michael_RCU_GPB_st_cmp;
1050
1051         typedef cc::SplitListMap< rcu_gpb, Key, Value,
1052             typename cc::split_list::make_traits<
1053                 cc::split_list::ordered_list<cc::michael_list_tag>
1054                 ,co::hash< hash >
1055                 ,cc::split_list::dynamic_bucket_table< false >
1056                 ,co::memory_model< co::v::sequential_consistent >
1057                 ,cc::split_list::ordered_list_traits<
1058                     typename cc::michael_list::make_traits<
1059                         co::compare< compare >
1060                         ,co::memory_model< co::v::sequential_consistent >
1061                     >::type
1062                 >
1063             >::type
1064         > SplitList_Michael_RCU_GPB_st_cmp_seqcst;
1065
1066         // RCU_GPB + less
1067         typedef cc::SplitListMap< rcu_gpb, Key, Value,
1068             typename cc::split_list::make_traits<
1069                 cc::split_list::ordered_list<cc::michael_list_tag>
1070                 ,co::hash< hash >
1071                 ,cc::split_list::ordered_list_traits<
1072                     typename cc::michael_list::make_traits<
1073                         co::less< less >
1074                     >::type
1075                 >
1076             >::type
1077         > SplitList_Michael_RCU_GPB_dyn_less;
1078
1079         typedef cc::SplitListMap< rcu_gpb, Key, Value,
1080             typename cc::split_list::make_traits<
1081                 cc::split_list::ordered_list<cc::michael_list_tag>
1082                 ,co::hash< hash >
1083                 ,co::memory_model< co::v::sequential_consistent >
1084                 ,cc::split_list::ordered_list_traits<
1085                     typename cc::michael_list::make_traits<
1086                         co::less< less >
1087                         ,co::memory_model< co::v::sequential_consistent >
1088                     >::type
1089                 >
1090             >::type
1091         > SplitList_Michael_RCU_GPB_dyn_less_seqcst;
1092
1093         typedef cc::SplitListMap< rcu_gpb, Key, Value,
1094             typename cc::split_list::make_traits<
1095                 cc::split_list::ordered_list<cc::michael_list_tag>
1096                 ,cc::split_list::dynamic_bucket_table< false >
1097                 ,co::hash< hash >
1098                 ,cc::split_list::ordered_list_traits<
1099                     typename cc::michael_list::make_traits<
1100                         co::less< less >
1101                     >::type
1102                 >
1103             >::type
1104         > SplitList_Michael_RCU_GPB_st_less;
1105
1106         typedef cc::SplitListMap< rcu_gpb, Key, Value,
1107             typename cc::split_list::make_traits<
1108                 cc::split_list::ordered_list<cc::michael_list_tag>
1109                 ,co::hash< hash >
1110                 ,cc::split_list::dynamic_bucket_table< false >
1111                 ,co::memory_model< co::v::sequential_consistent >
1112                 ,cc::split_list::ordered_list_traits<
1113                     typename cc::michael_list::make_traits<
1114                         co::less< less >
1115                         ,co::memory_model< co::v::sequential_consistent >
1116                     >::type
1117                 >
1118             >::type
1119         > SplitList_Michael_RCU_GPB_st_less_seqcst;
1120
1121         //
1122         typedef cc::SplitListMap< rcu_gpt, Key, Value,
1123             typename cc::split_list::make_traits<
1124                 cc::split_list::ordered_list<cc::michael_list_tag>
1125                 ,co::hash< hash >
1126                 ,cc::split_list::ordered_list_traits<
1127                     typename cc::michael_list::make_traits<
1128                         co::compare< compare >
1129                     >::type
1130                 >
1131             >::type
1132         > SplitList_Michael_RCU_GPT_dyn_cmp;
1133
1134         typedef cc::SplitListMap< rcu_gpt, Key, Value,
1135             typename cc::split_list::make_traits<
1136                 cc::split_list::ordered_list<cc::michael_list_tag>
1137                 ,co::hash< hash >
1138                 ,co::memory_model< co::v::sequential_consistent >
1139                 ,cc::split_list::ordered_list_traits<
1140                     typename cc::michael_list::make_traits<
1141                         co::compare< compare >
1142                         ,co::memory_model< co::v::sequential_consistent >
1143                     >::type
1144                 >
1145             >::type
1146         > SplitList_Michael_RCU_GPT_dyn_cmp_seqcst;
1147
1148         typedef cc::SplitListMap< rcu_gpt, Key, Value,
1149             typename cc::split_list::make_traits<
1150                 cc::split_list::ordered_list<cc::michael_list_tag>
1151                 ,cc::split_list::dynamic_bucket_table< false >
1152                 ,co::hash< hash >
1153                 ,cc::split_list::ordered_list_traits<
1154                     typename cc::michael_list::make_traits<
1155                         co::compare< compare >
1156                     >::type
1157                 >
1158             >::type
1159         > SplitList_Michael_RCU_GPT_st_cmp;
1160
1161         typedef cc::SplitListMap< rcu_gpt, Key, Value,
1162             typename cc::split_list::make_traits<
1163                 cc::split_list::ordered_list<cc::michael_list_tag>
1164                 ,co::hash< hash >
1165                 ,cc::split_list::dynamic_bucket_table< false >
1166                 ,co::memory_model< co::v::sequential_consistent >
1167                 ,cc::split_list::ordered_list_traits<
1168                     typename cc::michael_list::make_traits<
1169                         co::compare< compare >
1170                         ,co::memory_model< co::v::sequential_consistent >
1171                     >::type
1172                 >
1173             >::type
1174         > SplitList_Michael_RCU_GPT_st_cmp_seqcst;
1175
1176         // RCU_GPT + less
1177         typedef cc::SplitListMap< rcu_gpt, Key, Value,
1178             typename cc::split_list::make_traits<
1179                 cc::split_list::ordered_list<cc::michael_list_tag>
1180                 ,co::hash< hash >
1181                 ,cc::split_list::ordered_list_traits<
1182                     typename cc::michael_list::make_traits<
1183                         co::less< less >
1184                     >::type
1185                 >
1186             >::type
1187         > SplitList_Michael_RCU_GPT_dyn_less;
1188
1189         typedef cc::SplitListMap< rcu_gpt, Key, Value,
1190             typename cc::split_list::make_traits<
1191                 cc::split_list::ordered_list<cc::michael_list_tag>
1192                 ,co::hash< hash >
1193                 ,co::memory_model< co::v::sequential_consistent >
1194                 ,cc::split_list::ordered_list_traits<
1195                     typename cc::michael_list::make_traits<
1196                         co::less< less >
1197                         ,co::memory_model< co::v::sequential_consistent >
1198                     >::type
1199                 >
1200             >::type
1201         > SplitList_Michael_RCU_GPT_dyn_less_seqcst;
1202
1203         typedef cc::SplitListMap< rcu_gpt, Key, Value,
1204             typename cc::split_list::make_traits<
1205                 cc::split_list::ordered_list<cc::michael_list_tag>
1206                 ,cc::split_list::dynamic_bucket_table< false >
1207                 ,co::hash< hash >
1208                 ,cc::split_list::ordered_list_traits<
1209                     typename cc::michael_list::make_traits<
1210                         co::less< less >
1211                     >::type
1212                 >
1213             >::type
1214         > SplitList_Michael_RCU_GPT_st_less;
1215
1216         typedef cc::SplitListMap< rcu_gpt, Key, Value,
1217             typename cc::split_list::make_traits<
1218                 cc::split_list::ordered_list<cc::michael_list_tag>
1219                 ,co::hash< hash >
1220                 ,cc::split_list::dynamic_bucket_table< false >
1221                 ,co::memory_model< co::v::sequential_consistent >
1222                 ,cc::split_list::ordered_list_traits<
1223                     typename cc::michael_list::make_traits<
1224                         co::less< less >
1225                         ,co::memory_model< co::v::sequential_consistent >
1226                     >::type
1227                 >
1228             >::type
1229         > SplitList_Michael_RCU_GPT_st_less_seqcst;
1230
1231 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
1232         typedef cc::SplitListMap< rcu_shb, Key, Value,
1233             typename cc::split_list::make_traits<
1234                 cc::split_list::ordered_list<cc::michael_list_tag>
1235                 ,co::hash< hash >
1236                 ,cc::split_list::ordered_list_traits<
1237                     typename cc::michael_list::make_traits<
1238                         co::compare< compare >
1239                     >::type
1240                 >
1241             >::type
1242         > SplitList_Michael_RCU_SHB_dyn_cmp;
1243
1244         typedef cc::SplitListMap< rcu_shb, Key, Value,
1245             typename cc::split_list::make_traits<
1246                 cc::split_list::ordered_list<cc::michael_list_tag>
1247                 ,co::hash< hash >
1248                 ,co::memory_model< co::v::sequential_consistent >
1249                 ,cc::split_list::ordered_list_traits<
1250                     typename cc::michael_list::make_traits<
1251                         co::compare< compare >
1252                         ,co::memory_model< co::v::sequential_consistent >
1253                     >::type
1254                 >
1255             >::type
1256         > SplitList_Michael_RCU_SHB_dyn_cmp_seqcst;
1257
1258         typedef cc::SplitListMap< rcu_shb, Key, Value,
1259             typename cc::split_list::make_traits<
1260                 cc::split_list::ordered_list<cc::michael_list_tag>
1261                 ,cc::split_list::dynamic_bucket_table< false >
1262                 ,co::hash< hash >
1263                 ,cc::split_list::ordered_list_traits<
1264                     typename cc::michael_list::make_traits<
1265                         co::compare< compare >
1266                     >::type
1267                 >
1268             >::type
1269         > SplitList_Michael_RCU_SHB_st_cmp;
1270
1271         typedef cc::SplitListMap< rcu_shb, Key, Value,
1272             typename cc::split_list::make_traits<
1273                 cc::split_list::ordered_list<cc::michael_list_tag>
1274                 ,co::hash< hash >
1275                 ,cc::split_list::dynamic_bucket_table< false >
1276                 ,co::memory_model< co::v::sequential_consistent >
1277                 ,cc::split_list::ordered_list_traits<
1278                     typename cc::michael_list::make_traits<
1279                         co::compare< compare >
1280                         ,co::memory_model< co::v::sequential_consistent >
1281                     >::type
1282                 >
1283             >::type
1284         > SplitList_Michael_RCU_SHB_st_cmp_seqcst;
1285
1286         // RCU_SHB + less
1287         typedef cc::SplitListMap< rcu_shb, Key, Value,
1288             typename cc::split_list::make_traits<
1289                 cc::split_list::ordered_list<cc::michael_list_tag>
1290                 ,co::hash< hash >
1291                 ,cc::split_list::ordered_list_traits<
1292                     typename cc::michael_list::make_traits<
1293                         co::less< less >
1294                     >::type
1295                 >
1296             >::type
1297         > SplitList_Michael_RCU_SHB_dyn_less;
1298
1299         typedef cc::SplitListMap< rcu_shb, Key, Value,
1300             typename cc::split_list::make_traits<
1301                 cc::split_list::ordered_list<cc::michael_list_tag>
1302                 ,co::hash< hash >
1303                 ,co::memory_model< co::v::sequential_consistent >
1304                 ,cc::split_list::ordered_list_traits<
1305                     typename cc::michael_list::make_traits<
1306                         co::less< less >
1307                         ,co::memory_model< co::v::sequential_consistent >
1308                     >::type
1309                 >
1310             >::type
1311         > SplitList_Michael_RCU_SHB_dyn_less_seqcst;
1312
1313         typedef cc::SplitListMap< rcu_shb, Key, Value,
1314             typename cc::split_list::make_traits<
1315                 cc::split_list::ordered_list<cc::michael_list_tag>
1316                 ,cc::split_list::dynamic_bucket_table< false >
1317                 ,co::hash< hash >
1318                 ,cc::split_list::ordered_list_traits<
1319                     typename cc::michael_list::make_traits<
1320                         co::less< less >
1321                     >::type
1322                 >
1323             >::type
1324         > SplitList_Michael_RCU_SHB_st_less;
1325
1326         typedef cc::SplitListMap< rcu_shb, Key, Value,
1327             typename cc::split_list::make_traits<
1328                 cc::split_list::ordered_list<cc::michael_list_tag>
1329                 ,co::hash< hash >
1330                 ,cc::split_list::dynamic_bucket_table< false >
1331                 ,co::memory_model< co::v::sequential_consistent >
1332                 ,cc::split_list::ordered_list_traits<
1333                     typename cc::michael_list::make_traits<
1334                         co::less< less >
1335                         ,co::memory_model< co::v::sequential_consistent >
1336                     >::type
1337                 >
1338             >::type
1339         > SplitList_Michael_RCU_SHB_st_less_seqcst;
1340
1341         //
1342         typedef cc::SplitListMap< rcu_sht, Key, Value,
1343             typename cc::split_list::make_traits<
1344                 cc::split_list::ordered_list<cc::michael_list_tag>
1345                 ,co::hash< hash >
1346                 ,cc::split_list::ordered_list_traits<
1347                     typename cc::michael_list::make_traits<
1348                         co::compare< compare >
1349                     >::type
1350                 >
1351             >::type
1352         > SplitList_Michael_RCU_SHT_dyn_cmp;
1353
1354         typedef cc::SplitListMap< rcu_sht, Key, Value,
1355             typename cc::split_list::make_traits<
1356                 cc::split_list::ordered_list<cc::michael_list_tag>
1357                 ,co::hash< hash >
1358                 ,co::memory_model< co::v::sequential_consistent >
1359                 ,cc::split_list::ordered_list_traits<
1360                     typename cc::michael_list::make_traits<
1361                         co::compare< compare >
1362                         ,co::memory_model< co::v::sequential_consistent >
1363                     >::type
1364                 >
1365             >::type
1366         > SplitList_Michael_RCU_SHT_dyn_cmp_seqcst;
1367
1368         typedef cc::SplitListMap< rcu_sht, Key, Value,
1369             typename cc::split_list::make_traits<
1370                 cc::split_list::ordered_list<cc::michael_list_tag>
1371                 ,cc::split_list::dynamic_bucket_table< false >
1372                 ,co::hash< hash >
1373                 ,cc::split_list::ordered_list_traits<
1374                     typename cc::michael_list::make_traits<
1375                         co::compare< compare >
1376                     >::type
1377                 >
1378             >::type
1379         > SplitList_Michael_RCU_SHT_st_cmp;
1380
1381         typedef cc::SplitListMap< rcu_sht, Key, Value,
1382             typename cc::split_list::make_traits<
1383                 cc::split_list::ordered_list<cc::michael_list_tag>
1384                 ,co::hash< hash >
1385                 ,cc::split_list::dynamic_bucket_table< false >
1386                 ,co::memory_model< co::v::sequential_consistent >
1387                 ,cc::split_list::ordered_list_traits<
1388                     typename cc::michael_list::make_traits<
1389                         co::compare< compare >
1390                         ,co::memory_model< co::v::sequential_consistent >
1391                     >::type
1392                 >
1393             >::type
1394         > SplitList_Michael_RCU_SHT_st_cmp_seqcst;
1395
1396         // RCU_SHT + less
1397         typedef cc::SplitListMap< rcu_sht, Key, Value,
1398             typename cc::split_list::make_traits<
1399                 cc::split_list::ordered_list<cc::michael_list_tag>
1400                 ,co::hash< hash >
1401                 ,cc::split_list::ordered_list_traits<
1402                     typename cc::michael_list::make_traits<
1403                         co::less< less >
1404                     >::type
1405                 >
1406             >::type
1407         > SplitList_Michael_RCU_SHT_dyn_less;
1408
1409         typedef cc::SplitListMap< rcu_sht, Key, Value,
1410             typename cc::split_list::make_traits<
1411                 cc::split_list::ordered_list<cc::michael_list_tag>
1412                 ,co::hash< hash >
1413                 ,co::memory_model< co::v::sequential_consistent >
1414                 ,cc::split_list::ordered_list_traits<
1415                     typename cc::michael_list::make_traits<
1416                         co::less< less >
1417                         ,co::memory_model< co::v::sequential_consistent >
1418                     >::type
1419                 >
1420             >::type
1421         > SplitList_Michael_RCU_SHT_dyn_less_seqcst;
1422
1423         typedef cc::SplitListMap< rcu_sht, Key, Value,
1424             typename cc::split_list::make_traits<
1425                 cc::split_list::ordered_list<cc::michael_list_tag>
1426                 ,cc::split_list::dynamic_bucket_table< false >
1427                 ,co::hash< hash >
1428                 ,cc::split_list::ordered_list_traits<
1429                     typename cc::michael_list::make_traits<
1430                         co::less< less >
1431                     >::type
1432                 >
1433             >::type
1434         > SplitList_Michael_RCU_SHT_st_less;
1435
1436         typedef cc::SplitListMap< rcu_sht, Key, Value,
1437             typename cc::split_list::make_traits<
1438                 cc::split_list::ordered_list<cc::michael_list_tag>
1439                 ,co::hash< hash >
1440                 ,cc::split_list::dynamic_bucket_table< false >
1441                 ,co::memory_model< co::v::sequential_consistent >
1442                 ,cc::split_list::ordered_list_traits<
1443                     typename cc::michael_list::make_traits<
1444                         co::less< less >
1445                         ,co::memory_model< co::v::sequential_consistent >
1446                     >::type
1447                 >
1448             >::type
1449         > SplitList_Michael_RCU_SHT_st_less_seqcst;
1450 #endif
1451
1452         // gc::nogc
1453         typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value,
1454             typename cc::split_list::make_traits<
1455                 cc::split_list::ordered_list<cc::michael_list_tag>
1456                 ,co::hash< hash >
1457                 ,cc::split_list::ordered_list_traits<
1458                     typename cc::michael_list::make_traits<
1459                         co::compare< compare >
1460                     >::type
1461                 >
1462             >::type
1463         > > SplitList_Michael_NOGC_dyn_cmp;
1464
1465         typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value,
1466             typename cc::split_list::make_traits<
1467                 cc::split_list::ordered_list<cc::michael_list_tag>
1468                 ,co::hash< hash >
1469                 ,co::memory_model< co::v::sequential_consistent >
1470                 ,cc::split_list::ordered_list_traits<
1471                     typename cc::michael_list::make_traits<
1472                         co::compare< compare >
1473                         ,co::memory_model< co::v::sequential_consistent >
1474                     >::type
1475                 >
1476             >::type
1477         > > SplitList_Michael_NOGC_dyn_cmp_seqcst;
1478
1479         typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value,
1480             typename cc::split_list::make_traits<
1481                 cc::split_list::ordered_list<cc::michael_list_tag>
1482                 ,cc::split_list::dynamic_bucket_table< false >
1483                 ,co::hash< hash >
1484                 ,cc::split_list::ordered_list_traits<
1485                     typename cc::michael_list::make_traits<
1486                         co::compare< compare >
1487                     >::type
1488                 >
1489             >::type
1490         > > SplitList_Michael_NOGC_st_cmp;
1491
1492         typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value,
1493             typename cc::split_list::make_traits<
1494                 cc::split_list::ordered_list<cc::michael_list_tag>
1495                 ,co::hash< hash >
1496                 ,cc::split_list::dynamic_bucket_table< false >
1497                 ,co::memory_model< co::v::sequential_consistent >
1498                 ,cc::split_list::ordered_list_traits<
1499                     typename cc::michael_list::make_traits<
1500                         co::compare< compare >
1501                         ,co::memory_model< co::v::sequential_consistent >
1502                     >::type
1503                 >
1504             >::type
1505         > > SplitList_Michael_NOGC_st_cmp_seqcst;
1506
1507         //NOGC + less
1508         typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value,
1509             typename cc::split_list::make_traits<
1510                 cc::split_list::ordered_list<cc::michael_list_tag>
1511                 ,co::hash< hash >
1512                 ,cc::split_list::ordered_list_traits<
1513                     typename cc::michael_list::make_traits<
1514                         co::less< less >
1515                     >::type
1516                 >
1517             >::type
1518         > > SplitList_Michael_NOGC_dyn_less;
1519
1520         typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value,
1521             typename cc::split_list::make_traits<
1522                 cc::split_list::ordered_list<cc::michael_list_tag>
1523                 ,co::hash< hash >
1524                 ,co::memory_model< co::v::sequential_consistent >
1525                 ,cc::split_list::ordered_list_traits<
1526                     typename cc::michael_list::make_traits<
1527                         co::less< less >
1528                         ,co::memory_model< co::v::sequential_consistent >
1529                     >::type
1530                 >
1531             >::type
1532         > > SplitList_Michael_NOGC_dyn_less_seqcst;
1533
1534         typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value,
1535             typename cc::split_list::make_traits<
1536                 cc::split_list::ordered_list<cc::michael_list_tag>
1537                 ,cc::split_list::dynamic_bucket_table< false >
1538                 ,co::hash< hash >
1539                 ,cc::split_list::ordered_list_traits<
1540                     typename cc::michael_list::make_traits<
1541                         co::less< less >
1542                     >::type
1543                 >
1544             >::type
1545         > > SplitList_Michael_NOGC_st_less;
1546
1547         typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value,
1548             typename cc::split_list::make_traits<
1549                 cc::split_list::ordered_list<cc::michael_list_tag>
1550                 ,co::hash< hash >
1551                 ,cc::split_list::dynamic_bucket_table< false >
1552                 ,co::memory_model< co::v::sequential_consistent >
1553                 ,cc::split_list::ordered_list_traits<
1554                     typename cc::michael_list::make_traits<
1555                         co::less< less >
1556                         ,co::memory_model< co::v::sequential_consistent >
1557                     >::type
1558                 >
1559             >::type
1560         > > SplitList_Michael_NOGC_st_less_seqcst;
1561
1562
1563         // ***************************************************************************
1564         // SplitListMap based on LazyKVList
1565
1566         // HP
1567         typedef cc::SplitListMap< cds::gc::HP, Key, Value,
1568             typename cc::split_list::make_traits<
1569                 cc::split_list::ordered_list<cc::lazy_list_tag>
1570                 ,co::hash< hash >
1571                 ,cc::split_list::ordered_list_traits<
1572                     typename cc::lazy_list::make_traits<
1573                         co::compare< compare >
1574                     >::type
1575                 >
1576             >::type
1577         > SplitList_Lazy_HP_dyn_cmp;
1578
1579         typedef cc::SplitListMap< cds::gc::HP, Key, Value,
1580             typename cc::split_list::make_traits<
1581                 cc::split_list::ordered_list<cc::lazy_list_tag>
1582                 ,co::hash< hash >
1583                 ,co::memory_model< co::v::sequential_consistent >
1584                 ,cc::split_list::ordered_list_traits<
1585                     typename cc::lazy_list::make_traits<
1586                         co::compare< compare >
1587                         ,co::memory_model< co::v::sequential_consistent >
1588                     >::type
1589                 >
1590             >::type
1591         > SplitList_Lazy_HP_dyn_cmp_seqcst;
1592
1593         typedef cc::SplitListMap< cds::gc::HP, Key, Value,
1594             typename cc::split_list::make_traits<
1595                 cc::split_list::ordered_list<cc::lazy_list_tag>
1596                 ,cc::split_list::dynamic_bucket_table< false >
1597                 ,co::hash< hash >
1598                 ,cc::split_list::ordered_list_traits<
1599                     typename cc::lazy_list::make_traits<
1600                         co::compare< compare >
1601                     >::type
1602                 >
1603             >::type
1604         > SplitList_Lazy_HP_st_cmp;
1605
1606         typedef cc::SplitListMap< cds::gc::HP, Key, Value,
1607             typename cc::split_list::make_traits<
1608                 cc::split_list::ordered_list<cc::lazy_list_tag>
1609                 ,co::hash< hash >
1610                 ,cc::split_list::dynamic_bucket_table< false >
1611                 ,co::memory_model< co::v::sequential_consistent >
1612                 ,cc::split_list::ordered_list_traits<
1613                     typename cc::lazy_list::make_traits<
1614                         co::compare< compare >
1615                         ,co::memory_model< co::v::sequential_consistent >
1616                     >::type
1617                 >
1618             >::type
1619         > SplitList_Lazy_HP_st_cmp_seqcst;
1620
1621
1622         // HP + less
1623         typedef cc::SplitListMap< cds::gc::HP, Key, Value,
1624             typename cc::split_list::make_traits<
1625                 cc::split_list::ordered_list<cc::lazy_list_tag>
1626                 ,co::hash< hash >
1627                 ,cc::split_list::ordered_list_traits<
1628                     typename cc::lazy_list::make_traits<
1629                         co::less< less >
1630                     >::type
1631                 >
1632             >::type
1633         > SplitList_Lazy_HP_dyn_less;
1634
1635         typedef cc::SplitListMap< cds::gc::HP, Key, Value,
1636             typename cc::split_list::make_traits<
1637                 cc::split_list::ordered_list<cc::lazy_list_tag>
1638                 ,co::hash< hash >
1639                 ,co::memory_model< co::v::sequential_consistent >
1640                 ,cc::split_list::ordered_list_traits<
1641                     typename cc::lazy_list::make_traits<
1642                         co::less< less >
1643                         ,co::memory_model< co::v::sequential_consistent >
1644                     >::type
1645                 >
1646             >::type
1647         > SplitList_Lazy_HP_dyn_less_seqcst;
1648
1649         typedef cc::SplitListMap< cds::gc::HP, Key, Value,
1650             typename cc::split_list::make_traits<
1651                 cc::split_list::ordered_list<cc::lazy_list_tag>
1652                 ,cc::split_list::dynamic_bucket_table< false >
1653                 ,co::hash< hash >
1654                 ,cc::split_list::ordered_list_traits<
1655                     typename cc::lazy_list::make_traits<
1656                         co::less< less >
1657                     >::type
1658                 >
1659             >::type
1660         > SplitList_Lazy_HP_st_less;
1661
1662         typedef cc::SplitListMap< cds::gc::HP, Key, Value,
1663             typename cc::split_list::make_traits<
1664                 cc::split_list::ordered_list<cc::lazy_list_tag>
1665                 ,co::hash< hash >
1666                 ,cc::split_list::dynamic_bucket_table< false >
1667                 ,co::memory_model< co::v::sequential_consistent >
1668                 ,cc::split_list::ordered_list_traits<
1669                     typename cc::lazy_list::make_traits<
1670                         co::less< less >
1671                         ,co::memory_model< co::v::sequential_consistent >
1672                     >::type
1673                 >
1674             >::type
1675         > SplitList_Lazy_HP_st_less_seqcst;
1676
1677         // DHP
1678         typedef cc::SplitListMap< cds::gc::DHP, Key, Value,
1679             typename cc::split_list::make_traits<
1680                 cc::split_list::ordered_list<cc::lazy_list_tag>
1681                 ,co::hash< hash >
1682                 ,cc::split_list::ordered_list_traits<
1683                     typename cc::lazy_list::make_traits<
1684                         co::compare< compare >
1685                     >::type
1686                 >
1687             >::type
1688         > SplitList_Lazy_DHP_dyn_cmp;
1689
1690         typedef cc::SplitListMap< cds::gc::DHP, Key, Value,
1691             typename cc::split_list::make_traits<
1692                 cc::split_list::ordered_list<cc::lazy_list_tag>
1693                 ,co::hash< hash >
1694                 ,co::memory_model< co::v::sequential_consistent >
1695                 ,cc::split_list::ordered_list_traits<
1696                     typename cc::lazy_list::make_traits<
1697                         co::compare< compare >
1698                         ,co::memory_model< co::v::sequential_consistent >
1699                     >::type
1700                 >
1701             >::type
1702         > SplitList_Lazy_DHP_dyn_cmp_seqcst;
1703
1704         typedef cc::SplitListMap< cds::gc::DHP, Key, Value,
1705             typename cc::split_list::make_traits<
1706                 cc::split_list::ordered_list<cc::lazy_list_tag>
1707                 ,cc::split_list::dynamic_bucket_table< false >
1708                 ,co::hash< hash >
1709                 ,cc::split_list::ordered_list_traits<
1710                     typename cc::lazy_list::make_traits<
1711                         co::compare< compare >
1712                     >::type
1713                 >
1714             >::type
1715         > SplitList_Lazy_DHP_st_cmp;
1716
1717         typedef cc::SplitListMap< cds::gc::DHP, Key, Value,
1718             typename cc::split_list::make_traits<
1719                 cc::split_list::ordered_list<cc::lazy_list_tag>
1720                 ,co::hash< hash >
1721                 ,cc::split_list::dynamic_bucket_table< false >
1722                 ,co::memory_model< co::v::sequential_consistent >
1723                 ,cc::split_list::ordered_list_traits<
1724                     typename cc::lazy_list::make_traits<
1725                         co::compare< compare >
1726                         ,co::memory_model< co::v::sequential_consistent >
1727                     >::type
1728                 >
1729             >::type
1730         > SplitList_Lazy_DHP_st_cmp_seqcst;
1731
1732         // DHP + less
1733         typedef cc::SplitListMap< cds::gc::DHP, Key, Value,
1734             typename cc::split_list::make_traits<
1735                 cc::split_list::ordered_list<cc::lazy_list_tag>
1736                 ,co::hash< hash >
1737                 ,cc::split_list::ordered_list_traits<
1738                     typename cc::lazy_list::make_traits<
1739                         co::less< less >
1740                     >::type
1741                 >
1742             >::type
1743         > SplitList_Lazy_DHP_dyn_less;
1744
1745         typedef cc::SplitListMap< cds::gc::DHP, Key, Value,
1746             typename cc::split_list::make_traits<
1747                 cc::split_list::ordered_list<cc::lazy_list_tag>
1748                 ,co::hash< hash >
1749                 ,co::memory_model< co::v::sequential_consistent >
1750                 ,cc::split_list::ordered_list_traits<
1751                     typename cc::lazy_list::make_traits<
1752                         co::less< less >
1753                         ,co::memory_model< co::v::sequential_consistent >
1754                     >::type
1755                 >
1756             >::type
1757         > SplitList_Lazy_DHP_dyn_less_seqcst;
1758
1759         typedef cc::SplitListMap< cds::gc::DHP, Key, Value,
1760             typename cc::split_list::make_traits<
1761                 cc::split_list::ordered_list<cc::lazy_list_tag>
1762                 ,cc::split_list::dynamic_bucket_table< false >
1763                 ,co::hash< hash >
1764                 ,cc::split_list::ordered_list_traits<
1765                     typename cc::lazy_list::make_traits<
1766                         co::less< less >
1767                     >::type
1768                 >
1769             >::type
1770         > SplitList_Lazy_DHP_st_less;
1771
1772         typedef cc::SplitListMap< cds::gc::DHP, Key, Value,
1773             typename cc::split_list::make_traits<
1774                 cc::split_list::ordered_list<cc::lazy_list_tag>
1775                 ,co::hash< hash >
1776                 ,cc::split_list::dynamic_bucket_table< false >
1777                 ,co::memory_model< co::v::sequential_consistent >
1778                 ,cc::split_list::ordered_list_traits<
1779                     typename cc::lazy_list::make_traits<
1780                         co::less< less >
1781                         ,co::memory_model< co::v::sequential_consistent >
1782                     >::type
1783                 >
1784             >::type
1785         > SplitList_Lazy_DHP_st_less_seqcst;
1786
1787         // RCU
1788         typedef cc::SplitListMap< rcu_gpi, Key, Value,
1789             typename cc::split_list::make_traits<
1790                 cc::split_list::ordered_list<cc::lazy_list_tag>
1791                 ,co::hash< hash >
1792                 ,cc::split_list::ordered_list_traits<
1793                     typename cc::lazy_list::make_traits<
1794                         co::compare< compare >
1795                     >::type
1796                 >
1797             >::type
1798         > SplitList_Lazy_RCU_GPI_dyn_cmp;
1799
1800         typedef cc::SplitListMap< rcu_gpi, Key, Value,
1801             typename cc::split_list::make_traits<
1802                 cc::split_list::ordered_list<cc::lazy_list_tag>
1803                 ,co::hash< hash >
1804                 ,co::memory_model< co::v::sequential_consistent >
1805                 ,cc::split_list::ordered_list_traits<
1806                     typename cc::lazy_list::make_traits<
1807                         co::compare< compare >
1808                         ,co::memory_model< co::v::sequential_consistent >
1809                     >::type
1810                 >
1811             >::type
1812         > SplitList_Lazy_RCU_GPI_dyn_cmp_seqcst;
1813
1814         typedef cc::SplitListMap< rcu_gpi, Key, Value,
1815             typename cc::split_list::make_traits<
1816                 cc::split_list::ordered_list<cc::lazy_list_tag>
1817                 ,cc::split_list::dynamic_bucket_table< false >
1818                 ,co::hash< hash >
1819                 ,cc::split_list::ordered_list_traits<
1820                     typename cc::lazy_list::make_traits<
1821                         co::compare< compare >
1822                     >::type
1823                 >
1824             >::type
1825         > SplitList_Lazy_RCU_GPI_st_cmp;
1826
1827         typedef cc::SplitListMap< rcu_gpi, Key, Value,
1828             typename cc::split_list::make_traits<
1829                 cc::split_list::ordered_list<cc::lazy_list_tag>
1830                 ,co::hash< hash >
1831                 ,cc::split_list::dynamic_bucket_table< false >
1832                 ,co::memory_model< co::v::sequential_consistent >
1833                 ,cc::split_list::ordered_list_traits<
1834                     typename cc::lazy_list::make_traits<
1835                         co::compare< compare >
1836                         ,co::memory_model< co::v::sequential_consistent >
1837                     >::type
1838                 >
1839             >::type
1840         > SplitList_Lazy_RCU_GPI_st_cmp_seqcst;
1841
1842         // RCU_GPI + less
1843         typedef cc::SplitListMap< rcu_gpi, Key, Value,
1844             typename cc::split_list::make_traits<
1845                 cc::split_list::ordered_list<cc::lazy_list_tag>
1846                 ,co::hash< hash >
1847                 ,cc::split_list::ordered_list_traits<
1848                     typename cc::lazy_list::make_traits<
1849                         co::less< less >
1850                     >::type
1851                 >
1852             >::type
1853         > SplitList_Lazy_RCU_GPI_dyn_less;
1854
1855         typedef cc::SplitListMap< rcu_gpi, Key, Value,
1856             typename cc::split_list::make_traits<
1857                 cc::split_list::ordered_list<cc::lazy_list_tag>
1858                 ,co::hash< hash >
1859                 ,co::memory_model< co::v::sequential_consistent >
1860                 ,cc::split_list::ordered_list_traits<
1861                     typename cc::lazy_list::make_traits<
1862                         co::less< less >
1863                         ,co::memory_model< co::v::sequential_consistent >
1864                     >::type
1865                 >
1866             >::type
1867         > SplitList_Lazy_RCU_GPI_dyn_less_seqcst;
1868
1869         typedef cc::SplitListMap< rcu_gpi, Key, Value,
1870             typename cc::split_list::make_traits<
1871                 cc::split_list::ordered_list<cc::lazy_list_tag>
1872                 ,cc::split_list::dynamic_bucket_table< false >
1873                 ,co::hash< hash >
1874                 ,cc::split_list::ordered_list_traits<
1875                     typename cc::lazy_list::make_traits<
1876                         co::less< less >
1877                     >::type
1878                 >
1879             >::type
1880         > SplitList_Lazy_RCU_GPI_st_less;
1881
1882         typedef cc::SplitListMap< rcu_gpi, Key, Value,
1883             typename cc::split_list::make_traits<
1884                 cc::split_list::ordered_list<cc::lazy_list_tag>
1885                 ,co::hash< hash >
1886                 ,cc::split_list::dynamic_bucket_table< false >
1887                 ,co::memory_model< co::v::sequential_consistent >
1888                 ,cc::split_list::ordered_list_traits<
1889                     typename cc::lazy_list::make_traits<
1890                         co::less< less >
1891                         ,co::memory_model< co::v::sequential_consistent >
1892                     >::type
1893                 >
1894             >::type
1895         > SplitList_Lazy_RCU_GPI_st_less_seqcst;
1896
1897         //
1898         typedef cc::SplitListMap< rcu_gpb, Key, Value,
1899             typename cc::split_list::make_traits<
1900                 cc::split_list::ordered_list<cc::lazy_list_tag>
1901                 ,co::hash< hash >
1902                 ,cc::split_list::ordered_list_traits<
1903                     typename cc::lazy_list::make_traits<
1904                         co::compare< compare >
1905                     >::type
1906                 >
1907             >::type
1908         > SplitList_Lazy_RCU_GPB_dyn_cmp;
1909
1910         typedef cc::SplitListMap< rcu_gpb, Key, Value,
1911             typename cc::split_list::make_traits<
1912                 cc::split_list::ordered_list<cc::lazy_list_tag>
1913                 ,co::hash< hash >
1914                 ,co::memory_model< co::v::sequential_consistent >
1915                 ,cc::split_list::ordered_list_traits<
1916                     typename cc::lazy_list::make_traits<
1917                         co::compare< compare >
1918                         ,co::memory_model< co::v::sequential_consistent >
1919                     >::type
1920                 >
1921             >::type
1922         > SplitList_Lazy_RCU_GPB_dyn_cmp_seqcst;
1923
1924         typedef cc::SplitListMap< rcu_gpb, Key, Value,
1925             typename cc::split_list::make_traits<
1926                 cc::split_list::ordered_list<cc::lazy_list_tag>
1927                 ,cc::split_list::dynamic_bucket_table< false >
1928                 ,co::hash< hash >
1929                 ,cc::split_list::ordered_list_traits<
1930                     typename cc::lazy_list::make_traits<
1931                         co::compare< compare >
1932                     >::type
1933                 >
1934             >::type
1935         > SplitList_Lazy_RCU_GPB_st_cmp;
1936
1937         typedef cc::SplitListMap< rcu_gpb, Key, Value,
1938             typename cc::split_list::make_traits<
1939                 cc::split_list::ordered_list<cc::lazy_list_tag>
1940                 ,co::hash< hash >
1941                 ,cc::split_list::dynamic_bucket_table< false >
1942                 ,co::memory_model< co::v::sequential_consistent >
1943                 ,cc::split_list::ordered_list_traits<
1944                     typename cc::lazy_list::make_traits<
1945                         co::compare< compare >
1946                         ,co::memory_model< co::v::sequential_consistent >
1947                     >::type
1948                 >
1949             >::type
1950         > SplitList_Lazy_RCU_GPB_st_cmp_seqcst;
1951
1952         // RCU_GPB + less
1953         typedef cc::SplitListMap< rcu_gpb, Key, Value,
1954             typename cc::split_list::make_traits<
1955                 cc::split_list::ordered_list<cc::lazy_list_tag>
1956                 ,co::hash< hash >
1957                 ,cc::split_list::ordered_list_traits<
1958                     typename cc::lazy_list::make_traits<
1959                         co::less< less >
1960                     >::type
1961                 >
1962             >::type
1963         > SplitList_Lazy_RCU_GPB_dyn_less;
1964
1965         typedef cc::SplitListMap< rcu_gpb, Key, Value,
1966             typename cc::split_list::make_traits<
1967                 cc::split_list::ordered_list<cc::lazy_list_tag>
1968                 ,co::hash< hash >
1969                 ,co::memory_model< co::v::sequential_consistent >
1970                 ,cc::split_list::ordered_list_traits<
1971                     typename cc::lazy_list::make_traits<
1972                         co::less< less >
1973                         ,co::memory_model< co::v::sequential_consistent >
1974                     >::type
1975                 >
1976             >::type
1977         > SplitList_Lazy_RCU_GPB_dyn_less_seqcst;
1978
1979         typedef cc::SplitListMap< rcu_gpb, Key, Value,
1980             typename cc::split_list::make_traits<
1981                 cc::split_list::ordered_list<cc::lazy_list_tag>
1982                 ,cc::split_list::dynamic_bucket_table< false >
1983                 ,co::hash< hash >
1984                 ,cc::split_list::ordered_list_traits<
1985                     typename cc::lazy_list::make_traits<
1986                         co::less< less >
1987                     >::type
1988                 >
1989             >::type
1990         > SplitList_Lazy_RCU_GPB_st_less;
1991
1992         typedef cc::SplitListMap< rcu_gpb, Key, Value,
1993             typename cc::split_list::make_traits<
1994                 cc::split_list::ordered_list<cc::lazy_list_tag>
1995                 ,co::hash< hash >
1996                 ,cc::split_list::dynamic_bucket_table< false >
1997                 ,co::memory_model< co::v::sequential_consistent >
1998                 ,cc::split_list::ordered_list_traits<
1999                     typename cc::lazy_list::make_traits<
2000                         co::less< less >
2001                         ,co::memory_model< co::v::sequential_consistent >
2002                     >::type
2003                 >
2004             >::type
2005         > SplitList_Lazy_RCU_GPB_st_less_seqcst;
2006
2007         //
2008         typedef cc::SplitListMap< rcu_gpt, Key, Value,
2009             typename cc::split_list::make_traits<
2010                 cc::split_list::ordered_list<cc::lazy_list_tag>
2011                 ,co::hash< hash >
2012                 ,cc::split_list::ordered_list_traits<
2013                     typename cc::lazy_list::make_traits<
2014                         co::compare< compare >
2015                     >::type
2016                 >
2017             >::type
2018         > SplitList_Lazy_RCU_GPT_dyn_cmp;
2019
2020         typedef cc::SplitListMap< rcu_gpt, Key, Value,
2021             typename cc::split_list::make_traits<
2022                 cc::split_list::ordered_list<cc::lazy_list_tag>
2023                 ,co::hash< hash >
2024                 ,co::memory_model< co::v::sequential_consistent >
2025                 ,cc::split_list::ordered_list_traits<
2026                     typename cc::lazy_list::make_traits<
2027                         co::compare< compare >
2028                         ,co::memory_model< co::v::sequential_consistent >
2029                     >::type
2030                 >
2031             >::type
2032         > SplitList_Lazy_RCU_GPT_dyn_cmp_seqcst;
2033
2034         typedef cc::SplitListMap< rcu_gpt, Key, Value,
2035             typename cc::split_list::make_traits<
2036                 cc::split_list::ordered_list<cc::lazy_list_tag>
2037                 ,cc::split_list::dynamic_bucket_table< false >
2038                 ,co::hash< hash >
2039                 ,cc::split_list::ordered_list_traits<
2040                     typename cc::lazy_list::make_traits<
2041                         co::compare< compare >
2042                     >::type
2043                 >
2044             >::type
2045         > SplitList_Lazy_RCU_GPT_st_cmp;
2046
2047         typedef cc::SplitListMap< rcu_gpt, Key, Value,
2048             typename cc::split_list::make_traits<
2049                 cc::split_list::ordered_list<cc::lazy_list_tag>
2050                 ,co::hash< hash >
2051                 ,cc::split_list::dynamic_bucket_table< false >
2052                 ,co::memory_model< co::v::sequential_consistent >
2053                 ,cc::split_list::ordered_list_traits<
2054                     typename cc::lazy_list::make_traits<
2055                         co::compare< compare >
2056                         ,co::memory_model< co::v::sequential_consistent >
2057                     >::type
2058                 >
2059             >::type
2060         > SplitList_Lazy_RCU_GPT_st_cmp_seqcst;
2061
2062         // RCU_GPT + less
2063         typedef cc::SplitListMap< rcu_gpt, Key, Value,
2064             typename cc::split_list::make_traits<
2065                 cc::split_list::ordered_list<cc::lazy_list_tag>
2066                 ,co::hash< hash >
2067                 ,cc::split_list::ordered_list_traits<
2068                     typename cc::lazy_list::make_traits<
2069                         co::less< less >
2070                     >::type
2071                 >
2072             >::type
2073         > SplitList_Lazy_RCU_GPT_dyn_less;
2074
2075         typedef cc::SplitListMap< rcu_gpt, Key, Value,
2076             typename cc::split_list::make_traits<
2077                 cc::split_list::ordered_list<cc::lazy_list_tag>
2078                 ,co::hash< hash >
2079                 ,co::memory_model< co::v::sequential_consistent >
2080                 ,cc::split_list::ordered_list_traits<
2081                     typename cc::lazy_list::make_traits<
2082                         co::less< less >
2083                         ,co::memory_model< co::v::sequential_consistent >
2084                     >::type
2085                 >
2086             >::type
2087         > SplitList_Lazy_RCU_GPT_dyn_less_seqcst;
2088
2089         typedef cc::SplitListMap< rcu_gpt, Key, Value,
2090             typename cc::split_list::make_traits<
2091                 cc::split_list::ordered_list<cc::lazy_list_tag>
2092                 ,cc::split_list::dynamic_bucket_table< false >
2093                 ,co::hash< hash >
2094                 ,cc::split_list::ordered_list_traits<
2095                     typename cc::lazy_list::make_traits<
2096                         co::less< less >
2097                     >::type
2098                 >
2099             >::type
2100         > SplitList_Lazy_RCU_GPT_st_less;
2101
2102         typedef cc::SplitListMap< rcu_gpt, Key, Value,
2103             typename cc::split_list::make_traits<
2104                 cc::split_list::ordered_list<cc::lazy_list_tag>
2105                 ,co::hash< hash >
2106                 ,cc::split_list::dynamic_bucket_table< false >
2107                 ,co::memory_model< co::v::sequential_consistent >
2108                 ,cc::split_list::ordered_list_traits<
2109                     typename cc::lazy_list::make_traits<
2110                         co::less< less >
2111                         ,co::memory_model< co::v::sequential_consistent >
2112                     >::type
2113                 >
2114             >::type
2115         > SplitList_Lazy_RCU_GPT_st_less_seqcst;
2116
2117 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
2118         typedef cc::SplitListMap< rcu_shb, Key, Value,
2119             typename cc::split_list::make_traits<
2120                 cc::split_list::ordered_list<cc::lazy_list_tag>
2121                 ,co::hash< hash >
2122                 ,cc::split_list::ordered_list_traits<
2123                     typename cc::lazy_list::make_traits<
2124                         co::compare< compare >
2125                     >::type
2126                 >
2127             >::type
2128         > SplitList_Lazy_RCU_SHB_dyn_cmp;
2129
2130         typedef cc::SplitListMap< rcu_shb, Key, Value,
2131             typename cc::split_list::make_traits<
2132                 cc::split_list::ordered_list<cc::lazy_list_tag>
2133                 ,co::hash< hash >
2134                 ,co::memory_model< co::v::sequential_consistent >
2135                 ,cc::split_list::ordered_list_traits<
2136                     typename cc::lazy_list::make_traits<
2137                         co::compare< compare >
2138                         ,co::memory_model< co::v::sequential_consistent >
2139                     >::type
2140                 >
2141             >::type
2142         > SplitList_Lazy_RCU_SHB_dyn_cmp_seqcst;
2143
2144         typedef cc::SplitListMap< rcu_shb, Key, Value,
2145             typename cc::split_list::make_traits<
2146                 cc::split_list::ordered_list<cc::lazy_list_tag>
2147                 ,cc::split_list::dynamic_bucket_table< false >
2148                 ,co::hash< hash >
2149                 ,cc::split_list::ordered_list_traits<
2150                     typename cc::lazy_list::make_traits<
2151                         co::compare< compare >
2152                     >::type
2153                 >
2154             >::type
2155         > SplitList_Lazy_RCU_SHB_st_cmp;
2156
2157         typedef cc::SplitListMap< rcu_shb, Key, Value,
2158             typename cc::split_list::make_traits<
2159                 cc::split_list::ordered_list<cc::lazy_list_tag>
2160                 ,co::hash< hash >
2161                 ,cc::split_list::dynamic_bucket_table< false >
2162                 ,co::memory_model< co::v::sequential_consistent >
2163                 ,cc::split_list::ordered_list_traits<
2164                     typename cc::lazy_list::make_traits<
2165                         co::compare< compare >
2166                         ,co::memory_model< co::v::sequential_consistent >
2167                     >::type
2168                 >
2169             >::type
2170         > SplitList_Lazy_RCU_SHB_st_cmp_seqcst;
2171
2172         // RCU_SHB + less
2173         typedef cc::SplitListMap< rcu_shb, Key, Value,
2174             typename cc::split_list::make_traits<
2175                 cc::split_list::ordered_list<cc::lazy_list_tag>
2176                 ,co::hash< hash >
2177                 ,cc::split_list::ordered_list_traits<
2178                     typename cc::lazy_list::make_traits<
2179                         co::less< less >
2180                     >::type
2181                 >
2182             >::type
2183         > SplitList_Lazy_RCU_SHB_dyn_less;
2184
2185         typedef cc::SplitListMap< rcu_shb, Key, Value,
2186             typename cc::split_list::make_traits<
2187                 cc::split_list::ordered_list<cc::lazy_list_tag>
2188                 ,co::hash< hash >
2189                 ,co::memory_model< co::v::sequential_consistent >
2190                 ,cc::split_list::ordered_list_traits<
2191                     typename cc::lazy_list::make_traits<
2192                         co::less< less >
2193                         ,co::memory_model< co::v::sequential_consistent >
2194                     >::type
2195                 >
2196             >::type
2197         > SplitList_Lazy_RCU_SHB_dyn_less_seqcst;
2198
2199         typedef cc::SplitListMap< rcu_shb, Key, Value,
2200             typename cc::split_list::make_traits<
2201                 cc::split_list::ordered_list<cc::lazy_list_tag>
2202                 ,cc::split_list::dynamic_bucket_table< false >
2203                 ,co::hash< hash >
2204                 ,cc::split_list::ordered_list_traits<
2205                     typename cc::lazy_list::make_traits<
2206                         co::less< less >
2207                     >::type
2208                 >
2209             >::type
2210         > SplitList_Lazy_RCU_SHB_st_less;
2211
2212         typedef cc::SplitListMap< rcu_shb, Key, Value,
2213             typename cc::split_list::make_traits<
2214                 cc::split_list::ordered_list<cc::lazy_list_tag>
2215                 ,co::hash< hash >
2216                 ,cc::split_list::dynamic_bucket_table< false >
2217                 ,co::memory_model< co::v::sequential_consistent >
2218                 ,cc::split_list::ordered_list_traits<
2219                     typename cc::lazy_list::make_traits<
2220                         co::less< less >
2221                         ,co::memory_model< co::v::sequential_consistent >
2222                     >::type
2223                 >
2224             >::type
2225         > SplitList_Lazy_RCU_SHB_st_less_seqcst;
2226
2227         //
2228         typedef cc::SplitListMap< rcu_sht, Key, Value,
2229             typename cc::split_list::make_traits<
2230                 cc::split_list::ordered_list<cc::lazy_list_tag>
2231                 ,co::hash< hash >
2232                 ,cc::split_list::ordered_list_traits<
2233                     typename cc::lazy_list::make_traits<
2234                         co::compare< compare >
2235                     >::type
2236                 >
2237             >::type
2238         > SplitList_Lazy_RCU_SHT_dyn_cmp;
2239
2240         typedef cc::SplitListMap< rcu_sht, Key, Value,
2241             typename cc::split_list::make_traits<
2242                 cc::split_list::ordered_list<cc::lazy_list_tag>
2243                 ,co::hash< hash >
2244                 ,co::memory_model< co::v::sequential_consistent >
2245                 ,cc::split_list::ordered_list_traits<
2246                     typename cc::lazy_list::make_traits<
2247                         co::compare< compare >
2248                         ,co::memory_model< co::v::sequential_consistent >
2249                     >::type
2250                 >
2251             >::type
2252         > SplitList_Lazy_RCU_SHT_dyn_cmp_seqcst;
2253
2254         typedef cc::SplitListMap< rcu_sht, Key, Value,
2255             typename cc::split_list::make_traits<
2256                 cc::split_list::ordered_list<cc::lazy_list_tag>
2257                 ,cc::split_list::dynamic_bucket_table< false >
2258                 ,co::hash< hash >
2259                 ,cc::split_list::ordered_list_traits<
2260                     typename cc::lazy_list::make_traits<
2261                         co::compare< compare >
2262                     >::type
2263                 >
2264             >::type
2265         > SplitList_Lazy_RCU_SHT_st_cmp;
2266
2267         typedef cc::SplitListMap< rcu_sht, Key, Value,
2268             typename cc::split_list::make_traits<
2269                 cc::split_list::ordered_list<cc::lazy_list_tag>
2270                 ,co::hash< hash >
2271                 ,cc::split_list::dynamic_bucket_table< false >
2272                 ,co::memory_model< co::v::sequential_consistent >
2273                 ,cc::split_list::ordered_list_traits<
2274                     typename cc::lazy_list::make_traits<
2275                         co::compare< compare >
2276                         ,co::memory_model< co::v::sequential_consistent >
2277                     >::type
2278                 >
2279             >::type
2280         > SplitList_Lazy_RCU_SHT_st_cmp_seqcst;
2281
2282         // RCU_SHT + less
2283         typedef cc::SplitListMap< rcu_sht, Key, Value,
2284             typename cc::split_list::make_traits<
2285                 cc::split_list::ordered_list<cc::lazy_list_tag>
2286                 ,co::hash< hash >
2287                 ,cc::split_list::ordered_list_traits<
2288                     typename cc::lazy_list::make_traits<
2289                         co::less< less >
2290                     >::type
2291                 >
2292             >::type
2293         > SplitList_Lazy_RCU_SHT_dyn_less;
2294
2295         typedef cc::SplitListMap< rcu_sht, Key, Value,
2296             typename cc::split_list::make_traits<
2297                 cc::split_list::ordered_list<cc::lazy_list_tag>
2298                 ,co::hash< hash >
2299                 ,co::memory_model< co::v::sequential_consistent >
2300                 ,cc::split_list::ordered_list_traits<
2301                     typename cc::lazy_list::make_traits<
2302                         co::less< less >
2303                         ,co::memory_model< co::v::sequential_consistent >
2304                     >::type
2305                 >
2306             >::type
2307         > SplitList_Lazy_RCU_SHT_dyn_less_seqcst;
2308
2309         typedef cc::SplitListMap< rcu_sht, Key, Value,
2310             typename cc::split_list::make_traits<
2311                 cc::split_list::ordered_list<cc::lazy_list_tag>
2312                 ,cc::split_list::dynamic_bucket_table< false >
2313                 ,co::hash< hash >
2314                 ,cc::split_list::ordered_list_traits<
2315                     typename cc::lazy_list::make_traits<
2316                         co::less< less >
2317                     >::type
2318                 >
2319             >::type
2320         > SplitList_Lazy_RCU_SHT_st_less;
2321
2322         typedef cc::SplitListMap< rcu_sht, Key, Value,
2323             typename cc::split_list::make_traits<
2324                 cc::split_list::ordered_list<cc::lazy_list_tag>
2325                 ,co::hash< hash >
2326                 ,cc::split_list::dynamic_bucket_table< false >
2327                 ,co::memory_model< co::v::sequential_consistent >
2328                 ,cc::split_list::ordered_list_traits<
2329                     typename cc::lazy_list::make_traits<
2330                         co::less< less >
2331                         ,co::memory_model< co::v::sequential_consistent >
2332                     >::type
2333                 >
2334             >::type
2335         > SplitList_Lazy_RCU_SHT_st_less_seqcst;
2336 #endif
2337
2338         // gc::nogc
2339         typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value,
2340             typename cc::split_list::make_traits<
2341                 cc::split_list::ordered_list<cc::lazy_list_tag>
2342                 ,co::hash< hash >
2343                 ,cc::split_list::ordered_list_traits<
2344                     typename cc::lazy_list::make_traits<
2345                         co::compare< compare >
2346                     >::type
2347                 >
2348             >::type
2349         > > SplitList_Lazy_NOGC_dyn_cmp;
2350
2351         typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value,
2352             typename cc::split_list::make_traits<
2353                 cc::split_list::ordered_list<cc::lazy_list_tag>
2354                 ,co::hash< hash >
2355                 ,co::memory_model< co::v::sequential_consistent >
2356                 ,cc::split_list::ordered_list_traits<
2357                     typename cc::lazy_list::make_traits<
2358                         co::compare< compare >
2359                         ,co::memory_model< co::v::sequential_consistent >
2360                     >::type
2361                 >
2362             >::type
2363         > > SplitList_Lazy_NOGC_dyn_cmp_seqcst;
2364
2365         typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value,
2366             typename cc::split_list::make_traits<
2367                 cc::split_list::ordered_list<cc::lazy_list_tag>
2368                 ,cc::split_list::dynamic_bucket_table< false >
2369                 ,co::hash< hash >
2370                 ,cc::split_list::ordered_list_traits<
2371                     typename cc::lazy_list::make_traits<
2372                         co::compare< compare >
2373                     >::type
2374                 >
2375             >::type
2376         > > SplitList_Lazy_NOGC_st_cmp;
2377
2378         typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value,
2379             typename cc::split_list::make_traits<
2380                 cc::split_list::ordered_list<cc::lazy_list_tag>
2381                 ,co::hash< hash >
2382                 ,cc::split_list::dynamic_bucket_table< false >
2383                 ,co::memory_model< co::v::sequential_consistent >
2384                 ,cc::split_list::ordered_list_traits<
2385                     typename cc::lazy_list::make_traits<
2386                         co::compare< compare >
2387                         ,co::memory_model< co::v::sequential_consistent >
2388                     >::type
2389                 >
2390             >::type
2391         > > SplitList_Lazy_NOGC_st_cmp_seqcst;
2392
2393
2394         // NOGC + less
2395         typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value,
2396             typename cc::split_list::make_traits<
2397                 cc::split_list::ordered_list<cc::lazy_list_tag>
2398                 ,co::hash< hash >
2399                 ,cc::split_list::ordered_list_traits<
2400                     typename cc::lazy_list::make_traits<
2401                         co::less< less >
2402                     >::type
2403                 >
2404             >::type
2405         > > SplitList_Lazy_NOGC_dyn_less;
2406
2407         typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value,
2408             typename cc::split_list::make_traits<
2409                 cc::split_list::ordered_list<cc::lazy_list_tag>
2410                 ,co::hash< hash >
2411                 ,co::memory_model< co::v::sequential_consistent >
2412                 ,cc::split_list::ordered_list_traits<
2413                     typename cc::lazy_list::make_traits<
2414                         co::less< less >
2415                         ,co::memory_model< co::v::sequential_consistent >
2416                     >::type
2417                 >
2418             >::type
2419         > > SplitList_Lazy_NOGC_dyn_less_seqcst;
2420
2421         typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value,
2422             typename cc::split_list::make_traits<
2423                 cc::split_list::ordered_list<cc::lazy_list_tag>
2424                 ,cc::split_list::dynamic_bucket_table< false >
2425                 ,co::hash< hash >
2426                 ,cc::split_list::ordered_list_traits<
2427                     typename cc::lazy_list::make_traits<
2428                         co::less< less >
2429                     >::type
2430                 >
2431             >::type
2432         > > SplitList_Lazy_NOGC_st_less;
2433
2434         typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value,
2435             typename cc::split_list::make_traits<
2436                 cc::split_list::ordered_list<cc::lazy_list_tag>
2437                 ,co::hash< hash >
2438                 ,cc::split_list::dynamic_bucket_table< false >
2439                 ,co::memory_model< co::v::sequential_consistent >
2440                 ,cc::split_list::ordered_list_traits<
2441                     typename cc::lazy_list::make_traits<
2442                         co::less< less >
2443                         ,co::memory_model< co::v::sequential_consistent >
2444                     >::type
2445                 >
2446             >::type
2447         > > SplitList_Lazy_NOGC_st_less_seqcst;
2448
2449
2450         // ***************************************************************************
2451         // StripedHashMap
2452
2453         // for sequential containers
2454         template <class BucketEntry, typename... Options>
2455         class StripedHashMap_seq:
2456             public cc::StripedMap< BucketEntry,
2457                 co::mutex_policy< cc::striped_set::striping<> >
2458                 ,co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
2459                 , Options...
2460             >
2461         {
2462             typedef cc::StripedMap< BucketEntry,
2463                 co::mutex_policy< cc::striped_set::striping<> >
2464                 ,co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
2465                 , Options...
2466             > base_class;
2467             typedef typename base_class::resizing_policy resizing_policy_t;
2468
2469             resizing_policy_t   m_placeHolder;
2470         public:
2471             StripedHashMap_seq( size_t nCapacity, size_t nLoadFactor )
2472                 : base_class( nCapacity / nLoadFactor / 16, *(new(&m_placeHolder) resizing_policy_t( nLoadFactor )) )
2473             {}
2474         };
2475
2476         // for non-sequential ordered containers
2477         template <class BucketEntry, typename... Options>
2478         class StripedHashMap_ord:
2479             public cc::StripedMap< BucketEntry,
2480                 co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
2481                 ,co::mutex_policy< cc::striped_set::striping<> >
2482                 , Options...
2483             >
2484         {
2485             typedef cc::StripedMap< BucketEntry,
2486                co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
2487                 ,co::mutex_policy< cc::striped_set::striping<> >
2488                 , Options...
2489             > base_class;
2490             typedef typename base_class::resizing_policy resizing_policy_t;
2491
2492             resizing_policy_t   m_placeHolder;
2493         public:
2494             StripedHashMap_ord( size_t nCapacity, size_t nLoadFactor )
2495                 : base_class( 0, *(new(&m_placeHolder) resizing_policy_t( nLoadFactor * 1024 )) )
2496             {}
2497         };
2498
2499
2500         typedef StripedHashMap_seq<
2501             std::list< std::pair< Key const, Value > >
2502             , co::hash< hash2 >
2503             , co::less< less >
2504         > StripedMap_list;
2505
2506 #if (CDS_COMPILER == CDS_COMPILER_MSVC || (CDS_COMPILER == CDS_COMPILER_INTEL && CDS_OS_INTERFACE == CDS_OSI_WINDOWS)) && _MSC_VER < 1600
2507         typedef StripedHashMap_ord<
2508             stdext::hash_map< Key, Value, stdext::hash_compare<Key, less > >
2509             , co::hash< hash2 >
2510         > StripedMap_hashmap;
2511 #else
2512         typedef StripedHashMap_ord<
2513             std::unordered_map< Key, Value, hash, equal_to >
2514             , co::hash< hash2 >
2515         > StripedMap_hashmap;
2516 #endif
2517
2518         typedef StripedHashMap_ord<
2519             std::map< Key, Value, less >
2520             , co::hash< hash2 >
2521         > StripedMap_map;
2522
2523         typedef StripedHashMap_ord<
2524             boost::unordered_map< Key, Value, hash, equal_to >
2525             , co::hash< hash2 >
2526         > StripedMap_boost_unordered_map;
2527
2528 #if BOOST_VERSION >= 104800
2529         typedef StripedHashMap_seq<
2530             boost::container::slist< std::pair< Key const, Value > >
2531             , co::hash< hash2 >
2532             , co::less< less >
2533         > StripedMap_slist;
2534
2535         typedef StripedHashMap_seq<
2536             boost::container::list< std::pair< Key const, Value > >
2537             , co::hash< hash2 >
2538             , co::less< less >
2539         > StripedMap_boost_list;
2540
2541         typedef StripedHashMap_ord<
2542             boost::container::map< Key, Value, less >
2543             , co::hash< hash2 >
2544         > StripedMap_boost_map;
2545
2546 //#   ifdef CDS_UNIT_MAP_TYPES_ENABLE_BOOST_FLAT_CONTAINERS
2547         typedef StripedHashMap_ord<
2548             boost::container::flat_map< Key, Value, less >
2549             , co::hash< hash2 >
2550         > StripedMap_boost_flat_map;
2551 //#   endif
2552 #endif  // BOOST_VERSION >= 104800
2553
2554         // ***************************************************************************
2555         // RefinableHashMap
2556
2557         // for sequential containers
2558         template <class BucketEntry, typename... Options>
2559         class RefinableHashMap_seq:
2560             public cc::StripedMap< BucketEntry,
2561                 co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
2562                 ,co::mutex_policy< cc::striped_set::refinable<> >
2563                 , Options...
2564             >
2565         {
2566             typedef cc::StripedMap< BucketEntry,
2567                co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
2568                 ,co::mutex_policy< cc::striped_set::refinable<> >
2569                 , Options...
2570             > base_class;
2571             typedef typename base_class::resizing_policy resizing_policy_t;
2572
2573             resizing_policy_t   m_placeHolder;
2574         public:
2575             RefinableHashMap_seq( size_t nCapacity, size_t nLoadFactor )
2576                 : base_class( nCapacity / nLoadFactor / 16, *(new(&m_placeHolder) resizing_policy_t( nLoadFactor )) )
2577             {}
2578         };
2579
2580         // for non-sequential ordered containers
2581         template <class BucketEntry, typename... Options>
2582         class RefinableHashMap_ord:
2583             public cc::StripedMap< BucketEntry,
2584                 co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
2585                 ,co::mutex_policy< cc::striped_set::refinable<> >
2586                 , Options...
2587             >
2588         {
2589             typedef cc::StripedMap< BucketEntry,
2590                co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
2591                 ,co::mutex_policy< cc::striped_set::refinable<> >
2592                 , Options...
2593             > base_class;
2594             typedef typename base_class::resizing_policy resizing_policy_t;
2595
2596             resizing_policy_t   m_placeHolder;
2597         public:
2598             RefinableHashMap_ord( size_t nCapacity, size_t nLoadFactor )
2599                 : base_class( 0, *(new(&m_placeHolder) resizing_policy_t( nLoadFactor * 1024 )) )
2600             {}
2601         };
2602
2603
2604         typedef RefinableHashMap_seq<
2605             std::list< std::pair< Key const, Value > >
2606             , co::hash< hash2 >
2607             , co::less< less >
2608         > RefinableMap_list;
2609
2610 #if BOOST_VERSION >= 104800
2611         typedef RefinableHashMap_seq<
2612             boost::container::slist< std::pair< Key const, Value > >
2613             , co::hash< hash2 >
2614             , co::less< less >
2615         > RefinableMap_slist;
2616 #endif
2617
2618         typedef RefinableHashMap_ord<
2619             std::map< Key, Value, less >
2620             , co::hash< hash2 >
2621         > RefinableMap_map;
2622
2623 #if (CDS_COMPILER == CDS_COMPILER_MSVC || (CDS_COMPILER == CDS_COMPILER_INTEL && CDS_OS_INTERFACE == CDS_OSI_WINDOWS)) && _MSC_VER < 1600
2624         typedef RefinableHashMap_ord<
2625             stdext::hash_map< Key, Value, stdext::hash_compare<Key, less > >
2626             , co::hash< hash2 >
2627         > RefinableMap_hashmap;
2628 #else
2629         typedef RefinableHashMap_ord<
2630             std::unordered_map< Key, Value, hash, equal_to >
2631             , co::hash< hash2 >
2632         > RefinableMap_hashmap;
2633 #endif
2634         typedef RefinableHashMap_ord<
2635             boost::unordered_map< Key, Value, hash, equal_to >
2636             , co::hash< hash2 >
2637         > RefinableMap_boost_unordered_map;
2638
2639 #if BOOST_VERSION >= 104800
2640         typedef RefinableHashMap_seq<
2641             boost::container::list< std::pair< Key const, Value > >
2642             , co::hash< hash2 >
2643             , co::less< less >
2644         > RefinableMap_boost_list;
2645
2646         typedef RefinableHashMap_ord<
2647             boost::container::map< Key, Value, less >
2648             , co::hash< hash2 >
2649         > RefinableMap_boost_map;
2650
2651 //#   ifdef CDS_UNIT_MAP_TYPES_ENABLE_BOOST_FLAT_CONTAINERS
2652         typedef RefinableHashMap_ord<
2653             boost::container::flat_map< Key, Value, less >
2654             , co::hash< hash2 >
2655         > RefinableMap_boost_flat_map;
2656 //#   endif
2657 #endif // #if BOOST_VERSION >= 104800
2658
2659
2660         // ***************************************************************************
2661         // CuckooMap
2662
2663         typedef CuckooStripedMap< Key, Value,
2664             cc::cuckoo::probeset_type< cc::cuckoo::list >
2665             ,co::equal_to< equal_to >
2666             ,co::hash< std::tuple< hash, hash2 > >
2667         > CuckooStripedMap_list_unord;
2668
2669         typedef CuckooStripedMap< Key, Value,
2670             cc::cuckoo::probeset_type< cc::cuckoo::list >
2671             ,co::equal_to< equal_to >
2672             ,co::hash< std::tuple< hash, hash2 > >
2673             ,co::stat< cc::cuckoo::stat >
2674         > CuckooStripedMap_list_unord_stat;
2675
2676         typedef CuckooStripedMap< Key, Value,
2677             cc::cuckoo::probeset_type< cc::cuckoo::list >
2678             ,co::equal_to< equal_to >
2679             ,co::hash< std::tuple< hash, hash2 > >
2680             ,cc::cuckoo::store_hash< true >
2681         > CuckooStripedMap_list_unord_storehash;
2682
2683         typedef CuckooStripedMap< Key, Value,
2684             cc::cuckoo::probeset_type< cc::cuckoo::list >
2685             ,co::compare< compare >
2686             ,co::hash< std::tuple< hash, hash2 > >
2687         > CuckooStripedMap_list_ord;
2688
2689         typedef CuckooStripedMap< Key, Value,
2690             cc::cuckoo::probeset_type< cc::cuckoo::list >
2691             ,co::compare< compare >
2692             ,co::hash< std::tuple< hash, hash2 > >
2693             ,co::stat< cc::cuckoo::stat >
2694         > CuckooStripedMap_list_ord_stat;
2695
2696         typedef CuckooStripedMap< Key, Value,
2697             cc::cuckoo::probeset_type< cc::cuckoo::list >
2698             ,co::compare< compare >
2699             ,co::hash< std::tuple< hash, hash2 > >
2700             ,cc::cuckoo::store_hash< true >
2701         > CuckooStripedMap_list_ord_storehash;
2702
2703         typedef CuckooStripedMap< Key, Value,
2704             cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
2705             ,co::equal_to< equal_to >
2706             ,co::hash< std::tuple< hash, hash2 > >
2707         > CuckooStripedMap_vector_unord;
2708
2709         typedef CuckooStripedMap< Key, Value,
2710             cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
2711             ,co::equal_to< equal_to >
2712             ,co::hash< std::tuple< hash, hash2 > >
2713             ,co::stat< cc::cuckoo::stat >
2714         > CuckooStripedMap_vector_unord_stat;
2715
2716         typedef CuckooStripedMap< Key, Value,
2717             cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
2718             ,co::equal_to< equal_to >
2719             ,co::hash< std::tuple< hash, hash2 > >
2720             ,cc::cuckoo::store_hash< true >
2721         > CuckooStripedMap_vector_unord_storehash;
2722
2723         typedef CuckooStripedMap< Key, Value,
2724             cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
2725             ,co::compare< compare >
2726             ,co::hash< std::tuple< hash, hash2 > >
2727         > CuckooStripedMap_vector_ord;
2728
2729         typedef CuckooStripedMap< Key, Value,
2730             cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
2731             ,co::compare< compare >
2732             ,co::hash< std::tuple< hash, hash2 > >
2733             ,co::stat< cc::cuckoo::stat >
2734         > CuckooStripedMap_vector_ord_stat;
2735
2736         typedef CuckooStripedMap< Key, Value,
2737             cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
2738             ,co::compare< compare >
2739             ,co::hash< std::tuple< hash, hash2 > >
2740             ,cc::cuckoo::store_hash< true >
2741         > CuckooStripedMap_vector_ord_storehash;
2742
2743         typedef CuckooRefinableMap< Key, Value,
2744             cc::cuckoo::probeset_type< cc::cuckoo::list >
2745             ,co::equal_to< equal_to >
2746             ,co::hash< std::tuple< hash, hash2 > >
2747         > CuckooRefinableMap_list_unord;
2748
2749         typedef CuckooRefinableMap< Key, Value,
2750             cc::cuckoo::probeset_type< cc::cuckoo::list >
2751             ,co::equal_to< equal_to >
2752             ,co::hash< std::tuple< hash, hash2 > >
2753             ,co::stat< cc::cuckoo::stat >
2754         > CuckooRefinableMap_list_unord_stat;
2755
2756         typedef CuckooRefinableMap< Key, Value,
2757             cc::cuckoo::probeset_type< cc::cuckoo::list >
2758             ,co::equal_to< equal_to >
2759             ,co::hash< std::tuple< hash, hash2 > >
2760             ,cc::cuckoo::store_hash< true >
2761         > CuckooRefinableMap_list_unord_storehash;
2762
2763         typedef CuckooRefinableMap< Key, Value,
2764             cc::cuckoo::probeset_type< cc::cuckoo::list >
2765             ,co::compare< compare >
2766             ,co::hash< std::tuple< hash, hash2 > >
2767         > CuckooRefinableMap_list_ord;
2768
2769         typedef CuckooRefinableMap< Key, Value,
2770             cc::cuckoo::probeset_type< cc::cuckoo::list >
2771             ,co::compare< compare >
2772             ,co::hash< std::tuple< hash, hash2 > >
2773             ,co::stat< cc::cuckoo::stat >
2774         > CuckooRefinableMap_list_ord_stat;
2775
2776         typedef CuckooRefinableMap< Key, Value,
2777             cc::cuckoo::probeset_type< cc::cuckoo::list >
2778             ,co::compare< compare >
2779             ,co::hash< std::tuple< hash, hash2 > >
2780             ,cc::cuckoo::store_hash< true >
2781         > CuckooRefinableMap_list_ord_storehash;
2782
2783         typedef CuckooRefinableMap< Key, Value,
2784             cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
2785             ,co::equal_to< equal_to >
2786             ,co::hash< std::tuple< hash, hash2 > >
2787         > CuckooRefinableMap_vector_unord;
2788
2789         typedef CuckooRefinableMap< Key, Value,
2790             cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
2791             ,co::equal_to< equal_to >
2792             ,co::hash< std::tuple< hash, hash2 > >
2793             ,co::stat< cc::cuckoo::stat >
2794         > CuckooRefinableMap_vector_unord_stat;
2795
2796         typedef CuckooRefinableMap< Key, Value,
2797             cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
2798             ,co::equal_to< equal_to >
2799             ,co::hash< std::tuple< hash, hash2 > >
2800             ,cc::cuckoo::store_hash< true >
2801         > CuckooRefinableMap_vector_unord_storehash;
2802
2803         typedef CuckooRefinableMap< Key, Value,
2804             cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
2805             ,co::compare< compare >
2806             ,co::hash< std::tuple< hash, hash2 > >
2807         > CuckooRefinableMap_vector_ord;
2808
2809         typedef CuckooRefinableMap< Key, Value,
2810             cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
2811             ,co::compare< compare >
2812             ,co::hash< std::tuple< hash, hash2 > >
2813             ,co::stat< cc::cuckoo::stat >
2814         > CuckooRefinableMap_vector_ord_stat;
2815
2816         typedef CuckooRefinableMap< Key, Value,
2817             cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
2818             ,co::compare< compare >
2819             ,co::hash< std::tuple< hash, hash2 > >
2820             ,cc::cuckoo::store_hash< true >
2821         > CuckooRefinableMap_vector_ord_storehash;
2822
2823         // ***************************************************************************
2824         // SkipListMap - HP
2825
2826         class traits_SkipListMap_hp_less_pascal: public cc::skip_list::make_traits <
2827                 co::less< less >
2828                 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
2829                 ,co::item_counter< cds::atomicity::item_counter >
2830             >::type
2831         {};
2832         typedef cc::SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_hp_less_pascal > SkipListMap_hp_less_pascal;
2833
2834         class traits_SkipListMap_hp_less_pascal_seqcst: public cc::skip_list::make_traits <
2835                 co::less< less >
2836                 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
2837                 ,co::memory_model< co::v::sequential_consistent >
2838                 ,co::item_counter< cds::atomicity::item_counter >
2839             >::type
2840         {};
2841         typedef cc::SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_hp_less_pascal_seqcst > SkipListMap_hp_less_pascal_seqcst;
2842
2843         class traits_SkipListMap_hp_less_pascal_stat: public cc::skip_list::make_traits <
2844                 co::less< less >
2845                 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
2846                 ,co::stat< cc::skip_list::stat<> >
2847                 ,co::item_counter< cds::atomicity::item_counter >
2848             >::type
2849         {};
2850         typedef cc::SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_hp_less_pascal_stat > SkipListMap_hp_less_pascal_stat;
2851
2852         class traits_SkipListMap_hp_cmp_pascal: public cc::skip_list::make_traits <
2853                 co::compare< compare >
2854                 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
2855                 ,co::item_counter< cds::atomicity::item_counter >
2856             >::type
2857         {};
2858         typedef cc::SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_hp_cmp_pascal > SkipListMap_hp_cmp_pascal;
2859
2860         class traits_SkipListMap_hp_cmp_pascal_stat: public cc::skip_list::make_traits <
2861                 co::compare< compare >
2862                 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
2863                 ,co::stat< cc::skip_list::stat<> >
2864                 ,co::item_counter< cds::atomicity::item_counter >
2865             >::type
2866         {};
2867         typedef cc::SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_hp_cmp_pascal_stat > SkipListMap_hp_cmp_pascal_stat;
2868
2869         class traits_SkipListMap_hp_less_xorshift: public cc::skip_list::make_traits <
2870                 co::less< less >
2871                 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
2872                 ,co::item_counter< cds::atomicity::item_counter >
2873             >::type
2874         {};
2875         typedef cc::SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_hp_less_xorshift > SkipListMap_hp_less_xorshift;
2876
2877         class traits_SkipListMap_hp_less_xorshift_stat: public cc::skip_list::make_traits <
2878                 co::less< less >
2879                 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
2880                 ,co::stat< cc::skip_list::stat<> >
2881                 ,co::item_counter< cds::atomicity::item_counter >
2882             >::type
2883         {};
2884         typedef cc::SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_hp_less_xorshift_stat > SkipListMap_hp_less_xorshift_stat;
2885
2886         class traits_SkipListMap_hp_cmp_xorshift: public cc::skip_list::make_traits <
2887                 co::compare< compare >
2888                 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
2889                 ,co::item_counter< cds::atomicity::item_counter >
2890             >::type
2891         {};
2892         typedef cc::SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_hp_cmp_xorshift > SkipListMap_hp_cmp_xorshift;
2893
2894         class traits_SkipListMap_hp_cmp_xorshift_stat: public cc::skip_list::make_traits <
2895                 co::compare< compare >
2896                 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
2897                 ,co::stat< cc::skip_list::stat<> >
2898                 ,co::item_counter< cds::atomicity::item_counter >
2899             >::type
2900         {};
2901         typedef cc::SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_hp_cmp_xorshift_stat > SkipListMap_hp_cmp_xorshift_stat;
2902
2903         // ***************************************************************************
2904         // SkipListMap - DHP
2905
2906         class traits_SkipListMap_ptb_less_pascal: public cc::skip_list::make_traits <
2907                 co::less< less >
2908                 ,co::item_counter< cds::atomicity::item_counter >
2909                 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
2910             >::type
2911         {};
2912         typedef cc::SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_ptb_less_pascal > SkipListMap_ptb_less_pascal;
2913
2914         class traits_SkipListMap_ptb_less_pascal_seqcst: public cc::skip_list::make_traits <
2915                 co::less< less >
2916                 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
2917                 ,co::memory_model< co::v::sequential_consistent >
2918                 ,co::item_counter< cds::atomicity::item_counter >
2919             >::type
2920         {};
2921         typedef cc::SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_ptb_less_pascal_seqcst > SkipListMap_ptb_less_pascal_seqcst;
2922
2923         class traits_SkipListMap_ptb_less_pascal_stat: public cc::skip_list::make_traits <
2924                 co::less< less >
2925                 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
2926                 ,co::stat< cc::skip_list::stat<> >
2927                 ,co::item_counter< cds::atomicity::item_counter >
2928             >::type
2929         {};
2930         typedef cc::SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_ptb_less_pascal_stat > SkipListMap_ptb_less_pascal_stat;
2931
2932         class traits_SkipListMap_ptb_cmp_pascal: public cc::skip_list::make_traits <
2933                 co::compare< compare >
2934                 ,co::item_counter< cds::atomicity::item_counter >
2935                 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
2936             >::type
2937         {};
2938         typedef cc::SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_ptb_cmp_pascal > SkipListMap_ptb_cmp_pascal;
2939
2940         class traits_SkipListMap_ptb_cmp_pascal_stat: public cc::skip_list::make_traits <
2941                 co::compare< compare >
2942                 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
2943                 ,co::item_counter< cds::atomicity::item_counter >
2944                 ,co::stat< cc::skip_list::stat<> >
2945             >::type
2946         {};
2947         typedef cc::SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_ptb_cmp_pascal_stat > SkipListMap_ptb_cmp_pascal_stat;
2948
2949         class traits_SkipListMap_ptb_less_xorshift: public cc::skip_list::make_traits <
2950                 co::less< less >
2951                 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
2952                 ,co::item_counter< cds::atomicity::item_counter >
2953             >::type
2954         {};
2955         typedef cc::SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_ptb_less_xorshift > SkipListMap_ptb_less_xorshift;
2956
2957         class traits_SkipListMap_ptb_less_xorshift_stat: public cc::skip_list::make_traits <
2958                 co::less< less >
2959                 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
2960                 ,co::stat< cc::skip_list::stat<> >
2961                 ,co::item_counter< cds::atomicity::item_counter >
2962             >::type
2963         {};
2964         typedef cc::SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_ptb_less_xorshift_stat > SkipListMap_ptb_less_xorshift_stat;
2965
2966         class traits_SkipListMap_ptb_cmp_xorshift: public cc::skip_list::make_traits <
2967                 co::compare< compare >
2968                 ,co::item_counter< cds::atomicity::item_counter >
2969                 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
2970             >::type
2971         {};
2972         typedef cc::SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_ptb_cmp_xorshift > SkipListMap_ptb_cmp_xorshift;
2973
2974         class traits_SkipListMap_ptb_cmp_xorshift_stat: public cc::skip_list::make_traits <
2975                 co::compare< compare >
2976                 ,co::item_counter< cds::atomicity::item_counter >
2977                 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
2978                 ,co::stat< cc::skip_list::stat<> >
2979             >::type
2980         {};
2981         typedef cc::SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_ptb_cmp_xorshift_stat > SkipListMap_ptb_cmp_xorshift_stat;
2982
2983         // ***************************************************************************
2984         // SkipListMap< gc::nogc >
2985
2986         class traits_SkipListMap_nogc_less_pascal: public cc::skip_list::make_traits <
2987                 co::less< less >
2988                 ,co::item_counter< cds::atomicity::item_counter >
2989                 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
2990             >::type
2991         {};
2992         typedef NogcMapWrapper_dctor<
2993             cc::SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_nogc_less_pascal >
2994         > SkipListMap_nogc_less_pascal;
2995
2996         class traits_SkipListMap_nogc_less_pascal_seqcst: public cc::skip_list::make_traits <
2997                 co::less< less >
2998                 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
2999                 ,co::memory_model< co::v::sequential_consistent >
3000                 ,co::item_counter< cds::atomicity::item_counter >
3001             >::type
3002         {};
3003         typedef NogcMapWrapper_dctor<
3004             cc::SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_nogc_less_pascal_seqcst >
3005         > SkipListMap_nogc_less_pascal_seqcst;
3006
3007         class traits_SkipListMap_nogc_less_pascal_stat: public cc::skip_list::make_traits <
3008                 co::less< less >
3009                 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3010                 ,co::stat< cc::skip_list::stat<> >
3011                 ,co::item_counter< cds::atomicity::item_counter >
3012             >::type
3013         {};
3014         typedef NogcMapWrapper_dctor<
3015             cc::SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_nogc_less_pascal_stat >
3016         > SkipListMap_nogc_less_pascal_stat;
3017
3018         class traits_SkipListMap_nogc_cmp_pascal: public cc::skip_list::make_traits <
3019                 co::compare< compare >
3020                 ,co::item_counter< cds::atomicity::item_counter >
3021                 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3022             >::type
3023         {};
3024         typedef NogcMapWrapper_dctor<
3025             cc::SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_nogc_cmp_pascal >
3026         > SkipListMap_nogc_cmp_pascal;
3027
3028         class traits_SkipListMap_nogc_cmp_pascal_stat: public cc::skip_list::make_traits <
3029                 co::compare< compare >
3030                 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3031                 ,co::item_counter< cds::atomicity::item_counter >
3032                 ,co::stat< cc::skip_list::stat<> >
3033             >::type
3034         {};
3035         typedef NogcMapWrapper_dctor<
3036             cc::SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_nogc_cmp_pascal_stat >
3037         > SkipListMap_nogc_cmp_pascal_stat;
3038
3039         class traits_SkipListMap_nogc_less_xorshift: public cc::skip_list::make_traits <
3040                 co::less< less >
3041                 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3042                 ,co::item_counter< cds::atomicity::item_counter >
3043             >::type
3044         {};
3045         typedef NogcMapWrapper_dctor<
3046             cc::SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_nogc_less_xorshift >
3047         > SkipListMap_nogc_less_xorshift;
3048
3049         class traits_SkipListMap_nogc_less_xorshift_stat: public cc::skip_list::make_traits <
3050                 co::less< less >
3051                 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3052                 ,co::stat< cc::skip_list::stat<> >
3053                 ,co::item_counter< cds::atomicity::item_counter >
3054             >::type
3055         {};
3056         typedef NogcMapWrapper_dctor<
3057             cc::SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_nogc_less_xorshift_stat >
3058         > SkipListMap_nogc_less_xorshift_stat;
3059
3060         class traits_SkipListMap_nogc_cmp_xorshift: public cc::skip_list::make_traits <
3061                 co::compare< compare >
3062                 ,co::item_counter< cds::atomicity::item_counter >
3063                 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3064             >::type
3065         {};
3066         typedef NogcMapWrapper_dctor< cc::SkipListMap<
3067             cds::gc::nogc, Key, Value, traits_SkipListMap_nogc_cmp_xorshift >
3068         > SkipListMap_nogc_cmp_xorshift;
3069
3070         class traits_SkipListMap_nogc_cmp_xorshift_stat: public cc::skip_list::make_traits <
3071                 co::compare< compare >
3072                 ,co::item_counter< cds::atomicity::item_counter >
3073                 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3074                 ,co::stat< cc::skip_list::stat<> >
3075             >::type
3076         {};
3077         typedef NogcMapWrapper_dctor<
3078             cc::SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_nogc_cmp_xorshift_stat >
3079         > SkipListMap_nogc_cmp_xorshift_stat;
3080
3081         // ***************************************************************************
3082         // SkipListMap - RCU general_instant
3083
3084         class traits_SkipListMap_rcu_gpi_less_pascal: public cc::skip_list::make_traits <
3085                 co::less< less >
3086                 ,co::item_counter< cds::atomicity::item_counter >
3087                 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3088             >::type
3089         {};
3090         typedef cc::SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_rcu_gpi_less_pascal > SkipListMap_rcu_gpi_less_pascal;
3091
3092         class traits_SkipListMap_rcu_gpi_less_pascal_seqcst: public cc::skip_list::make_traits <
3093                 co::less< less >
3094                 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3095                 ,co::memory_model< co::v::sequential_consistent >
3096                 ,co::item_counter< cds::atomicity::item_counter >
3097             >::type
3098         {};
3099         typedef cc::SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_rcu_gpi_less_pascal_seqcst > SkipListMap_rcu_gpi_less_pascal_seqcst;
3100
3101         class traits_SkipListMap_rcu_gpi_less_pascal_stat: public cc::skip_list::make_traits <
3102                 co::less< less >
3103                 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3104                 ,co::stat< cc::skip_list::stat<> >
3105                 ,co::item_counter< cds::atomicity::item_counter >
3106             >::type
3107         {};
3108         typedef cc::SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_rcu_gpi_less_pascal_stat > SkipListMap_rcu_gpi_less_pascal_stat;
3109
3110         class traits_SkipListMap_rcu_gpi_cmp_pascal: public cc::skip_list::make_traits <
3111                 co::compare< compare >
3112                 ,co::item_counter< cds::atomicity::item_counter >
3113                 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3114             >::type
3115         {};
3116         typedef cc::SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_rcu_gpi_cmp_pascal > SkipListMap_rcu_gpi_cmp_pascal;
3117
3118         class traits_SkipListMap_rcu_gpi_cmp_pascal_stat: public cc::skip_list::make_traits <
3119                 co::compare< compare >
3120                 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3121                 ,co::item_counter< cds::atomicity::item_counter >
3122                 ,co::stat< cc::skip_list::stat<> >
3123             >::type
3124         {};
3125         typedef cc::SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_rcu_gpi_cmp_pascal_stat > SkipListMap_rcu_gpi_cmp_pascal_stat;
3126
3127         class traits_SkipListMap_rcu_gpi_less_xorshift: public cc::skip_list::make_traits <
3128                 co::less< less >
3129                 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3130                 ,co::item_counter< cds::atomicity::item_counter >
3131             >::type
3132         {};
3133         typedef cc::SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_rcu_gpi_less_xorshift > SkipListMap_rcu_gpi_less_xorshift;
3134
3135         class traits_SkipListMap_rcu_gpi_less_xorshift_stat: public cc::skip_list::make_traits <
3136                 co::less< less >
3137                 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3138                 ,co::stat< cc::skip_list::stat<> >
3139                 ,co::item_counter< cds::atomicity::item_counter >
3140             >::type
3141         {};
3142         typedef cc::SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_rcu_gpi_less_xorshift_stat > SkipListMap_rcu_gpi_less_xorshift_stat;
3143
3144         class traits_SkipListMap_rcu_gpi_cmp_xorshift: public cc::skip_list::make_traits <
3145                 co::compare< compare >
3146                 ,co::item_counter< cds::atomicity::item_counter >
3147                 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3148             >::type
3149         {};
3150         typedef cc::SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_rcu_gpi_cmp_xorshift > SkipListMap_rcu_gpi_cmp_xorshift;
3151
3152         class traits_SkipListMap_rcu_gpi_cmp_xorshift_stat: public cc::skip_list::make_traits <
3153                 co::compare< compare >
3154                 ,co::item_counter< cds::atomicity::item_counter >
3155                 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3156                 ,co::stat< cc::skip_list::stat<> >
3157             >::type
3158         {};
3159         typedef cc::SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_rcu_gpi_cmp_xorshift_stat > SkipListMap_rcu_gpi_cmp_xorshift_stat;
3160
3161         // ***************************************************************************
3162         // SkipListMap - RCU general_buffered
3163
3164         class traits_SkipListMap_rcu_gpb_less_pascal: public cc::skip_list::make_traits <
3165                 co::less< less >
3166                 ,co::item_counter< cds::atomicity::item_counter >
3167                 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3168             >::type
3169         {};
3170         typedef cc::SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_rcu_gpb_less_pascal > SkipListMap_rcu_gpb_less_pascal;
3171
3172         class traits_SkipListMap_rcu_gpb_less_pascal_seqcst: public cc::skip_list::make_traits <
3173                 co::less< less >
3174                 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3175                 ,co::memory_model< co::v::sequential_consistent >
3176                 ,co::item_counter< cds::atomicity::item_counter >
3177             >::type
3178         {};
3179         typedef cc::SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_rcu_gpb_less_pascal_seqcst > SkipListMap_rcu_gpb_less_pascal_seqcst;
3180
3181         class traits_SkipListMap_rcu_gpb_less_pascal_stat: public cc::skip_list::make_traits <
3182                 co::less< less >
3183                 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3184                 ,co::stat< cc::skip_list::stat<> >
3185                 ,co::item_counter< cds::atomicity::item_counter >
3186             >::type
3187         {};
3188         typedef cc::SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_rcu_gpb_less_pascal_stat > SkipListMap_rcu_gpb_less_pascal_stat;
3189
3190         class traits_SkipListMap_rcu_gpb_cmp_pascal: public cc::skip_list::make_traits <
3191                 co::compare< compare >
3192                 ,co::item_counter< cds::atomicity::item_counter >
3193                 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3194             >::type
3195         {};
3196         typedef cc::SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_rcu_gpb_cmp_pascal > SkipListMap_rcu_gpb_cmp_pascal;
3197
3198         class traits_SkipListMap_rcu_gpb_cmp_pascal_stat: public cc::skip_list::make_traits <
3199                 co::compare< compare >
3200                 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3201                 ,co::item_counter< cds::atomicity::item_counter >
3202                 ,co::stat< cc::skip_list::stat<> >
3203             >::type
3204         {};
3205         typedef cc::SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_rcu_gpb_cmp_pascal_stat > SkipListMap_rcu_gpb_cmp_pascal_stat;
3206
3207         class traits_SkipListMap_rcu_gpb_less_xorshift: public cc::skip_list::make_traits <
3208                 co::less< less >
3209                 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3210                 ,co::item_counter< cds::atomicity::item_counter >
3211             >::type
3212         {};
3213         typedef cc::SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_rcu_gpb_less_xorshift > SkipListMap_rcu_gpb_less_xorshift;
3214
3215         class traits_SkipListMap_rcu_gpb_less_xorshift_stat: public cc::skip_list::make_traits <
3216                 co::less< less >
3217                 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3218                 ,co::stat< cc::skip_list::stat<> >
3219                 ,co::item_counter< cds::atomicity::item_counter >
3220             >::type
3221         {};
3222         typedef cc::SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_rcu_gpb_less_xorshift_stat > SkipListMap_rcu_gpb_less_xorshift_stat;
3223
3224         class traits_SkipListMap_rcu_gpb_cmp_xorshift: public cc::skip_list::make_traits <
3225                 co::compare< compare >
3226                 ,co::item_counter< cds::atomicity::item_counter >
3227                 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3228             >::type
3229         {};
3230         typedef cc::SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_rcu_gpb_cmp_xorshift > SkipListMap_rcu_gpb_cmp_xorshift;
3231
3232         class traits_SkipListMap_rcu_gpb_cmp_xorshift_stat: public cc::skip_list::make_traits <
3233                 co::compare< compare >
3234                 ,co::item_counter< cds::atomicity::item_counter >
3235                 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3236                 ,co::stat< cc::skip_list::stat<> >
3237             >::type
3238         {};
3239         typedef cc::SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_rcu_gpb_cmp_xorshift_stat > SkipListMap_rcu_gpb_cmp_xorshift_stat;
3240
3241         // ***************************************************************************
3242         // SkipListMap - RCU general_threaded
3243
3244         class traits_SkipListMap_rcu_gpt_less_pascal: public cc::skip_list::make_traits <
3245                 co::less< less >
3246                 ,co::item_counter< cds::atomicity::item_counter >
3247                 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3248             >::type
3249         {};
3250         typedef cc::SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_rcu_gpt_less_pascal > SkipListMap_rcu_gpt_less_pascal;
3251
3252         class traits_SkipListMap_rcu_gpt_less_pascal_seqcst: public cc::skip_list::make_traits <
3253                 co::less< less >
3254                 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3255                 ,co::memory_model< co::v::sequential_consistent >
3256                 ,co::item_counter< cds::atomicity::item_counter >
3257             >::type
3258         {};
3259         typedef cc::SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_rcu_gpt_less_pascal_seqcst > SkipListMap_rcu_gpt_less_pascal_seqcst;
3260
3261         class traits_SkipListMap_rcu_gpt_less_pascal_stat: public cc::skip_list::make_traits <
3262                 co::less< less >
3263                 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3264                 ,co::stat< cc::skip_list::stat<> >
3265                 ,co::item_counter< cds::atomicity::item_counter >
3266             >::type
3267         {};
3268         typedef cc::SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_rcu_gpt_less_pascal_stat > SkipListMap_rcu_gpt_less_pascal_stat;
3269
3270         class traits_SkipListMap_rcu_gpt_cmp_pascal: public cc::skip_list::make_traits <
3271                 co::compare< compare >
3272                 ,co::item_counter< cds::atomicity::item_counter >
3273                 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3274             >::type
3275         {};
3276         typedef cc::SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_rcu_gpt_cmp_pascal > SkipListMap_rcu_gpt_cmp_pascal;
3277
3278         class traits_SkipListMap_rcu_gpt_cmp_pascal_stat: public cc::skip_list::make_traits <
3279                 co::compare< compare >
3280                 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3281                 ,co::item_counter< cds::atomicity::item_counter >
3282                 ,co::stat< cc::skip_list::stat<> >
3283             >::type
3284         {};
3285         typedef cc::SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_rcu_gpt_cmp_pascal_stat > SkipListMap_rcu_gpt_cmp_pascal_stat;
3286
3287         class traits_SkipListMap_rcu_gpt_less_xorshift: public cc::skip_list::make_traits <
3288                 co::less< less >
3289                 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3290                 ,co::item_counter< cds::atomicity::item_counter >
3291             >::type
3292         {};
3293         typedef cc::SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_rcu_gpt_less_xorshift > SkipListMap_rcu_gpt_less_xorshift;
3294
3295         class traits_SkipListMap_rcu_gpt_less_xorshift_stat: public cc::skip_list::make_traits <
3296                 co::less< less >
3297                 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3298                 ,co::stat< cc::skip_list::stat<> >
3299                 ,co::item_counter< cds::atomicity::item_counter >
3300             >::type
3301         {};
3302         typedef cc::SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_rcu_gpt_less_xorshift_stat > SkipListMap_rcu_gpt_less_xorshift_stat;
3303
3304         class traits_SkipListMap_rcu_gpt_cmp_xorshift: public cc::skip_list::make_traits <
3305                 co::compare< compare >
3306                 ,co::item_counter< cds::atomicity::item_counter >
3307                 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3308             >::type
3309         {};
3310         typedef cc::SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_rcu_gpt_cmp_xorshift > SkipListMap_rcu_gpt_cmp_xorshift;
3311
3312         class traits_SkipListMap_rcu_gpt_cmp_xorshift_stat: public cc::skip_list::make_traits <
3313                 co::compare< compare >
3314                 ,co::item_counter< cds::atomicity::item_counter >
3315                 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3316                 ,co::stat< cc::skip_list::stat<> >
3317             >::type
3318         {};
3319         typedef cc::SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_rcu_gpt_cmp_xorshift_stat > SkipListMap_rcu_gpt_cmp_xorshift_stat;
3320
3321 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
3322         // ***************************************************************************
3323         // SkipListMap - RCU signal_buffered
3324
3325         class traits_SkipListMap_rcu_shb_less_pascal: public cc::skip_list::make_traits <
3326                 co::less< less >
3327                 ,co::item_counter< cds::atomicity::item_counter >
3328                 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3329             >::type
3330         {};
3331         typedef cc::SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_rcu_shb_less_pascal > SkipListMap_rcu_shb_less_pascal;
3332
3333         class traits_SkipListMap_rcu_shb_less_pascal_seqcst: public cc::skip_list::make_traits <
3334                 co::less< less >
3335                 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3336                 ,co::memory_model< co::v::sequential_consistent >
3337                 ,co::item_counter< cds::atomicity::item_counter >
3338             >::type
3339         {};
3340         typedef cc::SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_rcu_shb_less_pascal_seqcst > SkipListMap_rcu_shb_less_pascal_seqcst;
3341
3342         class traits_SkipListMap_rcu_shb_less_pascal_stat: public cc::skip_list::make_traits <
3343                 co::less< less >
3344                 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3345                 ,co::stat< cc::skip_list::stat<> >
3346                 ,co::item_counter< cds::atomicity::item_counter >
3347             >::type
3348         {};
3349         typedef cc::SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_rcu_shb_less_pascal_stat > SkipListMap_rcu_shb_less_pascal_stat;
3350
3351         class traits_SkipListMap_rcu_shb_cmp_pascal: public cc::skip_list::make_traits <
3352                 co::compare< compare >
3353                 ,co::item_counter< cds::atomicity::item_counter >
3354                 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3355             >::type
3356         {};
3357         typedef cc::SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_rcu_shb_cmp_pascal > SkipListMap_rcu_shb_cmp_pascal;
3358
3359         class traits_SkipListMap_rcu_shb_cmp_pascal_stat: public cc::skip_list::make_traits <
3360                 co::compare< compare >
3361                 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3362                 ,co::item_counter< cds::atomicity::item_counter >
3363                 ,co::stat< cc::skip_list::stat<> >
3364             >::type
3365         {};
3366         typedef cc::SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_rcu_shb_cmp_pascal_stat > SkipListMap_rcu_shb_cmp_pascal_stat;
3367
3368         class traits_SkipListMap_rcu_shb_less_xorshift: public cc::skip_list::make_traits <
3369                 co::less< less >
3370                 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3371                 ,co::item_counter< cds::atomicity::item_counter >
3372             >::type
3373         {};
3374         typedef cc::SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_rcu_shb_less_xorshift > SkipListMap_rcu_shb_less_xorshift;
3375
3376         class traits_SkipListMap_rcu_shb_less_xorshift_stat: public cc::skip_list::make_traits <
3377                 co::less< less >
3378                 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3379                 ,co::stat< cc::skip_list::stat<> >
3380                 ,co::item_counter< cds::atomicity::item_counter >
3381             >::type
3382         {};
3383         typedef cc::SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_rcu_shb_less_xorshift_stat > SkipListMap_rcu_shb_less_xorshift_stat;
3384
3385         class traits_SkipListMap_rcu_shb_cmp_xorshift: public cc::skip_list::make_traits <
3386                 co::compare< compare >
3387                 ,co::item_counter< cds::atomicity::item_counter >
3388                 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3389             >::type
3390         {};
3391         typedef cc::SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_rcu_shb_cmp_xorshift > SkipListMap_rcu_shb_cmp_xorshift;
3392
3393         class traits_SkipListMap_rcu_shb_cmp_xorshift_stat: public cc::skip_list::make_traits <
3394                 co::compare< compare >
3395                 ,co::item_counter< cds::atomicity::item_counter >
3396                 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3397                 ,co::stat< cc::skip_list::stat<> >
3398             >::type
3399         {};
3400         typedef cc::SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_rcu_shb_cmp_xorshift_stat > SkipListMap_rcu_shb_cmp_xorshift_stat;
3401
3402         // ***************************************************************************
3403         // SkipListMap - RCU signal_threaded
3404
3405         class traits_SkipListMap_rcu_sht_less_pascal: public cc::skip_list::make_traits <
3406                 co::less< less >
3407                 ,co::item_counter< cds::atomicity::item_counter >
3408                 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3409             >::type
3410         {};
3411         typedef cc::SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_rcu_sht_less_pascal > SkipListMap_rcu_sht_less_pascal;
3412
3413         class traits_SkipListMap_rcu_sht_less_pascal_seqcst: public cc::skip_list::make_traits <
3414                 co::less< less >
3415                 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3416                 ,co::memory_model< co::v::sequential_consistent >
3417                 ,co::item_counter< cds::atomicity::item_counter >
3418             >::type
3419         {};
3420         typedef cc::SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_rcu_sht_less_pascal_seqcst > SkipListMap_rcu_sht_less_pascal_seqcst;
3421
3422         class traits_SkipListMap_rcu_sht_less_pascal_stat: public cc::skip_list::make_traits <
3423                 co::less< less >
3424                 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3425                 ,co::stat< cc::skip_list::stat<> >
3426                 ,co::item_counter< cds::atomicity::item_counter >
3427             >::type
3428         {};
3429         typedef cc::SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_rcu_sht_less_pascal_stat > SkipListMap_rcu_sht_less_pascal_stat;
3430
3431         class traits_SkipListMap_rcu_sht_cmp_pascal: public cc::skip_list::make_traits <
3432                 co::compare< compare >
3433                 ,co::item_counter< cds::atomicity::item_counter >
3434                 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3435             >::type
3436         {};
3437         typedef cc::SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_rcu_sht_cmp_pascal > SkipListMap_rcu_sht_cmp_pascal;
3438
3439         class traits_SkipListMap_rcu_sht_cmp_pascal_stat: public cc::skip_list::make_traits <
3440                 co::compare< compare >
3441                 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3442                 ,co::item_counter< cds::atomicity::item_counter >
3443                 ,co::stat< cc::skip_list::stat<> >
3444             >::type
3445         {};
3446         typedef cc::SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_rcu_sht_cmp_pascal_stat > SkipListMap_rcu_sht_cmp_pascal_stat;
3447
3448         class traits_SkipListMap_rcu_sht_less_xorshift: public cc::skip_list::make_traits <
3449                 co::less< less >
3450                 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3451                 ,co::item_counter< cds::atomicity::item_counter >
3452             >::type
3453         {};
3454         typedef cc::SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_rcu_sht_less_xorshift > SkipListMap_rcu_sht_less_xorshift;
3455
3456         class traits_SkipListMap_rcu_sht_less_xorshift_stat: public cc::skip_list::make_traits <
3457                 co::less< less >
3458                 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3459                 ,co::stat< cc::skip_list::stat<> >
3460                 ,co::item_counter< cds::atomicity::item_counter >
3461             >::type
3462         {};
3463         typedef cc::SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_rcu_sht_less_xorshift_stat > SkipListMap_rcu_sht_less_xorshift_stat;
3464
3465         class traits_SkipListMap_rcu_sht_cmp_xorshift: public cc::skip_list::make_traits <
3466                 co::compare< compare >
3467                 ,co::item_counter< cds::atomicity::item_counter >
3468                 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3469             >::type
3470         {};
3471         typedef cc::SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_rcu_sht_cmp_xorshift > SkipListMap_rcu_sht_cmp_xorshift;
3472
3473         class traits_SkipListMap_rcu_sht_cmp_xorshift_stat: public cc::skip_list::make_traits <
3474                 co::compare< compare >
3475                 ,co::item_counter< cds::atomicity::item_counter >
3476                 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3477                 ,co::stat< cc::skip_list::stat<> >
3478             >::type
3479         {};
3480         typedef cc::SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_rcu_sht_cmp_xorshift_stat > SkipListMap_rcu_sht_cmp_xorshift_stat;
3481 #endif
3482
3483
3484         // ***************************************************************************
3485         // EllenBinTreeMap
3486         struct ellen_bintree_props {
3487             struct hp_gc {
3488                 typedef cc::ellen_bintree::map_node<cds::gc::HP, Key, Value>        leaf_node;
3489                 typedef cc::ellen_bintree::internal_node< Key, leaf_node >          internal_node;
3490                 typedef cc::ellen_bintree::update_desc< leaf_node, internal_node >  update_desc;
3491             };
3492             struct ptb_gc {
3493                 typedef cc::ellen_bintree::map_node<cds::gc::DHP, Key, Value>       leaf_node;
3494                 typedef cc::ellen_bintree::internal_node< Key, leaf_node >          internal_node;
3495                 typedef cc::ellen_bintree::update_desc< leaf_node, internal_node >  update_desc;
3496             };
3497             struct gpi {
3498                 typedef cc::ellen_bintree::map_node<rcu_gpi, Key, Value>            leaf_node;
3499                 typedef cc::ellen_bintree::internal_node< Key, leaf_node >          internal_node;
3500                 typedef cc::ellen_bintree::update_desc< leaf_node, internal_node >  update_desc;
3501             };
3502             struct gpb {
3503                 typedef cc::ellen_bintree::map_node<rcu_gpb, Key, Value>            leaf_node;
3504                 typedef cc::ellen_bintree::internal_node< Key, leaf_node >          internal_node;
3505                 typedef cc::ellen_bintree::update_desc< leaf_node, internal_node >  update_desc;
3506             };
3507             struct gpt {
3508                 typedef cc::ellen_bintree::map_node<rcu_gpt, Key, Value>            leaf_node;
3509                 typedef cc::ellen_bintree::internal_node< Key, leaf_node >          internal_node;
3510                 typedef cc::ellen_bintree::update_desc< leaf_node, internal_node >  update_desc;
3511             };
3512 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
3513             struct shb {
3514                 typedef cc::ellen_bintree::map_node<rcu_shb, Key, Value>            leaf_node;
3515                 typedef cc::ellen_bintree::internal_node< Key, leaf_node >          internal_node;
3516                 typedef cc::ellen_bintree::update_desc< leaf_node, internal_node >  update_desc;
3517             };
3518             struct sht {
3519                 typedef cc::ellen_bintree::map_node<rcu_sht, Key, Value>            leaf_node;
3520                 typedef cc::ellen_bintree::internal_node< Key, leaf_node >          internal_node;
3521                 typedef cc::ellen_bintree::update_desc< leaf_node, internal_node >  update_desc;
3522             };
3523 #endif
3524         };
3525
3526
3527         // ***************************************************************************
3528         // EllenBinTreeMap - HP
3529
3530         struct traits_EllenBinTreeMap_hp: public cc::ellen_bintree::make_set_traits<
3531                 co::less< less >
3532                 ,cc::ellen_bintree::update_desc_allocator<
3533                     cds::memory::pool_allocator< typename ellen_bintree_props::hp_gc::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
3534                 >
3535                 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
3536                 ,co::item_counter< cds::atomicity::item_counter >
3537             >::type
3538         {};
3539         typedef cc::EllenBinTreeMap< cds::gc::HP, Key, Value, traits_EllenBinTreeMap_hp >EllenBinTreeMap_hp;
3540
3541         struct traits_EllenBinTreeMap_hp_stat: public cc::ellen_bintree::make_set_traits<
3542                 co::less< less >
3543                 ,cc::ellen_bintree::update_desc_allocator<
3544                     cds::memory::pool_allocator< typename ellen_bintree_props::hp_gc::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
3545                 >
3546                 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
3547                 ,co::stat< cc::ellen_bintree::stat<> >
3548                 ,co::item_counter< cds::atomicity::item_counter >
3549             >::type
3550         {};
3551         typedef cc::EllenBinTreeMap< cds::gc::HP, Key, Value, traits_EllenBinTreeMap_hp_stat > EllenBinTreeMap_hp_stat;
3552
3553         // ***************************************************************************
3554         // EllenBinTreeMap - DHP
3555
3556         struct traits_EllenBinTreeMap_ptb: public cc::ellen_bintree::make_set_traits<
3557                 co::less< less >
3558                 ,cc::ellen_bintree::update_desc_allocator<
3559                     cds::memory::pool_allocator< typename ellen_bintree_props::ptb_gc::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
3560                 >
3561                 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
3562                 ,co::item_counter< cds::atomicity::item_counter >
3563             >::type
3564         {};
3565         typedef cc::EllenBinTreeMap< cds::gc::DHP, Key, Value, traits_EllenBinTreeMap_ptb> EllenBinTreeMap_ptb;
3566
3567         struct traits_EllenBinTreeMap_ptb_stat: public cc::ellen_bintree::make_set_traits<
3568                 co::less< less >
3569                 ,cc::ellen_bintree::update_desc_allocator<
3570                     cds::memory::pool_allocator< typename ellen_bintree_props::ptb_gc::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
3571                 >
3572                 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
3573                 ,co::stat< cc::ellen_bintree::stat<> >
3574                 ,co::item_counter< cds::atomicity::item_counter >
3575             >::type
3576         {};
3577         typedef cc::EllenBinTreeMap< cds::gc::DHP, Key, Value, traits_EllenBinTreeMap_ptb_stat > EllenBinTreeMap_ptb_stat;
3578
3579         // ***************************************************************************
3580         // EllenBinTreeMap - RCU
3581
3582         struct traits_EllenBinTreeMap_rcu_gpi: public cc::ellen_bintree::make_set_traits<
3583                 co::less< less >
3584                 ,cc::ellen_bintree::update_desc_allocator<
3585                     cds::memory::pool_allocator< typename ellen_bintree_props::gpi::update_desc, ellen_bintree_pool::bounded_update_desc_pool_accessor >
3586                 >
3587                 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
3588                 ,co::item_counter< cds::atomicity::item_counter >
3589             >::type
3590         {};
3591         typedef cc::EllenBinTreeMap< rcu_gpi, Key, Value, traits_EllenBinTreeMap_rcu_gpi > EllenBinTreeMap_rcu_gpi;
3592
3593         struct traits_EllenBinTreeMap_rcu_gpi_stat: public cc::ellen_bintree::make_set_traits<
3594                 co::less< less >
3595                 ,cc::ellen_bintree::update_desc_allocator<
3596                     cds::memory::pool_allocator< typename ellen_bintree_props::gpi::update_desc, ellen_bintree_pool::bounded_update_desc_pool_accessor >
3597                 >
3598                 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
3599                 ,co::stat< cc::ellen_bintree::stat<> >
3600                 ,co::item_counter< cds::atomicity::item_counter >
3601             >::type
3602         {};
3603         typedef cc::EllenBinTreeMap< rcu_gpi, Key, Value, traits_EllenBinTreeMap_rcu_gpi_stat > EllenBinTreeMap_rcu_gpi_stat;
3604
3605         struct traits_EllenBinTreeMap_rcu_gpb: public cc::ellen_bintree::make_set_traits<
3606                 co::less< less >
3607                 ,cc::ellen_bintree::update_desc_allocator<
3608                     cds::memory::pool_allocator< typename ellen_bintree_props::gpb::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
3609                 >
3610                 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
3611                 ,co::item_counter< cds::atomicity::item_counter >
3612             >::type
3613         {};
3614         typedef cc::EllenBinTreeMap< rcu_gpb, Key, Value, traits_EllenBinTreeMap_rcu_gpb > EllenBinTreeMap_rcu_gpb;
3615
3616         struct traits_EllenBinTreeMap_rcu_gpb_stat: public cc::ellen_bintree::make_set_traits<
3617                 co::less< less >
3618                 ,cc::ellen_bintree::update_desc_allocator<
3619                     cds::memory::pool_allocator< typename ellen_bintree_props::gpb::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
3620                 >
3621                 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
3622                 ,co::stat< cc::ellen_bintree::stat<> >
3623                 ,co::item_counter< cds::atomicity::item_counter >
3624             >::type
3625         {};
3626         typedef cc::EllenBinTreeMap< rcu_gpb, Key, Value, traits_EllenBinTreeMap_rcu_gpb_stat > EllenBinTreeMap_rcu_gpb_stat;
3627
3628         struct traits_EllenBinTreeMap_rcu_gpt: public cc::ellen_bintree::make_set_traits<
3629             co::less< less >
3630             ,cc::ellen_bintree::update_desc_allocator<
3631             cds::memory::pool_allocator< typename ellen_bintree_props::gpt::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
3632             >
3633             ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
3634             ,co::item_counter< cds::atomicity::item_counter >
3635         >::type
3636         {};
3637         typedef cc::EllenBinTreeMap< rcu_gpt, Key, Value, traits_EllenBinTreeMap_rcu_gpt > EllenBinTreeMap_rcu_gpt;
3638
3639         struct traits_EllenBinTreeMap_rcu_gpt_stat: public cc::ellen_bintree::make_set_traits<
3640                 co::less< less >
3641                 ,cc::ellen_bintree::update_desc_allocator<
3642                     cds::memory::pool_allocator< typename ellen_bintree_props::gpt::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
3643                 >
3644                 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
3645                 ,co::stat< cc::ellen_bintree::stat<> >
3646                 ,co::item_counter< cds::atomicity::item_counter >
3647             >::type
3648         {};
3649         typedef cc::EllenBinTreeMap< rcu_gpt, Key, Value, traits_EllenBinTreeMap_rcu_gpt_stat > EllenBinTreeMap_rcu_gpt_stat;
3650
3651 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
3652         struct traits_EllenBinTreeMap_rcu_shb: public cc::ellen_bintree::make_set_traits<
3653             co::less< less >
3654             ,cc::ellen_bintree::update_desc_allocator<
3655                 cds::memory::pool_allocator< typename ellen_bintree_props::shb::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
3656             >
3657             ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
3658             ,co::item_counter< cds::atomicity::item_counter >
3659         >::type
3660         {};
3661         typedef cc::EllenBinTreeMap< rcu_shb, Key, Value, traits_EllenBinTreeMap_rcu_shb > EllenBinTreeMap_rcu_shb;
3662
3663         struct traits_EllenBinTreeMap_rcu_shb_stat: public cc::ellen_bintree::make_set_traits<
3664                 co::less< less >
3665                 ,cc::ellen_bintree::update_desc_allocator<
3666                     cds::memory::pool_allocator< typename ellen_bintree_props::shb::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
3667                 >
3668                 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
3669                 ,co::item_counter< cds::atomicity::item_counter >
3670                 ,co::stat< cc::ellen_bintree::stat<> >
3671             >::type
3672         {};
3673         typedef cc::EllenBinTreeMap< rcu_shb, Key, Value, traits_EllenBinTreeMap_rcu_shb_stat > EllenBinTreeMap_rcu_shb_stat;
3674
3675         struct traits_EllenBinTreeMap_rcu_sht: public cc::ellen_bintree::make_set_traits<
3676                 co::less< less >
3677                 ,cc::ellen_bintree::update_desc_allocator<
3678                     cds::memory::pool_allocator< typename ellen_bintree_props::sht::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
3679                 >
3680                 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
3681                 ,co::item_counter< cds::atomicity::item_counter >
3682             >::type
3683         {};
3684         typedef cc::EllenBinTreeMap< rcu_sht, Key, Value, traits_EllenBinTreeMap_rcu_sht > EllenBinTreeMap_rcu_sht;
3685
3686         struct traits_EllenBinTreeMap_rcu_sht_stat: public cc::ellen_bintree::make_set_traits<
3687                 co::less< less >
3688                 ,cc::ellen_bintree::update_desc_allocator<
3689                     cds::memory::pool_allocator< typename ellen_bintree_props::sht::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
3690                 >
3691                 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
3692                 ,co::item_counter< cds::atomicity::item_counter >
3693                 ,co::stat< cc::ellen_bintree::stat<> >
3694             >::type
3695         {};
3696         typedef cc::EllenBinTreeMap< rcu_sht, Key, Value, traits_EllenBinTreeMap_rcu_sht_stat > EllenBinTreeMap_rcu_sht_stat;
3697
3698 #endif
3699
3700
3701         // ***************************************************************************
3702         // Standard implementations
3703
3704         typedef StdMap< Key, Value, cds::SpinLock >             StdMap_Spin;
3705         typedef StdMap< Key, Value, lock::NoLock>               StdMap_NoLock;
3706
3707         typedef StdHashMap< Key, Value, cds::SpinLock >         StdHashMap_Spin;
3708         typedef StdHashMap< Key, Value, lock::NoLock >          StdHashMap_NoLock;
3709
3710     };
3711
3712     template <typename Map>
3713     static inline void print_stat( Map const& m )
3714     {}
3715
3716     template <typename Map>
3717     static inline void additional_cleanup( Map& m )
3718     {}
3719
3720     template <typename Map>
3721     static inline void additional_check( Map& m )
3722     {}
3723
3724
3725     template <typename K, typename T, typename Traits >
3726     static inline void print_stat( cc::CuckooMap< K, T, Traits > const& m )
3727     {
3728         CPPUNIT_MSG( m.statistics() << m.mutex_policy_statistics() );
3729     }
3730
3731     template <typename GC, typename K, typename T, typename Traits >
3732     static inline void print_stat( cc::SkipListMap< GC, K, T, Traits > const& m )
3733     {
3734         CPPUNIT_MSG( m.statistics() );
3735     }
3736
3737     // EllenBinTreeMap
3738     template <typename GC, typename Key, typename T, typename Traits>
3739     static inline void print_stat( cc::EllenBinTreeMap<GC, Key, T, Traits> const& s )
3740     {
3741         CPPUNIT_MSG( s.statistics() );
3742     }
3743     template <typename GC, typename Key, typename T, typename Traits>
3744     static inline void additional_cleanup( cc::EllenBinTreeMap<GC, Key, T, Traits>& s )
3745     {
3746         ellen_bintree_pool::internal_node_counter::reset();
3747     }
3748     namespace ellen_bintree_check {
3749         static inline void check_stat( cds::intrusive::ellen_bintree::empty_stat const& s )
3750         {
3751             // This check is not valid for thread-based RCU
3752             /*
3753             CPPUNIT_CHECK_CURRENT_EX( ellen_bintree_pool::internal_node_counter::m_nAlloc.get() == ellen_bintree_pool::internal_node_counter::m_nFree.get(),
3754                 "m_nAlloc=" << ellen_bintree_pool::internal_node_counter::m_nAlloc.get()
3755                 << ", m_nFree=" << ellen_bintree_pool::internal_node_counter::m_nFree.get()
3756                 );
3757             */
3758         }
3759
3760         static inline void check_stat( cds::intrusive::ellen_bintree::stat<> const& stat )
3761         {
3762             CPPUNIT_CHECK_CURRENT_EX( stat.m_nInternalNodeCreated == stat.m_nInternalNodeDeleted,
3763                 "m_nInternalNodeCreated=" << stat.m_nInternalNodeCreated
3764                 << " m_nInternalNodeDeleted=" << stat.m_nInternalNodeDeleted );
3765             CPPUNIT_CHECK_CURRENT_EX( stat.m_nUpdateDescCreated == stat.m_nUpdateDescDeleted,
3766                 "m_nUpdateDescCreated=" << stat.m_nUpdateDescCreated
3767                 << " m_nUpdateDescDeleted=" << stat.m_nUpdateDescDeleted );
3768             CPPUNIT_CHECK_CURRENT_EX( ellen_bintree_pool::internal_node_counter::m_nAlloc.get() == stat.m_nInternalNodeCreated,
3769                 "allocated=" << ellen_bintree_pool::internal_node_counter::m_nAlloc.get()
3770                 << "m_nInternalNodeCreated=" << stat.m_nInternalNodeCreated );
3771         }
3772     }   // namespace ellen_bintree_check
3773     template <typename GC, typename Key, typename T, typename Traits>
3774     static inline void additional_check( cc::EllenBinTreeMap<GC, Key, T, Traits>& s )
3775     {
3776         GC::force_dispose();
3777         ellen_bintree_check::check_stat( s.statistics() );
3778     }
3779
3780
3781     template <typename K, typename V, typename... Options>
3782     static inline void print_stat( CuckooStripedMap< K, V, Options... > const& m )
3783     {
3784         typedef CuckooStripedMap< K, V, Options... > map_type;
3785         print_stat( static_cast<typename map_type::cuckoo_base_class const&>(m) );
3786     }
3787
3788     template <typename K, typename V, typename... Options>
3789     static inline void print_stat( CuckooRefinableMap< K, V, Options... > const& m )
3790     {
3791         typedef CuckooRefinableMap< K, V, Options... > map_type;
3792         print_stat( static_cast<typename map_type::cuckoo_base_class const&>(m) );
3793     }
3794
3795 }   // namespace map2
3796
3797 #endif // ifndef _CDSUNIT_MAP2_MAP_TYPES_H