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_dhp.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_dhp.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 struct traits_MichaelList_cmp_stdAlloc :
221 public cc::michael_list::make_traits<
222 co::compare< compare >
225 typedef cc::MichaelKVList< cds::gc::HP, Key, Value, traits_MichaelList_cmp_stdAlloc > MichaelList_HP_cmp_stdAlloc;
226 typedef cc::MichaelKVList< cds::gc::DHP, Key, Value, traits_MichaelList_cmp_stdAlloc > MichaelList_DHP_cmp_stdAlloc;
227 typedef cc::MichaelKVList< cds::gc::nogc, Key, Value, traits_MichaelList_cmp_stdAlloc > MichaelList_NOGC_cmp_stdAlloc;
228 typedef cc::MichaelKVList< rcu_gpi, Key, Value, traits_MichaelList_cmp_stdAlloc > MichaelList_RCU_GPI_cmp_stdAlloc;
229 typedef cc::MichaelKVList< rcu_gpb, Key, Value, traits_MichaelList_cmp_stdAlloc > MichaelList_RCU_GPB_cmp_stdAlloc;
230 typedef cc::MichaelKVList< rcu_gpt, Key, Value, traits_MichaelList_cmp_stdAlloc > MichaelList_RCU_GPT_cmp_stdAlloc;
231 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
232 typedef cc::MichaelKVList< rcu_shb, Key, Value, traits_MichaelList_cmp_stdAlloc > MichaelList_RCU_SHB_cmp_stdAlloc;
233 typedef cc::MichaelKVList< rcu_sht, Key, Value, traits_MichaelList_cmp_stdAlloc > MichaelList_RCU_SHT_cmp_stdAlloc;
236 struct traits_MichaelList_cmp_stdAlloc_seqcst :
237 public cc::michael_list::make_traits<
238 co::compare< compare >
239 ,co::memory_model< co::v::sequential_consistent >
242 typedef cc::MichaelKVList< cds::gc::HP, Key, Value, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_HP_cmp_stdAlloc_seqcst;
243 typedef cc::MichaelKVList< cds::gc::DHP, Key, Value, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_DHP_cmp_stdAlloc_seqcst;
244 typedef cc::MichaelKVList< cds::gc::nogc, Key, Value, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_NOGC_cmp_stdAlloc_seqcst;
245 typedef cc::MichaelKVList< rcu_gpi, Key, Value, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_RCU_GPI_cmp_stdAlloc_seqcst;
246 typedef cc::MichaelKVList< rcu_gpb, Key, Value, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_RCU_GPB_cmp_stdAlloc_seqcst;
247 typedef cc::MichaelKVList< rcu_gpt, Key, Value, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_RCU_GPT_cmp_stdAlloc_seqcst;
248 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
249 typedef cc::MichaelKVList< rcu_shb, Key, Value, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_RCU_SHB_cmp_stdAlloc_seqcst;
250 typedef cc::MichaelKVList< rcu_sht, Key, Value, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_RCU_SHT_cmp_stdAlloc_seqcst;
253 struct traits_MichaelList_cmp_michaelAlloc :
254 public cc::michael_list::make_traits<
255 co::compare< compare >,
256 co::allocator< memory::MichaelAllocator<int> >
259 typedef cc::MichaelKVList< cds::gc::HP, Key, Value, traits_MichaelList_cmp_michaelAlloc > MichaelList_HP_cmp_michaelAlloc;
260 typedef cc::MichaelKVList< cds::gc::DHP, Key, Value, traits_MichaelList_cmp_michaelAlloc > MichaelList_DHP_cmp_michaelAlloc;
261 typedef cc::MichaelKVList< cds::gc::nogc, Key, Value, traits_MichaelList_cmp_michaelAlloc > MichaelList_NOGC_cmp_michaelAlloc;
262 typedef cc::MichaelKVList< rcu_gpi, Key, Value, traits_MichaelList_cmp_michaelAlloc > MichaelList_RCU_GPI_cmp_michaelAlloc;
263 typedef cc::MichaelKVList< rcu_gpb, Key, Value, traits_MichaelList_cmp_michaelAlloc > MichaelList_RCU_GPB_cmp_michaelAlloc;
264 typedef cc::MichaelKVList< rcu_gpt, Key, Value, traits_MichaelList_cmp_michaelAlloc > MichaelList_RCU_GPT_cmp_michaelAlloc;
265 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
266 typedef cc::MichaelKVList< rcu_shb, Key, Value, traits_MichaelList_cmp_michaelAlloc > MichaelList_RCU_SHB_cmp_michaelAlloc;
267 typedef cc::MichaelKVList< rcu_sht, Key, Value, traits_MichaelList_cmp_michaelAlloc > MichaelList_RCU_SHT_cmp_michaelAlloc;
270 struct traits_MichaelList_less_stdAlloc :
271 public cc::michael_list::make_traits<
275 typedef cc::MichaelKVList< cds::gc::HP, Key, Value, traits_MichaelList_less_stdAlloc > MichaelList_HP_less_stdAlloc;
276 typedef cc::MichaelKVList< cds::gc::DHP, Key, Value, traits_MichaelList_less_stdAlloc > MichaelList_DHP_less_stdAlloc;
277 typedef cc::MichaelKVList< cds::gc::nogc, Key, Value, traits_MichaelList_less_stdAlloc > MichaelList_NOGC_less_stdAlloc;
278 typedef cc::MichaelKVList< rcu_gpi, Key, Value, traits_MichaelList_less_stdAlloc > MichaelList_RCU_GPI_less_stdAlloc;
279 typedef cc::MichaelKVList< rcu_gpb, Key, Value, traits_MichaelList_less_stdAlloc > MichaelList_RCU_GPB_less_stdAlloc;
280 typedef cc::MichaelKVList< rcu_gpt, Key, Value, traits_MichaelList_less_stdAlloc > MichaelList_RCU_GPT_less_stdAlloc;
281 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
282 typedef cc::MichaelKVList< rcu_shb, Key, Value, traits_MichaelList_less_stdAlloc > MichaelList_RCU_SHB_less_stdAlloc;
283 typedef cc::MichaelKVList< rcu_sht, Key, Value, traits_MichaelList_less_stdAlloc > MichaelList_RCU_SHT_less_stdAlloc;
286 struct traits_MichaelList_less_stdAlloc_seqcst :
287 public cc::michael_list::make_traits<
289 ,co::memory_model< co::v::sequential_consistent >
292 typedef cc::MichaelKVList< cds::gc::HP, Key, Value, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_HP_less_stdAlloc_seqcst;
293 typedef cc::MichaelKVList< cds::gc::DHP, Key, Value, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_DHP_less_stdAlloc_seqcst;
294 typedef cc::MichaelKVList< cds::gc::nogc, Key, Value, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_NOGC_less_stdAlloc_seqcst;
295 typedef cc::MichaelKVList< rcu_gpi, Key, Value, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_RCU_GPI_less_stdAlloc_seqcst;
296 typedef cc::MichaelKVList< rcu_gpb, Key, Value, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_RCU_GPB_less_stdAlloc_seqcst;
297 typedef cc::MichaelKVList< rcu_gpt, Key, Value, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_RCU_GPT_less_stdAlloc_seqcst;
298 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
299 typedef cc::MichaelKVList< rcu_shb, Key, Value, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_RCU_SHB_less_stdAlloc_seqcst;
300 typedef cc::MichaelKVList< rcu_sht, Key, Value, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_RCU_SHT_less_stdAlloc_seqcst;
303 struct traits_MichaelList_less_michaelAlloc :
304 public cc::michael_list::make_traits<
306 co::allocator< memory::MichaelAllocator<int> >
309 typedef cc::MichaelKVList< cds::gc::HP, Key, Value, traits_MichaelList_less_michaelAlloc > MichaelList_HP_less_michaelAlloc;
310 typedef cc::MichaelKVList< cds::gc::DHP, Key, Value, traits_MichaelList_less_michaelAlloc > MichaelList_DHP_less_michaelAlloc;
311 typedef cc::MichaelKVList< cds::gc::nogc, Key, Value, traits_MichaelList_less_michaelAlloc > MichaelList_NOGC_less_michaelAlloc;
312 typedef cc::MichaelKVList< rcu_gpi, Key, Value, traits_MichaelList_less_michaelAlloc > MichaelList_RCU_GPI_less_michaelAlloc;
313 typedef cc::MichaelKVList< rcu_gpb, Key, Value, traits_MichaelList_less_michaelAlloc > MichaelList_RCU_GPB_less_michaelAlloc;
314 typedef cc::MichaelKVList< rcu_gpt, Key, Value, traits_MichaelList_less_michaelAlloc > MichaelList_RCU_GPT_less_michaelAlloc;
315 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
316 typedef cc::MichaelKVList< rcu_shb, Key, Value, traits_MichaelList_less_michaelAlloc > MichaelList_RCU_SHB_less_michaelAlloc;
317 typedef cc::MichaelKVList< rcu_sht, Key, Value, traits_MichaelList_less_michaelAlloc > MichaelList_RCU_SHT_less_michaelAlloc;
320 template <typename Base>
321 class NogcMapWrapper: public Base
323 typedef Base base_class;
325 NogcMapWrapper( size_t nMaxItemCount, size_t nLoadFactor )
326 : base_class( nMaxItemCount, nLoadFactor )
329 template <typename K>
330 bool insert( K const& key )
332 return base_class::insert( key ) != base_class::end();
335 template <typename K, typename V>
336 bool insert( K const& key, V const& val )
338 return base_class::insert( key, val ) != base_class::end();
341 template <typename K, typename Func>
342 bool insert_key( K const& key, Func func )
344 return base_class::insert_key( key, func ) != base_class::end();
347 template <typename K>
348 bool find( K const& key )
350 return base_class::find( key ) != base_class::end();
359 template <typename Base>
360 class NogcMapWrapper_dctor: public Base
362 typedef Base base_class;
364 NogcMapWrapper_dctor()
367 template <typename K>
368 bool insert( K const& key )
370 return base_class::insert( key ) != base_class::end();
373 template <typename K, typename V>
374 bool insert( K const& key, V const& val )
376 return base_class::insert( key, val ) != base_class::end();
379 template <typename K, typename Func>
380 bool insert_key( K const& key, Func func )
382 return base_class::insert_key( key, func ) != base_class::end();
385 template <typename K>
386 bool find( K const& key )
388 return base_class::find( key ) != base_class::end();
392 // SplitListMap<gc::nogc> has no clear() method
393 template <typename Base>
394 class NogcSplitMapWrapper: public Base
396 typedef Base base_class;
398 NogcSplitMapWrapper( size_t nMaxItemCount, size_t nLoadFactor )
399 : base_class( nMaxItemCount, nLoadFactor )
402 template <typename K>
403 bool insert( K const& key )
405 return base_class::insert( key ) != base_class::end();
408 template <typename K, typename V>
409 bool insert( K const& key, V const& val )
411 return base_class::insert( key, val ) != base_class::end();
414 template <typename K, typename Func>
415 bool insert_key( K const& key, Func func )
417 return base_class::insert_key( key, func ) != base_class::end();
420 template <typename K>
421 bool find( K const& key )
423 return base_class::find( key ) != base_class::end();
431 // ***************************************************************************
432 // MichaelHashMap based on MichaelKVList
434 struct traits_MichaelMap_hash :
435 public cc::michael_map::make_traits<
439 typedef cc::MichaelHashMap< cds::gc::HP, MichaelList_HP_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_HP_cmp_stdAlloc;
440 typedef cc::MichaelHashMap< cds::gc::DHP, MichaelList_DHP_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_DHP_cmp_stdAlloc;
441 typedef cc::MichaelHashMap< cds::gc::nogc, MichaelList_NOGC_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_NOGC_cmp_stdAlloc;
442 typedef cc::MichaelHashMap< rcu_gpi, MichaelList_RCU_GPI_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_RCU_GPI_cmp_stdAlloc;
443 typedef cc::MichaelHashMap< rcu_gpb, MichaelList_RCU_GPB_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_RCU_GPB_cmp_stdAlloc;
444 typedef cc::MichaelHashMap< rcu_gpt, MichaelList_RCU_GPT_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_RCU_GPT_cmp_stdAlloc;
445 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
446 typedef cc::MichaelHashMap< rcu_shb, MichaelList_RCU_SHB_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_RCU_SHB_cmp_stdAlloc;
447 typedef cc::MichaelHashMap< rcu_sht, MichaelList_RCU_SHT_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_RCU_SHT_cmp_stdAlloc;
450 typedef cc::MichaelHashMap< cds::gc::HP, MichaelList_HP_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_HP_less_stdAlloc;
451 typedef cc::MichaelHashMap< cds::gc::DHP, MichaelList_DHP_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_DHP_less_stdAlloc;
452 typedef cc::MichaelHashMap< cds::gc::nogc, MichaelList_NOGC_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_NOGC_less_stdAlloc;
453 typedef cc::MichaelHashMap< rcu_gpi, MichaelList_RCU_GPI_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_RCU_GPI_less_stdAlloc;
454 typedef cc::MichaelHashMap< rcu_gpb, MichaelList_RCU_GPB_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_RCU_GPB_less_stdAlloc;
455 typedef cc::MichaelHashMap< rcu_gpt, MichaelList_RCU_GPT_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_RCU_GPT_less_stdAlloc;
456 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
457 typedef cc::MichaelHashMap< rcu_shb, MichaelList_RCU_SHB_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_RCU_SHB_less_stdAlloc;
458 typedef cc::MichaelHashMap< rcu_sht, MichaelList_RCU_SHT_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_RCU_SHT_less_stdAlloc;
461 typedef cc::MichaelHashMap< cds::gc::HP, MichaelList_HP_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_HP_cmp_stdAlloc_seqcst;
462 typedef cc::MichaelHashMap< cds::gc::DHP, MichaelList_DHP_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_DHP_cmp_stdAlloc_seqcst;
463 typedef cc::MichaelHashMap< cds::gc::nogc, MichaelList_NOGC_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_NOGC_cmp_stdAlloc_seqcst;
464 typedef cc::MichaelHashMap< rcu_gpi, MichaelList_RCU_GPI_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_GPI_cmp_stdAlloc_seqcst;
465 typedef cc::MichaelHashMap< rcu_gpb, MichaelList_RCU_GPB_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_GPB_cmp_stdAlloc_seqcst;
466 typedef cc::MichaelHashMap< rcu_gpt, MichaelList_RCU_GPT_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_GPT_cmp_stdAlloc_seqcst;
467 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
468 typedef cc::MichaelHashMap< rcu_shb, MichaelList_RCU_SHB_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_SHB_cmp_stdAlloc_seqcst;
469 typedef cc::MichaelHashMap< rcu_sht, MichaelList_RCU_SHT_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_SHT_cmp_stdAlloc_seqcst;
472 typedef cc::MichaelHashMap< cds::gc::HP, MichaelList_HP_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_HP_less_stdAlloc_seqcst;
473 typedef cc::MichaelHashMap< cds::gc::DHP, MichaelList_DHP_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_DHP_less_stdAlloc_seqcst;
474 typedef cc::MichaelHashMap< cds::gc::nogc, MichaelList_NOGC_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_NOGC_less_stdAlloc_seqcst;
475 typedef cc::MichaelHashMap< rcu_gpi, MichaelList_RCU_GPI_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_GPI_less_stdAlloc_seqcst;
476 typedef cc::MichaelHashMap< rcu_gpb, MichaelList_RCU_GPB_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_GPB_less_stdAlloc_seqcst;
477 typedef cc::MichaelHashMap< rcu_gpt, MichaelList_RCU_GPT_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_GPT_less_stdAlloc_seqcst;
478 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
479 typedef cc::MichaelHashMap< rcu_shb, MichaelList_RCU_SHB_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_SHB_less_stdAlloc_seqcst;
480 typedef cc::MichaelHashMap< rcu_sht, MichaelList_RCU_SHT_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_SHT_less_stdAlloc_seqcst;
483 struct traits_MichaelSet_michaelAlloc :
484 public traits_MichaelMap_hash
486 typedef cds::memory::MichaelAllocator<int> allocator;
488 typedef cc::MichaelHashMap< cds::gc::HP, MichaelList_HP_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_HP_cmp_michaelAlloc;
489 typedef cc::MichaelHashMap< cds::gc::DHP, MichaelList_DHP_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_DHP_cmp_michaelAlloc;
490 typedef cc::MichaelHashMap< cds::gc::nogc, MichaelList_NOGC_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_NOGC_cmp_michaelAlloc;
491 typedef cc::MichaelHashMap< rcu_gpi, MichaelList_RCU_GPI_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_RCU_GPI_cmp_michaelAlloc;
492 typedef cc::MichaelHashMap< rcu_gpb, MichaelList_RCU_GPB_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_RCU_GPB_cmp_michaelAlloc;
493 typedef cc::MichaelHashMap< rcu_gpt, MichaelList_RCU_GPT_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_RCU_GPT_cmp_michaelAlloc;
494 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
495 typedef cc::MichaelHashMap< rcu_shb, MichaelList_RCU_SHB_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_RCU_SHB_cmp_michaelAlloc;
496 typedef cc::MichaelHashMap< rcu_sht, MichaelList_RCU_SHT_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_RCU_SHT_cmp_michaelAlloc;
498 typedef cc::MichaelHashMap< cds::gc::HP, MichaelList_HP_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_HP_less_michaelAlloc;
499 typedef cc::MichaelHashMap< cds::gc::DHP, MichaelList_DHP_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_DHP_less_michaelAlloc;
500 typedef cc::MichaelHashMap< cds::gc::nogc, MichaelList_NOGC_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_NOGC_less_michaelAlloc;
501 typedef cc::MichaelHashMap< rcu_gpi, MichaelList_RCU_GPI_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_RCU_GPI_less_michaelAlloc;
502 typedef cc::MichaelHashMap< rcu_gpb, MichaelList_RCU_GPB_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_RCU_GPB_less_michaelAlloc;
503 typedef cc::MichaelHashMap< rcu_gpt, MichaelList_RCU_GPT_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_RCU_GPT_less_michaelAlloc;
504 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
505 typedef cc::MichaelHashMap< rcu_shb, MichaelList_RCU_SHB_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_RCU_SHB_less_michaelAlloc;
506 typedef cc::MichaelHashMap< rcu_sht, MichaelList_RCU_SHT_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_RCU_SHT_less_michaelAlloc;
509 // ***************************************************************************
512 struct traits_LazyList_cmp_stdAlloc :
513 public cc::lazy_list::make_traits<
514 co::compare< compare >
517 typedef cc::LazyKVList< cds::gc::HP, Key, Value, traits_LazyList_cmp_stdAlloc > LazyList_HP_cmp_stdAlloc;
518 typedef cc::LazyKVList< cds::gc::DHP, Key, Value, traits_LazyList_cmp_stdAlloc > LazyList_DHP_cmp_stdAlloc;
519 typedef cc::LazyKVList< cds::gc::nogc, Key, Value, traits_LazyList_cmp_stdAlloc > LazyList_NOGC_cmp_stdAlloc;
520 typedef cc::LazyKVList< rcu_gpi, Key, Value, traits_LazyList_cmp_stdAlloc > LazyList_RCU_GPI_cmp_stdAlloc;
521 typedef cc::LazyKVList< rcu_gpb, Key, Value, traits_LazyList_cmp_stdAlloc > LazyList_RCU_GPB_cmp_stdAlloc;
522 typedef cc::LazyKVList< rcu_gpt, Key, Value, traits_LazyList_cmp_stdAlloc > LazyList_RCU_GPT_cmp_stdAlloc;
523 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
524 typedef cc::LazyKVList< rcu_shb, Key, Value, traits_LazyList_cmp_stdAlloc > LazyList_RCU_SHB_cmp_stdAlloc;
525 typedef cc::LazyKVList< rcu_sht, Key, Value, traits_LazyList_cmp_stdAlloc > LazyList_RCU_SHT_cmp_stdAlloc;
528 struct traits_LazyList_cmp_stdAlloc_seqcst :
529 public cc::lazy_list::make_traits<
530 co::compare< compare >
531 ,co::memory_model< co::v::sequential_consistent >
534 typedef cc::LazyKVList< cds::gc::HP, Key, Value, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_HP_cmp_stdAlloc_seqcst;
535 typedef cc::LazyKVList< cds::gc::DHP, Key, Value, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_DHP_cmp_stdAlloc_seqcst;
536 typedef cc::LazyKVList< cds::gc::nogc, Key, Value, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_NOGC_cmp_stdAlloc_seqcst;
537 typedef cc::LazyKVList< rcu_gpi, Key, Value, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_RCU_GPI_cmp_stdAlloc_seqcst;
538 typedef cc::LazyKVList< rcu_gpb, Key, Value, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_RCU_GPB_cmp_stdAlloc_seqcst;
539 typedef cc::LazyKVList< rcu_gpt, Key, Value, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_RCU_GPT_cmp_stdAlloc_seqcst;
540 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
541 typedef cc::LazyKVList< rcu_shb, Key, Value, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_RCU_SHB_cmp_stdAlloc_seqcst;
542 typedef cc::LazyKVList< rcu_sht, Key, Value, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_RCU_SHT_cmp_stdAlloc_seqcst;
545 struct traits_LazyList_cmp_michaelAlloc :
546 public cc::lazy_list::make_traits<
547 co::compare< compare >,
548 co::allocator< memory::MichaelAllocator<int> >
551 typedef cc::LazyKVList< cds::gc::HP, Key, Value, traits_LazyList_cmp_michaelAlloc > LazyList_HP_cmp_michaelAlloc;
552 typedef cc::LazyKVList< cds::gc::DHP, Key, Value, traits_LazyList_cmp_michaelAlloc > LazyList_DHP_cmp_michaelAlloc;
553 typedef cc::LazyKVList< cds::gc::nogc, Key, Value, traits_LazyList_cmp_michaelAlloc > LazyList_NOGC _cmp_michaelAlloc;
554 typedef cc::LazyKVList< rcu_gpi, Key, Value, traits_LazyList_cmp_michaelAlloc > LazyList_RCU_GPI_cmp_michaelAlloc;
555 typedef cc::LazyKVList< rcu_gpb, Key, Value, traits_LazyList_cmp_michaelAlloc > LazyList_RCU_GPB_cmp_michaelAlloc;
556 typedef cc::LazyKVList< rcu_gpt, Key, Value, traits_LazyList_cmp_michaelAlloc > LazyList_RCU_GPT_cmp_michaelAlloc;
557 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
558 typedef cc::LazyKVList< rcu_shb, Key, Value, traits_LazyList_cmp_michaelAlloc > LazyList_RCU_SHB_cmp_michaelAlloc;
559 typedef cc::LazyKVList< rcu_sht, Key, Value, traits_LazyList_cmp_michaelAlloc > LazyList_RCU_SHT_cmp_michaelAlloc;
561 struct traits_LazyList_less_stdAlloc :
562 public cc::lazy_list::make_traits<
566 typedef cc::LazyKVList< cds::gc::HP, Key, Value, traits_LazyList_less_stdAlloc > LazyList_HP_less_stdAlloc;
567 typedef cc::LazyKVList< cds::gc::DHP, Key, Value, traits_LazyList_less_stdAlloc > LazyList_DHP_less_stdAlloc;
568 typedef cc::LazyKVList< cds::gc::nogc, Key, Value, traits_LazyList_less_stdAlloc > LazyList_NOGC_less_stdAlloc;
569 typedef cc::LazyKVList< rcu_gpi, Key, Value, traits_LazyList_less_stdAlloc > LazyList_RCU_GPI_less_stdAlloc;
570 typedef cc::LazyKVList< rcu_gpb, Key, Value, traits_LazyList_less_stdAlloc > LazyList_RCU_GPB_less_stdAlloc;
571 typedef cc::LazyKVList< rcu_gpt, Key, Value, traits_LazyList_less_stdAlloc > LazyList_RCU_GPT_less_stdAlloc;
572 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
573 typedef cc::LazyKVList< rcu_shb, Key, Value, traits_LazyList_less_stdAlloc > LazyList_RCU_SHB_less_stdAlloc;
574 typedef cc::LazyKVList< rcu_sht, Key, Value, traits_LazyList_less_stdAlloc > LazyList_RCU_SHT_less_stdAlloc;
577 struct traits_LazyList_less_stdAlloc_seqcst :
578 public cc::lazy_list::make_traits<
580 ,co::memory_model< co::v::sequential_consistent >
583 typedef cc::LazyKVList< cds::gc::HP, Key, Value, traits_LazyList_less_stdAlloc_seqcst > LazyList_HP_less_stdAlloc_seqcst;
584 typedef cc::LazyKVList< cds::gc::DHP, Key, Value, traits_LazyList_less_stdAlloc_seqcst > LazyList_DHP_less_stdAlloc_seqcst;
585 typedef cc::LazyKVList< cds::gc::nogc, Key, Value, traits_LazyList_less_stdAlloc_seqcst > LazyList_NOGC_less_stdAlloc_seqcst;
586 typedef cc::LazyKVList< rcu_gpi, Key, Value, traits_LazyList_less_stdAlloc_seqcst > LazyList_RCU_GPI_less_stdAlloc_seqcst;
587 typedef cc::LazyKVList< rcu_gpb, Key, Value, traits_LazyList_less_stdAlloc_seqcst > LazyList_RCU_GPB_less_stdAlloc_seqcst;
588 typedef cc::LazyKVList< rcu_gpt, Key, Value, traits_LazyList_less_stdAlloc_seqcst > LazyList_RCU_GPT_less_stdAlloc_seqcst;
589 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
590 typedef cc::LazyKVList< rcu_shb, Key, Value, traits_LazyList_less_stdAlloc_seqcst > LazyList_RCU_SHB_less_stdAlloc_seqcst;
591 typedef cc::LazyKVList< rcu_sht, Key, Value, traits_LazyList_less_stdAlloc_seqcst > LazyList_RCU_SHT_less_stdAlloc_seqcst;
594 struct traits_LazyList_less_michaelAlloc :
595 public cc::lazy_list::make_traits<
597 co::allocator< memory::MichaelAllocator<int> >
600 typedef cc::LazyKVList< cds::gc::HP, Key, Value, traits_LazyList_less_michaelAlloc > LazyList_HP_less_michaelAlloc;
601 typedef cc::LazyKVList< cds::gc::DHP, Key, Value, traits_LazyList_less_michaelAlloc > LazyList_DHP_less_michaelAlloc;
602 typedef cc::LazyKVList< cds::gc::nogc, Key, Value, traits_LazyList_less_michaelAlloc > LazyList_NOGC_less_michaelAlloc;
603 typedef cc::LazyKVList< rcu_gpi, Key, Value, traits_LazyList_less_michaelAlloc > LazyList_RCU_GPI_less_michaelAlloc;
604 typedef cc::LazyKVList< rcu_gpb, Key, Value, traits_LazyList_less_michaelAlloc > LazyList_RCU_GPB_less_michaelAlloc;
605 typedef cc::LazyKVList< rcu_gpt, Key, Value, traits_LazyList_less_michaelAlloc > LazyList_RCU_GPT_less_michaelAlloc;
606 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
607 typedef cc::LazyKVList< rcu_shb, Key, Value, traits_LazyList_less_michaelAlloc > LazyList_RCU_SHB_less_michaelAlloc;
608 typedef cc::LazyKVList< rcu_sht, Key, Value, traits_LazyList_less_michaelAlloc > LazyList_RCU_SHT_less_michaelAlloc;
611 // ***************************************************************************
612 // MichaelHashMap based on LazyKVList
613 typedef cc::MichaelHashMap< cds::gc::HP, LazyList_HP_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_HP_cmp_stdAlloc;
614 typedef cc::MichaelHashMap< cds::gc::DHP, LazyList_DHP_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_DHP_cmp_stdAlloc;
615 typedef cc::MichaelHashMap< cds::gc::nogc, LazyList_NOGC_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_NOGC_cmp_stdAlloc;
616 typedef cc::MichaelHashMap< rcu_gpi, LazyList_RCU_GPI_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPI_cmp_stdAlloc;
617 typedef cc::MichaelHashMap< rcu_gpb, LazyList_RCU_GPB_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPB_cmp_stdAlloc;
618 typedef cc::MichaelHashMap< rcu_gpt, LazyList_RCU_GPT_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPT_cmp_stdAlloc;
619 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
620 typedef cc::MichaelHashMap< rcu_shb, LazyList_RCU_SHB_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_SHB_cmp_stdAlloc;
621 typedef cc::MichaelHashMap< rcu_sht, LazyList_RCU_SHT_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_SHT_cmp_stdAlloc;
624 typedef cc::MichaelHashMap< cds::gc::HP, LazyList_HP_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_HP_less_stdAlloc;
625 typedef cc::MichaelHashMap< cds::gc::DHP, LazyList_DHP_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_DHP_less_stdAlloc;
626 typedef cc::MichaelHashMap< cds::gc::nogc, LazyList_NOGC_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_NOGC_less_stdAlloc;
627 typedef cc::MichaelHashMap< rcu_gpi, LazyList_RCU_GPI_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPI_less_stdAlloc;
628 typedef cc::MichaelHashMap< rcu_gpb, LazyList_RCU_GPB_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPB_less_stdAlloc;
629 typedef cc::MichaelHashMap< rcu_gpt, LazyList_RCU_GPT_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPT_less_stdAlloc;
630 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
631 typedef cc::MichaelHashMap< rcu_shb, LazyList_RCU_SHB_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_SHB_less_stdAlloc;
632 typedef cc::MichaelHashMap< rcu_sht, LazyList_RCU_SHT_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_SHT_less_stdAlloc;
635 typedef cc::MichaelHashMap< cds::gc::HP, LazyList_HP_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_HP_cmp_stdAlloc_seqcst;
636 typedef cc::MichaelHashMap< cds::gc::DHP, LazyList_DHP_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_DHP_cmp_stdAlloc_seqcst;
637 typedef cc::MichaelHashMap< cds::gc::nogc, LazyList_NOGC_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_NOGC_cmp_stdAlloc_seqcst;
638 typedef cc::MichaelHashMap< rcu_gpi, LazyList_RCU_GPI_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPI_cmp_stdAlloc_seqcst;
639 typedef cc::MichaelHashMap< rcu_gpb, LazyList_RCU_GPB_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPB_cmp_stdAlloc_seqcst;
640 typedef cc::MichaelHashMap< rcu_gpt, LazyList_RCU_GPT_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPT_cmp_stdAlloc_seqcst;
641 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
642 typedef cc::MichaelHashMap< rcu_shb, LazyList_RCU_SHB_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_SHB_cmp_stdAlloc_seqcst;
643 typedef cc::MichaelHashMap< rcu_sht, LazyList_RCU_SHT_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_SHT_cmp_stdAlloc_seqcst;
646 typedef cc::MichaelHashMap< cds::gc::HP, LazyList_HP_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_HP_less_stdAlloc_seqcst;
647 typedef cc::MichaelHashMap< cds::gc::DHP, LazyList_DHP_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_DHP_less_stdAlloc_seqcst;
648 typedef cc::MichaelHashMap< cds::gc::nogc, LazyList_NOGC_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_NOGC_less_stdAlloc_seqcst;
649 typedef cc::MichaelHashMap< rcu_gpi, LazyList_RCU_GPI_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPI_less_stdAlloc_seqcst;
650 typedef cc::MichaelHashMap< rcu_gpb, LazyList_RCU_GPB_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPB_less_stdAlloc_seqcst;
651 typedef cc::MichaelHashMap< rcu_gpt, LazyList_RCU_GPT_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPT_less_stdAlloc_seqcst;
652 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
653 typedef cc::MichaelHashMap< rcu_shb, LazyList_RCU_SHB_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_SHB_less_stdAlloc_seqcst;
654 typedef cc::MichaelHashMap< rcu_sht, LazyList_RCU_SHT_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_SHT_less_stdAlloc_seqcst;
657 typedef cc::MichaelHashMap< cds::gc::HP, LazyList_HP_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_HP_cmp_michaelAlloc;
658 typedef cc::MichaelHashMap< cds::gc::DHP, LazyList_DHP_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_DHP_cmp_michaelAlloc;
659 typedef cc::MichaelHashMap< cds::gc::nogc, LazyList_NOGC_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_NOGC_cmp_michaelAlloc;
660 typedef cc::MichaelHashMap< rcu_gpi, LazyList_RCU_GPI_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_RCU_GPI_cmp_michaelAlloc;
661 typedef cc::MichaelHashMap< rcu_gpb, LazyList_RCU_GPB_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_RCU_GPB_cmp_michaelAlloc;
662 typedef cc::MichaelHashMap< rcu_gpt, LazyList_RCU_GPT_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_RCU_GPT_cmp_michaelAlloc;
663 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
664 typedef cc::MichaelHashMap< rcu_shb, LazyList_RCU_SHB_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_RCU_SHB_cmp_michaelAlloc;
665 typedef cc::MichaelHashMap< rcu_sht, LazyList_RCU_SHT_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_RCU_SHT_cmp_michaelAlloc;
667 typedef cc::MichaelHashMap< cds::gc::HP, LazyList_HP_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_HP_less_michaelAlloc;
668 typedef cc::MichaelHashMap< cds::gc::DHP, LazyList_DHP_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_DHP_less_michaelAlloc;
669 typedef cc::MichaelHashMap< cds::gc::nogc, LazyList_NOGC_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_NOGC_less_michaelAlloc;
670 typedef cc::MichaelHashMap< rcu_gpi, LazyList_RCU_GPI_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_RCU_GPI_less_michaelAlloc;
671 typedef cc::MichaelHashMap< rcu_gpb, LazyList_RCU_GPB_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_RCU_GPB_less_michaelAlloc;
672 typedef cc::MichaelHashMap< rcu_gpt, LazyList_RCU_GPT_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_RCU_GPT_less_michaelAlloc;
673 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
674 typedef cc::MichaelHashMap< rcu_shb, LazyList_RCU_SHB_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_RCU_SHB_less_michaelAlloc;
675 typedef cc::MichaelHashMap< rcu_sht, LazyList_RCU_SHT_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_RCU_SHT_less_michaelAlloc;
678 // ***************************************************************************
679 // SplitListMap based on MichaelList
682 class traits_SplitList_Michael_HP_dyn_cmp: public cc::split_list::make_traits<
683 cc::split_list::ordered_list<cc::michael_list_tag>
685 ,cc::split_list::ordered_list_traits<
686 typename cc::michael_list::make_traits<
687 co::compare< compare >
692 typedef cc::SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Michael_HP_dyn_cmp > SplitList_Michael_HP_dyn_cmp;
694 class traits_SplitList_Michael_HP_dyn_cmp_seqcst: public cc::split_list::make_traits<
695 cc::split_list::ordered_list<cc::michael_list_tag>
697 ,co::memory_model< co::v::sequential_consistent >
698 ,cc::split_list::ordered_list_traits<
699 typename cc::michael_list::make_traits<
700 co::compare< compare >
701 ,co::memory_model< co::v::sequential_consistent >
706 typedef cc::SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Michael_HP_dyn_cmp_seqcst > SplitList_Michael_HP_dyn_cmp_seqcst;
708 class traits_SplitList_Michael_HP_st_cmp: public cc::split_list::make_traits<
709 cc::split_list::ordered_list<cc::michael_list_tag>
710 ,cc::split_list::dynamic_bucket_table< false >
712 ,cc::split_list::ordered_list_traits<
713 typename cc::michael_list::make_traits<
714 co::compare< compare >
719 typedef cc::SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Michael_HP_st_cmp > SplitList_Michael_HP_st_cmp;
721 class traits_SplitList_Michael_HP_st_cmp_seqcst: public cc::split_list::make_traits<
722 cc::split_list::ordered_list<cc::michael_list_tag>
724 ,cc::split_list::dynamic_bucket_table< false >
725 ,co::memory_model< co::v::sequential_consistent >
726 ,cc::split_list::ordered_list_traits<
727 typename cc::michael_list::make_traits<
728 co::compare< compare >
729 ,co::memory_model< co::v::sequential_consistent >
734 typedef cc::SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Michael_HP_st_cmp_seqcst > SplitList_Michael_HP_st_cmp_seqcst;
737 class traits_SplitList_Michael_HP_dyn_less: public cc::split_list::make_traits<
738 cc::split_list::ordered_list<cc::michael_list_tag>
740 ,cc::split_list::ordered_list_traits<
741 typename cc::michael_list::make_traits<
747 typedef cc::SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Michael_HP_dyn_less > SplitList_Michael_HP_dyn_less;
749 class traits_SplitList_Michael_HP_dyn_less_seqcst: public cc::split_list::make_traits<
750 cc::split_list::ordered_list<cc::michael_list_tag>
752 ,co::memory_model< co::v::sequential_consistent >
753 ,cc::split_list::ordered_list_traits<
754 typename cc::michael_list::make_traits<
756 ,co::memory_model< co::v::sequential_consistent >
761 typedef cc::SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Michael_HP_dyn_less_seqcst > SplitList_Michael_HP_dyn_less_seqcst;
763 class traits_SplitList_Michael_HP_st_less: public cc::split_list::make_traits<
764 cc::split_list::ordered_list<cc::michael_list_tag>
765 ,cc::split_list::dynamic_bucket_table< false >
767 ,cc::split_list::ordered_list_traits<
768 typename cc::michael_list::make_traits<
774 typedef cc::SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Michael_HP_st_less > SplitList_Michael_HP_st_less;
776 class traits_SplitList_Michael_HP_st_less_seqcst: public cc::split_list::make_traits<
777 cc::split_list::ordered_list<cc::michael_list_tag>
779 ,cc::split_list::dynamic_bucket_table< false >
780 ,co::memory_model< co::v::sequential_consistent >
781 ,cc::split_list::ordered_list_traits<
782 typename cc::michael_list::make_traits<
784 ,co::memory_model< co::v::sequential_consistent >
789 typedef cc::SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Michael_HP_st_less_seqcst > SplitList_Michael_HP_st_less_seqcst;
792 typedef cc::SplitListMap< cds::gc::DHP, Key, Value,
793 typename cc::split_list::make_traits<
794 cc::split_list::ordered_list<cc::michael_list_tag>
796 ,cc::split_list::ordered_list_traits<
797 typename cc::michael_list::make_traits<
798 co::compare< compare >
802 > SplitList_Michael_DHP_dyn_cmp;
804 typedef cc::SplitListMap< cds::gc::DHP, Key, Value,
805 typename cc::split_list::make_traits<
806 cc::split_list::ordered_list<cc::michael_list_tag>
808 ,co::memory_model< co::v::sequential_consistent >
809 ,cc::split_list::ordered_list_traits<
810 typename cc::michael_list::make_traits<
811 co::compare< compare >
812 ,co::memory_model< co::v::sequential_consistent >
816 > SplitList_Michael_DHP_dyn_cmp_seqcst;
818 typedef cc::SplitListMap< cds::gc::DHP, Key, Value,
819 typename cc::split_list::make_traits<
820 cc::split_list::ordered_list<cc::michael_list_tag>
821 ,cc::split_list::dynamic_bucket_table< false >
823 ,cc::split_list::ordered_list_traits<
824 typename cc::michael_list::make_traits<
825 co::compare< compare >
829 > SplitList_Michael_DHP_st_cmp;
831 typedef cc::SplitListMap< cds::gc::DHP, Key, Value,
832 typename cc::split_list::make_traits<
833 cc::split_list::ordered_list<cc::michael_list_tag>
835 ,cc::split_list::dynamic_bucket_table< false >
836 ,co::memory_model< co::v::sequential_consistent >
837 ,cc::split_list::ordered_list_traits<
838 typename cc::michael_list::make_traits<
839 co::compare< compare >
840 ,co::memory_model< co::v::sequential_consistent >
844 > SplitList_Michael_DHP_st_cmp_seqcst;
847 typedef cc::SplitListMap< cds::gc::DHP, Key, Value,
848 typename cc::split_list::make_traits<
849 cc::split_list::ordered_list<cc::michael_list_tag>
851 ,cc::split_list::ordered_list_traits<
852 typename cc::michael_list::make_traits<
857 > SplitList_Michael_DHP_dyn_less;
859 typedef cc::SplitListMap< cds::gc::DHP, Key, Value,
860 typename cc::split_list::make_traits<
861 cc::split_list::ordered_list<cc::michael_list_tag>
863 ,co::memory_model< co::v::sequential_consistent >
864 ,cc::split_list::ordered_list_traits<
865 typename cc::michael_list::make_traits<
867 ,co::memory_model< co::v::sequential_consistent >
871 > SplitList_Michael_DHP_dyn_less_seqcst;
873 typedef cc::SplitListMap< cds::gc::DHP, Key, Value,
874 typename cc::split_list::make_traits<
875 cc::split_list::ordered_list<cc::michael_list_tag>
876 ,cc::split_list::dynamic_bucket_table< false >
878 ,cc::split_list::ordered_list_traits<
879 typename cc::michael_list::make_traits<
884 > SplitList_Michael_DHP_st_less;
886 typedef cc::SplitListMap< cds::gc::DHP, Key, Value,
887 typename cc::split_list::make_traits<
888 cc::split_list::ordered_list<cc::michael_list_tag>
890 ,cc::split_list::dynamic_bucket_table< false >
891 ,co::memory_model< co::v::sequential_consistent >
892 ,cc::split_list::ordered_list_traits<
893 typename cc::michael_list::make_traits<
895 ,co::memory_model< co::v::sequential_consistent >
899 > SplitList_Michael_DHP_st_less_seqcst;
902 typedef cc::SplitListMap< rcu_gpi, Key, Value,
903 typename cc::split_list::make_traits<
904 cc::split_list::ordered_list<cc::michael_list_tag>
906 ,cc::split_list::ordered_list_traits<
907 typename cc::michael_list::make_traits<
908 co::compare< compare >
912 > SplitList_Michael_RCU_GPI_dyn_cmp;
914 typedef cc::SplitListMap< rcu_gpi, Key, Value,
915 typename cc::split_list::make_traits<
916 cc::split_list::ordered_list<cc::michael_list_tag>
918 ,co::memory_model< co::v::sequential_consistent >
919 ,cc::split_list::ordered_list_traits<
920 typename cc::michael_list::make_traits<
921 co::compare< compare >
922 ,co::memory_model< co::v::sequential_consistent >
926 > SplitList_Michael_RCU_GPI_dyn_cmp_seqcst;
928 typedef cc::SplitListMap< rcu_gpi, Key, Value,
929 typename cc::split_list::make_traits<
930 cc::split_list::ordered_list<cc::michael_list_tag>
931 ,cc::split_list::dynamic_bucket_table< false >
933 ,cc::split_list::ordered_list_traits<
934 typename cc::michael_list::make_traits<
935 co::compare< compare >
939 > SplitList_Michael_RCU_GPI_st_cmp;
941 typedef cc::SplitListMap< rcu_gpi, Key, Value,
942 typename cc::split_list::make_traits<
943 cc::split_list::ordered_list<cc::michael_list_tag>
945 ,cc::split_list::dynamic_bucket_table< false >
946 ,co::memory_model< co::v::sequential_consistent >
947 ,cc::split_list::ordered_list_traits<
948 typename cc::michael_list::make_traits<
949 co::compare< compare >
950 ,co::memory_model< co::v::sequential_consistent >
954 > SplitList_Michael_RCU_GPI_st_cmp_seqcst;
957 typedef cc::SplitListMap< rcu_gpi, Key, Value,
958 typename cc::split_list::make_traits<
959 cc::split_list::ordered_list<cc::michael_list_tag>
961 ,cc::split_list::ordered_list_traits<
962 typename cc::michael_list::make_traits<
967 > SplitList_Michael_RCU_GPI_dyn_less;
969 typedef cc::SplitListMap< rcu_gpi, Key, Value,
970 typename cc::split_list::make_traits<
971 cc::split_list::ordered_list<cc::michael_list_tag>
973 ,co::memory_model< co::v::sequential_consistent >
974 ,cc::split_list::ordered_list_traits<
975 typename cc::michael_list::make_traits<
977 ,co::memory_model< co::v::sequential_consistent >
981 > SplitList_Michael_RCU_GPI_dyn_less_seqcst;
983 typedef cc::SplitListMap< rcu_gpi, Key, Value,
984 typename cc::split_list::make_traits<
985 cc::split_list::ordered_list<cc::michael_list_tag>
986 ,cc::split_list::dynamic_bucket_table< false >
988 ,cc::split_list::ordered_list_traits<
989 typename cc::michael_list::make_traits<
994 > SplitList_Michael_RCU_GPI_st_less;
996 typedef cc::SplitListMap< rcu_gpi, Key, Value,
997 typename cc::split_list::make_traits<
998 cc::split_list::ordered_list<cc::michael_list_tag>
1000 ,cc::split_list::dynamic_bucket_table< false >
1001 ,co::memory_model< co::v::sequential_consistent >
1002 ,cc::split_list::ordered_list_traits<
1003 typename cc::michael_list::make_traits<
1005 ,co::memory_model< co::v::sequential_consistent >
1009 > SplitList_Michael_RCU_GPI_st_less_seqcst;
1012 typedef cc::SplitListMap< rcu_gpb, Key, Value,
1013 typename cc::split_list::make_traits<
1014 cc::split_list::ordered_list<cc::michael_list_tag>
1016 ,cc::split_list::ordered_list_traits<
1017 typename cc::michael_list::make_traits<
1018 co::compare< compare >
1022 > SplitList_Michael_RCU_GPB_dyn_cmp;
1024 typedef cc::SplitListMap< rcu_gpb, Key, Value,
1025 typename cc::split_list::make_traits<
1026 cc::split_list::ordered_list<cc::michael_list_tag>
1028 ,co::memory_model< co::v::sequential_consistent >
1029 ,cc::split_list::ordered_list_traits<
1030 typename cc::michael_list::make_traits<
1031 co::compare< compare >
1032 ,co::memory_model< co::v::sequential_consistent >
1036 > SplitList_Michael_RCU_GPB_dyn_cmp_seqcst;
1038 typedef cc::SplitListMap< rcu_gpb, Key, Value,
1039 typename cc::split_list::make_traits<
1040 cc::split_list::ordered_list<cc::michael_list_tag>
1041 ,cc::split_list::dynamic_bucket_table< false >
1043 ,cc::split_list::ordered_list_traits<
1044 typename cc::michael_list::make_traits<
1045 co::compare< compare >
1049 > SplitList_Michael_RCU_GPB_st_cmp;
1051 typedef cc::SplitListMap< rcu_gpb, Key, Value,
1052 typename cc::split_list::make_traits<
1053 cc::split_list::ordered_list<cc::michael_list_tag>
1055 ,cc::split_list::dynamic_bucket_table< false >
1056 ,co::memory_model< co::v::sequential_consistent >
1057 ,cc::split_list::ordered_list_traits<
1058 typename cc::michael_list::make_traits<
1059 co::compare< compare >
1060 ,co::memory_model< co::v::sequential_consistent >
1064 > SplitList_Michael_RCU_GPB_st_cmp_seqcst;
1067 typedef cc::SplitListMap< rcu_gpb, Key, Value,
1068 typename cc::split_list::make_traits<
1069 cc::split_list::ordered_list<cc::michael_list_tag>
1071 ,cc::split_list::ordered_list_traits<
1072 typename cc::michael_list::make_traits<
1077 > SplitList_Michael_RCU_GPB_dyn_less;
1079 typedef cc::SplitListMap< rcu_gpb, Key, Value,
1080 typename cc::split_list::make_traits<
1081 cc::split_list::ordered_list<cc::michael_list_tag>
1083 ,co::memory_model< co::v::sequential_consistent >
1084 ,cc::split_list::ordered_list_traits<
1085 typename cc::michael_list::make_traits<
1087 ,co::memory_model< co::v::sequential_consistent >
1091 > SplitList_Michael_RCU_GPB_dyn_less_seqcst;
1093 typedef cc::SplitListMap< rcu_gpb, Key, Value,
1094 typename cc::split_list::make_traits<
1095 cc::split_list::ordered_list<cc::michael_list_tag>
1096 ,cc::split_list::dynamic_bucket_table< false >
1098 ,cc::split_list::ordered_list_traits<
1099 typename cc::michael_list::make_traits<
1104 > SplitList_Michael_RCU_GPB_st_less;
1106 typedef cc::SplitListMap< rcu_gpb, Key, Value,
1107 typename cc::split_list::make_traits<
1108 cc::split_list::ordered_list<cc::michael_list_tag>
1110 ,cc::split_list::dynamic_bucket_table< false >
1111 ,co::memory_model< co::v::sequential_consistent >
1112 ,cc::split_list::ordered_list_traits<
1113 typename cc::michael_list::make_traits<
1115 ,co::memory_model< co::v::sequential_consistent >
1119 > SplitList_Michael_RCU_GPB_st_less_seqcst;
1122 typedef cc::SplitListMap< rcu_gpt, Key, Value,
1123 typename cc::split_list::make_traits<
1124 cc::split_list::ordered_list<cc::michael_list_tag>
1126 ,cc::split_list::ordered_list_traits<
1127 typename cc::michael_list::make_traits<
1128 co::compare< compare >
1132 > SplitList_Michael_RCU_GPT_dyn_cmp;
1134 typedef cc::SplitListMap< rcu_gpt, Key, Value,
1135 typename cc::split_list::make_traits<
1136 cc::split_list::ordered_list<cc::michael_list_tag>
1138 ,co::memory_model< co::v::sequential_consistent >
1139 ,cc::split_list::ordered_list_traits<
1140 typename cc::michael_list::make_traits<
1141 co::compare< compare >
1142 ,co::memory_model< co::v::sequential_consistent >
1146 > SplitList_Michael_RCU_GPT_dyn_cmp_seqcst;
1148 typedef cc::SplitListMap< rcu_gpt, Key, Value,
1149 typename cc::split_list::make_traits<
1150 cc::split_list::ordered_list<cc::michael_list_tag>
1151 ,cc::split_list::dynamic_bucket_table< false >
1153 ,cc::split_list::ordered_list_traits<
1154 typename cc::michael_list::make_traits<
1155 co::compare< compare >
1159 > SplitList_Michael_RCU_GPT_st_cmp;
1161 typedef cc::SplitListMap< rcu_gpt, Key, Value,
1162 typename cc::split_list::make_traits<
1163 cc::split_list::ordered_list<cc::michael_list_tag>
1165 ,cc::split_list::dynamic_bucket_table< false >
1166 ,co::memory_model< co::v::sequential_consistent >
1167 ,cc::split_list::ordered_list_traits<
1168 typename cc::michael_list::make_traits<
1169 co::compare< compare >
1170 ,co::memory_model< co::v::sequential_consistent >
1174 > SplitList_Michael_RCU_GPT_st_cmp_seqcst;
1177 typedef cc::SplitListMap< rcu_gpt, Key, Value,
1178 typename cc::split_list::make_traits<
1179 cc::split_list::ordered_list<cc::michael_list_tag>
1181 ,cc::split_list::ordered_list_traits<
1182 typename cc::michael_list::make_traits<
1187 > SplitList_Michael_RCU_GPT_dyn_less;
1189 typedef cc::SplitListMap< rcu_gpt, Key, Value,
1190 typename cc::split_list::make_traits<
1191 cc::split_list::ordered_list<cc::michael_list_tag>
1193 ,co::memory_model< co::v::sequential_consistent >
1194 ,cc::split_list::ordered_list_traits<
1195 typename cc::michael_list::make_traits<
1197 ,co::memory_model< co::v::sequential_consistent >
1201 > SplitList_Michael_RCU_GPT_dyn_less_seqcst;
1203 typedef cc::SplitListMap< rcu_gpt, Key, Value,
1204 typename cc::split_list::make_traits<
1205 cc::split_list::ordered_list<cc::michael_list_tag>
1206 ,cc::split_list::dynamic_bucket_table< false >
1208 ,cc::split_list::ordered_list_traits<
1209 typename cc::michael_list::make_traits<
1214 > SplitList_Michael_RCU_GPT_st_less;
1216 typedef cc::SplitListMap< rcu_gpt, Key, Value,
1217 typename cc::split_list::make_traits<
1218 cc::split_list::ordered_list<cc::michael_list_tag>
1220 ,cc::split_list::dynamic_bucket_table< false >
1221 ,co::memory_model< co::v::sequential_consistent >
1222 ,cc::split_list::ordered_list_traits<
1223 typename cc::michael_list::make_traits<
1225 ,co::memory_model< co::v::sequential_consistent >
1229 > SplitList_Michael_RCU_GPT_st_less_seqcst;
1231 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
1232 typedef cc::SplitListMap< rcu_shb, Key, Value,
1233 typename cc::split_list::make_traits<
1234 cc::split_list::ordered_list<cc::michael_list_tag>
1236 ,cc::split_list::ordered_list_traits<
1237 typename cc::michael_list::make_traits<
1238 co::compare< compare >
1242 > SplitList_Michael_RCU_SHB_dyn_cmp;
1244 typedef cc::SplitListMap< rcu_shb, Key, Value,
1245 typename cc::split_list::make_traits<
1246 cc::split_list::ordered_list<cc::michael_list_tag>
1248 ,co::memory_model< co::v::sequential_consistent >
1249 ,cc::split_list::ordered_list_traits<
1250 typename cc::michael_list::make_traits<
1251 co::compare< compare >
1252 ,co::memory_model< co::v::sequential_consistent >
1256 > SplitList_Michael_RCU_SHB_dyn_cmp_seqcst;
1258 typedef cc::SplitListMap< rcu_shb, Key, Value,
1259 typename cc::split_list::make_traits<
1260 cc::split_list::ordered_list<cc::michael_list_tag>
1261 ,cc::split_list::dynamic_bucket_table< false >
1263 ,cc::split_list::ordered_list_traits<
1264 typename cc::michael_list::make_traits<
1265 co::compare< compare >
1269 > SplitList_Michael_RCU_SHB_st_cmp;
1271 typedef cc::SplitListMap< rcu_shb, Key, Value,
1272 typename cc::split_list::make_traits<
1273 cc::split_list::ordered_list<cc::michael_list_tag>
1275 ,cc::split_list::dynamic_bucket_table< false >
1276 ,co::memory_model< co::v::sequential_consistent >
1277 ,cc::split_list::ordered_list_traits<
1278 typename cc::michael_list::make_traits<
1279 co::compare< compare >
1280 ,co::memory_model< co::v::sequential_consistent >
1284 > SplitList_Michael_RCU_SHB_st_cmp_seqcst;
1287 typedef cc::SplitListMap< rcu_shb, Key, Value,
1288 typename cc::split_list::make_traits<
1289 cc::split_list::ordered_list<cc::michael_list_tag>
1291 ,cc::split_list::ordered_list_traits<
1292 typename cc::michael_list::make_traits<
1297 > SplitList_Michael_RCU_SHB_dyn_less;
1299 typedef cc::SplitListMap< rcu_shb, Key, Value,
1300 typename cc::split_list::make_traits<
1301 cc::split_list::ordered_list<cc::michael_list_tag>
1303 ,co::memory_model< co::v::sequential_consistent >
1304 ,cc::split_list::ordered_list_traits<
1305 typename cc::michael_list::make_traits<
1307 ,co::memory_model< co::v::sequential_consistent >
1311 > SplitList_Michael_RCU_SHB_dyn_less_seqcst;
1313 typedef cc::SplitListMap< rcu_shb, Key, Value,
1314 typename cc::split_list::make_traits<
1315 cc::split_list::ordered_list<cc::michael_list_tag>
1316 ,cc::split_list::dynamic_bucket_table< false >
1318 ,cc::split_list::ordered_list_traits<
1319 typename cc::michael_list::make_traits<
1324 > SplitList_Michael_RCU_SHB_st_less;
1326 typedef cc::SplitListMap< rcu_shb, Key, Value,
1327 typename cc::split_list::make_traits<
1328 cc::split_list::ordered_list<cc::michael_list_tag>
1330 ,cc::split_list::dynamic_bucket_table< false >
1331 ,co::memory_model< co::v::sequential_consistent >
1332 ,cc::split_list::ordered_list_traits<
1333 typename cc::michael_list::make_traits<
1335 ,co::memory_model< co::v::sequential_consistent >
1339 > SplitList_Michael_RCU_SHB_st_less_seqcst;
1342 typedef cc::SplitListMap< rcu_sht, Key, Value,
1343 typename cc::split_list::make_traits<
1344 cc::split_list::ordered_list<cc::michael_list_tag>
1346 ,cc::split_list::ordered_list_traits<
1347 typename cc::michael_list::make_traits<
1348 co::compare< compare >
1352 > SplitList_Michael_RCU_SHT_dyn_cmp;
1354 typedef cc::SplitListMap< rcu_sht, Key, Value,
1355 typename cc::split_list::make_traits<
1356 cc::split_list::ordered_list<cc::michael_list_tag>
1358 ,co::memory_model< co::v::sequential_consistent >
1359 ,cc::split_list::ordered_list_traits<
1360 typename cc::michael_list::make_traits<
1361 co::compare< compare >
1362 ,co::memory_model< co::v::sequential_consistent >
1366 > SplitList_Michael_RCU_SHT_dyn_cmp_seqcst;
1368 typedef cc::SplitListMap< rcu_sht, Key, Value,
1369 typename cc::split_list::make_traits<
1370 cc::split_list::ordered_list<cc::michael_list_tag>
1371 ,cc::split_list::dynamic_bucket_table< false >
1373 ,cc::split_list::ordered_list_traits<
1374 typename cc::michael_list::make_traits<
1375 co::compare< compare >
1379 > SplitList_Michael_RCU_SHT_st_cmp;
1381 typedef cc::SplitListMap< rcu_sht, Key, Value,
1382 typename cc::split_list::make_traits<
1383 cc::split_list::ordered_list<cc::michael_list_tag>
1385 ,cc::split_list::dynamic_bucket_table< false >
1386 ,co::memory_model< co::v::sequential_consistent >
1387 ,cc::split_list::ordered_list_traits<
1388 typename cc::michael_list::make_traits<
1389 co::compare< compare >
1390 ,co::memory_model< co::v::sequential_consistent >
1394 > SplitList_Michael_RCU_SHT_st_cmp_seqcst;
1397 typedef cc::SplitListMap< rcu_sht, Key, Value,
1398 typename cc::split_list::make_traits<
1399 cc::split_list::ordered_list<cc::michael_list_tag>
1401 ,cc::split_list::ordered_list_traits<
1402 typename cc::michael_list::make_traits<
1407 > SplitList_Michael_RCU_SHT_dyn_less;
1409 typedef cc::SplitListMap< rcu_sht, Key, Value,
1410 typename cc::split_list::make_traits<
1411 cc::split_list::ordered_list<cc::michael_list_tag>
1413 ,co::memory_model< co::v::sequential_consistent >
1414 ,cc::split_list::ordered_list_traits<
1415 typename cc::michael_list::make_traits<
1417 ,co::memory_model< co::v::sequential_consistent >
1421 > SplitList_Michael_RCU_SHT_dyn_less_seqcst;
1423 typedef cc::SplitListMap< rcu_sht, Key, Value,
1424 typename cc::split_list::make_traits<
1425 cc::split_list::ordered_list<cc::michael_list_tag>
1426 ,cc::split_list::dynamic_bucket_table< false >
1428 ,cc::split_list::ordered_list_traits<
1429 typename cc::michael_list::make_traits<
1434 > SplitList_Michael_RCU_SHT_st_less;
1436 typedef cc::SplitListMap< rcu_sht, Key, Value,
1437 typename cc::split_list::make_traits<
1438 cc::split_list::ordered_list<cc::michael_list_tag>
1440 ,cc::split_list::dynamic_bucket_table< false >
1441 ,co::memory_model< co::v::sequential_consistent >
1442 ,cc::split_list::ordered_list_traits<
1443 typename cc::michael_list::make_traits<
1445 ,co::memory_model< co::v::sequential_consistent >
1449 > SplitList_Michael_RCU_SHT_st_less_seqcst;
1453 typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value,
1454 typename cc::split_list::make_traits<
1455 cc::split_list::ordered_list<cc::michael_list_tag>
1457 ,cc::split_list::ordered_list_traits<
1458 typename cc::michael_list::make_traits<
1459 co::compare< compare >
1463 > > SplitList_Michael_NOGC_dyn_cmp;
1465 typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value,
1466 typename cc::split_list::make_traits<
1467 cc::split_list::ordered_list<cc::michael_list_tag>
1469 ,co::memory_model< co::v::sequential_consistent >
1470 ,cc::split_list::ordered_list_traits<
1471 typename cc::michael_list::make_traits<
1472 co::compare< compare >
1473 ,co::memory_model< co::v::sequential_consistent >
1477 > > SplitList_Michael_NOGC_dyn_cmp_seqcst;
1479 typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value,
1480 typename cc::split_list::make_traits<
1481 cc::split_list::ordered_list<cc::michael_list_tag>
1482 ,cc::split_list::dynamic_bucket_table< false >
1484 ,cc::split_list::ordered_list_traits<
1485 typename cc::michael_list::make_traits<
1486 co::compare< compare >
1490 > > SplitList_Michael_NOGC_st_cmp;
1492 typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value,
1493 typename cc::split_list::make_traits<
1494 cc::split_list::ordered_list<cc::michael_list_tag>
1496 ,cc::split_list::dynamic_bucket_table< false >
1497 ,co::memory_model< co::v::sequential_consistent >
1498 ,cc::split_list::ordered_list_traits<
1499 typename cc::michael_list::make_traits<
1500 co::compare< compare >
1501 ,co::memory_model< co::v::sequential_consistent >
1505 > > SplitList_Michael_NOGC_st_cmp_seqcst;
1508 typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value,
1509 typename cc::split_list::make_traits<
1510 cc::split_list::ordered_list<cc::michael_list_tag>
1512 ,cc::split_list::ordered_list_traits<
1513 typename cc::michael_list::make_traits<
1518 > > SplitList_Michael_NOGC_dyn_less;
1520 typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value,
1521 typename cc::split_list::make_traits<
1522 cc::split_list::ordered_list<cc::michael_list_tag>
1524 ,co::memory_model< co::v::sequential_consistent >
1525 ,cc::split_list::ordered_list_traits<
1526 typename cc::michael_list::make_traits<
1528 ,co::memory_model< co::v::sequential_consistent >
1532 > > SplitList_Michael_NOGC_dyn_less_seqcst;
1534 typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value,
1535 typename cc::split_list::make_traits<
1536 cc::split_list::ordered_list<cc::michael_list_tag>
1537 ,cc::split_list::dynamic_bucket_table< false >
1539 ,cc::split_list::ordered_list_traits<
1540 typename cc::michael_list::make_traits<
1545 > > SplitList_Michael_NOGC_st_less;
1547 typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value,
1548 typename cc::split_list::make_traits<
1549 cc::split_list::ordered_list<cc::michael_list_tag>
1551 ,cc::split_list::dynamic_bucket_table< false >
1552 ,co::memory_model< co::v::sequential_consistent >
1553 ,cc::split_list::ordered_list_traits<
1554 typename cc::michael_list::make_traits<
1556 ,co::memory_model< co::v::sequential_consistent >
1560 > > SplitList_Michael_NOGC_st_less_seqcst;
1563 // ***************************************************************************
1564 // SplitListMap based on LazyKVList
1567 typedef cc::SplitListMap< cds::gc::HP, Key, Value,
1568 typename cc::split_list::make_traits<
1569 cc::split_list::ordered_list<cc::lazy_list_tag>
1571 ,cc::split_list::ordered_list_traits<
1572 typename cc::lazy_list::make_traits<
1573 co::compare< compare >
1577 > SplitList_Lazy_HP_dyn_cmp;
1579 typedef cc::SplitListMap< cds::gc::HP, Key, Value,
1580 typename cc::split_list::make_traits<
1581 cc::split_list::ordered_list<cc::lazy_list_tag>
1583 ,co::memory_model< co::v::sequential_consistent >
1584 ,cc::split_list::ordered_list_traits<
1585 typename cc::lazy_list::make_traits<
1586 co::compare< compare >
1587 ,co::memory_model< co::v::sequential_consistent >
1591 > SplitList_Lazy_HP_dyn_cmp_seqcst;
1593 typedef cc::SplitListMap< cds::gc::HP, Key, Value,
1594 typename cc::split_list::make_traits<
1595 cc::split_list::ordered_list<cc::lazy_list_tag>
1596 ,cc::split_list::dynamic_bucket_table< false >
1598 ,cc::split_list::ordered_list_traits<
1599 typename cc::lazy_list::make_traits<
1600 co::compare< compare >
1604 > SplitList_Lazy_HP_st_cmp;
1606 typedef cc::SplitListMap< cds::gc::HP, Key, Value,
1607 typename cc::split_list::make_traits<
1608 cc::split_list::ordered_list<cc::lazy_list_tag>
1610 ,cc::split_list::dynamic_bucket_table< false >
1611 ,co::memory_model< co::v::sequential_consistent >
1612 ,cc::split_list::ordered_list_traits<
1613 typename cc::lazy_list::make_traits<
1614 co::compare< compare >
1615 ,co::memory_model< co::v::sequential_consistent >
1619 > SplitList_Lazy_HP_st_cmp_seqcst;
1623 typedef cc::SplitListMap< cds::gc::HP, Key, Value,
1624 typename cc::split_list::make_traits<
1625 cc::split_list::ordered_list<cc::lazy_list_tag>
1627 ,cc::split_list::ordered_list_traits<
1628 typename cc::lazy_list::make_traits<
1633 > SplitList_Lazy_HP_dyn_less;
1635 typedef cc::SplitListMap< cds::gc::HP, Key, Value,
1636 typename cc::split_list::make_traits<
1637 cc::split_list::ordered_list<cc::lazy_list_tag>
1639 ,co::memory_model< co::v::sequential_consistent >
1640 ,cc::split_list::ordered_list_traits<
1641 typename cc::lazy_list::make_traits<
1643 ,co::memory_model< co::v::sequential_consistent >
1647 > SplitList_Lazy_HP_dyn_less_seqcst;
1649 typedef cc::SplitListMap< cds::gc::HP, Key, Value,
1650 typename cc::split_list::make_traits<
1651 cc::split_list::ordered_list<cc::lazy_list_tag>
1652 ,cc::split_list::dynamic_bucket_table< false >
1654 ,cc::split_list::ordered_list_traits<
1655 typename cc::lazy_list::make_traits<
1660 > SplitList_Lazy_HP_st_less;
1662 typedef cc::SplitListMap< cds::gc::HP, Key, Value,
1663 typename cc::split_list::make_traits<
1664 cc::split_list::ordered_list<cc::lazy_list_tag>
1666 ,cc::split_list::dynamic_bucket_table< false >
1667 ,co::memory_model< co::v::sequential_consistent >
1668 ,cc::split_list::ordered_list_traits<
1669 typename cc::lazy_list::make_traits<
1671 ,co::memory_model< co::v::sequential_consistent >
1675 > SplitList_Lazy_HP_st_less_seqcst;
1678 typedef cc::SplitListMap< cds::gc::DHP, Key, Value,
1679 typename cc::split_list::make_traits<
1680 cc::split_list::ordered_list<cc::lazy_list_tag>
1682 ,cc::split_list::ordered_list_traits<
1683 typename cc::lazy_list::make_traits<
1684 co::compare< compare >
1688 > SplitList_Lazy_DHP_dyn_cmp;
1690 typedef cc::SplitListMap< cds::gc::DHP, Key, Value,
1691 typename cc::split_list::make_traits<
1692 cc::split_list::ordered_list<cc::lazy_list_tag>
1694 ,co::memory_model< co::v::sequential_consistent >
1695 ,cc::split_list::ordered_list_traits<
1696 typename cc::lazy_list::make_traits<
1697 co::compare< compare >
1698 ,co::memory_model< co::v::sequential_consistent >
1702 > SplitList_Lazy_DHP_dyn_cmp_seqcst;
1704 typedef cc::SplitListMap< cds::gc::DHP, Key, Value,
1705 typename cc::split_list::make_traits<
1706 cc::split_list::ordered_list<cc::lazy_list_tag>
1707 ,cc::split_list::dynamic_bucket_table< false >
1709 ,cc::split_list::ordered_list_traits<
1710 typename cc::lazy_list::make_traits<
1711 co::compare< compare >
1715 > SplitList_Lazy_DHP_st_cmp;
1717 typedef cc::SplitListMap< cds::gc::DHP, Key, Value,
1718 typename cc::split_list::make_traits<
1719 cc::split_list::ordered_list<cc::lazy_list_tag>
1721 ,cc::split_list::dynamic_bucket_table< false >
1722 ,co::memory_model< co::v::sequential_consistent >
1723 ,cc::split_list::ordered_list_traits<
1724 typename cc::lazy_list::make_traits<
1725 co::compare< compare >
1726 ,co::memory_model< co::v::sequential_consistent >
1730 > SplitList_Lazy_DHP_st_cmp_seqcst;
1733 typedef cc::SplitListMap< cds::gc::DHP, Key, Value,
1734 typename cc::split_list::make_traits<
1735 cc::split_list::ordered_list<cc::lazy_list_tag>
1737 ,cc::split_list::ordered_list_traits<
1738 typename cc::lazy_list::make_traits<
1743 > SplitList_Lazy_DHP_dyn_less;
1745 typedef cc::SplitListMap< cds::gc::DHP, Key, Value,
1746 typename cc::split_list::make_traits<
1747 cc::split_list::ordered_list<cc::lazy_list_tag>
1749 ,co::memory_model< co::v::sequential_consistent >
1750 ,cc::split_list::ordered_list_traits<
1751 typename cc::lazy_list::make_traits<
1753 ,co::memory_model< co::v::sequential_consistent >
1757 > SplitList_Lazy_DHP_dyn_less_seqcst;
1759 typedef cc::SplitListMap< cds::gc::DHP, Key, Value,
1760 typename cc::split_list::make_traits<
1761 cc::split_list::ordered_list<cc::lazy_list_tag>
1762 ,cc::split_list::dynamic_bucket_table< false >
1764 ,cc::split_list::ordered_list_traits<
1765 typename cc::lazy_list::make_traits<
1770 > SplitList_Lazy_DHP_st_less;
1772 typedef cc::SplitListMap< cds::gc::DHP, Key, Value,
1773 typename cc::split_list::make_traits<
1774 cc::split_list::ordered_list<cc::lazy_list_tag>
1776 ,cc::split_list::dynamic_bucket_table< false >
1777 ,co::memory_model< co::v::sequential_consistent >
1778 ,cc::split_list::ordered_list_traits<
1779 typename cc::lazy_list::make_traits<
1781 ,co::memory_model< co::v::sequential_consistent >
1785 > SplitList_Lazy_DHP_st_less_seqcst;
1788 typedef cc::SplitListMap< rcu_gpi, Key, Value,
1789 typename cc::split_list::make_traits<
1790 cc::split_list::ordered_list<cc::lazy_list_tag>
1792 ,cc::split_list::ordered_list_traits<
1793 typename cc::lazy_list::make_traits<
1794 co::compare< compare >
1798 > SplitList_Lazy_RCU_GPI_dyn_cmp;
1800 typedef cc::SplitListMap< rcu_gpi, Key, Value,
1801 typename cc::split_list::make_traits<
1802 cc::split_list::ordered_list<cc::lazy_list_tag>
1804 ,co::memory_model< co::v::sequential_consistent >
1805 ,cc::split_list::ordered_list_traits<
1806 typename cc::lazy_list::make_traits<
1807 co::compare< compare >
1808 ,co::memory_model< co::v::sequential_consistent >
1812 > SplitList_Lazy_RCU_GPI_dyn_cmp_seqcst;
1814 typedef cc::SplitListMap< rcu_gpi, Key, Value,
1815 typename cc::split_list::make_traits<
1816 cc::split_list::ordered_list<cc::lazy_list_tag>
1817 ,cc::split_list::dynamic_bucket_table< false >
1819 ,cc::split_list::ordered_list_traits<
1820 typename cc::lazy_list::make_traits<
1821 co::compare< compare >
1825 > SplitList_Lazy_RCU_GPI_st_cmp;
1827 typedef cc::SplitListMap< rcu_gpi, Key, Value,
1828 typename cc::split_list::make_traits<
1829 cc::split_list::ordered_list<cc::lazy_list_tag>
1831 ,cc::split_list::dynamic_bucket_table< false >
1832 ,co::memory_model< co::v::sequential_consistent >
1833 ,cc::split_list::ordered_list_traits<
1834 typename cc::lazy_list::make_traits<
1835 co::compare< compare >
1836 ,co::memory_model< co::v::sequential_consistent >
1840 > SplitList_Lazy_RCU_GPI_st_cmp_seqcst;
1843 typedef cc::SplitListMap< rcu_gpi, Key, Value,
1844 typename cc::split_list::make_traits<
1845 cc::split_list::ordered_list<cc::lazy_list_tag>
1847 ,cc::split_list::ordered_list_traits<
1848 typename cc::lazy_list::make_traits<
1853 > SplitList_Lazy_RCU_GPI_dyn_less;
1855 typedef cc::SplitListMap< rcu_gpi, Key, Value,
1856 typename cc::split_list::make_traits<
1857 cc::split_list::ordered_list<cc::lazy_list_tag>
1859 ,co::memory_model< co::v::sequential_consistent >
1860 ,cc::split_list::ordered_list_traits<
1861 typename cc::lazy_list::make_traits<
1863 ,co::memory_model< co::v::sequential_consistent >
1867 > SplitList_Lazy_RCU_GPI_dyn_less_seqcst;
1869 typedef cc::SplitListMap< rcu_gpi, Key, Value,
1870 typename cc::split_list::make_traits<
1871 cc::split_list::ordered_list<cc::lazy_list_tag>
1872 ,cc::split_list::dynamic_bucket_table< false >
1874 ,cc::split_list::ordered_list_traits<
1875 typename cc::lazy_list::make_traits<
1880 > SplitList_Lazy_RCU_GPI_st_less;
1882 typedef cc::SplitListMap< rcu_gpi, Key, Value,
1883 typename cc::split_list::make_traits<
1884 cc::split_list::ordered_list<cc::lazy_list_tag>
1886 ,cc::split_list::dynamic_bucket_table< false >
1887 ,co::memory_model< co::v::sequential_consistent >
1888 ,cc::split_list::ordered_list_traits<
1889 typename cc::lazy_list::make_traits<
1891 ,co::memory_model< co::v::sequential_consistent >
1895 > SplitList_Lazy_RCU_GPI_st_less_seqcst;
1898 typedef cc::SplitListMap< rcu_gpb, Key, Value,
1899 typename cc::split_list::make_traits<
1900 cc::split_list::ordered_list<cc::lazy_list_tag>
1902 ,cc::split_list::ordered_list_traits<
1903 typename cc::lazy_list::make_traits<
1904 co::compare< compare >
1908 > SplitList_Lazy_RCU_GPB_dyn_cmp;
1910 typedef cc::SplitListMap< rcu_gpb, Key, Value,
1911 typename cc::split_list::make_traits<
1912 cc::split_list::ordered_list<cc::lazy_list_tag>
1914 ,co::memory_model< co::v::sequential_consistent >
1915 ,cc::split_list::ordered_list_traits<
1916 typename cc::lazy_list::make_traits<
1917 co::compare< compare >
1918 ,co::memory_model< co::v::sequential_consistent >
1922 > SplitList_Lazy_RCU_GPB_dyn_cmp_seqcst;
1924 typedef cc::SplitListMap< rcu_gpb, Key, Value,
1925 typename cc::split_list::make_traits<
1926 cc::split_list::ordered_list<cc::lazy_list_tag>
1927 ,cc::split_list::dynamic_bucket_table< false >
1929 ,cc::split_list::ordered_list_traits<
1930 typename cc::lazy_list::make_traits<
1931 co::compare< compare >
1935 > SplitList_Lazy_RCU_GPB_st_cmp;
1937 typedef cc::SplitListMap< rcu_gpb, Key, Value,
1938 typename cc::split_list::make_traits<
1939 cc::split_list::ordered_list<cc::lazy_list_tag>
1941 ,cc::split_list::dynamic_bucket_table< false >
1942 ,co::memory_model< co::v::sequential_consistent >
1943 ,cc::split_list::ordered_list_traits<
1944 typename cc::lazy_list::make_traits<
1945 co::compare< compare >
1946 ,co::memory_model< co::v::sequential_consistent >
1950 > SplitList_Lazy_RCU_GPB_st_cmp_seqcst;
1953 typedef cc::SplitListMap< rcu_gpb, Key, Value,
1954 typename cc::split_list::make_traits<
1955 cc::split_list::ordered_list<cc::lazy_list_tag>
1957 ,cc::split_list::ordered_list_traits<
1958 typename cc::lazy_list::make_traits<
1963 > SplitList_Lazy_RCU_GPB_dyn_less;
1965 typedef cc::SplitListMap< rcu_gpb, Key, Value,
1966 typename cc::split_list::make_traits<
1967 cc::split_list::ordered_list<cc::lazy_list_tag>
1969 ,co::memory_model< co::v::sequential_consistent >
1970 ,cc::split_list::ordered_list_traits<
1971 typename cc::lazy_list::make_traits<
1973 ,co::memory_model< co::v::sequential_consistent >
1977 > SplitList_Lazy_RCU_GPB_dyn_less_seqcst;
1979 typedef cc::SplitListMap< rcu_gpb, Key, Value,
1980 typename cc::split_list::make_traits<
1981 cc::split_list::ordered_list<cc::lazy_list_tag>
1982 ,cc::split_list::dynamic_bucket_table< false >
1984 ,cc::split_list::ordered_list_traits<
1985 typename cc::lazy_list::make_traits<
1990 > SplitList_Lazy_RCU_GPB_st_less;
1992 typedef cc::SplitListMap< rcu_gpb, Key, Value,
1993 typename cc::split_list::make_traits<
1994 cc::split_list::ordered_list<cc::lazy_list_tag>
1996 ,cc::split_list::dynamic_bucket_table< false >
1997 ,co::memory_model< co::v::sequential_consistent >
1998 ,cc::split_list::ordered_list_traits<
1999 typename cc::lazy_list::make_traits<
2001 ,co::memory_model< co::v::sequential_consistent >
2005 > SplitList_Lazy_RCU_GPB_st_less_seqcst;
2008 typedef cc::SplitListMap< rcu_gpt, Key, Value,
2009 typename cc::split_list::make_traits<
2010 cc::split_list::ordered_list<cc::lazy_list_tag>
2012 ,cc::split_list::ordered_list_traits<
2013 typename cc::lazy_list::make_traits<
2014 co::compare< compare >
2018 > SplitList_Lazy_RCU_GPT_dyn_cmp;
2020 typedef cc::SplitListMap< rcu_gpt, Key, Value,
2021 typename cc::split_list::make_traits<
2022 cc::split_list::ordered_list<cc::lazy_list_tag>
2024 ,co::memory_model< co::v::sequential_consistent >
2025 ,cc::split_list::ordered_list_traits<
2026 typename cc::lazy_list::make_traits<
2027 co::compare< compare >
2028 ,co::memory_model< co::v::sequential_consistent >
2032 > SplitList_Lazy_RCU_GPT_dyn_cmp_seqcst;
2034 typedef cc::SplitListMap< rcu_gpt, Key, Value,
2035 typename cc::split_list::make_traits<
2036 cc::split_list::ordered_list<cc::lazy_list_tag>
2037 ,cc::split_list::dynamic_bucket_table< false >
2039 ,cc::split_list::ordered_list_traits<
2040 typename cc::lazy_list::make_traits<
2041 co::compare< compare >
2045 > SplitList_Lazy_RCU_GPT_st_cmp;
2047 typedef cc::SplitListMap< rcu_gpt, Key, Value,
2048 typename cc::split_list::make_traits<
2049 cc::split_list::ordered_list<cc::lazy_list_tag>
2051 ,cc::split_list::dynamic_bucket_table< false >
2052 ,co::memory_model< co::v::sequential_consistent >
2053 ,cc::split_list::ordered_list_traits<
2054 typename cc::lazy_list::make_traits<
2055 co::compare< compare >
2056 ,co::memory_model< co::v::sequential_consistent >
2060 > SplitList_Lazy_RCU_GPT_st_cmp_seqcst;
2063 typedef cc::SplitListMap< rcu_gpt, Key, Value,
2064 typename cc::split_list::make_traits<
2065 cc::split_list::ordered_list<cc::lazy_list_tag>
2067 ,cc::split_list::ordered_list_traits<
2068 typename cc::lazy_list::make_traits<
2073 > SplitList_Lazy_RCU_GPT_dyn_less;
2075 typedef cc::SplitListMap< rcu_gpt, Key, Value,
2076 typename cc::split_list::make_traits<
2077 cc::split_list::ordered_list<cc::lazy_list_tag>
2079 ,co::memory_model< co::v::sequential_consistent >
2080 ,cc::split_list::ordered_list_traits<
2081 typename cc::lazy_list::make_traits<
2083 ,co::memory_model< co::v::sequential_consistent >
2087 > SplitList_Lazy_RCU_GPT_dyn_less_seqcst;
2089 typedef cc::SplitListMap< rcu_gpt, Key, Value,
2090 typename cc::split_list::make_traits<
2091 cc::split_list::ordered_list<cc::lazy_list_tag>
2092 ,cc::split_list::dynamic_bucket_table< false >
2094 ,cc::split_list::ordered_list_traits<
2095 typename cc::lazy_list::make_traits<
2100 > SplitList_Lazy_RCU_GPT_st_less;
2102 typedef cc::SplitListMap< rcu_gpt, Key, Value,
2103 typename cc::split_list::make_traits<
2104 cc::split_list::ordered_list<cc::lazy_list_tag>
2106 ,cc::split_list::dynamic_bucket_table< false >
2107 ,co::memory_model< co::v::sequential_consistent >
2108 ,cc::split_list::ordered_list_traits<
2109 typename cc::lazy_list::make_traits<
2111 ,co::memory_model< co::v::sequential_consistent >
2115 > SplitList_Lazy_RCU_GPT_st_less_seqcst;
2117 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
2118 typedef cc::SplitListMap< rcu_shb, Key, Value,
2119 typename cc::split_list::make_traits<
2120 cc::split_list::ordered_list<cc::lazy_list_tag>
2122 ,cc::split_list::ordered_list_traits<
2123 typename cc::lazy_list::make_traits<
2124 co::compare< compare >
2128 > SplitList_Lazy_RCU_SHB_dyn_cmp;
2130 typedef cc::SplitListMap< rcu_shb, Key, Value,
2131 typename cc::split_list::make_traits<
2132 cc::split_list::ordered_list<cc::lazy_list_tag>
2134 ,co::memory_model< co::v::sequential_consistent >
2135 ,cc::split_list::ordered_list_traits<
2136 typename cc::lazy_list::make_traits<
2137 co::compare< compare >
2138 ,co::memory_model< co::v::sequential_consistent >
2142 > SplitList_Lazy_RCU_SHB_dyn_cmp_seqcst;
2144 typedef cc::SplitListMap< rcu_shb, Key, Value,
2145 typename cc::split_list::make_traits<
2146 cc::split_list::ordered_list<cc::lazy_list_tag>
2147 ,cc::split_list::dynamic_bucket_table< false >
2149 ,cc::split_list::ordered_list_traits<
2150 typename cc::lazy_list::make_traits<
2151 co::compare< compare >
2155 > SplitList_Lazy_RCU_SHB_st_cmp;
2157 typedef cc::SplitListMap< rcu_shb, Key, Value,
2158 typename cc::split_list::make_traits<
2159 cc::split_list::ordered_list<cc::lazy_list_tag>
2161 ,cc::split_list::dynamic_bucket_table< false >
2162 ,co::memory_model< co::v::sequential_consistent >
2163 ,cc::split_list::ordered_list_traits<
2164 typename cc::lazy_list::make_traits<
2165 co::compare< compare >
2166 ,co::memory_model< co::v::sequential_consistent >
2170 > SplitList_Lazy_RCU_SHB_st_cmp_seqcst;
2173 typedef cc::SplitListMap< rcu_shb, Key, Value,
2174 typename cc::split_list::make_traits<
2175 cc::split_list::ordered_list<cc::lazy_list_tag>
2177 ,cc::split_list::ordered_list_traits<
2178 typename cc::lazy_list::make_traits<
2183 > SplitList_Lazy_RCU_SHB_dyn_less;
2185 typedef cc::SplitListMap< rcu_shb, Key, Value,
2186 typename cc::split_list::make_traits<
2187 cc::split_list::ordered_list<cc::lazy_list_tag>
2189 ,co::memory_model< co::v::sequential_consistent >
2190 ,cc::split_list::ordered_list_traits<
2191 typename cc::lazy_list::make_traits<
2193 ,co::memory_model< co::v::sequential_consistent >
2197 > SplitList_Lazy_RCU_SHB_dyn_less_seqcst;
2199 typedef cc::SplitListMap< rcu_shb, Key, Value,
2200 typename cc::split_list::make_traits<
2201 cc::split_list::ordered_list<cc::lazy_list_tag>
2202 ,cc::split_list::dynamic_bucket_table< false >
2204 ,cc::split_list::ordered_list_traits<
2205 typename cc::lazy_list::make_traits<
2210 > SplitList_Lazy_RCU_SHB_st_less;
2212 typedef cc::SplitListMap< rcu_shb, Key, Value,
2213 typename cc::split_list::make_traits<
2214 cc::split_list::ordered_list<cc::lazy_list_tag>
2216 ,cc::split_list::dynamic_bucket_table< false >
2217 ,co::memory_model< co::v::sequential_consistent >
2218 ,cc::split_list::ordered_list_traits<
2219 typename cc::lazy_list::make_traits<
2221 ,co::memory_model< co::v::sequential_consistent >
2225 > SplitList_Lazy_RCU_SHB_st_less_seqcst;
2228 typedef cc::SplitListMap< rcu_sht, Key, Value,
2229 typename cc::split_list::make_traits<
2230 cc::split_list::ordered_list<cc::lazy_list_tag>
2232 ,cc::split_list::ordered_list_traits<
2233 typename cc::lazy_list::make_traits<
2234 co::compare< compare >
2238 > SplitList_Lazy_RCU_SHT_dyn_cmp;
2240 typedef cc::SplitListMap< rcu_sht, Key, Value,
2241 typename cc::split_list::make_traits<
2242 cc::split_list::ordered_list<cc::lazy_list_tag>
2244 ,co::memory_model< co::v::sequential_consistent >
2245 ,cc::split_list::ordered_list_traits<
2246 typename cc::lazy_list::make_traits<
2247 co::compare< compare >
2248 ,co::memory_model< co::v::sequential_consistent >
2252 > SplitList_Lazy_RCU_SHT_dyn_cmp_seqcst;
2254 typedef cc::SplitListMap< rcu_sht, Key, Value,
2255 typename cc::split_list::make_traits<
2256 cc::split_list::ordered_list<cc::lazy_list_tag>
2257 ,cc::split_list::dynamic_bucket_table< false >
2259 ,cc::split_list::ordered_list_traits<
2260 typename cc::lazy_list::make_traits<
2261 co::compare< compare >
2265 > SplitList_Lazy_RCU_SHT_st_cmp;
2267 typedef cc::SplitListMap< rcu_sht, Key, Value,
2268 typename cc::split_list::make_traits<
2269 cc::split_list::ordered_list<cc::lazy_list_tag>
2271 ,cc::split_list::dynamic_bucket_table< false >
2272 ,co::memory_model< co::v::sequential_consistent >
2273 ,cc::split_list::ordered_list_traits<
2274 typename cc::lazy_list::make_traits<
2275 co::compare< compare >
2276 ,co::memory_model< co::v::sequential_consistent >
2280 > SplitList_Lazy_RCU_SHT_st_cmp_seqcst;
2283 typedef cc::SplitListMap< rcu_sht, Key, Value,
2284 typename cc::split_list::make_traits<
2285 cc::split_list::ordered_list<cc::lazy_list_tag>
2287 ,cc::split_list::ordered_list_traits<
2288 typename cc::lazy_list::make_traits<
2293 > SplitList_Lazy_RCU_SHT_dyn_less;
2295 typedef cc::SplitListMap< rcu_sht, Key, Value,
2296 typename cc::split_list::make_traits<
2297 cc::split_list::ordered_list<cc::lazy_list_tag>
2299 ,co::memory_model< co::v::sequential_consistent >
2300 ,cc::split_list::ordered_list_traits<
2301 typename cc::lazy_list::make_traits<
2303 ,co::memory_model< co::v::sequential_consistent >
2307 > SplitList_Lazy_RCU_SHT_dyn_less_seqcst;
2309 typedef cc::SplitListMap< rcu_sht, Key, Value,
2310 typename cc::split_list::make_traits<
2311 cc::split_list::ordered_list<cc::lazy_list_tag>
2312 ,cc::split_list::dynamic_bucket_table< false >
2314 ,cc::split_list::ordered_list_traits<
2315 typename cc::lazy_list::make_traits<
2320 > SplitList_Lazy_RCU_SHT_st_less;
2322 typedef cc::SplitListMap< rcu_sht, Key, Value,
2323 typename cc::split_list::make_traits<
2324 cc::split_list::ordered_list<cc::lazy_list_tag>
2326 ,cc::split_list::dynamic_bucket_table< false >
2327 ,co::memory_model< co::v::sequential_consistent >
2328 ,cc::split_list::ordered_list_traits<
2329 typename cc::lazy_list::make_traits<
2331 ,co::memory_model< co::v::sequential_consistent >
2335 > SplitList_Lazy_RCU_SHT_st_less_seqcst;
2339 typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value,
2340 typename cc::split_list::make_traits<
2341 cc::split_list::ordered_list<cc::lazy_list_tag>
2343 ,cc::split_list::ordered_list_traits<
2344 typename cc::lazy_list::make_traits<
2345 co::compare< compare >
2349 > > SplitList_Lazy_NOGC_dyn_cmp;
2351 typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value,
2352 typename cc::split_list::make_traits<
2353 cc::split_list::ordered_list<cc::lazy_list_tag>
2355 ,co::memory_model< co::v::sequential_consistent >
2356 ,cc::split_list::ordered_list_traits<
2357 typename cc::lazy_list::make_traits<
2358 co::compare< compare >
2359 ,co::memory_model< co::v::sequential_consistent >
2363 > > SplitList_Lazy_NOGC_dyn_cmp_seqcst;
2365 typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value,
2366 typename cc::split_list::make_traits<
2367 cc::split_list::ordered_list<cc::lazy_list_tag>
2368 ,cc::split_list::dynamic_bucket_table< false >
2370 ,cc::split_list::ordered_list_traits<
2371 typename cc::lazy_list::make_traits<
2372 co::compare< compare >
2376 > > SplitList_Lazy_NOGC_st_cmp;
2378 typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value,
2379 typename cc::split_list::make_traits<
2380 cc::split_list::ordered_list<cc::lazy_list_tag>
2382 ,cc::split_list::dynamic_bucket_table< false >
2383 ,co::memory_model< co::v::sequential_consistent >
2384 ,cc::split_list::ordered_list_traits<
2385 typename cc::lazy_list::make_traits<
2386 co::compare< compare >
2387 ,co::memory_model< co::v::sequential_consistent >
2391 > > SplitList_Lazy_NOGC_st_cmp_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::lazy_list_tag>
2399 ,cc::split_list::ordered_list_traits<
2400 typename cc::lazy_list::make_traits<
2405 > > SplitList_Lazy_NOGC_dyn_less;
2407 typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value,
2408 typename cc::split_list::make_traits<
2409 cc::split_list::ordered_list<cc::lazy_list_tag>
2411 ,co::memory_model< co::v::sequential_consistent >
2412 ,cc::split_list::ordered_list_traits<
2413 typename cc::lazy_list::make_traits<
2415 ,co::memory_model< co::v::sequential_consistent >
2419 > > SplitList_Lazy_NOGC_dyn_less_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::lazy_list_tag>
2424 ,cc::split_list::dynamic_bucket_table< false >
2426 ,cc::split_list::ordered_list_traits<
2427 typename cc::lazy_list::make_traits<
2432 > > SplitList_Lazy_NOGC_st_less;
2434 typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value,
2435 typename cc::split_list::make_traits<
2436 cc::split_list::ordered_list<cc::lazy_list_tag>
2438 ,cc::split_list::dynamic_bucket_table< false >
2439 ,co::memory_model< co::v::sequential_consistent >
2440 ,cc::split_list::ordered_list_traits<
2441 typename cc::lazy_list::make_traits<
2443 ,co::memory_model< co::v::sequential_consistent >
2447 > > SplitList_Lazy_NOGC_st_less_seqcst;
2450 // ***************************************************************************
2453 // for sequential containers
2454 template <class BucketEntry, typename... Options>
2455 class StripedHashMap_seq:
2456 public cc::StripedMap< BucketEntry,
2457 co::mutex_policy< cc::striped_set::striping<> >
2458 ,co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
2462 typedef cc::StripedMap< BucketEntry,
2463 co::mutex_policy< cc::striped_set::striping<> >
2464 ,co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
2467 typedef typename base_class::resizing_policy resizing_policy_t;
2469 resizing_policy_t m_placeHolder;
2471 StripedHashMap_seq( size_t nCapacity, size_t nLoadFactor )
2472 : base_class( nCapacity / nLoadFactor / 16, *(new(&m_placeHolder) resizing_policy_t( nLoadFactor )) )
2476 // for non-sequential ordered containers
2477 template <class BucketEntry, typename... Options>
2478 class StripedHashMap_ord:
2479 public cc::StripedMap< BucketEntry,
2480 co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
2481 ,co::mutex_policy< cc::striped_set::striping<> >
2485 typedef cc::StripedMap< BucketEntry,
2486 co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
2487 ,co::mutex_policy< cc::striped_set::striping<> >
2490 typedef typename base_class::resizing_policy resizing_policy_t;
2492 resizing_policy_t m_placeHolder;
2494 StripedHashMap_ord( size_t nCapacity, size_t nLoadFactor )
2495 : base_class( 0, *(new(&m_placeHolder) resizing_policy_t( nLoadFactor * 1024 )) )
2500 typedef StripedHashMap_seq<
2501 std::list< std::pair< Key const, Value > >
2506 #if (CDS_COMPILER == CDS_COMPILER_MSVC || (CDS_COMPILER == CDS_COMPILER_INTEL && CDS_OS_INTERFACE == CDS_OSI_WINDOWS)) && _MSC_VER < 1600
2507 typedef StripedHashMap_ord<
2508 stdext::hash_map< Key, Value, stdext::hash_compare<Key, less > >
2510 > StripedMap_hashmap;
2512 typedef StripedHashMap_ord<
2513 std::unordered_map< Key, Value, hash, equal_to >
2515 > StripedMap_hashmap;
2518 typedef StripedHashMap_ord<
2519 std::map< Key, Value, less >
2523 typedef StripedHashMap_ord<
2524 boost::unordered_map< Key, Value, hash, equal_to >
2526 > StripedMap_boost_unordered_map;
2528 #if BOOST_VERSION >= 104800
2529 typedef StripedHashMap_seq<
2530 boost::container::slist< std::pair< Key const, Value > >
2535 typedef StripedHashMap_seq<
2536 boost::container::list< std::pair< Key const, Value > >
2539 > StripedMap_boost_list;
2541 typedef StripedHashMap_ord<
2542 boost::container::map< Key, Value, less >
2544 > StripedMap_boost_map;
2546 //# ifdef CDS_UNIT_MAP_TYPES_ENABLE_BOOST_FLAT_CONTAINERS
2547 typedef StripedHashMap_ord<
2548 boost::container::flat_map< Key, Value, less >
2550 > StripedMap_boost_flat_map;
2552 #endif // BOOST_VERSION >= 104800
2554 // ***************************************************************************
2557 // for sequential containers
2558 template <class BucketEntry, typename... Options>
2559 class RefinableHashMap_seq:
2560 public cc::StripedMap< BucketEntry,
2561 co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
2562 ,co::mutex_policy< cc::striped_set::refinable<> >
2566 typedef cc::StripedMap< BucketEntry,
2567 co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
2568 ,co::mutex_policy< cc::striped_set::refinable<> >
2571 typedef typename base_class::resizing_policy resizing_policy_t;
2573 resizing_policy_t m_placeHolder;
2575 RefinableHashMap_seq( size_t nCapacity, size_t nLoadFactor )
2576 : base_class( nCapacity / nLoadFactor / 16, *(new(&m_placeHolder) resizing_policy_t( nLoadFactor )) )
2580 // for non-sequential ordered containers
2581 template <class BucketEntry, typename... Options>
2582 class RefinableHashMap_ord:
2583 public cc::StripedMap< BucketEntry,
2584 co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
2585 ,co::mutex_policy< cc::striped_set::refinable<> >
2589 typedef cc::StripedMap< BucketEntry,
2590 co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
2591 ,co::mutex_policy< cc::striped_set::refinable<> >
2594 typedef typename base_class::resizing_policy resizing_policy_t;
2596 resizing_policy_t m_placeHolder;
2598 RefinableHashMap_ord( size_t nCapacity, size_t nLoadFactor )
2599 : base_class( 0, *(new(&m_placeHolder) resizing_policy_t( nLoadFactor * 1024 )) )
2604 typedef RefinableHashMap_seq<
2605 std::list< std::pair< Key const, Value > >
2608 > RefinableMap_list;
2610 #if BOOST_VERSION >= 104800
2611 typedef RefinableHashMap_seq<
2612 boost::container::slist< std::pair< Key const, Value > >
2615 > RefinableMap_slist;
2618 typedef RefinableHashMap_ord<
2619 std::map< Key, Value, less >
2623 #if (CDS_COMPILER == CDS_COMPILER_MSVC || (CDS_COMPILER == CDS_COMPILER_INTEL && CDS_OS_INTERFACE == CDS_OSI_WINDOWS)) && _MSC_VER < 1600
2624 typedef RefinableHashMap_ord<
2625 stdext::hash_map< Key, Value, stdext::hash_compare<Key, less > >
2627 > RefinableMap_hashmap;
2629 typedef RefinableHashMap_ord<
2630 std::unordered_map< Key, Value, hash, equal_to >
2632 > RefinableMap_hashmap;
2634 typedef RefinableHashMap_ord<
2635 boost::unordered_map< Key, Value, hash, equal_to >
2637 > RefinableMap_boost_unordered_map;
2639 #if BOOST_VERSION >= 104800
2640 typedef RefinableHashMap_seq<
2641 boost::container::list< std::pair< Key const, Value > >
2644 > RefinableMap_boost_list;
2646 typedef RefinableHashMap_ord<
2647 boost::container::map< Key, Value, less >
2649 > RefinableMap_boost_map;
2651 //# ifdef CDS_UNIT_MAP_TYPES_ENABLE_BOOST_FLAT_CONTAINERS
2652 typedef RefinableHashMap_ord<
2653 boost::container::flat_map< Key, Value, less >
2655 > RefinableMap_boost_flat_map;
2657 #endif // #if BOOST_VERSION >= 104800
2660 // ***************************************************************************
2663 typedef CuckooStripedMap< Key, Value,
2664 cc::cuckoo::probeset_type< cc::cuckoo::list >
2665 ,co::equal_to< equal_to >
2666 ,co::hash< std::tuple< hash, hash2 > >
2667 > CuckooStripedMap_list_unord;
2669 typedef CuckooStripedMap< Key, Value,
2670 cc::cuckoo::probeset_type< cc::cuckoo::list >
2671 ,co::equal_to< equal_to >
2672 ,co::hash< std::tuple< hash, hash2 > >
2673 ,co::stat< cc::cuckoo::stat >
2674 > CuckooStripedMap_list_unord_stat;
2676 typedef CuckooStripedMap< Key, Value,
2677 cc::cuckoo::probeset_type< cc::cuckoo::list >
2678 ,co::equal_to< equal_to >
2679 ,co::hash< std::tuple< hash, hash2 > >
2680 ,cc::cuckoo::store_hash< true >
2681 > CuckooStripedMap_list_unord_storehash;
2683 typedef CuckooStripedMap< Key, Value,
2684 cc::cuckoo::probeset_type< cc::cuckoo::list >
2685 ,co::compare< compare >
2686 ,co::hash< std::tuple< hash, hash2 > >
2687 > CuckooStripedMap_list_ord;
2689 typedef CuckooStripedMap< Key, Value,
2690 cc::cuckoo::probeset_type< cc::cuckoo::list >
2691 ,co::compare< compare >
2692 ,co::hash< std::tuple< hash, hash2 > >
2693 ,co::stat< cc::cuckoo::stat >
2694 > CuckooStripedMap_list_ord_stat;
2696 typedef CuckooStripedMap< Key, Value,
2697 cc::cuckoo::probeset_type< cc::cuckoo::list >
2698 ,co::compare< compare >
2699 ,co::hash< std::tuple< hash, hash2 > >
2700 ,cc::cuckoo::store_hash< true >
2701 > CuckooStripedMap_list_ord_storehash;
2703 typedef CuckooStripedMap< Key, Value,
2704 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
2705 ,co::equal_to< equal_to >
2706 ,co::hash< std::tuple< hash, hash2 > >
2707 > CuckooStripedMap_vector_unord;
2709 typedef CuckooStripedMap< Key, Value,
2710 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
2711 ,co::equal_to< equal_to >
2712 ,co::hash< std::tuple< hash, hash2 > >
2713 ,co::stat< cc::cuckoo::stat >
2714 > CuckooStripedMap_vector_unord_stat;
2716 typedef CuckooStripedMap< Key, Value,
2717 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
2718 ,co::equal_to< equal_to >
2719 ,co::hash< std::tuple< hash, hash2 > >
2720 ,cc::cuckoo::store_hash< true >
2721 > CuckooStripedMap_vector_unord_storehash;
2723 typedef CuckooStripedMap< Key, Value,
2724 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
2725 ,co::compare< compare >
2726 ,co::hash< std::tuple< hash, hash2 > >
2727 > CuckooStripedMap_vector_ord;
2729 typedef CuckooStripedMap< Key, Value,
2730 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
2731 ,co::compare< compare >
2732 ,co::hash< std::tuple< hash, hash2 > >
2733 ,co::stat< cc::cuckoo::stat >
2734 > CuckooStripedMap_vector_ord_stat;
2736 typedef CuckooStripedMap< Key, Value,
2737 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
2738 ,co::compare< compare >
2739 ,co::hash< std::tuple< hash, hash2 > >
2740 ,cc::cuckoo::store_hash< true >
2741 > CuckooStripedMap_vector_ord_storehash;
2743 typedef CuckooRefinableMap< Key, Value,
2744 cc::cuckoo::probeset_type< cc::cuckoo::list >
2745 ,co::equal_to< equal_to >
2746 ,co::hash< std::tuple< hash, hash2 > >
2747 > CuckooRefinableMap_list_unord;
2749 typedef CuckooRefinableMap< Key, Value,
2750 cc::cuckoo::probeset_type< cc::cuckoo::list >
2751 ,co::equal_to< equal_to >
2752 ,co::hash< std::tuple< hash, hash2 > >
2753 ,co::stat< cc::cuckoo::stat >
2754 > CuckooRefinableMap_list_unord_stat;
2756 typedef CuckooRefinableMap< Key, Value,
2757 cc::cuckoo::probeset_type< cc::cuckoo::list >
2758 ,co::equal_to< equal_to >
2759 ,co::hash< std::tuple< hash, hash2 > >
2760 ,cc::cuckoo::store_hash< true >
2761 > CuckooRefinableMap_list_unord_storehash;
2763 typedef CuckooRefinableMap< Key, Value,
2764 cc::cuckoo::probeset_type< cc::cuckoo::list >
2765 ,co::compare< compare >
2766 ,co::hash< std::tuple< hash, hash2 > >
2767 > CuckooRefinableMap_list_ord;
2769 typedef CuckooRefinableMap< Key, Value,
2770 cc::cuckoo::probeset_type< cc::cuckoo::list >
2771 ,co::compare< compare >
2772 ,co::hash< std::tuple< hash, hash2 > >
2773 ,co::stat< cc::cuckoo::stat >
2774 > CuckooRefinableMap_list_ord_stat;
2776 typedef CuckooRefinableMap< Key, Value,
2777 cc::cuckoo::probeset_type< cc::cuckoo::list >
2778 ,co::compare< compare >
2779 ,co::hash< std::tuple< hash, hash2 > >
2780 ,cc::cuckoo::store_hash< true >
2781 > CuckooRefinableMap_list_ord_storehash;
2783 typedef CuckooRefinableMap< Key, Value,
2784 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
2785 ,co::equal_to< equal_to >
2786 ,co::hash< std::tuple< hash, hash2 > >
2787 > CuckooRefinableMap_vector_unord;
2789 typedef CuckooRefinableMap< Key, Value,
2790 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
2791 ,co::equal_to< equal_to >
2792 ,co::hash< std::tuple< hash, hash2 > >
2793 ,co::stat< cc::cuckoo::stat >
2794 > CuckooRefinableMap_vector_unord_stat;
2796 typedef CuckooRefinableMap< Key, Value,
2797 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
2798 ,co::equal_to< equal_to >
2799 ,co::hash< std::tuple< hash, hash2 > >
2800 ,cc::cuckoo::store_hash< true >
2801 > CuckooRefinableMap_vector_unord_storehash;
2803 typedef CuckooRefinableMap< Key, Value,
2804 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
2805 ,co::compare< compare >
2806 ,co::hash< std::tuple< hash, hash2 > >
2807 > CuckooRefinableMap_vector_ord;
2809 typedef CuckooRefinableMap< Key, Value,
2810 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
2811 ,co::compare< compare >
2812 ,co::hash< std::tuple< hash, hash2 > >
2813 ,co::stat< cc::cuckoo::stat >
2814 > CuckooRefinableMap_vector_ord_stat;
2816 typedef CuckooRefinableMap< Key, Value,
2817 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
2818 ,co::compare< compare >
2819 ,co::hash< std::tuple< hash, hash2 > >
2820 ,cc::cuckoo::store_hash< true >
2821 > CuckooRefinableMap_vector_ord_storehash;
2823 // ***************************************************************************
2826 class traits_SkipListMap_hp_less_pascal: public cc::skip_list::make_traits <
2828 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
2829 ,co::item_counter< cds::atomicity::item_counter >
2832 typedef cc::SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_hp_less_pascal > SkipListMap_hp_less_pascal;
2834 class traits_SkipListMap_hp_less_pascal_seqcst: public cc::skip_list::make_traits <
2836 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
2837 ,co::memory_model< co::v::sequential_consistent >
2838 ,co::item_counter< cds::atomicity::item_counter >
2841 typedef cc::SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_hp_less_pascal_seqcst > SkipListMap_hp_less_pascal_seqcst;
2843 class traits_SkipListMap_hp_less_pascal_stat: public cc::skip_list::make_traits <
2845 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
2846 ,co::stat< cc::skip_list::stat<> >
2847 ,co::item_counter< cds::atomicity::item_counter >
2850 typedef cc::SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_hp_less_pascal_stat > SkipListMap_hp_less_pascal_stat;
2852 class traits_SkipListMap_hp_cmp_pascal: public cc::skip_list::make_traits <
2853 co::compare< compare >
2854 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
2855 ,co::item_counter< cds::atomicity::item_counter >
2858 typedef cc::SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_hp_cmp_pascal > SkipListMap_hp_cmp_pascal;
2860 class traits_SkipListMap_hp_cmp_pascal_stat: public cc::skip_list::make_traits <
2861 co::compare< compare >
2862 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
2863 ,co::stat< cc::skip_list::stat<> >
2864 ,co::item_counter< cds::atomicity::item_counter >
2867 typedef cc::SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_hp_cmp_pascal_stat > SkipListMap_hp_cmp_pascal_stat;
2869 class traits_SkipListMap_hp_less_xorshift: public cc::skip_list::make_traits <
2871 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
2872 ,co::item_counter< cds::atomicity::item_counter >
2875 typedef cc::SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_hp_less_xorshift > SkipListMap_hp_less_xorshift;
2877 class traits_SkipListMap_hp_less_xorshift_stat: public cc::skip_list::make_traits <
2879 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
2880 ,co::stat< cc::skip_list::stat<> >
2881 ,co::item_counter< cds::atomicity::item_counter >
2884 typedef cc::SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_hp_less_xorshift_stat > SkipListMap_hp_less_xorshift_stat;
2886 class traits_SkipListMap_hp_cmp_xorshift: public cc::skip_list::make_traits <
2887 co::compare< compare >
2888 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
2889 ,co::item_counter< cds::atomicity::item_counter >
2892 typedef cc::SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_hp_cmp_xorshift > SkipListMap_hp_cmp_xorshift;
2894 class traits_SkipListMap_hp_cmp_xorshift_stat: public cc::skip_list::make_traits <
2895 co::compare< compare >
2896 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
2897 ,co::stat< cc::skip_list::stat<> >
2898 ,co::item_counter< cds::atomicity::item_counter >
2901 typedef cc::SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_hp_cmp_xorshift_stat > SkipListMap_hp_cmp_xorshift_stat;
2903 // ***************************************************************************
2904 // SkipListMap - DHP
2906 class traits_SkipListMap_ptb_less_pascal: public cc::skip_list::make_traits <
2908 ,co::item_counter< cds::atomicity::item_counter >
2909 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
2912 typedef cc::SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_ptb_less_pascal > SkipListMap_ptb_less_pascal;
2914 class traits_SkipListMap_ptb_less_pascal_seqcst: public cc::skip_list::make_traits <
2916 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
2917 ,co::memory_model< co::v::sequential_consistent >
2918 ,co::item_counter< cds::atomicity::item_counter >
2921 typedef cc::SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_ptb_less_pascal_seqcst > SkipListMap_ptb_less_pascal_seqcst;
2923 class traits_SkipListMap_ptb_less_pascal_stat: public cc::skip_list::make_traits <
2925 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
2926 ,co::stat< cc::skip_list::stat<> >
2927 ,co::item_counter< cds::atomicity::item_counter >
2930 typedef cc::SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_ptb_less_pascal_stat > SkipListMap_ptb_less_pascal_stat;
2932 class traits_SkipListMap_ptb_cmp_pascal: public cc::skip_list::make_traits <
2933 co::compare< compare >
2934 ,co::item_counter< cds::atomicity::item_counter >
2935 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
2938 typedef cc::SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_ptb_cmp_pascal > SkipListMap_ptb_cmp_pascal;
2940 class traits_SkipListMap_ptb_cmp_pascal_stat: public cc::skip_list::make_traits <
2941 co::compare< compare >
2942 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
2943 ,co::item_counter< cds::atomicity::item_counter >
2944 ,co::stat< cc::skip_list::stat<> >
2947 typedef cc::SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_ptb_cmp_pascal_stat > SkipListMap_ptb_cmp_pascal_stat;
2949 class traits_SkipListMap_ptb_less_xorshift: public cc::skip_list::make_traits <
2951 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
2952 ,co::item_counter< cds::atomicity::item_counter >
2955 typedef cc::SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_ptb_less_xorshift > SkipListMap_ptb_less_xorshift;
2957 class traits_SkipListMap_ptb_less_xorshift_stat: public cc::skip_list::make_traits <
2959 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
2960 ,co::stat< cc::skip_list::stat<> >
2961 ,co::item_counter< cds::atomicity::item_counter >
2964 typedef cc::SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_ptb_less_xorshift_stat > SkipListMap_ptb_less_xorshift_stat;
2966 class traits_SkipListMap_ptb_cmp_xorshift: public cc::skip_list::make_traits <
2967 co::compare< compare >
2968 ,co::item_counter< cds::atomicity::item_counter >
2969 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
2972 typedef cc::SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_ptb_cmp_xorshift > SkipListMap_ptb_cmp_xorshift;
2974 class traits_SkipListMap_ptb_cmp_xorshift_stat: public cc::skip_list::make_traits <
2975 co::compare< compare >
2976 ,co::item_counter< cds::atomicity::item_counter >
2977 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
2978 ,co::stat< cc::skip_list::stat<> >
2981 typedef cc::SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_ptb_cmp_xorshift_stat > SkipListMap_ptb_cmp_xorshift_stat;
2983 // ***************************************************************************
2984 // SkipListMap< gc::nogc >
2986 class traits_SkipListMap_nogc_less_pascal: public cc::skip_list::make_traits <
2988 ,co::item_counter< cds::atomicity::item_counter >
2989 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
2992 typedef NogcMapWrapper_dctor<
2993 cc::SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_nogc_less_pascal >
2994 > SkipListMap_nogc_less_pascal;
2996 class traits_SkipListMap_nogc_less_pascal_seqcst: public cc::skip_list::make_traits <
2998 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
2999 ,co::memory_model< co::v::sequential_consistent >
3000 ,co::item_counter< cds::atomicity::item_counter >
3003 typedef NogcMapWrapper_dctor<
3004 cc::SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_nogc_less_pascal_seqcst >
3005 > SkipListMap_nogc_less_pascal_seqcst;
3007 class traits_SkipListMap_nogc_less_pascal_stat: public cc::skip_list::make_traits <
3009 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3010 ,co::stat< cc::skip_list::stat<> >
3011 ,co::item_counter< cds::atomicity::item_counter >
3014 typedef NogcMapWrapper_dctor<
3015 cc::SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_nogc_less_pascal_stat >
3016 > SkipListMap_nogc_less_pascal_stat;
3018 class traits_SkipListMap_nogc_cmp_pascal: public cc::skip_list::make_traits <
3019 co::compare< compare >
3020 ,co::item_counter< cds::atomicity::item_counter >
3021 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3024 typedef NogcMapWrapper_dctor<
3025 cc::SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_nogc_cmp_pascal >
3026 > SkipListMap_nogc_cmp_pascal;
3028 class traits_SkipListMap_nogc_cmp_pascal_stat: public cc::skip_list::make_traits <
3029 co::compare< compare >
3030 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3031 ,co::item_counter< cds::atomicity::item_counter >
3032 ,co::stat< cc::skip_list::stat<> >
3035 typedef NogcMapWrapper_dctor<
3036 cc::SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_nogc_cmp_pascal_stat >
3037 > SkipListMap_nogc_cmp_pascal_stat;
3039 class traits_SkipListMap_nogc_less_xorshift: public cc::skip_list::make_traits <
3041 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3042 ,co::item_counter< cds::atomicity::item_counter >
3045 typedef NogcMapWrapper_dctor<
3046 cc::SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_nogc_less_xorshift >
3047 > SkipListMap_nogc_less_xorshift;
3049 class traits_SkipListMap_nogc_less_xorshift_stat: public cc::skip_list::make_traits <
3051 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3052 ,co::stat< cc::skip_list::stat<> >
3053 ,co::item_counter< cds::atomicity::item_counter >
3056 typedef NogcMapWrapper_dctor<
3057 cc::SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_nogc_less_xorshift_stat >
3058 > SkipListMap_nogc_less_xorshift_stat;
3060 class traits_SkipListMap_nogc_cmp_xorshift: public cc::skip_list::make_traits <
3061 co::compare< compare >
3062 ,co::item_counter< cds::atomicity::item_counter >
3063 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3066 typedef NogcMapWrapper_dctor< cc::SkipListMap<
3067 cds::gc::nogc, Key, Value, traits_SkipListMap_nogc_cmp_xorshift >
3068 > SkipListMap_nogc_cmp_xorshift;
3070 class traits_SkipListMap_nogc_cmp_xorshift_stat: public cc::skip_list::make_traits <
3071 co::compare< compare >
3072 ,co::item_counter< cds::atomicity::item_counter >
3073 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3074 ,co::stat< cc::skip_list::stat<> >
3077 typedef NogcMapWrapper_dctor<
3078 cc::SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_nogc_cmp_xorshift_stat >
3079 > SkipListMap_nogc_cmp_xorshift_stat;
3081 // ***************************************************************************
3082 // SkipListMap - RCU general_instant
3084 class traits_SkipListMap_rcu_gpi_less_pascal: public cc::skip_list::make_traits <
3086 ,co::item_counter< cds::atomicity::item_counter >
3087 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3090 typedef cc::SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_rcu_gpi_less_pascal > SkipListMap_rcu_gpi_less_pascal;
3092 class traits_SkipListMap_rcu_gpi_less_pascal_seqcst: public cc::skip_list::make_traits <
3094 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3095 ,co::memory_model< co::v::sequential_consistent >
3096 ,co::item_counter< cds::atomicity::item_counter >
3099 typedef cc::SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_rcu_gpi_less_pascal_seqcst > SkipListMap_rcu_gpi_less_pascal_seqcst;
3101 class traits_SkipListMap_rcu_gpi_less_pascal_stat: public cc::skip_list::make_traits <
3103 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3104 ,co::stat< cc::skip_list::stat<> >
3105 ,co::item_counter< cds::atomicity::item_counter >
3108 typedef cc::SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_rcu_gpi_less_pascal_stat > SkipListMap_rcu_gpi_less_pascal_stat;
3110 class traits_SkipListMap_rcu_gpi_cmp_pascal: public cc::skip_list::make_traits <
3111 co::compare< compare >
3112 ,co::item_counter< cds::atomicity::item_counter >
3113 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3116 typedef cc::SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_rcu_gpi_cmp_pascal > SkipListMap_rcu_gpi_cmp_pascal;
3118 class traits_SkipListMap_rcu_gpi_cmp_pascal_stat: public cc::skip_list::make_traits <
3119 co::compare< compare >
3120 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3121 ,co::item_counter< cds::atomicity::item_counter >
3122 ,co::stat< cc::skip_list::stat<> >
3125 typedef cc::SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_rcu_gpi_cmp_pascal_stat > SkipListMap_rcu_gpi_cmp_pascal_stat;
3127 class traits_SkipListMap_rcu_gpi_less_xorshift: public cc::skip_list::make_traits <
3129 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3130 ,co::item_counter< cds::atomicity::item_counter >
3133 typedef cc::SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_rcu_gpi_less_xorshift > SkipListMap_rcu_gpi_less_xorshift;
3135 class traits_SkipListMap_rcu_gpi_less_xorshift_stat: public cc::skip_list::make_traits <
3137 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3138 ,co::stat< cc::skip_list::stat<> >
3139 ,co::item_counter< cds::atomicity::item_counter >
3142 typedef cc::SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_rcu_gpi_less_xorshift_stat > SkipListMap_rcu_gpi_less_xorshift_stat;
3144 class traits_SkipListMap_rcu_gpi_cmp_xorshift: public cc::skip_list::make_traits <
3145 co::compare< compare >
3146 ,co::item_counter< cds::atomicity::item_counter >
3147 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3150 typedef cc::SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_rcu_gpi_cmp_xorshift > SkipListMap_rcu_gpi_cmp_xorshift;
3152 class traits_SkipListMap_rcu_gpi_cmp_xorshift_stat: public cc::skip_list::make_traits <
3153 co::compare< compare >
3154 ,co::item_counter< cds::atomicity::item_counter >
3155 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3156 ,co::stat< cc::skip_list::stat<> >
3159 typedef cc::SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_rcu_gpi_cmp_xorshift_stat > SkipListMap_rcu_gpi_cmp_xorshift_stat;
3161 // ***************************************************************************
3162 // SkipListMap - RCU general_buffered
3164 class traits_SkipListMap_rcu_gpb_less_pascal: public cc::skip_list::make_traits <
3166 ,co::item_counter< cds::atomicity::item_counter >
3167 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3170 typedef cc::SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_rcu_gpb_less_pascal > SkipListMap_rcu_gpb_less_pascal;
3172 class traits_SkipListMap_rcu_gpb_less_pascal_seqcst: public cc::skip_list::make_traits <
3174 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3175 ,co::memory_model< co::v::sequential_consistent >
3176 ,co::item_counter< cds::atomicity::item_counter >
3179 typedef cc::SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_rcu_gpb_less_pascal_seqcst > SkipListMap_rcu_gpb_less_pascal_seqcst;
3181 class traits_SkipListMap_rcu_gpb_less_pascal_stat: public cc::skip_list::make_traits <
3183 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3184 ,co::stat< cc::skip_list::stat<> >
3185 ,co::item_counter< cds::atomicity::item_counter >
3188 typedef cc::SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_rcu_gpb_less_pascal_stat > SkipListMap_rcu_gpb_less_pascal_stat;
3190 class traits_SkipListMap_rcu_gpb_cmp_pascal: public cc::skip_list::make_traits <
3191 co::compare< compare >
3192 ,co::item_counter< cds::atomicity::item_counter >
3193 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3196 typedef cc::SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_rcu_gpb_cmp_pascal > SkipListMap_rcu_gpb_cmp_pascal;
3198 class traits_SkipListMap_rcu_gpb_cmp_pascal_stat: public cc::skip_list::make_traits <
3199 co::compare< compare >
3200 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3201 ,co::item_counter< cds::atomicity::item_counter >
3202 ,co::stat< cc::skip_list::stat<> >
3205 typedef cc::SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_rcu_gpb_cmp_pascal_stat > SkipListMap_rcu_gpb_cmp_pascal_stat;
3207 class traits_SkipListMap_rcu_gpb_less_xorshift: public cc::skip_list::make_traits <
3209 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3210 ,co::item_counter< cds::atomicity::item_counter >
3213 typedef cc::SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_rcu_gpb_less_xorshift > SkipListMap_rcu_gpb_less_xorshift;
3215 class traits_SkipListMap_rcu_gpb_less_xorshift_stat: public cc::skip_list::make_traits <
3217 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3218 ,co::stat< cc::skip_list::stat<> >
3219 ,co::item_counter< cds::atomicity::item_counter >
3222 typedef cc::SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_rcu_gpb_less_xorshift_stat > SkipListMap_rcu_gpb_less_xorshift_stat;
3224 class traits_SkipListMap_rcu_gpb_cmp_xorshift: public cc::skip_list::make_traits <
3225 co::compare< compare >
3226 ,co::item_counter< cds::atomicity::item_counter >
3227 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3230 typedef cc::SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_rcu_gpb_cmp_xorshift > SkipListMap_rcu_gpb_cmp_xorshift;
3232 class traits_SkipListMap_rcu_gpb_cmp_xorshift_stat: public cc::skip_list::make_traits <
3233 co::compare< compare >
3234 ,co::item_counter< cds::atomicity::item_counter >
3235 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3236 ,co::stat< cc::skip_list::stat<> >
3239 typedef cc::SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_rcu_gpb_cmp_xorshift_stat > SkipListMap_rcu_gpb_cmp_xorshift_stat;
3241 // ***************************************************************************
3242 // SkipListMap - RCU general_threaded
3244 class traits_SkipListMap_rcu_gpt_less_pascal: public cc::skip_list::make_traits <
3246 ,co::item_counter< cds::atomicity::item_counter >
3247 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3250 typedef cc::SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_rcu_gpt_less_pascal > SkipListMap_rcu_gpt_less_pascal;
3252 class traits_SkipListMap_rcu_gpt_less_pascal_seqcst: public cc::skip_list::make_traits <
3254 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3255 ,co::memory_model< co::v::sequential_consistent >
3256 ,co::item_counter< cds::atomicity::item_counter >
3259 typedef cc::SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_rcu_gpt_less_pascal_seqcst > SkipListMap_rcu_gpt_less_pascal_seqcst;
3261 class traits_SkipListMap_rcu_gpt_less_pascal_stat: public cc::skip_list::make_traits <
3263 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3264 ,co::stat< cc::skip_list::stat<> >
3265 ,co::item_counter< cds::atomicity::item_counter >
3268 typedef cc::SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_rcu_gpt_less_pascal_stat > SkipListMap_rcu_gpt_less_pascal_stat;
3270 class traits_SkipListMap_rcu_gpt_cmp_pascal: public cc::skip_list::make_traits <
3271 co::compare< compare >
3272 ,co::item_counter< cds::atomicity::item_counter >
3273 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3276 typedef cc::SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_rcu_gpt_cmp_pascal > SkipListMap_rcu_gpt_cmp_pascal;
3278 class traits_SkipListMap_rcu_gpt_cmp_pascal_stat: public cc::skip_list::make_traits <
3279 co::compare< compare >
3280 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3281 ,co::item_counter< cds::atomicity::item_counter >
3282 ,co::stat< cc::skip_list::stat<> >
3285 typedef cc::SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_rcu_gpt_cmp_pascal_stat > SkipListMap_rcu_gpt_cmp_pascal_stat;
3287 class traits_SkipListMap_rcu_gpt_less_xorshift: public cc::skip_list::make_traits <
3289 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3290 ,co::item_counter< cds::atomicity::item_counter >
3293 typedef cc::SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_rcu_gpt_less_xorshift > SkipListMap_rcu_gpt_less_xorshift;
3295 class traits_SkipListMap_rcu_gpt_less_xorshift_stat: public cc::skip_list::make_traits <
3297 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3298 ,co::stat< cc::skip_list::stat<> >
3299 ,co::item_counter< cds::atomicity::item_counter >
3302 typedef cc::SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_rcu_gpt_less_xorshift_stat > SkipListMap_rcu_gpt_less_xorshift_stat;
3304 class traits_SkipListMap_rcu_gpt_cmp_xorshift: public cc::skip_list::make_traits <
3305 co::compare< compare >
3306 ,co::item_counter< cds::atomicity::item_counter >
3307 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3310 typedef cc::SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_rcu_gpt_cmp_xorshift > SkipListMap_rcu_gpt_cmp_xorshift;
3312 class traits_SkipListMap_rcu_gpt_cmp_xorshift_stat: public cc::skip_list::make_traits <
3313 co::compare< compare >
3314 ,co::item_counter< cds::atomicity::item_counter >
3315 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3316 ,co::stat< cc::skip_list::stat<> >
3319 typedef cc::SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_rcu_gpt_cmp_xorshift_stat > SkipListMap_rcu_gpt_cmp_xorshift_stat;
3321 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
3322 // ***************************************************************************
3323 // SkipListMap - RCU signal_buffered
3325 class traits_SkipListMap_rcu_shb_less_pascal: public cc::skip_list::make_traits <
3327 ,co::item_counter< cds::atomicity::item_counter >
3328 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3331 typedef cc::SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_rcu_shb_less_pascal > SkipListMap_rcu_shb_less_pascal;
3333 class traits_SkipListMap_rcu_shb_less_pascal_seqcst: public cc::skip_list::make_traits <
3335 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3336 ,co::memory_model< co::v::sequential_consistent >
3337 ,co::item_counter< cds::atomicity::item_counter >
3340 typedef cc::SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_rcu_shb_less_pascal_seqcst > SkipListMap_rcu_shb_less_pascal_seqcst;
3342 class traits_SkipListMap_rcu_shb_less_pascal_stat: public cc::skip_list::make_traits <
3344 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3345 ,co::stat< cc::skip_list::stat<> >
3346 ,co::item_counter< cds::atomicity::item_counter >
3349 typedef cc::SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_rcu_shb_less_pascal_stat > SkipListMap_rcu_shb_less_pascal_stat;
3351 class traits_SkipListMap_rcu_shb_cmp_pascal: public cc::skip_list::make_traits <
3352 co::compare< compare >
3353 ,co::item_counter< cds::atomicity::item_counter >
3354 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3357 typedef cc::SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_rcu_shb_cmp_pascal > SkipListMap_rcu_shb_cmp_pascal;
3359 class traits_SkipListMap_rcu_shb_cmp_pascal_stat: public cc::skip_list::make_traits <
3360 co::compare< compare >
3361 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3362 ,co::item_counter< cds::atomicity::item_counter >
3363 ,co::stat< cc::skip_list::stat<> >
3366 typedef cc::SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_rcu_shb_cmp_pascal_stat > SkipListMap_rcu_shb_cmp_pascal_stat;
3368 class traits_SkipListMap_rcu_shb_less_xorshift: public cc::skip_list::make_traits <
3370 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3371 ,co::item_counter< cds::atomicity::item_counter >
3374 typedef cc::SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_rcu_shb_less_xorshift > SkipListMap_rcu_shb_less_xorshift;
3376 class traits_SkipListMap_rcu_shb_less_xorshift_stat: public cc::skip_list::make_traits <
3378 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3379 ,co::stat< cc::skip_list::stat<> >
3380 ,co::item_counter< cds::atomicity::item_counter >
3383 typedef cc::SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_rcu_shb_less_xorshift_stat > SkipListMap_rcu_shb_less_xorshift_stat;
3385 class traits_SkipListMap_rcu_shb_cmp_xorshift: public cc::skip_list::make_traits <
3386 co::compare< compare >
3387 ,co::item_counter< cds::atomicity::item_counter >
3388 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3391 typedef cc::SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_rcu_shb_cmp_xorshift > SkipListMap_rcu_shb_cmp_xorshift;
3393 class traits_SkipListMap_rcu_shb_cmp_xorshift_stat: public cc::skip_list::make_traits <
3394 co::compare< compare >
3395 ,co::item_counter< cds::atomicity::item_counter >
3396 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3397 ,co::stat< cc::skip_list::stat<> >
3400 typedef cc::SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_rcu_shb_cmp_xorshift_stat > SkipListMap_rcu_shb_cmp_xorshift_stat;
3402 // ***************************************************************************
3403 // SkipListMap - RCU signal_threaded
3405 class traits_SkipListMap_rcu_sht_less_pascal: public cc::skip_list::make_traits <
3407 ,co::item_counter< cds::atomicity::item_counter >
3408 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3411 typedef cc::SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_rcu_sht_less_pascal > SkipListMap_rcu_sht_less_pascal;
3413 class traits_SkipListMap_rcu_sht_less_pascal_seqcst: public cc::skip_list::make_traits <
3415 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3416 ,co::memory_model< co::v::sequential_consistent >
3417 ,co::item_counter< cds::atomicity::item_counter >
3420 typedef cc::SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_rcu_sht_less_pascal_seqcst > SkipListMap_rcu_sht_less_pascal_seqcst;
3422 class traits_SkipListMap_rcu_sht_less_pascal_stat: public cc::skip_list::make_traits <
3424 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3425 ,co::stat< cc::skip_list::stat<> >
3426 ,co::item_counter< cds::atomicity::item_counter >
3429 typedef cc::SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_rcu_sht_less_pascal_stat > SkipListMap_rcu_sht_less_pascal_stat;
3431 class traits_SkipListMap_rcu_sht_cmp_pascal: public cc::skip_list::make_traits <
3432 co::compare< compare >
3433 ,co::item_counter< cds::atomicity::item_counter >
3434 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3437 typedef cc::SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_rcu_sht_cmp_pascal > SkipListMap_rcu_sht_cmp_pascal;
3439 class traits_SkipListMap_rcu_sht_cmp_pascal_stat: public cc::skip_list::make_traits <
3440 co::compare< compare >
3441 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
3442 ,co::item_counter< cds::atomicity::item_counter >
3443 ,co::stat< cc::skip_list::stat<> >
3446 typedef cc::SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_rcu_sht_cmp_pascal_stat > SkipListMap_rcu_sht_cmp_pascal_stat;
3448 class traits_SkipListMap_rcu_sht_less_xorshift: public cc::skip_list::make_traits <
3450 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3451 ,co::item_counter< cds::atomicity::item_counter >
3454 typedef cc::SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_rcu_sht_less_xorshift > SkipListMap_rcu_sht_less_xorshift;
3456 class traits_SkipListMap_rcu_sht_less_xorshift_stat: public cc::skip_list::make_traits <
3458 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3459 ,co::stat< cc::skip_list::stat<> >
3460 ,co::item_counter< cds::atomicity::item_counter >
3463 typedef cc::SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_rcu_sht_less_xorshift_stat > SkipListMap_rcu_sht_less_xorshift_stat;
3465 class traits_SkipListMap_rcu_sht_cmp_xorshift: public cc::skip_list::make_traits <
3466 co::compare< compare >
3467 ,co::item_counter< cds::atomicity::item_counter >
3468 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3471 typedef cc::SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_rcu_sht_cmp_xorshift > SkipListMap_rcu_sht_cmp_xorshift;
3473 class traits_SkipListMap_rcu_sht_cmp_xorshift_stat: public cc::skip_list::make_traits <
3474 co::compare< compare >
3475 ,co::item_counter< cds::atomicity::item_counter >
3476 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
3477 ,co::stat< cc::skip_list::stat<> >
3480 typedef cc::SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_rcu_sht_cmp_xorshift_stat > SkipListMap_rcu_sht_cmp_xorshift_stat;
3484 // ***************************************************************************
3486 struct ellen_bintree_props {
3488 typedef cc::ellen_bintree::map_node<cds::gc::HP, Key, Value> leaf_node;
3489 typedef cc::ellen_bintree::internal_node< Key, leaf_node > internal_node;
3490 typedef cc::ellen_bintree::update_desc< leaf_node, internal_node > update_desc;
3493 typedef cc::ellen_bintree::map_node<cds::gc::DHP, Key, Value> leaf_node;
3494 typedef cc::ellen_bintree::internal_node< Key, leaf_node > internal_node;
3495 typedef cc::ellen_bintree::update_desc< leaf_node, internal_node > update_desc;
3498 typedef cc::ellen_bintree::map_node<rcu_gpi, Key, Value> leaf_node;
3499 typedef cc::ellen_bintree::internal_node< Key, leaf_node > internal_node;
3500 typedef cc::ellen_bintree::update_desc< leaf_node, internal_node > update_desc;
3503 typedef cc::ellen_bintree::map_node<rcu_gpb, Key, Value> leaf_node;
3504 typedef cc::ellen_bintree::internal_node< Key, leaf_node > internal_node;
3505 typedef cc::ellen_bintree::update_desc< leaf_node, internal_node > update_desc;
3508 typedef cc::ellen_bintree::map_node<rcu_gpt, Key, Value> leaf_node;
3509 typedef cc::ellen_bintree::internal_node< Key, leaf_node > internal_node;
3510 typedef cc::ellen_bintree::update_desc< leaf_node, internal_node > update_desc;
3512 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
3514 typedef cc::ellen_bintree::map_node<rcu_shb, Key, Value> leaf_node;
3515 typedef cc::ellen_bintree::internal_node< Key, leaf_node > internal_node;
3516 typedef cc::ellen_bintree::update_desc< leaf_node, internal_node > update_desc;
3519 typedef cc::ellen_bintree::map_node<rcu_sht, Key, Value> leaf_node;
3520 typedef cc::ellen_bintree::internal_node< Key, leaf_node > internal_node;
3521 typedef cc::ellen_bintree::update_desc< leaf_node, internal_node > update_desc;
3527 // ***************************************************************************
3528 // EllenBinTreeMap - HP
3530 struct traits_EllenBinTreeMap_hp: public cc::ellen_bintree::make_set_traits<
3532 ,cc::ellen_bintree::update_desc_allocator<
3533 cds::memory::pool_allocator< typename ellen_bintree_props::hp_gc::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
3535 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
3536 ,co::item_counter< cds::atomicity::item_counter >
3539 typedef cc::EllenBinTreeMap< cds::gc::HP, Key, Value, traits_EllenBinTreeMap_hp >EllenBinTreeMap_hp;
3541 struct traits_EllenBinTreeMap_hp_stat: public cc::ellen_bintree::make_set_traits<
3543 ,cc::ellen_bintree::update_desc_allocator<
3544 cds::memory::pool_allocator< typename ellen_bintree_props::hp_gc::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
3546 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
3547 ,co::stat< cc::ellen_bintree::stat<> >
3548 ,co::item_counter< cds::atomicity::item_counter >
3551 typedef cc::EllenBinTreeMap< cds::gc::HP, Key, Value, traits_EllenBinTreeMap_hp_stat > EllenBinTreeMap_hp_stat;
3553 // ***************************************************************************
3554 // EllenBinTreeMap - DHP
3556 struct traits_EllenBinTreeMap_ptb: public cc::ellen_bintree::make_set_traits<
3558 ,cc::ellen_bintree::update_desc_allocator<
3559 cds::memory::pool_allocator< typename ellen_bintree_props::ptb_gc::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
3561 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
3562 ,co::item_counter< cds::atomicity::item_counter >
3565 typedef cc::EllenBinTreeMap< cds::gc::DHP, Key, Value, traits_EllenBinTreeMap_ptb> EllenBinTreeMap_ptb;
3567 struct traits_EllenBinTreeMap_ptb_stat: public cc::ellen_bintree::make_set_traits<
3569 ,cc::ellen_bintree::update_desc_allocator<
3570 cds::memory::pool_allocator< typename ellen_bintree_props::ptb_gc::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
3572 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
3573 ,co::stat< cc::ellen_bintree::stat<> >
3574 ,co::item_counter< cds::atomicity::item_counter >
3577 typedef cc::EllenBinTreeMap< cds::gc::DHP, Key, Value, traits_EllenBinTreeMap_ptb_stat > EllenBinTreeMap_ptb_stat;
3579 // ***************************************************************************
3580 // EllenBinTreeMap - RCU
3582 struct traits_EllenBinTreeMap_rcu_gpi: public cc::ellen_bintree::make_set_traits<
3584 ,cc::ellen_bintree::update_desc_allocator<
3585 cds::memory::pool_allocator< typename ellen_bintree_props::gpi::update_desc, ellen_bintree_pool::bounded_update_desc_pool_accessor >
3587 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
3588 ,co::item_counter< cds::atomicity::item_counter >
3591 typedef cc::EllenBinTreeMap< rcu_gpi, Key, Value, traits_EllenBinTreeMap_rcu_gpi > EllenBinTreeMap_rcu_gpi;
3593 struct traits_EllenBinTreeMap_rcu_gpi_stat: public cc::ellen_bintree::make_set_traits<
3595 ,cc::ellen_bintree::update_desc_allocator<
3596 cds::memory::pool_allocator< typename ellen_bintree_props::gpi::update_desc, ellen_bintree_pool::bounded_update_desc_pool_accessor >
3598 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
3599 ,co::stat< cc::ellen_bintree::stat<> >
3600 ,co::item_counter< cds::atomicity::item_counter >
3603 typedef cc::EllenBinTreeMap< rcu_gpi, Key, Value, traits_EllenBinTreeMap_rcu_gpi_stat > EllenBinTreeMap_rcu_gpi_stat;
3605 struct traits_EllenBinTreeMap_rcu_gpb: public cc::ellen_bintree::make_set_traits<
3607 ,cc::ellen_bintree::update_desc_allocator<
3608 cds::memory::pool_allocator< typename ellen_bintree_props::gpb::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
3610 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
3611 ,co::item_counter< cds::atomicity::item_counter >
3614 typedef cc::EllenBinTreeMap< rcu_gpb, Key, Value, traits_EllenBinTreeMap_rcu_gpb > EllenBinTreeMap_rcu_gpb;
3616 struct traits_EllenBinTreeMap_rcu_gpb_stat: public cc::ellen_bintree::make_set_traits<
3618 ,cc::ellen_bintree::update_desc_allocator<
3619 cds::memory::pool_allocator< typename ellen_bintree_props::gpb::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
3621 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
3622 ,co::stat< cc::ellen_bintree::stat<> >
3623 ,co::item_counter< cds::atomicity::item_counter >
3626 typedef cc::EllenBinTreeMap< rcu_gpb, Key, Value, traits_EllenBinTreeMap_rcu_gpb_stat > EllenBinTreeMap_rcu_gpb_stat;
3628 struct traits_EllenBinTreeMap_rcu_gpt: public cc::ellen_bintree::make_set_traits<
3630 ,cc::ellen_bintree::update_desc_allocator<
3631 cds::memory::pool_allocator< typename ellen_bintree_props::gpt::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
3633 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
3634 ,co::item_counter< cds::atomicity::item_counter >
3637 typedef cc::EllenBinTreeMap< rcu_gpt, Key, Value, traits_EllenBinTreeMap_rcu_gpt > EllenBinTreeMap_rcu_gpt;
3639 struct traits_EllenBinTreeMap_rcu_gpt_stat: public cc::ellen_bintree::make_set_traits<
3641 ,cc::ellen_bintree::update_desc_allocator<
3642 cds::memory::pool_allocator< typename ellen_bintree_props::gpt::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
3644 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
3645 ,co::stat< cc::ellen_bintree::stat<> >
3646 ,co::item_counter< cds::atomicity::item_counter >
3649 typedef cc::EllenBinTreeMap< rcu_gpt, Key, Value, traits_EllenBinTreeMap_rcu_gpt_stat > EllenBinTreeMap_rcu_gpt_stat;
3651 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
3652 struct traits_EllenBinTreeMap_rcu_shb: public cc::ellen_bintree::make_set_traits<
3654 ,cc::ellen_bintree::update_desc_allocator<
3655 cds::memory::pool_allocator< typename ellen_bintree_props::shb::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
3657 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
3658 ,co::item_counter< cds::atomicity::item_counter >
3661 typedef cc::EllenBinTreeMap< rcu_shb, Key, Value, traits_EllenBinTreeMap_rcu_shb > EllenBinTreeMap_rcu_shb;
3663 struct traits_EllenBinTreeMap_rcu_shb_stat: public cc::ellen_bintree::make_set_traits<
3665 ,cc::ellen_bintree::update_desc_allocator<
3666 cds::memory::pool_allocator< typename ellen_bintree_props::shb::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
3668 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
3669 ,co::item_counter< cds::atomicity::item_counter >
3670 ,co::stat< cc::ellen_bintree::stat<> >
3673 typedef cc::EllenBinTreeMap< rcu_shb, Key, Value, traits_EllenBinTreeMap_rcu_shb_stat > EllenBinTreeMap_rcu_shb_stat;
3675 struct traits_EllenBinTreeMap_rcu_sht: public cc::ellen_bintree::make_set_traits<
3677 ,cc::ellen_bintree::update_desc_allocator<
3678 cds::memory::pool_allocator< typename ellen_bintree_props::sht::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
3680 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
3681 ,co::item_counter< cds::atomicity::item_counter >
3684 typedef cc::EllenBinTreeMap< rcu_sht, Key, Value, traits_EllenBinTreeMap_rcu_sht > EllenBinTreeMap_rcu_sht;
3686 struct traits_EllenBinTreeMap_rcu_sht_stat: public cc::ellen_bintree::make_set_traits<
3688 ,cc::ellen_bintree::update_desc_allocator<
3689 cds::memory::pool_allocator< typename ellen_bintree_props::sht::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
3691 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
3692 ,co::item_counter< cds::atomicity::item_counter >
3693 ,co::stat< cc::ellen_bintree::stat<> >
3696 typedef cc::EllenBinTreeMap< rcu_sht, Key, Value, traits_EllenBinTreeMap_rcu_sht_stat > EllenBinTreeMap_rcu_sht_stat;
3701 // ***************************************************************************
3702 // Standard implementations
3704 typedef StdMap< Key, Value, cds::SpinLock > StdMap_Spin;
3705 typedef StdMap< Key, Value, lock::NoLock> StdMap_NoLock;
3707 typedef StdHashMap< Key, Value, cds::SpinLock > StdHashMap_Spin;
3708 typedef StdHashMap< Key, Value, lock::NoLock > StdHashMap_NoLock;
3712 template <typename Map>
3713 static inline void print_stat( Map const& m )
3716 template <typename Map>
3717 static inline void additional_cleanup( Map& m )
3720 template <typename Map>
3721 static inline void additional_check( Map& m )
3725 template <typename K, typename T, typename Traits >
3726 static inline void print_stat( cc::CuckooMap< K, T, Traits > const& m )
3728 CPPUNIT_MSG( m.statistics() << m.mutex_policy_statistics() );
3731 template <typename GC, typename K, typename T, typename Traits >
3732 static inline void print_stat( cc::SkipListMap< GC, K, T, Traits > const& m )
3734 CPPUNIT_MSG( m.statistics() );
3738 template <typename GC, typename Key, typename T, typename Traits>
3739 static inline void print_stat( cc::EllenBinTreeMap<GC, Key, T, Traits> const& s )
3741 CPPUNIT_MSG( s.statistics() );
3743 template <typename GC, typename Key, typename T, typename Traits>
3744 static inline void additional_cleanup( cc::EllenBinTreeMap<GC, Key, T, Traits>& s )
3746 ellen_bintree_pool::internal_node_counter::reset();
3748 namespace ellen_bintree_check {
3749 static inline void check_stat( cds::intrusive::ellen_bintree::empty_stat const& s )
3751 // This check is not valid for thread-based RCU
3753 CPPUNIT_CHECK_CURRENT_EX( ellen_bintree_pool::internal_node_counter::m_nAlloc.get() == ellen_bintree_pool::internal_node_counter::m_nFree.get(),
3754 "m_nAlloc=" << ellen_bintree_pool::internal_node_counter::m_nAlloc.get()
3755 << ", m_nFree=" << ellen_bintree_pool::internal_node_counter::m_nFree.get()
3760 static inline void check_stat( cds::intrusive::ellen_bintree::stat<> const& stat )
3762 CPPUNIT_CHECK_CURRENT_EX( stat.m_nInternalNodeCreated == stat.m_nInternalNodeDeleted,
3763 "m_nInternalNodeCreated=" << stat.m_nInternalNodeCreated
3764 << " m_nInternalNodeDeleted=" << stat.m_nInternalNodeDeleted );
3765 CPPUNIT_CHECK_CURRENT_EX( stat.m_nUpdateDescCreated == stat.m_nUpdateDescDeleted,
3766 "m_nUpdateDescCreated=" << stat.m_nUpdateDescCreated
3767 << " m_nUpdateDescDeleted=" << stat.m_nUpdateDescDeleted );
3768 CPPUNIT_CHECK_CURRENT_EX( ellen_bintree_pool::internal_node_counter::m_nAlloc.get() == stat.m_nInternalNodeCreated,
3769 "allocated=" << ellen_bintree_pool::internal_node_counter::m_nAlloc.get()
3770 << "m_nInternalNodeCreated=" << stat.m_nInternalNodeCreated );
3772 } // namespace ellen_bintree_check
3773 template <typename GC, typename Key, typename T, typename Traits>
3774 static inline void additional_check( cc::EllenBinTreeMap<GC, Key, T, Traits>& s )
3776 GC::force_dispose();
3777 ellen_bintree_check::check_stat( s.statistics() );
3781 template <typename K, typename V, typename... Options>
3782 static inline void print_stat( CuckooStripedMap< K, V, Options... > const& m )
3784 typedef CuckooStripedMap< K, V, Options... > map_type;
3785 print_stat( static_cast<typename map_type::cuckoo_base_class const&>(m) );
3788 template <typename K, typename V, typename... Options>
3789 static inline void print_stat( CuckooRefinableMap< K, V, Options... > const& m )
3791 typedef CuckooRefinableMap< K, V, Options... > map_type;
3792 print_stat( static_cast<typename map_type::cuckoo_base_class const&>(m) );
3797 #endif // ifndef _CDSUNIT_MAP2_MAP_TYPES_H