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