3 #ifndef _CDSUNIT_MAP2_MAP_TYPES_H
4 #define _CDSUNIT_MAP2_MAP_TYPES_H
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>
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>
17 #include <cds/container/lazy_kvlist_hp.h>
18 #include <cds/container/lazy_kvlist_ptb.h>
19 #include <cds/container/lazy_kvlist_rcu.h>
20 #include <cds/container/lazy_kvlist_nogc.h>
22 #include <cds/container/michael_map.h>
23 #include <cds/container/michael_map_rcu.h>
24 #include <cds/container/michael_map_nogc.h>
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>
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>
35 #include <cds/container/skip_list_map_hp.h>
36 #include <cds/container/skip_list_map_ptb.h>
37 #include <cds/container/skip_list_map_rcu.h>
38 #include <cds/container/skip_list_map_nogc.h>
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>
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>
51 #include <cds/container/striped_map/boost_unordered_map.h>
52 #include <cds/container/striped_map.h>
54 #include <cds/lock/spinlock.h>
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"
67 namespace cc = cds::container;
68 namespace co = cds::opt;
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;
78 template <typename Key>
80 int operator ()(Key const& k1, Key const& k2) const
82 if ( std::less<Key>( k1, k2 ) )
84 return std::less<Key>( k2, k1 ) ? 1 : 0;
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
100 struct cmp<std::string>
102 int operator()(std::string const& s1, std::string const& s2)
104 return s1.compare( s2 );
106 int operator()(std::string const& s1, char const * s2)
108 return s1.compare( s2 );
110 int operator()(char const * s1, std::string const& s2)
112 return -s2.compare( s1 );
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<> >
126 typedef typename cc::cuckoo::make_traits<
127 co::mutex_policy< cc::cuckoo::striping<> >
129 >::type cuckoo_traits;
131 typedef cc::CuckooMap< K, V, cuckoo_traits > cuckoo_base_class;
134 CuckooStripedMap( size_t nCapacity, size_t nLoadFactor )
135 : cuckoo_base_class( nCapacity / (nLoadFactor * 16), (unsigned int) 4 )
138 template <typename Q, typename Pred>
139 bool erase_with( Q const& key, Pred pred )
141 return cuckoo_base_class::erase_with( key, typename std::conditional< cuckoo_base_class::c_isSorted, Pred, typename Pred::equal_to>::type() );
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<> >
155 typedef typename cc::cuckoo::make_traits<
156 co::mutex_policy< cc::cuckoo::refinable<> >
158 >::type cuckoo_traits;
160 typedef cc::CuckooMap< K, V, cuckoo_traits > cuckoo_base_class;
163 CuckooRefinableMap( size_t nCapacity, size_t nLoadFactor )
164 : cuckoo_base_class( nCapacity / (nLoadFactor * 16), (unsigned int) 4 )
167 template <typename Q, typename Pred>
168 bool erase_with( Q const& key, Pred pred )
170 return cuckoo_base_class::erase_with( key, typename std::conditional< cuckoo_base_class::c_isSorted, Pred, typename Pred::equal_to>::type() );
174 template <typename Key, typename Value>
176 typedef co::v::hash<Key> key_hash;
177 typedef std::less<Key> less;
178 typedef cmp<Key> compare;
181 bool operator()( Key const& k1, Key const& k2 ) const
183 return compare()( k1, k2 ) == 0;
187 struct hash: public key_hash
189 size_t operator()( Key const& k ) const
191 return key_hash::operator()( k );
193 template <typename Q>
194 size_t operator()( Q const& k ) const
196 return key_hash::operator()( k );
200 struct hash2: public key_hash
202 size_t operator()( Key const& k ) const
204 size_t seed = ~key_hash::operator ()( k );
205 boost::hash_combine( seed, k );
208 template <typename Q>
209 size_t operator()( Q const& k ) const
211 size_t seed = ~key_hash::operator()( k );
212 boost::hash_combine( seed, k );
217 // ***************************************************************************
220 typedef cc::MichaelKVList< cds::gc::HP, Key, Value,
221 typename cc::michael_list::make_traits<
222 co::compare< compare >
224 > MichaelList_HP_cmp_stdAlloc;
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 >
231 > MichaelList_HP_cmp_stdAlloc_seqcst;
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> >
238 > MichaelList_HP_cmp_michaelAlloc;
240 typedef cc::MichaelKVList< cds::gc::HP, Key, Value,
241 typename cc::michael_list::make_traits<
244 > MichaelList_HP_less_stdAlloc;
246 typedef cc::MichaelKVList< cds::gc::HP, Key, Value,
247 typename cc::michael_list::make_traits<
249 ,co::memory_model< co::v::sequential_consistent >
251 > MichaelList_HP_less_stdAlloc_seqcst;
253 typedef cc::MichaelKVList< cds::gc::HP, Key, Value,
254 typename cc::michael_list::make_traits<
256 co::allocator< memory::MichaelAllocator<int> >
258 > MichaelList_HP_less_michaelAlloc;
260 typedef cc::MichaelKVList< cds::gc::PTB, Key, Value,
261 typename cc::michael_list::make_traits<
262 co::compare< compare >
264 > MichaelList_PTB_cmp_stdAlloc;
266 typedef cc::MichaelKVList< cds::gc::PTB, Key, Value,
267 typename cc::michael_list::make_traits<
268 co::compare< compare >
269 ,co::memory_model< co::v::sequential_consistent >
271 > MichaelList_PTB_cmp_stdAlloc_seqcst;
273 typedef cc::MichaelKVList< cds::gc::PTB, Key, Value,
274 typename cc::michael_list::make_traits<
275 co::compare< compare >,
276 co::allocator< memory::MichaelAllocator<int> >
278 > MichaelList_PTB_cmp_michaelAlloc;
280 typedef cc::MichaelKVList< cds::gc::PTB, Key, Value,
281 typename cc::michael_list::make_traits<
284 > MichaelList_PTB_less_stdAlloc;
286 typedef cc::MichaelKVList< cds::gc::PTB, Key, Value,
287 typename cc::michael_list::make_traits<
289 ,co::memory_model< co::v::sequential_consistent >
291 > MichaelList_PTB_less_stdAlloc_seqcst;
293 typedef cc::MichaelKVList< cds::gc::PTB, Key, Value,
294 typename cc::michael_list::make_traits<
296 co::allocator< memory::MichaelAllocator<int> >
298 > MichaelList_PTB_less_michaelAlloc;
301 typedef cc::MichaelKVList< rcu_gpi, Key, Value,
302 typename cc::michael_list::make_traits<
303 co::compare< compare >
305 > MichaelList_RCU_GPI_cmp_stdAlloc;
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 >
312 > MichaelList_RCU_GPI_cmp_stdAlloc_seqcst;
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> >
319 > MichaelList_RCU_GPI_cmp_michaelAlloc;
321 typedef cc::MichaelKVList< rcu_gpi, Key, Value,
322 typename cc::michael_list::make_traits<
325 > MichaelList_RCU_GPI_less_stdAlloc;
327 typedef cc::MichaelKVList< rcu_gpi, Key, Value,
328 typename cc::michael_list::make_traits<
330 ,co::memory_model< co::v::sequential_consistent >
332 > MichaelList_RCU_GPI_less_stdAlloc_seqcst;
334 typedef cc::MichaelKVList< rcu_gpi, Key, Value,
335 typename cc::michael_list::make_traits<
337 co::allocator< memory::MichaelAllocator<int> >
339 > MichaelList_RCU_GPI_less_michaelAlloc;
342 typedef cc::MichaelKVList< rcu_gpb, Key, Value,
343 typename cc::michael_list::make_traits<
344 co::compare< compare >
346 > MichaelList_RCU_GPB_cmp_stdAlloc;
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 >
353 > MichaelList_RCU_GPB_cmp_stdAlloc_seqcst;
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> >
360 > MichaelList_RCU_GPB_cmp_michaelAlloc;
362 typedef cc::MichaelKVList< rcu_gpb, Key, Value,
363 typename cc::michael_list::make_traits<
366 > MichaelList_RCU_GPB_less_stdAlloc;
368 typedef cc::MichaelKVList< rcu_gpb, Key, Value,
369 typename cc::michael_list::make_traits<
371 ,co::memory_model< co::v::sequential_consistent >
373 > MichaelList_RCU_GPB_less_stdAlloc_seqcst;
375 typedef cc::MichaelKVList< rcu_gpb, Key, Value,
376 typename cc::michael_list::make_traits<
378 co::allocator< memory::MichaelAllocator<int> >
380 > MichaelList_RCU_GPB_less_michaelAlloc;
383 typedef cc::MichaelKVList< rcu_gpt, Key, Value,
384 typename cc::michael_list::make_traits<
385 co::compare< compare >
387 > MichaelList_RCU_GPT_cmp_stdAlloc;
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 >
394 > MichaelList_RCU_GPT_cmp_stdAlloc_seqcst;
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> >
401 > MichaelList_RCU_GPT_cmp_michaelAlloc;
403 typedef cc::MichaelKVList< rcu_gpt, Key, Value,
404 typename cc::michael_list::make_traits<
407 > MichaelList_RCU_GPT_less_stdAlloc;
409 typedef cc::MichaelKVList< rcu_gpt, Key, Value,
410 typename cc::michael_list::make_traits<
412 ,co::memory_model< co::v::sequential_consistent >
414 > MichaelList_RCU_GPT_less_stdAlloc_seqcst;
416 typedef cc::MichaelKVList< rcu_gpt, Key, Value,
417 typename cc::michael_list::make_traits<
419 co::allocator< memory::MichaelAllocator<int> >
421 > MichaelList_RCU_GPT_less_michaelAlloc;
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 >
428 > MichaelList_RCU_SHB_cmp_stdAlloc;
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 >
435 > MichaelList_RCU_SHB_cmp_stdAlloc_seqcst;
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> >
442 > MichaelList_RCU_SHB_cmp_michaelAlloc;
444 typedef cc::MichaelKVList< rcu_shb, Key, Value,
445 typename cc::michael_list::make_traits<
448 > MichaelList_RCU_SHB_less_stdAlloc;
450 typedef cc::MichaelKVList< rcu_shb, Key, Value,
451 typename cc::michael_list::make_traits<
453 ,co::memory_model< co::v::sequential_consistent >
455 > MichaelList_RCU_SHB_less_stdAlloc_seqcst;
457 typedef cc::MichaelKVList< rcu_shb, Key, Value,
458 typename cc::michael_list::make_traits<
460 co::allocator< memory::MichaelAllocator<int> >
462 > MichaelList_RCU_SHB_less_michaelAlloc;
465 typedef cc::MichaelKVList< rcu_sht, Key, Value,
466 typename cc::michael_list::make_traits<
467 co::compare< compare >
469 > MichaelList_RCU_SHT_cmp_stdAlloc;
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 >
476 > MichaelList_RCU_SHT_cmp_stdAlloc_seqcst;
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> >
483 > MichaelList_RCU_SHT_cmp_michaelAlloc;
485 typedef cc::MichaelKVList< rcu_sht, Key, Value,
486 typename cc::michael_list::make_traits<
489 > MichaelList_RCU_SHT_less_stdAlloc;
491 typedef cc::MichaelKVList< rcu_sht, Key, Value,
492 typename cc::michael_list::make_traits<
494 ,co::memory_model< co::v::sequential_consistent >
496 > MichaelList_RCU_SHT_less_stdAlloc_seqcst;
498 typedef cc::MichaelKVList< rcu_sht, Key, Value,
499 typename cc::michael_list::make_traits<
501 co::allocator< memory::MichaelAllocator<int> >
503 > MichaelList_RCU_SHT_less_michaelAlloc;
507 typedef cc::MichaelKVList< cds::gc::nogc, Key, Value,
508 typename cc::michael_list::make_traits<
509 co::compare< compare >
511 > MichaelList_NOGC_cmp_stdAlloc;
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 >
518 > MichaelList_NOGC_cmp_stdAlloc_seqcst;
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> >
525 > MichaelList_NOGC_cmp_michaelAlloc;
527 typedef cc::MichaelKVList< cds::gc::nogc, Key, Value,
528 typename cc::michael_list::make_traits<
531 > MichaelList_NOGC_less_stdAlloc;
533 typedef cc::MichaelKVList< cds::gc::nogc, Key, Value,
534 typename cc::michael_list::make_traits<
536 ,co::memory_model< co::v::sequential_consistent >
538 > MichaelList_NOGC_less_stdAlloc_seqcst;
540 typedef cc::MichaelKVList< cds::gc::nogc, Key, Value,
541 typename cc::michael_list::make_traits<
543 co::allocator< memory::MichaelAllocator<int> >
545 > MichaelList_NOGC_less_michaelAlloc;
547 template <typename Base>
548 class NogcMapWrapper: public Base
550 typedef Base base_class;
552 NogcMapWrapper( size_t nMaxItemCount, size_t nLoadFactor )
553 : base_class( nMaxItemCount, nLoadFactor )
556 template <typename K>
557 bool insert( K const& key )
559 return base_class::insert( key ) != base_class::end();
562 template <typename K, typename V>
563 bool insert( K const& key, V const& val )
565 return base_class::insert( key, val ) != base_class::end();
568 template <typename K, typename Func>
569 bool insert_key( K const& key, Func func )
571 return base_class::insert_key( key, func ) != base_class::end();
574 template <typename K>
575 bool find( K const& key )
577 return base_class::find( key ) != base_class::end();
586 template <typename Base>
587 class NogcMapWrapper_dctor: public Base
589 typedef Base base_class;
591 NogcMapWrapper_dctor()
594 template <typename K>
595 bool insert( K const& key )
597 return base_class::insert( key ) != base_class::end();
600 template <typename K, typename V>
601 bool insert( K const& key, V const& val )
603 return base_class::insert( key, val ) != base_class::end();
606 template <typename K, typename Func>
607 bool insert_key( K const& key, Func func )
609 return base_class::insert_key( key, func ) != base_class::end();
612 template <typename K>
613 bool find( K const& key )
615 return base_class::find( key ) != base_class::end();
619 // SplitListMap<gc::nogc> has no clear() method
620 template <typename Base>
621 class NogcSplitMapWrapper: public Base
623 typedef Base base_class;
625 NogcSplitMapWrapper( size_t nMaxItemCount, size_t nLoadFactor )
626 : base_class( nMaxItemCount, nLoadFactor )
629 template <typename K>
630 bool insert( K const& key )
632 return base_class::insert( key ) != base_class::end();
635 template <typename K, typename V>
636 bool insert( K const& key, V const& val )
638 return base_class::insert( key, val ) != base_class::end();
641 template <typename K, typename Func>
642 bool insert_key( K const& key, Func func )
644 return base_class::insert_key( key, func ) != base_class::end();
647 template <typename K>
648 bool find( K const& key )
650 return base_class::find( key ) != base_class::end();
658 // ***************************************************************************
659 // MichaelHashMap based on MichaelKVList
661 typedef cc::MichaelHashMap< cds::gc::HP, MichaelList_HP_cmp_stdAlloc,
662 typename cc::michael_map::make_traits<
665 > MichaelMap_HP_cmp_stdAlloc;
667 typedef cc::MichaelHashMap< cds::gc::HP, MichaelList_HP_cmp_stdAlloc_seqcst,
668 typename cc::michael_map::make_traits<
671 > MichaelMap_HP_cmp_stdAlloc_seqcst;
673 typedef cc::MichaelHashMap< cds::gc::HP, MichaelList_HP_cmp_michaelAlloc,
674 typename cc::michael_map::make_traits<
676 co::allocator< memory::MichaelAllocator<int> >
678 > MichaelMap_HP_cmp_michaelAlloc;
680 typedef cc::MichaelHashMap< cds::gc::HP, MichaelList_HP_less_stdAlloc,
681 typename cc::michael_map::make_traits<
684 > MichaelMap_HP_less_stdAlloc;
686 typedef cc::MichaelHashMap< cds::gc::HP, MichaelList_HP_less_stdAlloc_seqcst,
687 typename cc::michael_map::make_traits<
690 > MichaelMap_HP_less_stdAlloc_seqcst;
692 typedef cc::MichaelHashMap< cds::gc::HP, MichaelList_HP_less_michaelAlloc,
693 typename cc::michael_map::make_traits<
695 co::allocator< memory::MichaelAllocator<int> >
697 > MichaelMap_HP_less_michaelAlloc;
699 typedef cc::MichaelHashMap< cds::gc::PTB, MichaelList_PTB_cmp_stdAlloc,
700 typename cc::michael_map::make_traits<
703 > MichaelMap_PTB_cmp_stdAlloc;
705 typedef cc::MichaelHashMap< cds::gc::PTB, MichaelList_PTB_cmp_stdAlloc_seqcst,
706 typename cc::michael_map::make_traits<
709 > MichaelMap_PTB_cmp_stdAlloc_seqcst;
711 typedef cc::MichaelHashMap< cds::gc::PTB, MichaelList_PTB_cmp_michaelAlloc,
712 typename cc::michael_map::make_traits<
714 co::allocator< memory::MichaelAllocator<int> >
716 > MichaelMap_PTB_cmp_michaelAlloc;
718 typedef cc::MichaelHashMap< cds::gc::PTB, MichaelList_PTB_less_stdAlloc,
719 typename cc::michael_map::make_traits<
722 > MichaelMap_PTB_less_stdAlloc;
724 typedef cc::MichaelHashMap< cds::gc::PTB, MichaelList_PTB_less_stdAlloc_seqcst,
725 typename cc::michael_map::make_traits<
728 > MichaelMap_PTB_less_stdAlloc_seqcst;
730 typedef cc::MichaelHashMap< cds::gc::PTB, MichaelList_PTB_less_michaelAlloc,
731 typename cc::michael_map::make_traits<
733 co::allocator< memory::MichaelAllocator<int> >
735 > MichaelMap_PTB_less_michaelAlloc;
738 typedef cc::MichaelHashMap< rcu_gpi, MichaelList_RCU_GPI_cmp_stdAlloc,
739 typename cc::michael_map::make_traits<
742 > MichaelMap_RCU_GPI_cmp_stdAlloc;
744 typedef cc::MichaelHashMap< rcu_gpi, MichaelList_RCU_GPI_cmp_stdAlloc_seqcst,
745 typename cc::michael_map::make_traits<
748 > MichaelMap_RCU_GPI_cmp_stdAlloc_seqcst;
750 typedef cc::MichaelHashMap< rcu_gpi, MichaelList_RCU_GPI_cmp_michaelAlloc,
751 typename cc::michael_map::make_traits<
753 co::allocator< memory::MichaelAllocator<int> >
755 > MichaelMap_RCU_GPI_cmp_michaelAlloc;
757 typedef cc::MichaelHashMap< rcu_gpi, MichaelList_RCU_GPI_less_stdAlloc,
758 typename cc::michael_map::make_traits<
761 > MichaelMap_RCU_GPI_less_stdAlloc;
763 typedef cc::MichaelHashMap< rcu_gpi, MichaelList_RCU_GPI_less_stdAlloc_seqcst,
764 typename cc::michael_map::make_traits<
767 > MichaelMap_RCU_GPI_less_stdAlloc_seqcst;
769 typedef cc::MichaelHashMap< rcu_gpi, MichaelList_RCU_GPI_less_michaelAlloc,
770 typename cc::michael_map::make_traits<
772 co::allocator< memory::MichaelAllocator<int> >
774 > MichaelMap_RCU_GPI_less_michaelAlloc;
777 typedef cc::MichaelHashMap< rcu_gpb, MichaelList_RCU_GPB_cmp_stdAlloc,
778 typename cc::michael_map::make_traits<
781 > MichaelMap_RCU_GPB_cmp_stdAlloc;
783 typedef cc::MichaelHashMap< rcu_gpb, MichaelList_RCU_GPB_cmp_stdAlloc_seqcst,
784 typename cc::michael_map::make_traits<
787 > MichaelMap_RCU_GPB_cmp_stdAlloc_seqcst;
789 typedef cc::MichaelHashMap< rcu_gpb, MichaelList_RCU_GPB_cmp_michaelAlloc,
790 typename cc::michael_map::make_traits<
792 co::allocator< memory::MichaelAllocator<int> >
794 > MichaelMap_RCU_GPB_cmp_michaelAlloc;
796 typedef cc::MichaelHashMap< rcu_gpb, MichaelList_RCU_GPB_less_stdAlloc,
797 typename cc::michael_map::make_traits<
800 > MichaelMap_RCU_GPB_less_stdAlloc;
802 typedef cc::MichaelHashMap< rcu_gpb, MichaelList_RCU_GPB_less_stdAlloc_seqcst,
803 typename cc::michael_map::make_traits<
806 > MichaelMap_RCU_GPB_less_stdAlloc_seqcst;
808 typedef cc::MichaelHashMap< rcu_gpb, MichaelList_RCU_GPB_less_michaelAlloc,
809 typename cc::michael_map::make_traits<
811 co::allocator< memory::MichaelAllocator<int> >
813 > MichaelMap_RCU_GPB_less_michaelAlloc;
816 typedef cc::MichaelHashMap< rcu_gpt, MichaelList_RCU_GPT_cmp_stdAlloc,
817 typename cc::michael_map::make_traits<
820 > MichaelMap_RCU_GPT_cmp_stdAlloc;
822 typedef cc::MichaelHashMap< rcu_gpt, MichaelList_RCU_GPT_cmp_stdAlloc_seqcst,
823 typename cc::michael_map::make_traits<
826 > MichaelMap_RCU_GPT_cmp_stdAlloc_seqcst;
828 typedef cc::MichaelHashMap< rcu_gpt, MichaelList_RCU_GPT_cmp_michaelAlloc,
829 typename cc::michael_map::make_traits<
831 co::allocator< memory::MichaelAllocator<int> >
833 > MichaelMap_RCU_GPT_cmp_michaelAlloc;
835 typedef cc::MichaelHashMap< rcu_gpt, MichaelList_RCU_GPT_less_stdAlloc,
836 typename cc::michael_map::make_traits<
839 > MichaelMap_RCU_GPT_less_stdAlloc;
841 typedef cc::MichaelHashMap< rcu_gpt, MichaelList_RCU_GPT_less_stdAlloc_seqcst,
842 typename cc::michael_map::make_traits<
845 > MichaelMap_RCU_GPT_less_stdAlloc_seqcst;
847 typedef cc::MichaelHashMap< rcu_gpt, MichaelList_RCU_GPT_less_michaelAlloc,
848 typename cc::michael_map::make_traits<
850 co::allocator< memory::MichaelAllocator<int> >
852 > MichaelMap_RCU_GPT_less_michaelAlloc;
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<
859 > MichaelMap_RCU_SHB_cmp_stdAlloc;
861 typedef cc::MichaelHashMap< rcu_shb, MichaelList_RCU_SHB_cmp_stdAlloc_seqcst,
862 typename cc::michael_map::make_traits<
865 > MichaelMap_RCU_SHB_cmp_stdAlloc_seqcst;
867 typedef cc::MichaelHashMap< rcu_shb, MichaelList_RCU_SHB_cmp_michaelAlloc,
868 typename cc::michael_map::make_traits<
870 co::allocator< memory::MichaelAllocator<int> >
872 > MichaelMap_RCU_SHB_cmp_michaelAlloc;
874 typedef cc::MichaelHashMap< rcu_shb, MichaelList_RCU_SHB_less_stdAlloc,
875 typename cc::michael_map::make_traits<
878 > MichaelMap_RCU_SHB_less_stdAlloc;
880 typedef cc::MichaelHashMap< rcu_shb, MichaelList_RCU_SHB_less_stdAlloc_seqcst,
881 typename cc::michael_map::make_traits<
884 > MichaelMap_RCU_SHB_less_stdAlloc_seqcst;
886 typedef cc::MichaelHashMap< rcu_shb, MichaelList_RCU_SHB_less_michaelAlloc,
887 typename cc::michael_map::make_traits<
889 co::allocator< memory::MichaelAllocator<int> >
891 > MichaelMap_RCU_SHB_less_michaelAlloc;
894 typedef cc::MichaelHashMap< rcu_sht, MichaelList_RCU_SHT_cmp_stdAlloc,
895 typename cc::michael_map::make_traits<
898 > MichaelMap_RCU_SHT_cmp_stdAlloc;
900 typedef cc::MichaelHashMap< rcu_sht, MichaelList_RCU_SHT_cmp_stdAlloc_seqcst,
901 typename cc::michael_map::make_traits<
904 > MichaelMap_RCU_SHT_cmp_stdAlloc_seqcst;
906 typedef cc::MichaelHashMap< rcu_sht, MichaelList_RCU_SHT_cmp_michaelAlloc,
907 typename cc::michael_map::make_traits<
909 co::allocator< memory::MichaelAllocator<int> >
911 > MichaelMap_RCU_SHT_cmp_michaelAlloc;
913 typedef cc::MichaelHashMap< rcu_sht, MichaelList_RCU_SHT_less_stdAlloc,
914 typename cc::michael_map::make_traits<
917 > MichaelMap_RCU_SHT_less_stdAlloc;
919 typedef cc::MichaelHashMap< rcu_sht, MichaelList_RCU_SHT_less_stdAlloc_seqcst,
920 typename cc::michael_map::make_traits<
923 > MichaelMap_RCU_SHT_less_stdAlloc_seqcst;
925 typedef cc::MichaelHashMap< rcu_sht, MichaelList_RCU_SHT_less_michaelAlloc,
926 typename cc::michael_map::make_traits<
928 co::allocator< memory::MichaelAllocator<int> >
930 > MichaelMap_RCU_SHT_less_michaelAlloc;
934 typedef NogcMapWrapper< cc::MichaelHashMap< cds::gc::nogc, MichaelList_NOGC_cmp_stdAlloc,
935 typename cc::michael_map::make_traits<
938 > > MichaelMap_NOGC_cmp_stdAlloc;
940 typedef NogcMapWrapper< cc::MichaelHashMap< cds::gc::nogc, MichaelList_NOGC_cmp_stdAlloc_seqcst,
941 typename cc::michael_map::make_traits<
944 > > MichaelMap_NOGC_cmp_stdAlloc_seqcst;
946 typedef NogcMapWrapper< cc::MichaelHashMap< cds::gc::nogc, MichaelList_NOGC_cmp_michaelAlloc,
947 typename cc::michael_map::make_traits<
949 co::allocator< memory::MichaelAllocator<int> >
951 > > MichaelMap_NOGC_cmp_michaelAlloc;
953 typedef NogcMapWrapper< cc::MichaelHashMap< cds::gc::nogc, MichaelList_NOGC_less_stdAlloc,
954 typename cc::michael_map::make_traits<
957 > > MichaelMap_NOGC_less_stdAlloc;
959 typedef NogcMapWrapper< cc::MichaelHashMap< cds::gc::nogc, MichaelList_NOGC_less_stdAlloc_seqcst,
960 typename cc::michael_map::make_traits<
963 > > MichaelMap_NOGC_less_stdAlloc_seqcst;
965 typedef NogcMapWrapper< cc::MichaelHashMap< cds::gc::nogc, MichaelList_NOGC_less_michaelAlloc,
966 typename cc::michael_map::make_traits<
968 co::allocator< memory::MichaelAllocator<int> >
970 > > MichaelMap_NOGC_less_michaelAlloc;
973 // ***************************************************************************
976 typedef cc::LazyKVList< cds::gc::HP, Key, Value,
977 typename cc::lazy_list::make_traits<
978 co::compare< compare >
980 > LazyList_HP_cmp_stdAlloc;
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 >
987 > LazyList_HP_cmp_stdAlloc_seqcst;
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> >
994 > LazyList_HP_cmp_michaelAlloc;
996 typedef cc::LazyKVList< cds::gc::HP, Key, Value,
997 typename cc::lazy_list::make_traits<
1000 > LazyList_HP_less_stdAlloc;
1002 typedef cc::LazyKVList< cds::gc::HP, Key, Value,
1003 typename cc::lazy_list::make_traits<
1005 ,co::memory_model< co::v::sequential_consistent >
1007 > LazyList_HP_less_stdAlloc_seqcst;
1009 typedef cc::LazyKVList< cds::gc::HP, Key, Value,
1010 typename cc::lazy_list::make_traits<
1012 co::allocator< memory::MichaelAllocator<int> >
1014 > LazyList_HP_less_michaelAlloc;
1016 typedef cc::LazyKVList< cds::gc::PTB, Key, Value,
1017 typename cc::lazy_list::make_traits<
1018 co::compare< compare >
1020 > LazyList_PTB_cmp_stdAlloc;
1022 typedef cc::LazyKVList< cds::gc::PTB, Key, Value,
1023 typename cc::lazy_list::make_traits<
1024 co::compare< compare >
1025 ,co::memory_model< co::v::sequential_consistent >
1027 > LazyList_PTB_cmp_stdAlloc_seqcst;
1029 typedef cc::LazyKVList< cds::gc::PTB, Key, Value,
1030 typename cc::lazy_list::make_traits<
1031 co::compare< compare >,
1032 co::allocator< memory::MichaelAllocator<int> >
1034 > LazyList_PTB_cmp_michaelAlloc;
1036 typedef cc::LazyKVList< cds::gc::PTB, Key, Value,
1037 typename cc::lazy_list::make_traits<
1040 > LazyList_PTB_less_stdAlloc;
1042 typedef cc::LazyKVList< cds::gc::PTB, Key, Value,
1043 typename cc::lazy_list::make_traits<
1045 ,co::memory_model< co::v::sequential_consistent >
1047 > LazyList_PTB_less_stdAlloc_seqcst;
1049 typedef cc::LazyKVList< cds::gc::PTB, Key, Value,
1050 typename cc::lazy_list::make_traits<
1052 co::allocator< memory::MichaelAllocator<int> >
1054 > LazyList_PTB_less_michaelAlloc;
1057 typedef cc::LazyKVList< rcu_gpi, Key, Value,
1058 typename cc::lazy_list::make_traits<
1059 co::compare< compare >
1061 > LazyList_RCU_GPI_cmp_stdAlloc;
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 >
1068 > LazyList_RCU_GPI_cmp_stdAlloc_seqcst;
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> >
1075 > LazyList_RCU_GPI_cmp_michaelAlloc;
1077 typedef cc::LazyKVList< rcu_gpi, Key, Value,
1078 typename cc::lazy_list::make_traits<
1081 > LazyList_RCU_GPI_less_stdAlloc;
1083 typedef cc::LazyKVList< rcu_gpi, Key, Value,
1084 typename cc::lazy_list::make_traits<
1086 ,co::memory_model< co::v::sequential_consistent >
1088 > LazyList_RCU_GPI_less_stdAlloc_seqcst;
1090 typedef cc::LazyKVList< rcu_gpi, Key, Value,
1091 typename cc::lazy_list::make_traits<
1093 co::allocator< memory::MichaelAllocator<int> >
1095 > LazyList_RCU_GPI_less_michaelAlloc;
1098 typedef cc::LazyKVList< rcu_gpb, Key, Value,
1099 typename cc::lazy_list::make_traits<
1100 co::compare< compare >
1102 > LazyList_RCU_GPB_cmp_stdAlloc;
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 >
1109 > LazyList_RCU_GPB_cmp_stdAlloc_seqcst;
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> >
1116 > LazyList_RCU_GPB_cmp_michaelAlloc;
1118 typedef cc::LazyKVList< rcu_gpb, Key, Value,
1119 typename cc::lazy_list::make_traits<
1122 > LazyList_RCU_GPB_less_stdAlloc;
1124 typedef cc::LazyKVList< rcu_gpb, Key, Value,
1125 typename cc::lazy_list::make_traits<
1127 ,co::memory_model< co::v::sequential_consistent >
1129 > LazyList_RCU_GPB_less_stdAlloc_seqcst;
1131 typedef cc::LazyKVList< rcu_gpb, Key, Value,
1132 typename cc::lazy_list::make_traits<
1134 co::allocator< memory::MichaelAllocator<int> >
1136 > LazyList_RCU_GPB_less_michaelAlloc;
1139 typedef cc::LazyKVList< rcu_gpt, Key, Value,
1140 typename cc::lazy_list::make_traits<
1141 co::compare< compare >
1143 > LazyList_RCU_GPT_cmp_stdAlloc;
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 >
1150 > LazyList_RCU_GPT_cmp_stdAlloc_seqcst;
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> >
1157 > LazyList_RCU_GPT_cmp_michaelAlloc;
1159 typedef cc::LazyKVList< rcu_gpt, Key, Value,
1160 typename cc::lazy_list::make_traits<
1163 > LazyList_RCU_GPT_less_stdAlloc;
1165 typedef cc::LazyKVList< rcu_gpt, Key, Value,
1166 typename cc::lazy_list::make_traits<
1168 ,co::memory_model< co::v::sequential_consistent >
1170 > LazyList_RCU_GPT_less_stdAlloc_seqcst;
1172 typedef cc::LazyKVList< rcu_gpt, Key, Value,
1173 typename cc::lazy_list::make_traits<
1175 co::allocator< memory::MichaelAllocator<int> >
1177 > LazyList_RCU_GPT_less_michaelAlloc;
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 >
1184 > LazyList_RCU_SHB_cmp_stdAlloc;
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 >
1191 > LazyList_RCU_SHB_cmp_stdAlloc_seqcst;
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> >
1198 > LazyList_RCU_SHB_cmp_michaelAlloc;
1200 typedef cc::LazyKVList< rcu_shb, Key, Value,
1201 typename cc::lazy_list::make_traits<
1204 > LazyList_RCU_SHB_less_stdAlloc;
1206 typedef cc::LazyKVList< rcu_shb, Key, Value,
1207 typename cc::lazy_list::make_traits<
1209 ,co::memory_model< co::v::sequential_consistent >
1211 > LazyList_RCU_SHB_less_stdAlloc_seqcst;
1213 typedef cc::LazyKVList< rcu_shb, Key, Value,
1214 typename cc::lazy_list::make_traits<
1216 co::allocator< memory::MichaelAllocator<int> >
1218 > LazyList_RCU_SHB_less_michaelAlloc;
1221 typedef cc::LazyKVList< rcu_sht, Key, Value,
1222 typename cc::lazy_list::make_traits<
1223 co::compare< compare >
1225 > LazyList_RCU_SHT_cmp_stdAlloc;
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 >
1232 > LazyList_RCU_SHT_cmp_stdAlloc_seqcst;
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> >
1239 > LazyList_RCU_SHT_cmp_michaelAlloc;
1241 typedef cc::LazyKVList< rcu_sht, Key, Value,
1242 typename cc::lazy_list::make_traits<
1245 > LazyList_RCU_SHT_less_stdAlloc;
1247 typedef cc::LazyKVList< rcu_sht, Key, Value,
1248 typename cc::lazy_list::make_traits<
1250 ,co::memory_model< co::v::sequential_consistent >
1252 > LazyList_RCU_SHT_less_stdAlloc_seqcst;
1254 typedef cc::LazyKVList< rcu_sht, Key, Value,
1255 typename cc::lazy_list::make_traits<
1257 co::allocator< memory::MichaelAllocator<int> >
1259 > LazyList_RCU_SHT_less_michaelAlloc;
1263 typedef cc::LazyKVList< cds::gc::nogc, Key, Value,
1264 typename cc::lazy_list::make_traits<
1265 co::compare< compare >
1267 > LazyList_NOGC_cmp_stdAlloc;
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 >
1274 > LazyList_NOGC_cmp_stdAlloc_seqcst;
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> >
1281 > LazyList_NOGC_cmp_michaelAlloc;
1283 typedef cc::LazyKVList< cds::gc::nogc, Key, Value,
1284 typename cc::lazy_list::make_traits<
1287 > LazyList_NOGC_less_stdAlloc;
1289 typedef cc::LazyKVList< cds::gc::nogc, Key, Value,
1290 typename cc::lazy_list::make_traits<
1292 ,co::memory_model< co::v::sequential_consistent >
1294 > LazyList_NOGC_less_stdAlloc_seqcst;
1296 typedef cc::LazyKVList< cds::gc::nogc, Key, Value,
1297 typename cc::lazy_list::make_traits<
1299 co::allocator< memory::MichaelAllocator<int> >
1301 > LazyList_NOGC_less_michaelAlloc;
1304 // ***************************************************************************
1305 // MichaelHashMap based on LazyKVList
1307 typedef cc::MichaelHashMap< cds::gc::HP, LazyList_HP_cmp_stdAlloc,
1308 typename cc::michael_map::make_traits<
1311 > MichaelMap_Lazy_HP_cmp_stdAlloc;
1313 typedef cc::MichaelHashMap< cds::gc::HP, LazyList_HP_cmp_stdAlloc_seqcst,
1314 typename cc::michael_map::make_traits<
1317 > MichaelMap_Lazy_HP_cmp_stdAlloc_seqcst;
1319 typedef cc::MichaelHashMap< cds::gc::HP, LazyList_HP_cmp_michaelAlloc,
1320 typename cc::michael_map::make_traits<
1322 co::allocator< memory::MichaelAllocator<int> >
1324 > MichaelMap_Lazy_HP_cmp_michaelAlloc;
1326 typedef cc::MichaelHashMap< cds::gc::HP, LazyList_HP_less_stdAlloc,
1327 typename cc::michael_map::make_traits<
1330 > MichaelMap_Lazy_HP_less_stdAlloc;
1332 typedef cc::MichaelHashMap< cds::gc::HP, LazyList_HP_less_stdAlloc_seqcst,
1333 typename cc::michael_map::make_traits<
1336 > MichaelMap_Lazy_HP_less_stdAlloc_seqcst;
1338 typedef cc::MichaelHashMap< cds::gc::HP, LazyList_HP_less_michaelAlloc,
1339 typename cc::michael_map::make_traits<
1341 co::allocator< memory::MichaelAllocator<int> >
1343 > MichaelMap_Lazy_HP_less_michaelAlloc;
1345 typedef cc::MichaelHashMap< cds::gc::PTB, LazyList_PTB_cmp_stdAlloc,
1346 typename cc::michael_map::make_traits<
1349 > MichaelMap_Lazy_PTB_cmp_stdAlloc;
1351 typedef cc::MichaelHashMap< cds::gc::PTB, LazyList_PTB_cmp_stdAlloc_seqcst,
1352 typename cc::michael_map::make_traits<
1355 > MichaelMap_Lazy_PTB_cmp_stdAlloc_seqcst;
1357 typedef cc::MichaelHashMap< cds::gc::PTB, LazyList_PTB_cmp_michaelAlloc,
1358 typename cc::michael_map::make_traits<
1360 co::allocator< memory::MichaelAllocator<int> >
1362 > MichaelMap_Lazy_PTB_cmp_michaelAlloc;
1364 typedef cc::MichaelHashMap< cds::gc::PTB, LazyList_PTB_less_stdAlloc,
1365 typename cc::michael_map::make_traits<
1368 > MichaelMap_Lazy_PTB_less_stdAlloc;
1370 typedef cc::MichaelHashMap< cds::gc::PTB, LazyList_PTB_less_stdAlloc_seqcst,
1371 typename cc::michael_map::make_traits<
1374 > MichaelMap_Lazy_PTB_less_stdAlloc_seqcst;
1376 typedef cc::MichaelHashMap< cds::gc::PTB, LazyList_PTB_less_michaelAlloc,
1377 typename cc::michael_map::make_traits<
1379 co::allocator< memory::MichaelAllocator<int> >
1381 > MichaelMap_Lazy_PTB_less_michaelAlloc;
1384 typedef cc::MichaelHashMap< rcu_gpi, LazyList_RCU_GPI_cmp_stdAlloc,
1385 typename cc::michael_map::make_traits<
1388 > MichaelMap_Lazy_RCU_GPI_cmp_stdAlloc;
1390 typedef cc::MichaelHashMap< rcu_gpi, LazyList_RCU_GPI_cmp_stdAlloc_seqcst,
1391 typename cc::michael_map::make_traits<
1394 > MichaelMap_Lazy_RCU_GPI_cmp_stdAlloc_seqcst;
1396 typedef cc::MichaelHashMap< rcu_gpi, LazyList_RCU_GPI_cmp_michaelAlloc,
1397 typename cc::michael_map::make_traits<
1399 co::allocator< memory::MichaelAllocator<int> >
1401 > MichaelMap_Lazy_RCU_GPI_cmp_michaelAlloc;
1403 typedef cc::MichaelHashMap< rcu_gpi, LazyList_RCU_GPI_less_stdAlloc,
1404 typename cc::michael_map::make_traits<
1407 > MichaelMap_Lazy_RCU_GPI_less_stdAlloc;
1409 typedef cc::MichaelHashMap< rcu_gpi, LazyList_RCU_GPI_less_stdAlloc_seqcst,
1410 typename cc::michael_map::make_traits<
1413 > MichaelMap_Lazy_RCU_GPI_less_stdAlloc_seqcst;
1415 typedef cc::MichaelHashMap< rcu_gpi, LazyList_RCU_GPI_less_michaelAlloc,
1416 typename cc::michael_map::make_traits<
1418 co::allocator< memory::MichaelAllocator<int> >
1420 > MichaelMap_Lazy_RCU_GPI_less_michaelAlloc;
1423 typedef cc::MichaelHashMap< rcu_gpb, LazyList_RCU_GPB_cmp_stdAlloc,
1424 typename cc::michael_map::make_traits<
1427 > MichaelMap_Lazy_RCU_GPB_cmp_stdAlloc;
1429 typedef cc::MichaelHashMap< rcu_gpb, LazyList_RCU_GPB_cmp_stdAlloc_seqcst,
1430 typename cc::michael_map::make_traits<
1433 > MichaelMap_Lazy_RCU_GPB_cmp_stdAlloc_seqcst;
1435 typedef cc::MichaelHashMap< rcu_gpb, LazyList_RCU_GPB_cmp_michaelAlloc,
1436 typename cc::michael_map::make_traits<
1438 co::allocator< memory::MichaelAllocator<int> >
1440 > MichaelMap_Lazy_RCU_GPB_cmp_michaelAlloc;
1442 typedef cc::MichaelHashMap< rcu_gpb, LazyList_RCU_GPB_less_stdAlloc,
1443 typename cc::michael_map::make_traits<
1446 > MichaelMap_Lazy_RCU_GPB_less_stdAlloc;
1448 typedef cc::MichaelHashMap< rcu_gpb, LazyList_RCU_GPB_less_stdAlloc_seqcst,
1449 typename cc::michael_map::make_traits<
1452 > MichaelMap_Lazy_RCU_GPB_less_stdAlloc_seqcst;
1454 typedef cc::MichaelHashMap< rcu_gpb, LazyList_RCU_GPB_less_michaelAlloc,
1455 typename cc::michael_map::make_traits<
1457 co::allocator< memory::MichaelAllocator<int> >
1459 > MichaelMap_Lazy_RCU_GPB_less_michaelAlloc;
1462 typedef cc::MichaelHashMap< rcu_gpt, LazyList_RCU_GPT_cmp_stdAlloc,
1463 typename cc::michael_map::make_traits<
1466 > MichaelMap_Lazy_RCU_GPT_cmp_stdAlloc;
1468 typedef cc::MichaelHashMap< rcu_gpt, LazyList_RCU_GPT_cmp_stdAlloc_seqcst,
1469 typename cc::michael_map::make_traits<
1472 > MichaelMap_Lazy_RCU_GPT_cmp_stdAlloc_seqcst;
1474 typedef cc::MichaelHashMap< rcu_gpt, LazyList_RCU_GPT_cmp_michaelAlloc,
1475 typename cc::michael_map::make_traits<
1477 co::allocator< memory::MichaelAllocator<int> >
1479 > MichaelMap_Lazy_RCU_GPT_cmp_michaelAlloc;
1481 typedef cc::MichaelHashMap< rcu_gpt, LazyList_RCU_GPT_less_stdAlloc,
1482 typename cc::michael_map::make_traits<
1485 > MichaelMap_Lazy_RCU_GPT_less_stdAlloc;
1487 typedef cc::MichaelHashMap< rcu_gpt, LazyList_RCU_GPT_less_stdAlloc_seqcst,
1488 typename cc::michael_map::make_traits<
1491 > MichaelMap_Lazy_RCU_GPT_less_stdAlloc_seqcst;
1493 typedef cc::MichaelHashMap< rcu_gpt, LazyList_RCU_GPT_less_michaelAlloc,
1494 typename cc::michael_map::make_traits<
1496 co::allocator< memory::MichaelAllocator<int> >
1498 > MichaelMap_Lazy_RCU_GPT_less_michaelAlloc;
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<
1506 > MichaelMap_Lazy_RCU_SHB_cmp_stdAlloc;
1508 typedef cc::MichaelHashMap< rcu_shb, LazyList_RCU_SHB_cmp_stdAlloc_seqcst,
1509 typename cc::michael_map::make_traits<
1512 > MichaelMap_Lazy_RCU_SHB_cmp_stdAlloc_seqcst;
1514 typedef cc::MichaelHashMap< rcu_shb, LazyList_RCU_SHB_cmp_michaelAlloc,
1515 typename cc::michael_map::make_traits<
1517 co::allocator< memory::MichaelAllocator<int> >
1519 > MichaelMap_Lazy_RCU_SHB_cmp_michaelAlloc;
1521 typedef cc::MichaelHashMap< rcu_shb, LazyList_RCU_SHB_less_stdAlloc,
1522 typename cc::michael_map::make_traits<
1525 > MichaelMap_Lazy_RCU_SHB_less_stdAlloc;
1527 typedef cc::MichaelHashMap< rcu_shb, LazyList_RCU_SHB_less_stdAlloc_seqcst,
1528 typename cc::michael_map::make_traits<
1531 > MichaelMap_Lazy_RCU_SHB_less_stdAlloc_seqcst;
1533 typedef cc::MichaelHashMap< rcu_shb, LazyList_RCU_SHB_less_michaelAlloc,
1534 typename cc::michael_map::make_traits<
1536 co::allocator< memory::MichaelAllocator<int> >
1538 > MichaelMap_Lazy_RCU_SHB_less_michaelAlloc;
1541 typedef cc::MichaelHashMap< rcu_sht, LazyList_RCU_SHT_cmp_stdAlloc,
1542 typename cc::michael_map::make_traits<
1545 > MichaelMap_Lazy_RCU_SHT_cmp_stdAlloc;
1547 typedef cc::MichaelHashMap< rcu_sht, LazyList_RCU_SHT_cmp_stdAlloc_seqcst,
1548 typename cc::michael_map::make_traits<
1551 > MichaelMap_Lazy_RCU_SHT_cmp_stdAlloc_seqcst;
1553 typedef cc::MichaelHashMap< rcu_sht, LazyList_RCU_SHT_cmp_michaelAlloc,
1554 typename cc::michael_map::make_traits<
1556 co::allocator< memory::MichaelAllocator<int> >
1558 > MichaelMap_Lazy_RCU_SHT_cmp_michaelAlloc;
1560 typedef cc::MichaelHashMap< rcu_sht, LazyList_RCU_SHT_less_stdAlloc,
1561 typename cc::michael_map::make_traits<
1564 > MichaelMap_Lazy_RCU_SHT_less_stdAlloc;
1566 typedef cc::MichaelHashMap< rcu_sht, LazyList_RCU_SHT_less_stdAlloc_seqcst,
1567 typename cc::michael_map::make_traits<
1570 > MichaelMap_Lazy_RCU_SHT_less_stdAlloc_seqcst;
1572 typedef cc::MichaelHashMap< rcu_sht, LazyList_RCU_SHT_less_michaelAlloc,
1573 typename cc::michael_map::make_traits<
1575 co::allocator< memory::MichaelAllocator<int> >
1577 > MichaelMap_Lazy_RCU_SHT_less_michaelAlloc;
1581 typedef NogcMapWrapper< cc::MichaelHashMap< cds::gc::nogc, LazyList_NOGC_cmp_stdAlloc,
1582 typename cc::michael_map::make_traits<
1585 > > MichaelMap_Lazy_NOGC_cmp_stdAlloc;
1587 typedef NogcMapWrapper< cc::MichaelHashMap< cds::gc::nogc, LazyList_NOGC_cmp_stdAlloc_seqcst,
1588 typename cc::michael_map::make_traits<
1591 > > MichaelMap_Lazy_NOGC_cmp_stdAlloc_seqcst;
1593 typedef NogcMapWrapper< cc::MichaelHashMap< cds::gc::nogc, LazyList_NOGC_cmp_michaelAlloc,
1594 typename cc::michael_map::make_traits<
1596 co::allocator< memory::MichaelAllocator<int> >
1598 > > MichaelMap_Lazy_NOGC_cmp_michaelAlloc;
1600 typedef NogcMapWrapper< cc::MichaelHashMap< cds::gc::nogc, LazyList_NOGC_less_stdAlloc,
1601 typename cc::michael_map::make_traits<
1604 > > MichaelMap_Lazy_NOGC_less_stdAlloc;
1606 typedef NogcMapWrapper< cc::MichaelHashMap< cds::gc::nogc, LazyList_NOGC_less_stdAlloc_seqcst,
1607 typename cc::michael_map::make_traits<
1610 > > MichaelMap_Lazy_NOGC_less_stdAlloc_seqcst;
1612 typedef NogcMapWrapper< cc::MichaelHashMap< cds::gc::nogc, LazyList_NOGC_less_michaelAlloc,
1613 typename cc::michael_map::make_traits<
1615 co::allocator< memory::MichaelAllocator<int> >
1617 > > MichaelMap_Lazy_NOGC_less_michaelAlloc;
1620 // ***************************************************************************
1621 // SplitListMap based on MichaelList
1624 class traits_SplitList_Michael_HP_dyn_cmp: public cc::split_list::make_traits<
1625 cc::split_list::ordered_list<cc::michael_list_tag>
1627 ,cc::split_list::ordered_list_traits<
1628 typename cc::michael_list::make_traits<
1629 co::compare< compare >
1634 typedef cc::SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Michael_HP_dyn_cmp > SplitList_Michael_HP_dyn_cmp;
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>
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 >
1648 typedef cc::SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Michael_HP_dyn_cmp_seqcst > SplitList_Michael_HP_dyn_cmp_seqcst;
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 >
1654 ,cc::split_list::ordered_list_traits<
1655 typename cc::michael_list::make_traits<
1656 co::compare< compare >
1661 typedef cc::SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Michael_HP_st_cmp > SplitList_Michael_HP_st_cmp;
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>
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 >
1676 typedef cc::SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Michael_HP_st_cmp_seqcst > SplitList_Michael_HP_st_cmp_seqcst;
1679 class traits_SplitList_Michael_HP_dyn_less: public cc::split_list::make_traits<
1680 cc::split_list::ordered_list<cc::michael_list_tag>
1682 ,cc::split_list::ordered_list_traits<
1683 typename cc::michael_list::make_traits<
1689 typedef cc::SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Michael_HP_dyn_less > SplitList_Michael_HP_dyn_less;
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>
1694 ,co::memory_model< co::v::sequential_consistent >
1695 ,cc::split_list::ordered_list_traits<
1696 typename cc::michael_list::make_traits<
1698 ,co::memory_model< co::v::sequential_consistent >
1703 typedef cc::SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Michael_HP_dyn_less_seqcst > SplitList_Michael_HP_dyn_less_seqcst;
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 >
1709 ,cc::split_list::ordered_list_traits<
1710 typename cc::michael_list::make_traits<
1716 typedef cc::SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Michael_HP_st_less > SplitList_Michael_HP_st_less;
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>
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<
1726 ,co::memory_model< co::v::sequential_consistent >
1731 typedef cc::SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Michael_HP_st_less_seqcst > SplitList_Michael_HP_st_less_seqcst;
1734 typedef cc::SplitListMap< cds::gc::PTB, Key, Value,
1735 typename cc::split_list::make_traits<
1736 cc::split_list::ordered_list<cc::michael_list_tag>
1738 ,cc::split_list::ordered_list_traits<
1739 typename cc::michael_list::make_traits<
1740 co::compare< compare >
1744 > SplitList_Michael_PTB_dyn_cmp;
1746 typedef cc::SplitListMap< cds::gc::PTB, Key, Value,
1747 typename cc::split_list::make_traits<
1748 cc::split_list::ordered_list<cc::michael_list_tag>
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 >
1758 > SplitList_Michael_PTB_dyn_cmp_seqcst;
1760 typedef cc::SplitListMap< cds::gc::PTB, 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 >
1765 ,cc::split_list::ordered_list_traits<
1766 typename cc::michael_list::make_traits<
1767 co::compare< compare >
1771 > SplitList_Michael_PTB_st_cmp;
1773 typedef cc::SplitListMap< cds::gc::PTB, Key, Value,
1774 typename cc::split_list::make_traits<
1775 cc::split_list::ordered_list<cc::michael_list_tag>
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 >
1786 > SplitList_Michael_PTB_st_cmp_seqcst;
1789 typedef cc::SplitListMap< cds::gc::PTB, Key, Value,
1790 typename cc::split_list::make_traits<
1791 cc::split_list::ordered_list<cc::michael_list_tag>
1793 ,cc::split_list::ordered_list_traits<
1794 typename cc::michael_list::make_traits<
1799 > SplitList_Michael_PTB_dyn_less;
1801 typedef cc::SplitListMap< cds::gc::PTB, Key, Value,
1802 typename cc::split_list::make_traits<
1803 cc::split_list::ordered_list<cc::michael_list_tag>
1805 ,co::memory_model< co::v::sequential_consistent >
1806 ,cc::split_list::ordered_list_traits<
1807 typename cc::michael_list::make_traits<
1809 ,co::memory_model< co::v::sequential_consistent >
1813 > SplitList_Michael_PTB_dyn_less_seqcst;
1815 typedef cc::SplitListMap< cds::gc::PTB, 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 >
1820 ,cc::split_list::ordered_list_traits<
1821 typename cc::michael_list::make_traits<
1826 > SplitList_Michael_PTB_st_less;
1828 typedef cc::SplitListMap< cds::gc::PTB, Key, Value,
1829 typename cc::split_list::make_traits<
1830 cc::split_list::ordered_list<cc::michael_list_tag>
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<
1837 ,co::memory_model< co::v::sequential_consistent >
1841 > SplitList_Michael_PTB_st_less_seqcst;
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>
1848 ,cc::split_list::ordered_list_traits<
1849 typename cc::michael_list::make_traits<
1850 co::compare< compare >
1854 > SplitList_Michael_RCU_GPI_dyn_cmp;
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>
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 >
1868 > SplitList_Michael_RCU_GPI_dyn_cmp_seqcst;
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 >
1875 ,cc::split_list::ordered_list_traits<
1876 typename cc::michael_list::make_traits<
1877 co::compare< compare >
1881 > SplitList_Michael_RCU_GPI_st_cmp;
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>
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 >
1896 > SplitList_Michael_RCU_GPI_st_cmp_seqcst;
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>
1903 ,cc::split_list::ordered_list_traits<
1904 typename cc::michael_list::make_traits<
1909 > SplitList_Michael_RCU_GPI_dyn_less;
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>
1915 ,co::memory_model< co::v::sequential_consistent >
1916 ,cc::split_list::ordered_list_traits<
1917 typename cc::michael_list::make_traits<
1919 ,co::memory_model< co::v::sequential_consistent >
1923 > SplitList_Michael_RCU_GPI_dyn_less_seqcst;
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 >
1930 ,cc::split_list::ordered_list_traits<
1931 typename cc::michael_list::make_traits<
1936 > SplitList_Michael_RCU_GPI_st_less;
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>
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<
1947 ,co::memory_model< co::v::sequential_consistent >
1951 > SplitList_Michael_RCU_GPI_st_less_seqcst;
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>
1958 ,cc::split_list::ordered_list_traits<
1959 typename cc::michael_list::make_traits<
1960 co::compare< compare >
1964 > SplitList_Michael_RCU_GPB_dyn_cmp;
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>
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 >
1978 > SplitList_Michael_RCU_GPB_dyn_cmp_seqcst;
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 >
1985 ,cc::split_list::ordered_list_traits<
1986 typename cc::michael_list::make_traits<
1987 co::compare< compare >
1991 > SplitList_Michael_RCU_GPB_st_cmp;
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>
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 >
2006 > SplitList_Michael_RCU_GPB_st_cmp_seqcst;
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>
2013 ,cc::split_list::ordered_list_traits<
2014 typename cc::michael_list::make_traits<
2019 > SplitList_Michael_RCU_GPB_dyn_less;
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>
2025 ,co::memory_model< co::v::sequential_consistent >
2026 ,cc::split_list::ordered_list_traits<
2027 typename cc::michael_list::make_traits<
2029 ,co::memory_model< co::v::sequential_consistent >
2033 > SplitList_Michael_RCU_GPB_dyn_less_seqcst;
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 >
2040 ,cc::split_list::ordered_list_traits<
2041 typename cc::michael_list::make_traits<
2046 > SplitList_Michael_RCU_GPB_st_less;
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>
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<
2057 ,co::memory_model< co::v::sequential_consistent >
2061 > SplitList_Michael_RCU_GPB_st_less_seqcst;
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>
2068 ,cc::split_list::ordered_list_traits<
2069 typename cc::michael_list::make_traits<
2070 co::compare< compare >
2074 > SplitList_Michael_RCU_GPT_dyn_cmp;
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>
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 >
2088 > SplitList_Michael_RCU_GPT_dyn_cmp_seqcst;
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 >
2095 ,cc::split_list::ordered_list_traits<
2096 typename cc::michael_list::make_traits<
2097 co::compare< compare >
2101 > SplitList_Michael_RCU_GPT_st_cmp;
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>
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 >
2116 > SplitList_Michael_RCU_GPT_st_cmp_seqcst;
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>
2123 ,cc::split_list::ordered_list_traits<
2124 typename cc::michael_list::make_traits<
2129 > SplitList_Michael_RCU_GPT_dyn_less;
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>
2135 ,co::memory_model< co::v::sequential_consistent >
2136 ,cc::split_list::ordered_list_traits<
2137 typename cc::michael_list::make_traits<
2139 ,co::memory_model< co::v::sequential_consistent >
2143 > SplitList_Michael_RCU_GPT_dyn_less_seqcst;
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 >
2150 ,cc::split_list::ordered_list_traits<
2151 typename cc::michael_list::make_traits<
2156 > SplitList_Michael_RCU_GPT_st_less;
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>
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<
2167 ,co::memory_model< co::v::sequential_consistent >
2171 > SplitList_Michael_RCU_GPT_st_less_seqcst;
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>
2178 ,cc::split_list::ordered_list_traits<
2179 typename cc::michael_list::make_traits<
2180 co::compare< compare >
2184 > SplitList_Michael_RCU_SHB_dyn_cmp;
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>
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 >
2198 > SplitList_Michael_RCU_SHB_dyn_cmp_seqcst;
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 >
2205 ,cc::split_list::ordered_list_traits<
2206 typename cc::michael_list::make_traits<
2207 co::compare< compare >
2211 > SplitList_Michael_RCU_SHB_st_cmp;
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>
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 >
2226 > SplitList_Michael_RCU_SHB_st_cmp_seqcst;
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>
2233 ,cc::split_list::ordered_list_traits<
2234 typename cc::michael_list::make_traits<
2239 > SplitList_Michael_RCU_SHB_dyn_less;
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>
2245 ,co::memory_model< co::v::sequential_consistent >
2246 ,cc::split_list::ordered_list_traits<
2247 typename cc::michael_list::make_traits<
2249 ,co::memory_model< co::v::sequential_consistent >
2253 > SplitList_Michael_RCU_SHB_dyn_less_seqcst;
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 >
2260 ,cc::split_list::ordered_list_traits<
2261 typename cc::michael_list::make_traits<
2266 > SplitList_Michael_RCU_SHB_st_less;
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>
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<
2277 ,co::memory_model< co::v::sequential_consistent >
2281 > SplitList_Michael_RCU_SHB_st_less_seqcst;
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>
2288 ,cc::split_list::ordered_list_traits<
2289 typename cc::michael_list::make_traits<
2290 co::compare< compare >
2294 > SplitList_Michael_RCU_SHT_dyn_cmp;
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>
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 >
2308 > SplitList_Michael_RCU_SHT_dyn_cmp_seqcst;
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 >
2315 ,cc::split_list::ordered_list_traits<
2316 typename cc::michael_list::make_traits<
2317 co::compare< compare >
2321 > SplitList_Michael_RCU_SHT_st_cmp;
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>
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 >
2336 > SplitList_Michael_RCU_SHT_st_cmp_seqcst;
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>
2343 ,cc::split_list::ordered_list_traits<
2344 typename cc::michael_list::make_traits<
2349 > SplitList_Michael_RCU_SHT_dyn_less;
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>
2355 ,co::memory_model< co::v::sequential_consistent >
2356 ,cc::split_list::ordered_list_traits<
2357 typename cc::michael_list::make_traits<
2359 ,co::memory_model< co::v::sequential_consistent >
2363 > SplitList_Michael_RCU_SHT_dyn_less_seqcst;
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 >
2370 ,cc::split_list::ordered_list_traits<
2371 typename cc::michael_list::make_traits<
2376 > SplitList_Michael_RCU_SHT_st_less;
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>
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<
2387 ,co::memory_model< co::v::sequential_consistent >
2391 > SplitList_Michael_RCU_SHT_st_less_seqcst;
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>
2399 ,cc::split_list::ordered_list_traits<
2400 typename cc::michael_list::make_traits<
2401 co::compare< compare >
2405 > > SplitList_Michael_NOGC_dyn_cmp;
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>
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 >
2419 > > SplitList_Michael_NOGC_dyn_cmp_seqcst;
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 >
2426 ,cc::split_list::ordered_list_traits<
2427 typename cc::michael_list::make_traits<
2428 co::compare< compare >
2432 > > SplitList_Michael_NOGC_st_cmp;
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>
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 >
2447 > > SplitList_Michael_NOGC_st_cmp_seqcst;
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>
2454 ,cc::split_list::ordered_list_traits<
2455 typename cc::michael_list::make_traits<
2460 > > SplitList_Michael_NOGC_dyn_less;
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>
2466 ,co::memory_model< co::v::sequential_consistent >
2467 ,cc::split_list::ordered_list_traits<
2468 typename cc::michael_list::make_traits<
2470 ,co::memory_model< co::v::sequential_consistent >
2474 > > SplitList_Michael_NOGC_dyn_less_seqcst;
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 >
2481 ,cc::split_list::ordered_list_traits<
2482 typename cc::michael_list::make_traits<
2487 > > SplitList_Michael_NOGC_st_less;
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>
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<
2498 ,co::memory_model< co::v::sequential_consistent >
2502 > > SplitList_Michael_NOGC_st_less_seqcst;
2505 // ***************************************************************************
2506 // SplitListMap based on LazyKVList
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>
2513 ,cc::split_list::ordered_list_traits<
2514 typename cc::lazy_list::make_traits<
2515 co::compare< compare >
2519 > SplitList_Lazy_HP_dyn_cmp;
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>
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 >
2533 > SplitList_Lazy_HP_dyn_cmp_seqcst;
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 >
2540 ,cc::split_list::ordered_list_traits<
2541 typename cc::lazy_list::make_traits<
2542 co::compare< compare >
2546 > SplitList_Lazy_HP_st_cmp;
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>
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 >
2561 > SplitList_Lazy_HP_st_cmp_seqcst;
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>
2569 ,cc::split_list::ordered_list_traits<
2570 typename cc::lazy_list::make_traits<
2575 > SplitList_Lazy_HP_dyn_less;
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>
2581 ,co::memory_model< co::v::sequential_consistent >
2582 ,cc::split_list::ordered_list_traits<
2583 typename cc::lazy_list::make_traits<
2585 ,co::memory_model< co::v::sequential_consistent >
2589 > SplitList_Lazy_HP_dyn_less_seqcst;
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 >
2596 ,cc::split_list::ordered_list_traits<
2597 typename cc::lazy_list::make_traits<
2602 > SplitList_Lazy_HP_st_less;
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>
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<
2613 ,co::memory_model< co::v::sequential_consistent >
2617 > SplitList_Lazy_HP_st_less_seqcst;
2620 typedef cc::SplitListMap< cds::gc::PTB, Key, Value,
2621 typename cc::split_list::make_traits<
2622 cc::split_list::ordered_list<cc::lazy_list_tag>
2624 ,cc::split_list::ordered_list_traits<
2625 typename cc::lazy_list::make_traits<
2626 co::compare< compare >
2630 > SplitList_Lazy_PTB_dyn_cmp;
2632 typedef cc::SplitListMap< cds::gc::PTB, Key, Value,
2633 typename cc::split_list::make_traits<
2634 cc::split_list::ordered_list<cc::lazy_list_tag>
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 >
2644 > SplitList_Lazy_PTB_dyn_cmp_seqcst;
2646 typedef cc::SplitListMap< cds::gc::PTB, 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 >
2651 ,cc::split_list::ordered_list_traits<
2652 typename cc::lazy_list::make_traits<
2653 co::compare< compare >
2657 > SplitList_Lazy_PTB_st_cmp;
2659 typedef cc::SplitListMap< cds::gc::PTB, Key, Value,
2660 typename cc::split_list::make_traits<
2661 cc::split_list::ordered_list<cc::lazy_list_tag>
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 >
2672 > SplitList_Lazy_PTB_st_cmp_seqcst;
2675 typedef cc::SplitListMap< cds::gc::PTB, Key, Value,
2676 typename cc::split_list::make_traits<
2677 cc::split_list::ordered_list<cc::lazy_list_tag>
2679 ,cc::split_list::ordered_list_traits<
2680 typename cc::lazy_list::make_traits<
2685 > SplitList_Lazy_PTB_dyn_less;
2687 typedef cc::SplitListMap< cds::gc::PTB, Key, Value,
2688 typename cc::split_list::make_traits<
2689 cc::split_list::ordered_list<cc::lazy_list_tag>
2691 ,co::memory_model< co::v::sequential_consistent >
2692 ,cc::split_list::ordered_list_traits<
2693 typename cc::lazy_list::make_traits<
2695 ,co::memory_model< co::v::sequential_consistent >
2699 > SplitList_Lazy_PTB_dyn_less_seqcst;
2701 typedef cc::SplitListMap< cds::gc::PTB, 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 >
2706 ,cc::split_list::ordered_list_traits<
2707 typename cc::lazy_list::make_traits<
2712 > SplitList_Lazy_PTB_st_less;
2714 typedef cc::SplitListMap< cds::gc::PTB, Key, Value,
2715 typename cc::split_list::make_traits<
2716 cc::split_list::ordered_list<cc::lazy_list_tag>
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<
2723 ,co::memory_model< co::v::sequential_consistent >
2727 > SplitList_Lazy_PTB_st_less_seqcst;
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>
2734 ,cc::split_list::ordered_list_traits<
2735 typename cc::lazy_list::make_traits<
2736 co::compare< compare >
2740 > SplitList_Lazy_RCU_GPI_dyn_cmp;
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>
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 >
2754 > SplitList_Lazy_RCU_GPI_dyn_cmp_seqcst;
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 >
2761 ,cc::split_list::ordered_list_traits<
2762 typename cc::lazy_list::make_traits<
2763 co::compare< compare >
2767 > SplitList_Lazy_RCU_GPI_st_cmp;
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>
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 >
2782 > SplitList_Lazy_RCU_GPI_st_cmp_seqcst;
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>
2789 ,cc::split_list::ordered_list_traits<
2790 typename cc::lazy_list::make_traits<
2795 > SplitList_Lazy_RCU_GPI_dyn_less;
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>
2801 ,co::memory_model< co::v::sequential_consistent >
2802 ,cc::split_list::ordered_list_traits<
2803 typename cc::lazy_list::make_traits<
2805 ,co::memory_model< co::v::sequential_consistent >
2809 > SplitList_Lazy_RCU_GPI_dyn_less_seqcst;
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 >
2816 ,cc::split_list::ordered_list_traits<
2817 typename cc::lazy_list::make_traits<
2822 > SplitList_Lazy_RCU_GPI_st_less;
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>
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<
2833 ,co::memory_model< co::v::sequential_consistent >
2837 > SplitList_Lazy_RCU_GPI_st_less_seqcst;
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>
2844 ,cc::split_list::ordered_list_traits<
2845 typename cc::lazy_list::make_traits<
2846 co::compare< compare >
2850 > SplitList_Lazy_RCU_GPB_dyn_cmp;
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>
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 >
2864 > SplitList_Lazy_RCU_GPB_dyn_cmp_seqcst;
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 >
2871 ,cc::split_list::ordered_list_traits<
2872 typename cc::lazy_list::make_traits<
2873 co::compare< compare >
2877 > SplitList_Lazy_RCU_GPB_st_cmp;
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>
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 >
2892 > SplitList_Lazy_RCU_GPB_st_cmp_seqcst;
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>
2899 ,cc::split_list::ordered_list_traits<
2900 typename cc::lazy_list::make_traits<
2905 > SplitList_Lazy_RCU_GPB_dyn_less;
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>
2911 ,co::memory_model< co::v::sequential_consistent >
2912 ,cc::split_list::ordered_list_traits<
2913 typename cc::lazy_list::make_traits<
2915 ,co::memory_model< co::v::sequential_consistent >
2919 > SplitList_Lazy_RCU_GPB_dyn_less_seqcst;
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 >
2926 ,cc::split_list::ordered_list_traits<
2927 typename cc::lazy_list::make_traits<
2932 > SplitList_Lazy_RCU_GPB_st_less;
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>
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<
2943 ,co::memory_model< co::v::sequential_consistent >
2947 > SplitList_Lazy_RCU_GPB_st_less_seqcst;
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>
2954 ,cc::split_list::ordered_list_traits<
2955 typename cc::lazy_list::make_traits<
2956 co::compare< compare >
2960 > SplitList_Lazy_RCU_GPT_dyn_cmp;
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>
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 >
2974 > SplitList_Lazy_RCU_GPT_dyn_cmp_seqcst;
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 >
2981 ,cc::split_list::ordered_list_traits<
2982 typename cc::lazy_list::make_traits<
2983 co::compare< compare >
2987 > SplitList_Lazy_RCU_GPT_st_cmp;
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>
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 >
3002 > SplitList_Lazy_RCU_GPT_st_cmp_seqcst;
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>
3009 ,cc::split_list::ordered_list_traits<
3010 typename cc::lazy_list::make_traits<
3015 > SplitList_Lazy_RCU_GPT_dyn_less;
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>
3021 ,co::memory_model< co::v::sequential_consistent >
3022 ,cc::split_list::ordered_list_traits<
3023 typename cc::lazy_list::make_traits<
3025 ,co::memory_model< co::v::sequential_consistent >
3029 > SplitList_Lazy_RCU_GPT_dyn_less_seqcst;
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 >
3036 ,cc::split_list::ordered_list_traits<
3037 typename cc::lazy_list::make_traits<
3042 > SplitList_Lazy_RCU_GPT_st_less;
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>
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<
3053 ,co::memory_model< co::v::sequential_consistent >
3057 > SplitList_Lazy_RCU_GPT_st_less_seqcst;
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>
3064 ,cc::split_list::ordered_list_traits<
3065 typename cc::lazy_list::make_traits<
3066 co::compare< compare >
3070 > SplitList_Lazy_RCU_SHB_dyn_cmp;
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>
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 >
3084 > SplitList_Lazy_RCU_SHB_dyn_cmp_seqcst;
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 >
3091 ,cc::split_list::ordered_list_traits<
3092 typename cc::lazy_list::make_traits<
3093 co::compare< compare >
3097 > SplitList_Lazy_RCU_SHB_st_cmp;
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>
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 >
3112 > SplitList_Lazy_RCU_SHB_st_cmp_seqcst;
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>
3119 ,cc::split_list::ordered_list_traits<
3120 typename cc::lazy_list::make_traits<
3125 > SplitList_Lazy_RCU_SHB_dyn_less;
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>
3131 ,co::memory_model< co::v::sequential_consistent >
3132 ,cc::split_list::ordered_list_traits<
3133 typename cc::lazy_list::make_traits<
3135 ,co::memory_model< co::v::sequential_consistent >
3139 > SplitList_Lazy_RCU_SHB_dyn_less_seqcst;
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 >
3146 ,cc::split_list::ordered_list_traits<
3147 typename cc::lazy_list::make_traits<
3152 > SplitList_Lazy_RCU_SHB_st_less;
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>
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<
3163 ,co::memory_model< co::v::sequential_consistent >
3167 > SplitList_Lazy_RCU_SHB_st_less_seqcst;
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>
3174 ,cc::split_list::ordered_list_traits<
3175 typename cc::lazy_list::make_traits<
3176 co::compare< compare >
3180 > SplitList_Lazy_RCU_SHT_dyn_cmp;
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>
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 >
3194 > SplitList_Lazy_RCU_SHT_dyn_cmp_seqcst;
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 >
3201 ,cc::split_list::ordered_list_traits<
3202 typename cc::lazy_list::make_traits<
3203 co::compare< compare >
3207 > SplitList_Lazy_RCU_SHT_st_cmp;
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>
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 >
3222 > SplitList_Lazy_RCU_SHT_st_cmp_seqcst;
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>
3229 ,cc::split_list::ordered_list_traits<
3230 typename cc::lazy_list::make_traits<
3235 > SplitList_Lazy_RCU_SHT_dyn_less;
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>
3241 ,co::memory_model< co::v::sequential_consistent >
3242 ,cc::split_list::ordered_list_traits<
3243 typename cc::lazy_list::make_traits<
3245 ,co::memory_model< co::v::sequential_consistent >
3249 > SplitList_Lazy_RCU_SHT_dyn_less_seqcst;
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 >
3256 ,cc::split_list::ordered_list_traits<
3257 typename cc::lazy_list::make_traits<
3262 > SplitList_Lazy_RCU_SHT_st_less;
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>
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<
3273 ,co::memory_model< co::v::sequential_consistent >
3277 > SplitList_Lazy_RCU_SHT_st_less_seqcst;
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>
3285 ,cc::split_list::ordered_list_traits<
3286 typename cc::lazy_list::make_traits<
3287 co::compare< compare >
3291 > > SplitList_Lazy_NOGC_dyn_cmp;
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>
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 >
3305 > > SplitList_Lazy_NOGC_dyn_cmp_seqcst;
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 >
3312 ,cc::split_list::ordered_list_traits<
3313 typename cc::lazy_list::make_traits<
3314 co::compare< compare >
3318 > > SplitList_Lazy_NOGC_st_cmp;
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>
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 >
3333 > > SplitList_Lazy_NOGC_st_cmp_seqcst;
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>
3341 ,cc::split_list::ordered_list_traits<
3342 typename cc::lazy_list::make_traits<
3347 > > SplitList_Lazy_NOGC_dyn_less;
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>
3353 ,co::memory_model< co::v::sequential_consistent >
3354 ,cc::split_list::ordered_list_traits<
3355 typename cc::lazy_list::make_traits<
3357 ,co::memory_model< co::v::sequential_consistent >
3361 > > SplitList_Lazy_NOGC_dyn_less_seqcst;
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 >
3368 ,cc::split_list::ordered_list_traits<
3369 typename cc::lazy_list::make_traits<
3374 > > SplitList_Lazy_NOGC_st_less;
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>
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<
3385 ,co::memory_model< co::v::sequential_consistent >
3389 > > SplitList_Lazy_NOGC_st_less_seqcst;
3392 // ***************************************************************************
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> >
3404 typedef cc::StripedMap< BucketEntry,
3405 co::mutex_policy< cc::striped_set::striping<> >
3406 ,co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
3409 typedef typename base_class::resizing_policy resizing_policy_t;
3411 resizing_policy_t m_placeHolder;
3413 StripedHashMap_seq( size_t nCapacity, size_t nLoadFactor )
3414 : base_class( nCapacity / nLoadFactor / 16, *(new(&m_placeHolder) resizing_policy_t( nLoadFactor )) )
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<> >
3427 typedef cc::StripedMap< BucketEntry,
3428 co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
3429 ,co::mutex_policy< cc::striped_set::striping<> >
3432 typedef typename base_class::resizing_policy resizing_policy_t;
3434 resizing_policy_t m_placeHolder;
3436 StripedHashMap_ord( size_t nCapacity, size_t nLoadFactor )
3437 : base_class( 0, *(new(&m_placeHolder) resizing_policy_t( nLoadFactor * 1024 )) )
3442 typedef StripedHashMap_seq<
3443 std::list< std::pair< Key const, Value > >
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 > >
3452 > StripedMap_hashmap;
3454 typedef StripedHashMap_ord<
3455 std::unordered_map< Key, Value, hash, equal_to >
3457 > StripedMap_hashmap;
3460 typedef StripedHashMap_ord<
3461 std::map< Key, Value, less >
3465 typedef StripedHashMap_ord<
3466 boost::unordered_map< Key, Value, hash, equal_to >
3468 > StripedMap_boost_unordered_map;
3470 #if BOOST_VERSION >= 104800
3471 typedef StripedHashMap_seq<
3472 boost::container::slist< std::pair< Key const, Value > >
3477 typedef StripedHashMap_seq<
3478 boost::container::list< std::pair< Key const, Value > >
3481 > StripedMap_boost_list;
3483 typedef StripedHashMap_ord<
3484 boost::container::map< Key, Value, less >
3486 > StripedMap_boost_map;
3488 //# ifdef CDS_UNIT_MAP_TYPES_ENABLE_BOOST_FLAT_CONTAINERS
3489 typedef StripedHashMap_ord<
3490 boost::container::flat_map< Key, Value, less >
3492 > StripedMap_boost_flat_map;
3494 #endif // BOOST_VERSION >= 104800
3496 // ***************************************************************************
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<> >
3508 typedef cc::StripedMap< BucketEntry,
3509 co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
3510 ,co::mutex_policy< cc::striped_set::refinable<> >
3513 typedef typename base_class::resizing_policy resizing_policy_t;
3515 resizing_policy_t m_placeHolder;
3517 RefinableHashMap_seq( size_t nCapacity, size_t nLoadFactor )
3518 : base_class( nCapacity / nLoadFactor / 16, *(new(&m_placeHolder) resizing_policy_t( nLoadFactor )) )
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<> >
3531 typedef cc::StripedMap< BucketEntry,
3532 co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
3533 ,co::mutex_policy< cc::striped_set::refinable<> >
3536 typedef typename base_class::resizing_policy resizing_policy_t;
3538 resizing_policy_t m_placeHolder;
3540 RefinableHashMap_ord( size_t nCapacity, size_t nLoadFactor )
3541 : base_class( 0, *(new(&m_placeHolder) resizing_policy_t( nLoadFactor * 1024 )) )
3546 typedef RefinableHashMap_seq<
3547 std::list< std::pair< Key const, Value > >
3550 > RefinableMap_list;
3552 #if BOOST_VERSION >= 104800
3553 typedef RefinableHashMap_seq<
3554 boost::container::slist< std::pair< Key const, Value > >
3557 > RefinableMap_slist;
3560 typedef RefinableHashMap_ord<
3561 std::map< Key, Value, less >
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 > >
3569 > RefinableMap_hashmap;
3571 typedef RefinableHashMap_ord<
3572 std::unordered_map< Key, Value, hash, equal_to >
3574 > RefinableMap_hashmap;
3576 typedef RefinableHashMap_ord<
3577 boost::unordered_map< Key, Value, hash, equal_to >
3579 > RefinableMap_boost_unordered_map;
3581 #if BOOST_VERSION >= 104800
3582 typedef RefinableHashMap_seq<
3583 boost::container::list< std::pair< Key const, Value > >
3586 > RefinableMap_boost_list;
3588 typedef RefinableHashMap_ord<
3589 boost::container::map< Key, Value, less >
3591 > RefinableMap_boost_map;
3593 //# ifdef CDS_UNIT_MAP_TYPES_ENABLE_BOOST_FLAT_CONTAINERS
3594 typedef RefinableHashMap_ord<
3595 boost::container::flat_map< Key, Value, less >
3597 > RefinableMap_boost_flat_map;
3599 #endif // #if BOOST_VERSION >= 104800
3602 // ***************************************************************************
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
3765 // ***************************************************************************
3768 class traits_SkipListMap_hp_less_pascal: public cc::skip_list::make_traits <
3770 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3771 ,co::item_counter< cds::atomicity::item_counter >
3774 typedef cc::SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_hp_less_pascal > SkipListMap_hp_less_pascal;
3776 class traits_SkipListMap_hp_less_pascal_seqcst: public cc::skip_list::make_traits <
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 >
3783 typedef cc::SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_hp_less_pascal_seqcst > SkipListMap_hp_less_pascal_seqcst;
3785 class traits_SkipListMap_hp_less_pascal_stat: public cc::skip_list::make_traits <
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 >
3792 typedef cc::SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_hp_less_pascal_stat > SkipListMap_hp_less_pascal_stat;
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 >
3800 typedef cc::SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_hp_cmp_pascal > SkipListMap_hp_cmp_pascal;
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 >
3809 typedef cc::SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_hp_cmp_pascal_stat > SkipListMap_hp_cmp_pascal_stat;
3811 class traits_SkipListMap_hp_less_xorshift: public cc::skip_list::make_traits <
3813 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3814 ,co::item_counter< cds::atomicity::item_counter >
3817 typedef cc::SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_hp_less_xorshift > SkipListMap_hp_less_xorshift;
3819 class traits_SkipListMap_hp_less_xorshift_stat: public cc::skip_list::make_traits <
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 >
3826 typedef cc::SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_hp_less_xorshift_stat > SkipListMap_hp_less_xorshift_stat;
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 >
3834 typedef cc::SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_hp_cmp_xorshift > SkipListMap_hp_cmp_xorshift;
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 >
3843 typedef cc::SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_hp_cmp_xorshift_stat > SkipListMap_hp_cmp_xorshift_stat;
3845 // ***************************************************************************
3846 // SkipListMap - PTB
3848 class traits_SkipListMap_ptb_less_pascal: public cc::skip_list::make_traits <
3850 ,co::item_counter< cds::atomicity::item_counter >
3851 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3854 typedef cc::SkipListMap< cds::gc::PTB, Key, Value, traits_SkipListMap_ptb_less_pascal > SkipListMap_ptb_less_pascal;
3856 class traits_SkipListMap_ptb_less_pascal_seqcst: public cc::skip_list::make_traits <
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 >
3863 typedef cc::SkipListMap< cds::gc::PTB, Key, Value, traits_SkipListMap_ptb_less_pascal_seqcst > SkipListMap_ptb_less_pascal_seqcst;
3865 class traits_SkipListMap_ptb_less_pascal_stat: public cc::skip_list::make_traits <
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 >
3872 typedef cc::SkipListMap< cds::gc::PTB, Key, Value, traits_SkipListMap_ptb_less_pascal_stat > SkipListMap_ptb_less_pascal_stat;
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 >
3880 typedef cc::SkipListMap< cds::gc::PTB, Key, Value, traits_SkipListMap_ptb_cmp_pascal > SkipListMap_ptb_cmp_pascal;
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<> >
3889 typedef cc::SkipListMap< cds::gc::PTB, Key, Value, traits_SkipListMap_ptb_cmp_pascal_stat > SkipListMap_ptb_cmp_pascal_stat;
3891 class traits_SkipListMap_ptb_less_xorshift: public cc::skip_list::make_traits <
3893 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3894 ,co::item_counter< cds::atomicity::item_counter >
3897 typedef cc::SkipListMap< cds::gc::PTB, Key, Value, traits_SkipListMap_ptb_less_xorshift > SkipListMap_ptb_less_xorshift;
3899 class traits_SkipListMap_ptb_less_xorshift_stat: public cc::skip_list::make_traits <
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 >
3906 typedef cc::SkipListMap< cds::gc::PTB, Key, Value, traits_SkipListMap_ptb_less_xorshift_stat > SkipListMap_ptb_less_xorshift_stat;
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 >
3914 typedef cc::SkipListMap< cds::gc::PTB, Key, Value, traits_SkipListMap_ptb_cmp_xorshift > SkipListMap_ptb_cmp_xorshift;
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<> >
3923 typedef cc::SkipListMap< cds::gc::PTB, Key, Value, traits_SkipListMap_ptb_cmp_xorshift_stat > SkipListMap_ptb_cmp_xorshift_stat;
3925 // ***************************************************************************
3926 // SkipListMap< gc::nogc >
3928 class traits_SkipListMap_nogc_less_pascal: public cc::skip_list::make_traits <
3930 ,co::item_counter< cds::atomicity::item_counter >
3931 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3934 typedef NogcMapWrapper_dctor<
3935 cc::SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_nogc_less_pascal >
3936 > SkipListMap_nogc_less_pascal;
3938 class traits_SkipListMap_nogc_less_pascal_seqcst: public cc::skip_list::make_traits <
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 >
3945 typedef NogcMapWrapper_dctor<
3946 cc::SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_nogc_less_pascal_seqcst >
3947 > SkipListMap_nogc_less_pascal_seqcst;
3949 class traits_SkipListMap_nogc_less_pascal_stat: public cc::skip_list::make_traits <
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 >
3956 typedef NogcMapWrapper_dctor<
3957 cc::SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_nogc_less_pascal_stat >
3958 > SkipListMap_nogc_less_pascal_stat;
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 >
3966 typedef NogcMapWrapper_dctor<
3967 cc::SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_nogc_cmp_pascal >
3968 > SkipListMap_nogc_cmp_pascal;
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<> >
3977 typedef NogcMapWrapper_dctor<
3978 cc::SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_nogc_cmp_pascal_stat >
3979 > SkipListMap_nogc_cmp_pascal_stat;
3981 class traits_SkipListMap_nogc_less_xorshift: public cc::skip_list::make_traits <
3983 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3984 ,co::item_counter< cds::atomicity::item_counter >
3987 typedef NogcMapWrapper_dctor<
3988 cc::SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_nogc_less_xorshift >
3989 > SkipListMap_nogc_less_xorshift;
3991 class traits_SkipListMap_nogc_less_xorshift_stat: public cc::skip_list::make_traits <
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 >
3998 typedef NogcMapWrapper_dctor<
3999 cc::SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_nogc_less_xorshift_stat >
4000 > SkipListMap_nogc_less_xorshift_stat;
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 >
4008 typedef NogcMapWrapper_dctor< cc::SkipListMap<
4009 cds::gc::nogc, Key, Value, traits_SkipListMap_nogc_cmp_xorshift >
4010 > SkipListMap_nogc_cmp_xorshift;
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<> >
4019 typedef NogcMapWrapper_dctor<
4020 cc::SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_nogc_cmp_xorshift_stat >
4021 > SkipListMap_nogc_cmp_xorshift_stat;
4023 // ***************************************************************************
4024 // SkipListMap - RCU general_instant
4026 class traits_SkipListMap_rcu_gpi_less_pascal: public cc::skip_list::make_traits <
4028 ,co::item_counter< cds::atomicity::item_counter >
4029 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
4032 typedef cc::SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_rcu_gpi_less_pascal > SkipListMap_rcu_gpi_less_pascal;
4034 class traits_SkipListMap_rcu_gpi_less_pascal_seqcst: public cc::skip_list::make_traits <
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 >
4041 typedef cc::SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_rcu_gpi_less_pascal_seqcst > SkipListMap_rcu_gpi_less_pascal_seqcst;
4043 class traits_SkipListMap_rcu_gpi_less_pascal_stat: public cc::skip_list::make_traits <
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 >
4050 typedef cc::SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_rcu_gpi_less_pascal_stat > SkipListMap_rcu_gpi_less_pascal_stat;
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 >
4058 typedef cc::SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_rcu_gpi_cmp_pascal > SkipListMap_rcu_gpi_cmp_pascal;
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<> >
4067 typedef cc::SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_rcu_gpi_cmp_pascal_stat > SkipListMap_rcu_gpi_cmp_pascal_stat;
4069 class traits_SkipListMap_rcu_gpi_less_xorshift: public cc::skip_list::make_traits <
4071 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
4072 ,co::item_counter< cds::atomicity::item_counter >
4075 typedef cc::SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_rcu_gpi_less_xorshift > SkipListMap_rcu_gpi_less_xorshift;
4077 class traits_SkipListMap_rcu_gpi_less_xorshift_stat: public cc::skip_list::make_traits <
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 >
4084 typedef cc::SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_rcu_gpi_less_xorshift_stat > SkipListMap_rcu_gpi_less_xorshift_stat;
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 >
4092 typedef cc::SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_rcu_gpi_cmp_xorshift > SkipListMap_rcu_gpi_cmp_xorshift;
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<> >
4101 typedef cc::SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_rcu_gpi_cmp_xorshift_stat > SkipListMap_rcu_gpi_cmp_xorshift_stat;
4103 // ***************************************************************************
4104 // SkipListMap - RCU general_buffered
4106 class traits_SkipListMap_rcu_gpb_less_pascal: public cc::skip_list::make_traits <
4108 ,co::item_counter< cds::atomicity::item_counter >
4109 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
4112 typedef cc::SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_rcu_gpb_less_pascal > SkipListMap_rcu_gpb_less_pascal;
4114 class traits_SkipListMap_rcu_gpb_less_pascal_seqcst: public cc::skip_list::make_traits <
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 >
4121 typedef cc::SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_rcu_gpb_less_pascal_seqcst > SkipListMap_rcu_gpb_less_pascal_seqcst;
4123 class traits_SkipListMap_rcu_gpb_less_pascal_stat: public cc::skip_list::make_traits <
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 >
4130 typedef cc::SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_rcu_gpb_less_pascal_stat > SkipListMap_rcu_gpb_less_pascal_stat;
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 >
4138 typedef cc::SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_rcu_gpb_cmp_pascal > SkipListMap_rcu_gpb_cmp_pascal;
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<> >
4147 typedef cc::SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_rcu_gpb_cmp_pascal_stat > SkipListMap_rcu_gpb_cmp_pascal_stat;
4149 class traits_SkipListMap_rcu_gpb_less_xorshift: public cc::skip_list::make_traits <
4151 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
4152 ,co::item_counter< cds::atomicity::item_counter >
4155 typedef cc::SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_rcu_gpb_less_xorshift > SkipListMap_rcu_gpb_less_xorshift;
4157 class traits_SkipListMap_rcu_gpb_less_xorshift_stat: public cc::skip_list::make_traits <
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 >
4164 typedef cc::SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_rcu_gpb_less_xorshift_stat > SkipListMap_rcu_gpb_less_xorshift_stat;
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 >
4172 typedef cc::SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_rcu_gpb_cmp_xorshift > SkipListMap_rcu_gpb_cmp_xorshift;
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<> >
4181 typedef cc::SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_rcu_gpb_cmp_xorshift_stat > SkipListMap_rcu_gpb_cmp_xorshift_stat;
4183 // ***************************************************************************
4184 // SkipListMap - RCU general_threaded
4186 class traits_SkipListMap_rcu_gpt_less_pascal: public cc::skip_list::make_traits <
4188 ,co::item_counter< cds::atomicity::item_counter >
4189 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
4192 typedef cc::SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_rcu_gpt_less_pascal > SkipListMap_rcu_gpt_less_pascal;
4194 class traits_SkipListMap_rcu_gpt_less_pascal_seqcst: public cc::skip_list::make_traits <
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 >
4201 typedef cc::SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_rcu_gpt_less_pascal_seqcst > SkipListMap_rcu_gpt_less_pascal_seqcst;
4203 class traits_SkipListMap_rcu_gpt_less_pascal_stat: public cc::skip_list::make_traits <
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 >
4210 typedef cc::SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_rcu_gpt_less_pascal_stat > SkipListMap_rcu_gpt_less_pascal_stat;
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 >
4218 typedef cc::SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_rcu_gpt_cmp_pascal > SkipListMap_rcu_gpt_cmp_pascal;
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<> >
4227 typedef cc::SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_rcu_gpt_cmp_pascal_stat > SkipListMap_rcu_gpt_cmp_pascal_stat;
4229 class traits_SkipListMap_rcu_gpt_less_xorshift: public cc::skip_list::make_traits <
4231 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
4232 ,co::item_counter< cds::atomicity::item_counter >
4235 typedef cc::SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_rcu_gpt_less_xorshift > SkipListMap_rcu_gpt_less_xorshift;
4237 class traits_SkipListMap_rcu_gpt_less_xorshift_stat: public cc::skip_list::make_traits <
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 >
4244 typedef cc::SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_rcu_gpt_less_xorshift_stat > SkipListMap_rcu_gpt_less_xorshift_stat;
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 >
4252 typedef cc::SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_rcu_gpt_cmp_xorshift > SkipListMap_rcu_gpt_cmp_xorshift;
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<> >
4261 typedef cc::SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_rcu_gpt_cmp_xorshift_stat > SkipListMap_rcu_gpt_cmp_xorshift_stat;
4263 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
4264 // ***************************************************************************
4265 // SkipListMap - RCU signal_buffered
4267 class traits_SkipListMap_rcu_shb_less_pascal: public cc::skip_list::make_traits <
4269 ,co::item_counter< cds::atomicity::item_counter >
4270 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
4273 typedef cc::SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_rcu_shb_less_pascal > SkipListMap_rcu_shb_less_pascal;
4275 class traits_SkipListMap_rcu_shb_less_pascal_seqcst: public cc::skip_list::make_traits <
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 >
4282 typedef cc::SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_rcu_shb_less_pascal_seqcst > SkipListMap_rcu_shb_less_pascal_seqcst;
4284 class traits_SkipListMap_rcu_shb_less_pascal_stat: public cc::skip_list::make_traits <
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 >
4291 typedef cc::SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_rcu_shb_less_pascal_stat > SkipListMap_rcu_shb_less_pascal_stat;
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 >
4299 typedef cc::SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_rcu_shb_cmp_pascal > SkipListMap_rcu_shb_cmp_pascal;
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<> >
4308 typedef cc::SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_rcu_shb_cmp_pascal_stat > SkipListMap_rcu_shb_cmp_pascal_stat;
4310 class traits_SkipListMap_rcu_shb_less_xorshift: public cc::skip_list::make_traits <
4312 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
4313 ,co::item_counter< cds::atomicity::item_counter >
4316 typedef cc::SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_rcu_shb_less_xorshift > SkipListMap_rcu_shb_less_xorshift;
4318 class traits_SkipListMap_rcu_shb_less_xorshift_stat: public cc::skip_list::make_traits <
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 >
4325 typedef cc::SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_rcu_shb_less_xorshift_stat > SkipListMap_rcu_shb_less_xorshift_stat;
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 >
4333 typedef cc::SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_rcu_shb_cmp_xorshift > SkipListMap_rcu_shb_cmp_xorshift;
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<> >
4342 typedef cc::SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_rcu_shb_cmp_xorshift_stat > SkipListMap_rcu_shb_cmp_xorshift_stat;
4344 // ***************************************************************************
4345 // SkipListMap - RCU signal_threaded
4347 class traits_SkipListMap_rcu_sht_less_pascal: public cc::skip_list::make_traits <
4349 ,co::item_counter< cds::atomicity::item_counter >
4350 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
4353 typedef cc::SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_rcu_sht_less_pascal > SkipListMap_rcu_sht_less_pascal;
4355 class traits_SkipListMap_rcu_sht_less_pascal_seqcst: public cc::skip_list::make_traits <
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 >
4362 typedef cc::SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_rcu_sht_less_pascal_seqcst > SkipListMap_rcu_sht_less_pascal_seqcst;
4364 class traits_SkipListMap_rcu_sht_less_pascal_stat: public cc::skip_list::make_traits <
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 >
4371 typedef cc::SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_rcu_sht_less_pascal_stat > SkipListMap_rcu_sht_less_pascal_stat;
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 >
4379 typedef cc::SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_rcu_sht_cmp_pascal > SkipListMap_rcu_sht_cmp_pascal;
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<> >
4388 typedef cc::SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_rcu_sht_cmp_pascal_stat > SkipListMap_rcu_sht_cmp_pascal_stat;
4390 class traits_SkipListMap_rcu_sht_less_xorshift: public cc::skip_list::make_traits <
4392 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
4393 ,co::item_counter< cds::atomicity::item_counter >
4396 typedef cc::SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_rcu_sht_less_xorshift > SkipListMap_rcu_sht_less_xorshift;
4398 class traits_SkipListMap_rcu_sht_less_xorshift_stat: public cc::skip_list::make_traits <
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 >
4405 typedef cc::SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_rcu_sht_less_xorshift_stat > SkipListMap_rcu_sht_less_xorshift_stat;
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 >
4413 typedef cc::SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_rcu_sht_cmp_xorshift > SkipListMap_rcu_sht_cmp_xorshift;
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<> >
4422 typedef cc::SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_rcu_sht_cmp_xorshift_stat > SkipListMap_rcu_sht_cmp_xorshift_stat;
4426 // ***************************************************************************
4428 struct ellen_bintree_props {
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;
4435 typedef cc::ellen_bintree::map_node<cds::gc::PTB, 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;
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;
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;
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;
4454 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
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;
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;
4469 // ***************************************************************************
4470 // EllenBinTreeMap - HP
4472 struct traits_EllenBinTreeMap_hp: public cc::ellen_bintree::make_set_traits<
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 >
4477 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
4478 ,co::item_counter< cds::atomicity::item_counter >
4481 typedef cc::EllenBinTreeMap< cds::gc::HP, Key, Value, traits_EllenBinTreeMap_hp >EllenBinTreeMap_hp;
4483 struct traits_EllenBinTreeMap_hp_stat: public cc::ellen_bintree::make_set_traits<
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 >
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 >
4493 typedef cc::EllenBinTreeMap< cds::gc::HP, Key, Value, traits_EllenBinTreeMap_hp_stat > EllenBinTreeMap_hp_stat;
4495 // ***************************************************************************
4496 // EllenBinTreeMap - PTB
4498 struct traits_EllenBinTreeMap_ptb: public cc::ellen_bintree::make_set_traits<
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 >
4503 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
4504 ,co::item_counter< cds::atomicity::item_counter >
4507 typedef cc::EllenBinTreeMap< cds::gc::PTB, Key, Value, traits_EllenBinTreeMap_ptb> EllenBinTreeMap_ptb;
4509 struct traits_EllenBinTreeMap_ptb_stat: public cc::ellen_bintree::make_set_traits<
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 >
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 >
4519 typedef cc::EllenBinTreeMap< cds::gc::PTB, Key, Value, traits_EllenBinTreeMap_ptb_stat > EllenBinTreeMap_ptb_stat;
4521 // ***************************************************************************
4522 // EllenBinTreeMap - RCU
4524 struct traits_EllenBinTreeMap_rcu_gpi: public cc::ellen_bintree::make_set_traits<
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 >
4529 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
4530 ,co::item_counter< cds::atomicity::item_counter >
4533 typedef cc::EllenBinTreeMap< rcu_gpi, Key, Value, traits_EllenBinTreeMap_rcu_gpi > EllenBinTreeMap_rcu_gpi;
4535 struct traits_EllenBinTreeMap_rcu_gpi_stat: public cc::ellen_bintree::make_set_traits<
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 >
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 >
4545 typedef cc::EllenBinTreeMap< rcu_gpi, Key, Value, traits_EllenBinTreeMap_rcu_gpi_stat > EllenBinTreeMap_rcu_gpi_stat;
4547 struct traits_EllenBinTreeMap_rcu_gpb: public cc::ellen_bintree::make_set_traits<
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 >
4552 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
4553 ,co::item_counter< cds::atomicity::item_counter >
4556 typedef cc::EllenBinTreeMap< rcu_gpb, Key, Value, traits_EllenBinTreeMap_rcu_gpb > EllenBinTreeMap_rcu_gpb;
4558 struct traits_EllenBinTreeMap_rcu_gpb_stat: public cc::ellen_bintree::make_set_traits<
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 >
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 >
4568 typedef cc::EllenBinTreeMap< rcu_gpb, Key, Value, traits_EllenBinTreeMap_rcu_gpb_stat > EllenBinTreeMap_rcu_gpb_stat;
4570 struct traits_EllenBinTreeMap_rcu_gpt: public cc::ellen_bintree::make_set_traits<
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 >
4575 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
4576 ,co::item_counter< cds::atomicity::item_counter >
4579 typedef cc::EllenBinTreeMap< rcu_gpt, Key, Value, traits_EllenBinTreeMap_rcu_gpt > EllenBinTreeMap_rcu_gpt;
4581 struct traits_EllenBinTreeMap_rcu_gpt_stat: public cc::ellen_bintree::make_set_traits<
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 >
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 >
4591 typedef cc::EllenBinTreeMap< rcu_gpt, Key, Value, traits_EllenBinTreeMap_rcu_gpt_stat > EllenBinTreeMap_rcu_gpt_stat;
4593 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
4594 struct traits_EllenBinTreeMap_rcu_shb: public cc::ellen_bintree::make_set_traits<
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 >
4599 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
4600 ,co::item_counter< cds::atomicity::item_counter >
4603 typedef cc::EllenBinTreeMap< rcu_shb, Key, Value, traits_EllenBinTreeMap_rcu_shb > EllenBinTreeMap_rcu_shb;
4605 struct traits_EllenBinTreeMap_rcu_shb_stat: public cc::ellen_bintree::make_set_traits<
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 >
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<> >
4615 typedef cc::EllenBinTreeMap< rcu_shb, Key, Value, traits_EllenBinTreeMap_rcu_shb_stat > EllenBinTreeMap_rcu_shb_stat;
4617 struct traits_EllenBinTreeMap_rcu_sht: public cc::ellen_bintree::make_set_traits<
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 >
4622 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
4623 ,co::item_counter< cds::atomicity::item_counter >
4626 typedef cc::EllenBinTreeMap< rcu_sht, Key, Value, traits_EllenBinTreeMap_rcu_sht > EllenBinTreeMap_rcu_sht;
4628 struct traits_EllenBinTreeMap_rcu_sht_stat: public cc::ellen_bintree::make_set_traits<
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 >
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<> >
4638 typedef cc::EllenBinTreeMap< rcu_sht, Key, Value, traits_EllenBinTreeMap_rcu_sht_stat > EllenBinTreeMap_rcu_sht_stat;
4643 // ***************************************************************************
4644 // Standard implementations
4646 typedef StdMap< Key, Value, cds::SpinLock > StdMap_Spin;
4647 typedef StdMap< Key, Value, lock::NoLock> StdMap_NoLock;
4649 typedef StdHashMap< Key, Value, cds::SpinLock > StdHashMap_Spin;
4650 typedef StdHashMap< Key, Value, lock::NoLock > StdHashMap_NoLock;
4654 template <typename Map>
4655 static inline void print_stat( Map const& m )
4658 template <typename Map>
4659 static inline void additional_cleanup( Map& m )
4662 template <typename Map>
4663 static inline void additional_check( Map& m )
4667 template <typename K, typename T, typename Traits >
4668 static inline void print_stat( cc::CuckooMap< K, T, Traits > const& m )
4670 CPPUNIT_MSG( m.statistics() << m.mutex_policy_statistics() );
4673 template <typename GC, typename K, typename T, typename Traits >
4674 static inline void print_stat( cc::SkipListMap< GC, K, T, Traits > const& m )
4676 CPPUNIT_MSG( m.statistics() );
4680 template <typename GC, typename Key, typename T, typename Traits>
4681 static inline void print_stat( cc::EllenBinTreeMap<GC, Key, T, Traits> const& s )
4683 CPPUNIT_MSG( s.statistics() );
4685 template <typename GC, typename Key, typename T, typename Traits>
4686 static inline void additional_cleanup( cc::EllenBinTreeMap<GC, Key, T, Traits>& s )
4688 ellen_bintree_pool::internal_node_counter::reset();
4690 namespace ellen_bintree_check {
4691 static inline void check_stat( cds::intrusive::ellen_bintree::empty_stat const& s )
4693 // This check is not valid for thread-based RCU
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()
4702 static inline void check_stat( cds::intrusive::ellen_bintree::stat<> const& stat )
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 );
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 )
4718 GC::force_dispose();
4719 ellen_bintree_check::check_stat( s.statistics() );
4723 template <typename K, typename V, typename... Options>
4724 static inline void print_stat( CuckooStripedMap< K, V, Options... > const& m )
4726 typedef CuckooStripedMap< K, V, Options... > map_type;
4727 print_stat( static_cast<typename map_type::cuckoo_base_class const&>(m) );
4730 template <typename K, typename V, typename... Options>
4731 static inline void print_stat( CuckooRefinableMap< K, V, Options... > const& m )
4733 typedef CuckooRefinableMap< K, V, Options... > map_type;
4734 print_stat( static_cast<typename map_type::cuckoo_base_class const&>(m) );
4739 #endif // ifndef _CDSUNIT_MAP2_MAP_TYPES_H