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