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_split_list_stat.h"
63 #include "print_skip_list_stat.h"
64 #include "print_ellenbintree_stat.h"
65 #include "ellen_bintree_update_desc_pool.h"
68 namespace cc = cds::container;
69 namespace co = cds::opt;
71 typedef cds::urcu::gc< cds::urcu::general_instant<> > rcu_gpi;
72 typedef cds::urcu::gc< cds::urcu::general_buffered<> > rcu_gpb;
73 typedef cds::urcu::gc< cds::urcu::general_threaded<> > rcu_gpt;
74 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
75 typedef cds::urcu::gc< cds::urcu::signal_buffered<> > rcu_shb;
76 typedef cds::urcu::gc< cds::urcu::signal_threaded<> > rcu_sht;
79 template <typename Key>
81 int operator ()(Key const& k1, Key const& k2) const
83 if ( std::less<Key>( k1, k2 ) )
85 return std::less<Key>( k2, k1 ) ? 1 : 0;
89 #define CDSUNIT_INT_COMPARE(t) template <> struct cmp<t> { int operator()( t k1, t k2 ){ return (int)(k1 - k2); } }
90 CDSUNIT_INT_COMPARE(char);
91 CDSUNIT_INT_COMPARE(unsigned char);
92 CDSUNIT_INT_COMPARE(int);
93 CDSUNIT_INT_COMPARE(unsigned int);
94 CDSUNIT_INT_COMPARE(long);
95 CDSUNIT_INT_COMPARE(unsigned long);
96 CDSUNIT_INT_COMPARE(long long);
97 CDSUNIT_INT_COMPARE(unsigned long long);
98 #undef CDSUNIT_INT_COMPARE
101 struct cmp<std::string>
103 int operator()(std::string const& s1, std::string const& s2)
105 return s1.compare( s2 );
107 int operator()(std::string const& s1, char const * s2)
109 return s1.compare( s2 );
111 int operator()(char const * s1, std::string const& s2)
113 return -s2.compare( s1 );
117 template <typename K, typename V, typename... Options>
118 class CuckooStripedMap:
119 public cc::CuckooMap< K, V,
120 typename cc::cuckoo::make_traits<
121 co::mutex_policy< cc::cuckoo::striping<> >
127 typedef typename cc::cuckoo::make_traits<
128 co::mutex_policy< cc::cuckoo::striping<> >
130 >::type cuckoo_traits;
132 typedef cc::CuckooMap< K, V, cuckoo_traits > cuckoo_base_class;
135 CuckooStripedMap( size_t nCapacity, size_t nLoadFactor )
136 : cuckoo_base_class( nCapacity / (nLoadFactor * 16), (unsigned int) 4 )
139 template <typename Q, typename Pred>
140 bool erase_with( Q const& key, Pred pred )
142 return cuckoo_base_class::erase_with( key, typename std::conditional< cuckoo_base_class::c_isSorted, Pred, typename Pred::equal_to>::type() );
146 template <typename K, typename V, typename... Options>
147 class CuckooRefinableMap:
148 public cc::CuckooMap< K, V,
149 typename cc::cuckoo::make_traits<
150 co::mutex_policy< cc::cuckoo::refinable<> >
156 typedef typename cc::cuckoo::make_traits<
157 co::mutex_policy< cc::cuckoo::refinable<> >
159 >::type cuckoo_traits;
161 typedef cc::CuckooMap< K, V, cuckoo_traits > cuckoo_base_class;
164 CuckooRefinableMap( size_t nCapacity, size_t nLoadFactor )
165 : cuckoo_base_class( nCapacity / (nLoadFactor * 16), (unsigned int) 4 )
168 template <typename Q, typename Pred>
169 bool erase_with( Q const& key, Pred pred )
171 return cuckoo_base_class::erase_with( key, typename std::conditional< cuckoo_base_class::c_isSorted, Pred, typename Pred::equal_to>::type() );
175 template <typename Key, typename Value>
177 typedef co::v::hash<Key> key_hash;
178 typedef std::less<Key> less;
179 typedef cmp<Key> compare;
182 bool operator()( Key const& k1, Key const& k2 ) const
184 return compare()( k1, k2 ) == 0;
188 struct hash: public key_hash
190 size_t operator()( Key const& k ) const
192 return key_hash::operator()( k );
194 template <typename Q>
195 size_t operator()( Q const& k ) const
197 return key_hash::operator()( k );
201 struct hash2: public key_hash
203 size_t operator()( Key const& k ) const
205 size_t seed = ~key_hash::operator ()( k );
206 boost::hash_combine( seed, k );
209 template <typename Q>
210 size_t operator()( Q const& k ) const
212 size_t seed = ~key_hash::operator()( k );
213 boost::hash_combine( seed, k );
218 // ***************************************************************************
221 struct traits_MichaelList_cmp_stdAlloc :
222 public cc::michael_list::make_traits<
223 co::compare< compare >
226 typedef cc::MichaelKVList< cds::gc::HP, Key, Value, traits_MichaelList_cmp_stdAlloc > MichaelList_HP_cmp_stdAlloc;
227 typedef cc::MichaelKVList< cds::gc::DHP, Key, Value, traits_MichaelList_cmp_stdAlloc > MichaelList_DHP_cmp_stdAlloc;
228 typedef cc::MichaelKVList< cds::gc::nogc, Key, Value, traits_MichaelList_cmp_stdAlloc > MichaelList_NOGC_cmp_stdAlloc;
229 typedef cc::MichaelKVList< rcu_gpi, Key, Value, traits_MichaelList_cmp_stdAlloc > MichaelList_RCU_GPI_cmp_stdAlloc;
230 typedef cc::MichaelKVList< rcu_gpb, Key, Value, traits_MichaelList_cmp_stdAlloc > MichaelList_RCU_GPB_cmp_stdAlloc;
231 typedef cc::MichaelKVList< rcu_gpt, Key, Value, traits_MichaelList_cmp_stdAlloc > MichaelList_RCU_GPT_cmp_stdAlloc;
232 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
233 typedef cc::MichaelKVList< rcu_shb, Key, Value, traits_MichaelList_cmp_stdAlloc > MichaelList_RCU_SHB_cmp_stdAlloc;
234 typedef cc::MichaelKVList< rcu_sht, Key, Value, traits_MichaelList_cmp_stdAlloc > MichaelList_RCU_SHT_cmp_stdAlloc;
237 struct traits_MichaelList_cmp_stdAlloc_seqcst :
238 public cc::michael_list::make_traits<
239 co::compare< compare >
240 ,co::memory_model< co::v::sequential_consistent >
243 typedef cc::MichaelKVList< cds::gc::HP, Key, Value, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_HP_cmp_stdAlloc_seqcst;
244 typedef cc::MichaelKVList< cds::gc::DHP, Key, Value, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_DHP_cmp_stdAlloc_seqcst;
245 typedef cc::MichaelKVList< cds::gc::nogc, Key, Value, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_NOGC_cmp_stdAlloc_seqcst;
246 typedef cc::MichaelKVList< rcu_gpi, Key, Value, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_RCU_GPI_cmp_stdAlloc_seqcst;
247 typedef cc::MichaelKVList< rcu_gpb, Key, Value, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_RCU_GPB_cmp_stdAlloc_seqcst;
248 typedef cc::MichaelKVList< rcu_gpt, Key, Value, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_RCU_GPT_cmp_stdAlloc_seqcst;
249 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
250 typedef cc::MichaelKVList< rcu_shb, Key, Value, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_RCU_SHB_cmp_stdAlloc_seqcst;
251 typedef cc::MichaelKVList< rcu_sht, Key, Value, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_RCU_SHT_cmp_stdAlloc_seqcst;
254 struct traits_MichaelList_cmp_michaelAlloc :
255 public cc::michael_list::make_traits<
256 co::compare< compare >,
257 co::allocator< memory::MichaelAllocator<int> >
260 typedef cc::MichaelKVList< cds::gc::HP, Key, Value, traits_MichaelList_cmp_michaelAlloc > MichaelList_HP_cmp_michaelAlloc;
261 typedef cc::MichaelKVList< cds::gc::DHP, Key, Value, traits_MichaelList_cmp_michaelAlloc > MichaelList_DHP_cmp_michaelAlloc;
262 typedef cc::MichaelKVList< cds::gc::nogc, Key, Value, traits_MichaelList_cmp_michaelAlloc > MichaelList_NOGC_cmp_michaelAlloc;
263 typedef cc::MichaelKVList< rcu_gpi, Key, Value, traits_MichaelList_cmp_michaelAlloc > MichaelList_RCU_GPI_cmp_michaelAlloc;
264 typedef cc::MichaelKVList< rcu_gpb, Key, Value, traits_MichaelList_cmp_michaelAlloc > MichaelList_RCU_GPB_cmp_michaelAlloc;
265 typedef cc::MichaelKVList< rcu_gpt, Key, Value, traits_MichaelList_cmp_michaelAlloc > MichaelList_RCU_GPT_cmp_michaelAlloc;
266 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
267 typedef cc::MichaelKVList< rcu_shb, Key, Value, traits_MichaelList_cmp_michaelAlloc > MichaelList_RCU_SHB_cmp_michaelAlloc;
268 typedef cc::MichaelKVList< rcu_sht, Key, Value, traits_MichaelList_cmp_michaelAlloc > MichaelList_RCU_SHT_cmp_michaelAlloc;
271 struct traits_MichaelList_less_stdAlloc :
272 public cc::michael_list::make_traits<
276 typedef cc::MichaelKVList< cds::gc::HP, Key, Value, traits_MichaelList_less_stdAlloc > MichaelList_HP_less_stdAlloc;
277 typedef cc::MichaelKVList< cds::gc::DHP, Key, Value, traits_MichaelList_less_stdAlloc > MichaelList_DHP_less_stdAlloc;
278 typedef cc::MichaelKVList< cds::gc::nogc, Key, Value, traits_MichaelList_less_stdAlloc > MichaelList_NOGC_less_stdAlloc;
279 typedef cc::MichaelKVList< rcu_gpi, Key, Value, traits_MichaelList_less_stdAlloc > MichaelList_RCU_GPI_less_stdAlloc;
280 typedef cc::MichaelKVList< rcu_gpb, Key, Value, traits_MichaelList_less_stdAlloc > MichaelList_RCU_GPB_less_stdAlloc;
281 typedef cc::MichaelKVList< rcu_gpt, Key, Value, traits_MichaelList_less_stdAlloc > MichaelList_RCU_GPT_less_stdAlloc;
282 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
283 typedef cc::MichaelKVList< rcu_shb, Key, Value, traits_MichaelList_less_stdAlloc > MichaelList_RCU_SHB_less_stdAlloc;
284 typedef cc::MichaelKVList< rcu_sht, Key, Value, traits_MichaelList_less_stdAlloc > MichaelList_RCU_SHT_less_stdAlloc;
287 struct traits_MichaelList_less_stdAlloc_seqcst :
288 public cc::michael_list::make_traits<
290 ,co::memory_model< co::v::sequential_consistent >
293 typedef cc::MichaelKVList< cds::gc::HP, Key, Value, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_HP_less_stdAlloc_seqcst;
294 typedef cc::MichaelKVList< cds::gc::DHP, Key, Value, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_DHP_less_stdAlloc_seqcst;
295 typedef cc::MichaelKVList< cds::gc::nogc, Key, Value, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_NOGC_less_stdAlloc_seqcst;
296 typedef cc::MichaelKVList< rcu_gpi, Key, Value, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_RCU_GPI_less_stdAlloc_seqcst;
297 typedef cc::MichaelKVList< rcu_gpb, Key, Value, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_RCU_GPB_less_stdAlloc_seqcst;
298 typedef cc::MichaelKVList< rcu_gpt, Key, Value, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_RCU_GPT_less_stdAlloc_seqcst;
299 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
300 typedef cc::MichaelKVList< rcu_shb, Key, Value, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_RCU_SHB_less_stdAlloc_seqcst;
301 typedef cc::MichaelKVList< rcu_sht, Key, Value, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_RCU_SHT_less_stdAlloc_seqcst;
304 struct traits_MichaelList_less_michaelAlloc :
305 public cc::michael_list::make_traits<
307 co::allocator< memory::MichaelAllocator<int> >
310 typedef cc::MichaelKVList< cds::gc::HP, Key, Value, traits_MichaelList_less_michaelAlloc > MichaelList_HP_less_michaelAlloc;
311 typedef cc::MichaelKVList< cds::gc::DHP, Key, Value, traits_MichaelList_less_michaelAlloc > MichaelList_DHP_less_michaelAlloc;
312 typedef cc::MichaelKVList< cds::gc::nogc, Key, Value, traits_MichaelList_less_michaelAlloc > MichaelList_NOGC_less_michaelAlloc;
313 typedef cc::MichaelKVList< rcu_gpi, Key, Value, traits_MichaelList_less_michaelAlloc > MichaelList_RCU_GPI_less_michaelAlloc;
314 typedef cc::MichaelKVList< rcu_gpb, Key, Value, traits_MichaelList_less_michaelAlloc > MichaelList_RCU_GPB_less_michaelAlloc;
315 typedef cc::MichaelKVList< rcu_gpt, Key, Value, traits_MichaelList_less_michaelAlloc > MichaelList_RCU_GPT_less_michaelAlloc;
316 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
317 typedef cc::MichaelKVList< rcu_shb, Key, Value, traits_MichaelList_less_michaelAlloc > MichaelList_RCU_SHB_less_michaelAlloc;
318 typedef cc::MichaelKVList< rcu_sht, Key, Value, traits_MichaelList_less_michaelAlloc > MichaelList_RCU_SHT_less_michaelAlloc;
321 template <typename Base>
322 class NogcMapWrapper: public Base
324 typedef Base base_class;
326 NogcMapWrapper( size_t nMaxItemCount, size_t nLoadFactor )
327 : base_class( nMaxItemCount, nLoadFactor )
330 template <typename K>
331 bool insert( K const& key )
333 return base_class::insert( key ) != base_class::end();
336 template <typename K, typename V>
337 bool insert( K const& key, V const& val )
339 return base_class::insert( key, val ) != base_class::end();
342 template <typename K, typename Func>
343 bool insert_key( K const& key, Func func )
345 return base_class::insert_key( key, func ) != base_class::end();
348 template <typename K>
349 bool find( K const& key )
351 return base_class::find( key ) != base_class::end();
360 template <typename Base>
361 class NogcMapWrapper_dctor: public Base
363 typedef Base base_class;
365 NogcMapWrapper_dctor()
368 template <typename K>
369 bool insert( K const& key )
371 return base_class::insert( key ) != base_class::end();
374 template <typename K, typename V>
375 bool insert( K const& key, V const& val )
377 return base_class::insert( key, val ) != base_class::end();
380 template <typename K, typename Func>
381 bool insert_key( K const& key, Func func )
383 return base_class::insert_key( key, func ) != base_class::end();
386 template <typename K>
387 bool find( K const& key )
389 return base_class::find( key ) != base_class::end();
393 // SplitListMap<gc::nogc> has no clear() method
394 template <typename Base>
395 class NogcSplitMapWrapper: public Base
397 typedef Base base_class;
399 NogcSplitMapWrapper( size_t nMaxItemCount, size_t nLoadFactor )
400 : base_class( nMaxItemCount, nLoadFactor )
403 template <typename K>
404 bool insert( K const& key )
406 return base_class::insert( key ) != base_class::end();
409 template <typename K, typename V>
410 bool insert( K const& key, V const& val )
412 return base_class::insert( key, val ) != base_class::end();
415 template <typename K, typename Func>
416 bool insert_key( K const& key, Func func )
418 return base_class::insert_key( key, func ) != base_class::end();
421 template <typename K>
422 bool find( K const& key )
424 return base_class::find( key ) != base_class::end();
432 // ***************************************************************************
433 // MichaelHashMap based on MichaelKVList
435 struct traits_MichaelMap_hash :
436 public cc::michael_map::make_traits<
440 typedef cc::MichaelHashMap< cds::gc::HP, MichaelList_HP_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_HP_cmp_stdAlloc;
441 typedef cc::MichaelHashMap< cds::gc::DHP, MichaelList_DHP_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_DHP_cmp_stdAlloc;
442 typedef cc::MichaelHashMap< cds::gc::nogc, MichaelList_NOGC_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_NOGC_cmp_stdAlloc;
443 typedef cc::MichaelHashMap< rcu_gpi, MichaelList_RCU_GPI_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_RCU_GPI_cmp_stdAlloc;
444 typedef cc::MichaelHashMap< rcu_gpb, MichaelList_RCU_GPB_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_RCU_GPB_cmp_stdAlloc;
445 typedef cc::MichaelHashMap< rcu_gpt, MichaelList_RCU_GPT_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_RCU_GPT_cmp_stdAlloc;
446 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
447 typedef cc::MichaelHashMap< rcu_shb, MichaelList_RCU_SHB_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_RCU_SHB_cmp_stdAlloc;
448 typedef cc::MichaelHashMap< rcu_sht, MichaelList_RCU_SHT_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_RCU_SHT_cmp_stdAlloc;
451 typedef cc::MichaelHashMap< cds::gc::HP, MichaelList_HP_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_HP_less_stdAlloc;
452 typedef cc::MichaelHashMap< cds::gc::DHP, MichaelList_DHP_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_DHP_less_stdAlloc;
453 typedef cc::MichaelHashMap< cds::gc::nogc, MichaelList_NOGC_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_NOGC_less_stdAlloc;
454 typedef cc::MichaelHashMap< rcu_gpi, MichaelList_RCU_GPI_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_RCU_GPI_less_stdAlloc;
455 typedef cc::MichaelHashMap< rcu_gpb, MichaelList_RCU_GPB_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_RCU_GPB_less_stdAlloc;
456 typedef cc::MichaelHashMap< rcu_gpt, MichaelList_RCU_GPT_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_RCU_GPT_less_stdAlloc;
457 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
458 typedef cc::MichaelHashMap< rcu_shb, MichaelList_RCU_SHB_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_RCU_SHB_less_stdAlloc;
459 typedef cc::MichaelHashMap< rcu_sht, MichaelList_RCU_SHT_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_RCU_SHT_less_stdAlloc;
462 typedef cc::MichaelHashMap< cds::gc::HP, MichaelList_HP_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_HP_cmp_stdAlloc_seqcst;
463 typedef cc::MichaelHashMap< cds::gc::DHP, MichaelList_DHP_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_DHP_cmp_stdAlloc_seqcst;
464 typedef cc::MichaelHashMap< cds::gc::nogc, MichaelList_NOGC_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_NOGC_cmp_stdAlloc_seqcst;
465 typedef cc::MichaelHashMap< rcu_gpi, MichaelList_RCU_GPI_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_GPI_cmp_stdAlloc_seqcst;
466 typedef cc::MichaelHashMap< rcu_gpb, MichaelList_RCU_GPB_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_GPB_cmp_stdAlloc_seqcst;
467 typedef cc::MichaelHashMap< rcu_gpt, MichaelList_RCU_GPT_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_GPT_cmp_stdAlloc_seqcst;
468 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
469 typedef cc::MichaelHashMap< rcu_shb, MichaelList_RCU_SHB_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_SHB_cmp_stdAlloc_seqcst;
470 typedef cc::MichaelHashMap< rcu_sht, MichaelList_RCU_SHT_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_SHT_cmp_stdAlloc_seqcst;
473 typedef cc::MichaelHashMap< cds::gc::HP, MichaelList_HP_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_HP_less_stdAlloc_seqcst;
474 typedef cc::MichaelHashMap< cds::gc::DHP, MichaelList_DHP_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_DHP_less_stdAlloc_seqcst;
475 typedef cc::MichaelHashMap< cds::gc::nogc, MichaelList_NOGC_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_NOGC_less_stdAlloc_seqcst;
476 typedef cc::MichaelHashMap< rcu_gpi, MichaelList_RCU_GPI_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_GPI_less_stdAlloc_seqcst;
477 typedef cc::MichaelHashMap< rcu_gpb, MichaelList_RCU_GPB_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_GPB_less_stdAlloc_seqcst;
478 typedef cc::MichaelHashMap< rcu_gpt, MichaelList_RCU_GPT_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_GPT_less_stdAlloc_seqcst;
479 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
480 typedef cc::MichaelHashMap< rcu_shb, MichaelList_RCU_SHB_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_SHB_less_stdAlloc_seqcst;
481 typedef cc::MichaelHashMap< rcu_sht, MichaelList_RCU_SHT_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_SHT_less_stdAlloc_seqcst;
484 struct traits_MichaelSet_michaelAlloc :
485 public traits_MichaelMap_hash
487 typedef memory::MichaelAllocator<int> allocator;
489 typedef cc::MichaelHashMap< cds::gc::HP, MichaelList_HP_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_HP_cmp_michaelAlloc;
490 typedef cc::MichaelHashMap< cds::gc::DHP, MichaelList_DHP_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_DHP_cmp_michaelAlloc;
491 typedef cc::MichaelHashMap< cds::gc::nogc, MichaelList_NOGC_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_NOGC_cmp_michaelAlloc;
492 typedef cc::MichaelHashMap< rcu_gpi, MichaelList_RCU_GPI_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_RCU_GPI_cmp_michaelAlloc;
493 typedef cc::MichaelHashMap< rcu_gpb, MichaelList_RCU_GPB_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_RCU_GPB_cmp_michaelAlloc;
494 typedef cc::MichaelHashMap< rcu_gpt, MichaelList_RCU_GPT_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_RCU_GPT_cmp_michaelAlloc;
495 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
496 typedef cc::MichaelHashMap< rcu_shb, MichaelList_RCU_SHB_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_RCU_SHB_cmp_michaelAlloc;
497 typedef cc::MichaelHashMap< rcu_sht, MichaelList_RCU_SHT_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_RCU_SHT_cmp_michaelAlloc;
499 typedef cc::MichaelHashMap< cds::gc::HP, MichaelList_HP_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_HP_less_michaelAlloc;
500 typedef cc::MichaelHashMap< cds::gc::DHP, MichaelList_DHP_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_DHP_less_michaelAlloc;
501 typedef cc::MichaelHashMap< cds::gc::nogc, MichaelList_NOGC_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_NOGC_less_michaelAlloc;
502 typedef cc::MichaelHashMap< rcu_gpi, MichaelList_RCU_GPI_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_RCU_GPI_less_michaelAlloc;
503 typedef cc::MichaelHashMap< rcu_gpb, MichaelList_RCU_GPB_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_RCU_GPB_less_michaelAlloc;
504 typedef cc::MichaelHashMap< rcu_gpt, MichaelList_RCU_GPT_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_RCU_GPT_less_michaelAlloc;
505 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
506 typedef cc::MichaelHashMap< rcu_shb, MichaelList_RCU_SHB_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_RCU_SHB_less_michaelAlloc;
507 typedef cc::MichaelHashMap< rcu_sht, MichaelList_RCU_SHT_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_RCU_SHT_less_michaelAlloc;
510 // ***************************************************************************
513 struct traits_LazyList_cmp_stdAlloc :
514 public cc::lazy_list::make_traits<
515 co::compare< compare >
518 typedef cc::LazyKVList< cds::gc::HP, Key, Value, traits_LazyList_cmp_stdAlloc > LazyList_HP_cmp_stdAlloc;
519 typedef cc::LazyKVList< cds::gc::DHP, Key, Value, traits_LazyList_cmp_stdAlloc > LazyList_DHP_cmp_stdAlloc;
520 typedef cc::LazyKVList< cds::gc::nogc, Key, Value, traits_LazyList_cmp_stdAlloc > LazyList_NOGC_cmp_stdAlloc;
521 typedef cc::LazyKVList< rcu_gpi, Key, Value, traits_LazyList_cmp_stdAlloc > LazyList_RCU_GPI_cmp_stdAlloc;
522 typedef cc::LazyKVList< rcu_gpb, Key, Value, traits_LazyList_cmp_stdAlloc > LazyList_RCU_GPB_cmp_stdAlloc;
523 typedef cc::LazyKVList< rcu_gpt, Key, Value, traits_LazyList_cmp_stdAlloc > LazyList_RCU_GPT_cmp_stdAlloc;
524 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
525 typedef cc::LazyKVList< rcu_shb, Key, Value, traits_LazyList_cmp_stdAlloc > LazyList_RCU_SHB_cmp_stdAlloc;
526 typedef cc::LazyKVList< rcu_sht, Key, Value, traits_LazyList_cmp_stdAlloc > LazyList_RCU_SHT_cmp_stdAlloc;
529 struct traits_LazyList_cmp_stdAlloc_seqcst :
530 public cc::lazy_list::make_traits<
531 co::compare< compare >
532 ,co::memory_model< co::v::sequential_consistent >
535 typedef cc::LazyKVList< cds::gc::HP, Key, Value, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_HP_cmp_stdAlloc_seqcst;
536 typedef cc::LazyKVList< cds::gc::DHP, Key, Value, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_DHP_cmp_stdAlloc_seqcst;
537 typedef cc::LazyKVList< cds::gc::nogc, Key, Value, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_NOGC_cmp_stdAlloc_seqcst;
538 typedef cc::LazyKVList< rcu_gpi, Key, Value, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_RCU_GPI_cmp_stdAlloc_seqcst;
539 typedef cc::LazyKVList< rcu_gpb, Key, Value, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_RCU_GPB_cmp_stdAlloc_seqcst;
540 typedef cc::LazyKVList< rcu_gpt, Key, Value, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_RCU_GPT_cmp_stdAlloc_seqcst;
541 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
542 typedef cc::LazyKVList< rcu_shb, Key, Value, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_RCU_SHB_cmp_stdAlloc_seqcst;
543 typedef cc::LazyKVList< rcu_sht, Key, Value, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_RCU_SHT_cmp_stdAlloc_seqcst;
546 struct traits_LazyList_cmp_michaelAlloc :
547 public cc::lazy_list::make_traits<
548 co::compare< compare >,
549 co::allocator< memory::MichaelAllocator<int> >
552 typedef cc::LazyKVList< cds::gc::HP, Key, Value, traits_LazyList_cmp_michaelAlloc > LazyList_HP_cmp_michaelAlloc;
553 typedef cc::LazyKVList< cds::gc::DHP, Key, Value, traits_LazyList_cmp_michaelAlloc > LazyList_DHP_cmp_michaelAlloc;
554 typedef cc::LazyKVList< cds::gc::nogc, Key, Value, traits_LazyList_cmp_michaelAlloc > LazyList_NOGC_cmp_michaelAlloc;
555 typedef cc::LazyKVList< rcu_gpi, Key, Value, traits_LazyList_cmp_michaelAlloc > LazyList_RCU_GPI_cmp_michaelAlloc;
556 typedef cc::LazyKVList< rcu_gpb, Key, Value, traits_LazyList_cmp_michaelAlloc > LazyList_RCU_GPB_cmp_michaelAlloc;
557 typedef cc::LazyKVList< rcu_gpt, Key, Value, traits_LazyList_cmp_michaelAlloc > LazyList_RCU_GPT_cmp_michaelAlloc;
558 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
559 typedef cc::LazyKVList< rcu_shb, Key, Value, traits_LazyList_cmp_michaelAlloc > LazyList_RCU_SHB_cmp_michaelAlloc;
560 typedef cc::LazyKVList< rcu_sht, Key, Value, traits_LazyList_cmp_michaelAlloc > LazyList_RCU_SHT_cmp_michaelAlloc;
562 struct traits_LazyList_less_stdAlloc :
563 public cc::lazy_list::make_traits<
567 typedef cc::LazyKVList< cds::gc::HP, Key, Value, traits_LazyList_less_stdAlloc > LazyList_HP_less_stdAlloc;
568 typedef cc::LazyKVList< cds::gc::DHP, Key, Value, traits_LazyList_less_stdAlloc > LazyList_DHP_less_stdAlloc;
569 typedef cc::LazyKVList< cds::gc::nogc, Key, Value, traits_LazyList_less_stdAlloc > LazyList_NOGC_less_stdAlloc;
570 typedef cc::LazyKVList< rcu_gpi, Key, Value, traits_LazyList_less_stdAlloc > LazyList_RCU_GPI_less_stdAlloc;
571 typedef cc::LazyKVList< rcu_gpb, Key, Value, traits_LazyList_less_stdAlloc > LazyList_RCU_GPB_less_stdAlloc;
572 typedef cc::LazyKVList< rcu_gpt, Key, Value, traits_LazyList_less_stdAlloc > LazyList_RCU_GPT_less_stdAlloc;
573 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
574 typedef cc::LazyKVList< rcu_shb, Key, Value, traits_LazyList_less_stdAlloc > LazyList_RCU_SHB_less_stdAlloc;
575 typedef cc::LazyKVList< rcu_sht, Key, Value, traits_LazyList_less_stdAlloc > LazyList_RCU_SHT_less_stdAlloc;
578 struct traits_LazyList_less_stdAlloc_seqcst :
579 public cc::lazy_list::make_traits<
581 ,co::memory_model< co::v::sequential_consistent >
584 typedef cc::LazyKVList< cds::gc::HP, Key, Value, traits_LazyList_less_stdAlloc_seqcst > LazyList_HP_less_stdAlloc_seqcst;
585 typedef cc::LazyKVList< cds::gc::DHP, Key, Value, traits_LazyList_less_stdAlloc_seqcst > LazyList_DHP_less_stdAlloc_seqcst;
586 typedef cc::LazyKVList< cds::gc::nogc, Key, Value, traits_LazyList_less_stdAlloc_seqcst > LazyList_NOGC_less_stdAlloc_seqcst;
587 typedef cc::LazyKVList< rcu_gpi, Key, Value, traits_LazyList_less_stdAlloc_seqcst > LazyList_RCU_GPI_less_stdAlloc_seqcst;
588 typedef cc::LazyKVList< rcu_gpb, Key, Value, traits_LazyList_less_stdAlloc_seqcst > LazyList_RCU_GPB_less_stdAlloc_seqcst;
589 typedef cc::LazyKVList< rcu_gpt, Key, Value, traits_LazyList_less_stdAlloc_seqcst > LazyList_RCU_GPT_less_stdAlloc_seqcst;
590 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
591 typedef cc::LazyKVList< rcu_shb, Key, Value, traits_LazyList_less_stdAlloc_seqcst > LazyList_RCU_SHB_less_stdAlloc_seqcst;
592 typedef cc::LazyKVList< rcu_sht, Key, Value, traits_LazyList_less_stdAlloc_seqcst > LazyList_RCU_SHT_less_stdAlloc_seqcst;
595 struct traits_LazyList_less_michaelAlloc :
596 public cc::lazy_list::make_traits<
598 co::allocator< memory::MichaelAllocator<int> >
601 typedef cc::LazyKVList< cds::gc::HP, Key, Value, traits_LazyList_less_michaelAlloc > LazyList_HP_less_michaelAlloc;
602 typedef cc::LazyKVList< cds::gc::DHP, Key, Value, traits_LazyList_less_michaelAlloc > LazyList_DHP_less_michaelAlloc;
603 typedef cc::LazyKVList< cds::gc::nogc, Key, Value, traits_LazyList_less_michaelAlloc > LazyList_NOGC_less_michaelAlloc;
604 typedef cc::LazyKVList< rcu_gpi, Key, Value, traits_LazyList_less_michaelAlloc > LazyList_RCU_GPI_less_michaelAlloc;
605 typedef cc::LazyKVList< rcu_gpb, Key, Value, traits_LazyList_less_michaelAlloc > LazyList_RCU_GPB_less_michaelAlloc;
606 typedef cc::LazyKVList< rcu_gpt, Key, Value, traits_LazyList_less_michaelAlloc > LazyList_RCU_GPT_less_michaelAlloc;
607 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
608 typedef cc::LazyKVList< rcu_shb, Key, Value, traits_LazyList_less_michaelAlloc > LazyList_RCU_SHB_less_michaelAlloc;
609 typedef cc::LazyKVList< rcu_sht, Key, Value, traits_LazyList_less_michaelAlloc > LazyList_RCU_SHT_less_michaelAlloc;
612 // ***************************************************************************
613 // MichaelHashMap based on LazyKVList
614 typedef cc::MichaelHashMap< cds::gc::HP, LazyList_HP_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_HP_cmp_stdAlloc;
615 typedef cc::MichaelHashMap< cds::gc::DHP, LazyList_DHP_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_DHP_cmp_stdAlloc;
616 typedef cc::MichaelHashMap< cds::gc::nogc, LazyList_NOGC_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_NOGC_cmp_stdAlloc;
617 typedef cc::MichaelHashMap< rcu_gpi, LazyList_RCU_GPI_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPI_cmp_stdAlloc;
618 typedef cc::MichaelHashMap< rcu_gpb, LazyList_RCU_GPB_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPB_cmp_stdAlloc;
619 typedef cc::MichaelHashMap< rcu_gpt, LazyList_RCU_GPT_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPT_cmp_stdAlloc;
620 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
621 typedef cc::MichaelHashMap< rcu_shb, LazyList_RCU_SHB_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_SHB_cmp_stdAlloc;
622 typedef cc::MichaelHashMap< rcu_sht, LazyList_RCU_SHT_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_SHT_cmp_stdAlloc;
625 typedef cc::MichaelHashMap< cds::gc::HP, LazyList_HP_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_HP_less_stdAlloc;
626 typedef cc::MichaelHashMap< cds::gc::DHP, LazyList_DHP_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_DHP_less_stdAlloc;
627 typedef cc::MichaelHashMap< cds::gc::nogc, LazyList_NOGC_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_NOGC_less_stdAlloc;
628 typedef cc::MichaelHashMap< rcu_gpi, LazyList_RCU_GPI_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPI_less_stdAlloc;
629 typedef cc::MichaelHashMap< rcu_gpb, LazyList_RCU_GPB_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPB_less_stdAlloc;
630 typedef cc::MichaelHashMap< rcu_gpt, LazyList_RCU_GPT_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPT_less_stdAlloc;
631 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
632 typedef cc::MichaelHashMap< rcu_shb, LazyList_RCU_SHB_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_SHB_less_stdAlloc;
633 typedef cc::MichaelHashMap< rcu_sht, LazyList_RCU_SHT_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_SHT_less_stdAlloc;
636 typedef cc::MichaelHashMap< cds::gc::HP, LazyList_HP_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_HP_cmp_stdAlloc_seqcst;
637 typedef cc::MichaelHashMap< cds::gc::DHP, LazyList_DHP_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_DHP_cmp_stdAlloc_seqcst;
638 typedef cc::MichaelHashMap< cds::gc::nogc, LazyList_NOGC_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_NOGC_cmp_stdAlloc_seqcst;
639 typedef cc::MichaelHashMap< rcu_gpi, LazyList_RCU_GPI_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPI_cmp_stdAlloc_seqcst;
640 typedef cc::MichaelHashMap< rcu_gpb, LazyList_RCU_GPB_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPB_cmp_stdAlloc_seqcst;
641 typedef cc::MichaelHashMap< rcu_gpt, LazyList_RCU_GPT_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPT_cmp_stdAlloc_seqcst;
642 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
643 typedef cc::MichaelHashMap< rcu_shb, LazyList_RCU_SHB_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_SHB_cmp_stdAlloc_seqcst;
644 typedef cc::MichaelHashMap< rcu_sht, LazyList_RCU_SHT_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_SHT_cmp_stdAlloc_seqcst;
647 typedef cc::MichaelHashMap< cds::gc::HP, LazyList_HP_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_HP_less_stdAlloc_seqcst;
648 typedef cc::MichaelHashMap< cds::gc::DHP, LazyList_DHP_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_DHP_less_stdAlloc_seqcst;
649 typedef cc::MichaelHashMap< cds::gc::nogc, LazyList_NOGC_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_NOGC_less_stdAlloc_seqcst;
650 typedef cc::MichaelHashMap< rcu_gpi, LazyList_RCU_GPI_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPI_less_stdAlloc_seqcst;
651 typedef cc::MichaelHashMap< rcu_gpb, LazyList_RCU_GPB_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPB_less_stdAlloc_seqcst;
652 typedef cc::MichaelHashMap< rcu_gpt, LazyList_RCU_GPT_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPT_less_stdAlloc_seqcst;
653 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
654 typedef cc::MichaelHashMap< rcu_shb, LazyList_RCU_SHB_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_SHB_less_stdAlloc_seqcst;
655 typedef cc::MichaelHashMap< rcu_sht, LazyList_RCU_SHT_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_SHT_less_stdAlloc_seqcst;
658 typedef cc::MichaelHashMap< cds::gc::HP, LazyList_HP_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_HP_cmp_michaelAlloc;
659 typedef cc::MichaelHashMap< cds::gc::DHP, LazyList_DHP_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_DHP_cmp_michaelAlloc;
660 typedef cc::MichaelHashMap< cds::gc::nogc, LazyList_NOGC_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_NOGC_cmp_michaelAlloc;
661 typedef cc::MichaelHashMap< rcu_gpi, LazyList_RCU_GPI_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_RCU_GPI_cmp_michaelAlloc;
662 typedef cc::MichaelHashMap< rcu_gpb, LazyList_RCU_GPB_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_RCU_GPB_cmp_michaelAlloc;
663 typedef cc::MichaelHashMap< rcu_gpt, LazyList_RCU_GPT_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_RCU_GPT_cmp_michaelAlloc;
664 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
665 typedef cc::MichaelHashMap< rcu_shb, LazyList_RCU_SHB_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_RCU_SHB_cmp_michaelAlloc;
666 typedef cc::MichaelHashMap< rcu_sht, LazyList_RCU_SHT_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_RCU_SHT_cmp_michaelAlloc;
668 typedef cc::MichaelHashMap< cds::gc::HP, LazyList_HP_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_HP_less_michaelAlloc;
669 typedef cc::MichaelHashMap< cds::gc::DHP, LazyList_DHP_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_DHP_less_michaelAlloc;
670 typedef cc::MichaelHashMap< cds::gc::nogc, LazyList_NOGC_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_NOGC_less_michaelAlloc;
671 typedef cc::MichaelHashMap< rcu_gpi, LazyList_RCU_GPI_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_RCU_GPI_less_michaelAlloc;
672 typedef cc::MichaelHashMap< rcu_gpb, LazyList_RCU_GPB_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_RCU_GPB_less_michaelAlloc;
673 typedef cc::MichaelHashMap< rcu_gpt, LazyList_RCU_GPT_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_RCU_GPT_less_michaelAlloc;
674 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
675 typedef cc::MichaelHashMap< rcu_shb, LazyList_RCU_SHB_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_RCU_SHB_less_michaelAlloc;
676 typedef cc::MichaelHashMap< rcu_sht, LazyList_RCU_SHT_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_RCU_SHT_less_michaelAlloc;
679 // ***************************************************************************
680 // SplitListMap based on MichaelList
683 struct traits_SplitList_Michael_dyn_cmp: public cc::split_list::make_traits<
684 cc::split_list::ordered_list<cc::michael_list_tag>
686 ,cc::split_list::ordered_list_traits<
687 typename cc::michael_list::make_traits<
688 co::compare< compare >
693 typedef cc::SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_HP_dyn_cmp;
694 typedef cc::SplitListMap< cds::gc::DHP, Key, Value, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_DHP_dyn_cmp;
695 typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value, traits_SplitList_Michael_dyn_cmp >> SplitList_Michael_NOGC_dyn_cmp;
696 typedef cc::SplitListMap< rcu_gpi, Key, Value, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_RCU_GPI_dyn_cmp;
697 typedef cc::SplitListMap< rcu_gpb, Key, Value, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_RCU_GPB_dyn_cmp;
698 typedef cc::SplitListMap< rcu_gpt, Key, Value, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_RCU_GPT_dyn_cmp;
699 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
700 typedef cc::SplitListMap< rcu_shb, Key, Value, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_RCU_SHB_dyn_cmp;
701 typedef cc::SplitListMap< rcu_sht, Key, Value, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_RCU_SHT_dyn_cmp;
704 struct traits_SplitList_Michael_dyn_cmp_stat : public traits_SplitList_Michael_dyn_cmp
706 typedef cc::split_list::stat<> stat;
708 typedef cc::SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_HP_dyn_cmp_stat;
709 typedef cc::SplitListMap< cds::gc::DHP, Key, Value, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_DHP_dyn_cmp_stat;
710 typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value, traits_SplitList_Michael_dyn_cmp_stat >> SplitList_Michael_NOGC_dyn_cmp_stat;
711 typedef cc::SplitListMap< rcu_gpi, Key, Value, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_RCU_GPI_dyn_cmp_stat;
712 typedef cc::SplitListMap< rcu_gpb, Key, Value, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_RCU_GPB_dyn_cmp_stat;
713 typedef cc::SplitListMap< rcu_gpt, Key, Value, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_RCU_GPT_dyn_cmp_stat;
714 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
715 typedef cc::SplitListMap< rcu_shb, Key, Value, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_RCU_SHB_dyn_cmp_stat;
716 typedef cc::SplitListMap< rcu_sht, Key, Value, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_RCU_SHT_dyn_cmp_stat;
719 struct traits_SplitList_Michael_dyn_cmp_seqcst: public cc::split_list::make_traits<
720 cc::split_list::ordered_list<cc::michael_list_tag>
722 ,co::memory_model< co::v::sequential_consistent >
723 ,cc::split_list::ordered_list_traits<
724 typename cc::michael_list::make_traits<
725 co::compare< compare >
726 ,co::memory_model< co::v::sequential_consistent >
731 typedef cc::SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_HP_dyn_cmp_seqcst;
732 typedef cc::SplitListMap< cds::gc::DHP, Key, Value, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_DHP_dyn_cmp_seqcst;
733 typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value, traits_SplitList_Michael_dyn_cmp_seqcst >> SplitList_Michael_NOGC_dyn_cmp_seqcst;
734 typedef cc::SplitListMap< rcu_gpi, Key, Value, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_RCU_GPI_dyn_cmp_seqcst;
735 typedef cc::SplitListMap< rcu_gpb, Key, Value, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_RCU_GPB_dyn_cmp_seqcst;
736 typedef cc::SplitListMap< rcu_gpt, Key, Value, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_RCU_GPT_dyn_cmp_seqcst;
737 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
738 typedef cc::SplitListMap< rcu_shb, Key, Value, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_RCU_SHB_dyn_cmp_seqcst;
739 typedef cc::SplitListMap< rcu_sht, Key, Value, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_RCU_SHT_dyn_cmp_seqcst;
742 struct traits_SplitList_Michael_st_cmp: public cc::split_list::make_traits<
743 cc::split_list::ordered_list<cc::michael_list_tag>
744 ,cc::split_list::dynamic_bucket_table< false >
746 ,cc::split_list::ordered_list_traits<
747 typename cc::michael_list::make_traits<
748 co::compare< compare >
753 typedef cc::SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Michael_st_cmp > SplitList_Michael_HP_st_cmp;
754 typedef cc::SplitListMap< cds::gc::DHP, Key, Value, traits_SplitList_Michael_st_cmp > SplitList_Michael_DHP_st_cmp;
755 typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value, traits_SplitList_Michael_st_cmp >> SplitList_Michael_NOGC_st_cmp;
756 typedef cc::SplitListMap< rcu_gpi, Key, Value, traits_SplitList_Michael_st_cmp > SplitList_Michael_RCU_GPI_st_cmp;
757 typedef cc::SplitListMap< rcu_gpb, Key, Value, traits_SplitList_Michael_st_cmp > SplitList_Michael_RCU_GPB_st_cmp;
758 typedef cc::SplitListMap< rcu_gpt, Key, Value, traits_SplitList_Michael_st_cmp > SplitList_Michael_RCU_GPT_st_cmp;
759 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
760 typedef cc::SplitListMap< rcu_shb, Key, Value, traits_SplitList_Michael_st_cmp > SplitList_Michael_RCU_SHB_st_cmp;
761 typedef cc::SplitListMap< rcu_sht, Key, Value, traits_SplitList_Michael_st_cmp > SplitList_Michael_RCU_SHT_st_cmp;
764 struct traits_SplitList_Michael_st_cmp_seqcst: public cc::split_list::make_traits<
765 cc::split_list::ordered_list<cc::michael_list_tag>
767 ,cc::split_list::dynamic_bucket_table< false >
768 ,co::memory_model< co::v::sequential_consistent >
769 ,cc::split_list::ordered_list_traits<
770 typename cc::michael_list::make_traits<
771 co::compare< compare >
772 ,co::memory_model< co::v::sequential_consistent >
777 typedef cc::SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Michael_st_cmp_seqcst > SplitList_Michael_HP_st_cmp_seqcst;
778 typedef cc::SplitListMap< cds::gc::DHP, Key, Value, traits_SplitList_Michael_st_cmp_seqcst > SplitList_Michael_DHP_st_cmp_seqcst;
779 typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value, traits_SplitList_Michael_st_cmp_seqcst >> SplitList_Michael_NOGC_st_cmp_seqcst;
780 typedef cc::SplitListMap< rcu_gpi, Key, Value, traits_SplitList_Michael_st_cmp_seqcst > SplitList_Michael_RCU_GPI_st_cmp_seqcst;
781 typedef cc::SplitListMap< rcu_gpb, Key, Value, traits_SplitList_Michael_st_cmp_seqcst > SplitList_Michael_RCU_GPB_st_cmp_seqcst;
782 typedef cc::SplitListMap< rcu_gpt, Key, Value, traits_SplitList_Michael_st_cmp_seqcst > SplitList_Michael_RCU_GPT_st_cmp_seqcst;
783 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
784 typedef cc::SplitListMap< rcu_shb, Key, Value, traits_SplitList_Michael_st_cmp_seqcst > SplitList_Michael_RCU_SHB_st_cmp_seqcst;
785 typedef cc::SplitListMap< rcu_sht, Key, Value, traits_SplitList_Michael_st_cmp_seqcst > SplitList_Michael_RCU_SHT_st_cmp_seqcst;
789 struct traits_SplitList_Michael_dyn_less: public cc::split_list::make_traits<
790 cc::split_list::ordered_list<cc::michael_list_tag>
792 ,cc::split_list::ordered_list_traits<
793 typename cc::michael_list::make_traits<
799 typedef cc::SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Michael_dyn_less > SplitList_Michael_HP_dyn_less;
800 typedef cc::SplitListMap< cds::gc::DHP, Key, Value, traits_SplitList_Michael_dyn_less > SplitList_Michael_DHP_dyn_less;
801 typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value, traits_SplitList_Michael_dyn_less >> SplitList_Michael_NOGC_dyn_less;
802 typedef cc::SplitListMap< rcu_gpi, Key, Value, traits_SplitList_Michael_dyn_less > SplitList_Michael_RCU_GPI_dyn_less;
803 typedef cc::SplitListMap< rcu_gpb, Key, Value, traits_SplitList_Michael_dyn_less > SplitList_Michael_RCU_GPB_dyn_less;
804 typedef cc::SplitListMap< rcu_gpt, Key, Value, traits_SplitList_Michael_dyn_less > SplitList_Michael_RCU_GPT_dyn_less;
805 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
806 typedef cc::SplitListMap< rcu_shb, Key, Value, traits_SplitList_Michael_dyn_less > SplitList_Michael_RCU_SHB_dyn_less;
807 typedef cc::SplitListMap< rcu_sht, Key, Value, traits_SplitList_Michael_dyn_less > SplitList_Michael_RCU_SHT_dyn_less;
811 struct traits_SplitList_Michael_dyn_less_seqcst: public cc::split_list::make_traits<
812 cc::split_list::ordered_list<cc::michael_list_tag>
814 ,co::memory_model< co::v::sequential_consistent >
815 ,cc::split_list::ordered_list_traits<
816 typename cc::michael_list::make_traits<
818 ,co::memory_model< co::v::sequential_consistent >
823 typedef cc::SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Michael_dyn_less_seqcst > SplitList_Michael_HP_dyn_less_seqcst;
824 typedef cc::SplitListMap< cds::gc::DHP, Key, Value, traits_SplitList_Michael_dyn_less_seqcst > SplitList_Michael_DHP_dyn_less_seqcst;
825 typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value, traits_SplitList_Michael_dyn_less_seqcst >> SplitList_Michael_NOGC_dyn_less_seqcst;
826 typedef cc::SplitListMap< rcu_gpi, Key, Value, traits_SplitList_Michael_dyn_less_seqcst > SplitList_Michael_RCU_GPI_dyn_less_seqcst;
827 typedef cc::SplitListMap< rcu_gpb, Key, Value, traits_SplitList_Michael_dyn_less_seqcst > SplitList_Michael_RCU_GPB_dyn_less_seqcst;
828 typedef cc::SplitListMap< rcu_gpt, Key, Value, traits_SplitList_Michael_dyn_less_seqcst > SplitList_Michael_RCU_GPT_dyn_less_seqcst;
829 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
830 typedef cc::SplitListMap< rcu_shb, Key, Value, traits_SplitList_Michael_dyn_less_seqcst > SplitList_Michael_RCU_SHB_dyn_less_seqcst;
831 typedef cc::SplitListMap< rcu_sht, Key, Value, traits_SplitList_Michael_dyn_less_seqcst > SplitList_Michael_RCU_SHT_dyn_less_seqcst;
834 struct traits_SplitList_Michael_st_less: public cc::split_list::make_traits<
835 cc::split_list::ordered_list<cc::michael_list_tag>
836 ,cc::split_list::dynamic_bucket_table< false >
838 ,cc::split_list::ordered_list_traits<
839 typename cc::michael_list::make_traits<
845 typedef cc::SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Michael_st_less > SplitList_Michael_HP_st_less;
846 typedef cc::SplitListMap< cds::gc::DHP, Key, Value, traits_SplitList_Michael_st_less > SplitList_Michael_DHP_st_less;
847 typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value, traits_SplitList_Michael_st_less >> SplitList_Michael_NOGC_st_less;
848 typedef cc::SplitListMap< rcu_gpi, Key, Value, traits_SplitList_Michael_st_less > SplitList_Michael_RCU_GPI_st_less;
849 typedef cc::SplitListMap< rcu_gpb, Key, Value, traits_SplitList_Michael_st_less > SplitList_Michael_RCU_GPB_st_less;
850 typedef cc::SplitListMap< rcu_gpt, Key, Value, traits_SplitList_Michael_st_less > SplitList_Michael_RCU_GPT_st_less;
851 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
852 typedef cc::SplitListMap< rcu_shb, Key, Value, traits_SplitList_Michael_st_less > SplitList_Michael_RCU_SHB_st_less;
853 typedef cc::SplitListMap< rcu_sht, Key, Value, traits_SplitList_Michael_st_less > SplitList_Michael_RCU_SHT_st_less;
856 struct traits_SplitList_Michael_st_less_stat : traits_SplitList_Michael_st_less
858 typedef cc::split_list::stat<> stat;
860 typedef cc::SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Michael_st_less_stat > SplitList_Michael_HP_st_less_stat;
861 typedef cc::SplitListMap< cds::gc::DHP, Key, Value, traits_SplitList_Michael_st_less_stat > SplitList_Michael_DHP_st_less_stat;
862 typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value, traits_SplitList_Michael_st_less_stat >> SplitList_Michael_NOGC_st_less_stat;
863 typedef cc::SplitListMap< rcu_gpi, Key, Value, traits_SplitList_Michael_st_less_stat > SplitList_Michael_RCU_GPI_st_less_stat;
864 typedef cc::SplitListMap< rcu_gpb, Key, Value, traits_SplitList_Michael_st_less_stat > SplitList_Michael_RCU_GPB_st_less_stat;
865 typedef cc::SplitListMap< rcu_gpt, Key, Value, traits_SplitList_Michael_st_less_stat > SplitList_Michael_RCU_GPT_st_less_stat;
866 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
867 typedef cc::SplitListMap< rcu_shb, Key, Value, traits_SplitList_Michael_st_less_stat > SplitList_Michael_RCU_SHB_st_less_stat;
868 typedef cc::SplitListMap< rcu_sht, Key, Value, traits_SplitList_Michael_st_less_stat > SplitList_Michael_RCU_SHT_st_less_stat;
872 class traits_SplitList_Michael_st_less_seqcst: public cc::split_list::make_traits<
873 cc::split_list::ordered_list<cc::michael_list_tag>
875 ,cc::split_list::dynamic_bucket_table< false >
876 ,co::memory_model< co::v::sequential_consistent >
877 ,cc::split_list::ordered_list_traits<
878 typename cc::michael_list::make_traits<
880 ,co::memory_model< co::v::sequential_consistent >
885 typedef cc::SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Michael_st_less_seqcst > SplitList_Michael_HP_st_less_seqcst;
886 typedef cc::SplitListMap< cds::gc::DHP, Key, Value, traits_SplitList_Michael_st_less_seqcst > SplitList_Michael_DHP_st_less_seqcst;
887 typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value, traits_SplitList_Michael_st_less_seqcst >> SplitList_Michael_NOGC_st_less_seqcst;
888 typedef cc::SplitListMap< rcu_gpi, Key, Value, traits_SplitList_Michael_st_less_seqcst > SplitList_Michael_RCU_GPI_st_less_seqcst;
889 typedef cc::SplitListMap< rcu_gpb, Key, Value, traits_SplitList_Michael_st_less_seqcst > SplitList_Michael_RCU_GPB_st_less_seqcst;
890 typedef cc::SplitListMap< rcu_gpt, Key, Value, traits_SplitList_Michael_st_less_seqcst > SplitList_Michael_RCU_GPT_st_less_seqcst;
891 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
892 typedef cc::SplitListMap< rcu_shb, Key, Value, traits_SplitList_Michael_st_less_seqcst > SplitList_Michael_RCU_SHB_st_less_seqcst;
893 typedef cc::SplitListMap< rcu_sht, Key, Value, traits_SplitList_Michael_st_less_seqcst > SplitList_Michael_RCU_SHT_st_less_seqcst;
897 // ***************************************************************************
898 // SplitListMap based on LazyKVList
900 struct SplitList_Lazy_dyn_cmp :
901 public cc::split_list::make_traits<
902 cc::split_list::ordered_list<cc::lazy_list_tag>
904 ,cc::split_list::ordered_list_traits<
905 typename cc::lazy_list::make_traits<
906 co::compare< compare >
911 typedef cc::SplitListMap< cds::gc::HP, Key, Value, SplitList_Lazy_dyn_cmp > SplitList_Lazy_HP_dyn_cmp;
912 typedef cc::SplitListMap< cds::gc::DHP, Key, Value, SplitList_Lazy_dyn_cmp > SplitList_Lazy_DHP_dyn_cmp;
913 typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value, SplitList_Lazy_dyn_cmp >> SplitList_Lazy_NOGC_dyn_cmp;
914 typedef cc::SplitListMap< rcu_gpi, Key, Value, SplitList_Lazy_dyn_cmp > SplitList_Lazy_RCU_GPI_dyn_cmp;
915 typedef cc::SplitListMap< rcu_gpb, Key, Value, SplitList_Lazy_dyn_cmp > SplitList_Lazy_RCU_GPB_dyn_cmp;
916 typedef cc::SplitListMap< rcu_gpt, Key, Value, SplitList_Lazy_dyn_cmp > SplitList_Lazy_RCU_GPT_dyn_cmp;
917 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
918 typedef cc::SplitListMap< rcu_shb, Key, Value, SplitList_Lazy_dyn_cmp > SplitList_Lazy_RCU_SHB_dyn_cmp;
919 typedef cc::SplitListMap< rcu_sht, Key, Value, SplitList_Lazy_dyn_cmp > SplitList_Lazy_RCU_SHT_dyn_cmp;
922 struct SplitList_Lazy_dyn_cmp_stat : public SplitList_Lazy_dyn_cmp
924 typedef cc::split_list::stat<> stat;
926 typedef cc::SplitListMap< cds::gc::HP, Key, Value, SplitList_Lazy_dyn_cmp_stat > SplitList_Lazy_HP_dyn_cmp_stat;
927 typedef cc::SplitListMap< cds::gc::DHP, Key, Value, SplitList_Lazy_dyn_cmp_stat > SplitList_Lazy_DHP_dyn_cmp_stat;
928 typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value, SplitList_Lazy_dyn_cmp_stat >> SplitList_Lazy_NOGC_dyn_cmp_stat;
929 typedef cc::SplitListMap< rcu_gpi, Key, Value, SplitList_Lazy_dyn_cmp_stat > SplitList_Lazy_RCU_GPI_dyn_cmp_stat;
930 typedef cc::SplitListMap< rcu_gpb, Key, Value, SplitList_Lazy_dyn_cmp_stat > SplitList_Lazy_RCU_GPB_dyn_cmp_stat;
931 typedef cc::SplitListMap< rcu_gpt, Key, Value, SplitList_Lazy_dyn_cmp_stat > SplitList_Lazy_RCU_GPT_dyn_cmp_stat;
932 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
933 typedef cc::SplitListMap< rcu_shb, Key, Value, SplitList_Lazy_dyn_cmp_stat > SplitList_Lazy_RCU_SHB_dyn_cmp;
934 typedef cc::SplitListMap< rcu_sht, Key, Value, SplitList_Lazy_dyn_cmp_stat > SplitList_Lazy_RCU_SHT_dyn_cmp;
937 struct SplitList_Lazy_dyn_cmp_seqcst :
938 public cc::split_list::make_traits<
939 cc::split_list::ordered_list<cc::lazy_list_tag>
941 ,co::memory_model< co::v::sequential_consistent >
942 ,cc::split_list::ordered_list_traits<
943 typename cc::lazy_list::make_traits<
944 co::compare< compare >
945 ,co::memory_model< co::v::sequential_consistent >
950 typedef cc::SplitListMap< cds::gc::HP, Key, Value, SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_HP_dyn_cmp_seqcst;
951 typedef cc::SplitListMap< cds::gc::DHP, Key, Value, SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_DHP_dyn_cmp_seqcst;
952 typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value, SplitList_Lazy_dyn_cmp_seqcst >> SplitList_Lazy_NOGC_dyn_cmp_seqcst;
953 typedef cc::SplitListMap< rcu_gpi, Key, Value, SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_RCU_GPI_dyn_cmp_seqcst;
954 typedef cc::SplitListMap< rcu_gpb, Key, Value, SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_RCU_GPB_dyn_cmp_seqcst;
955 typedef cc::SplitListMap< rcu_gpt, Key, Value, SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_RCU_GPT_dyn_cmp_seqcst;
956 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
957 typedef cc::SplitListMap< rcu_shb, Key, Value, SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_RCU_SHB_dyn_cmp_seqcst;
958 typedef cc::SplitListMap< rcu_sht, Key, Value, SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_RCU_SHT_dyn_cmp_seqcst;
961 struct SplitList_Lazy_st_cmp :
962 public cc::split_list::make_traits<
963 cc::split_list::ordered_list<cc::lazy_list_tag>
964 ,cc::split_list::dynamic_bucket_table< false >
966 ,cc::split_list::ordered_list_traits<
967 typename cc::lazy_list::make_traits<
968 co::compare< compare >
973 typedef cc::SplitListMap< cds::gc::HP, Key, Value, SplitList_Lazy_st_cmp > SplitList_Lazy_HP_st_cmp;
974 typedef cc::SplitListMap< cds::gc::DHP, Key, Value, SplitList_Lazy_st_cmp > SplitList_Lazy_DHP_st_cmp;
975 typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value, SplitList_Lazy_st_cmp >> SplitList_Lazy_NOGC_st_cmp;
976 typedef cc::SplitListMap< rcu_gpi, Key, Value, SplitList_Lazy_st_cmp > SplitList_Lazy_RCU_GPI_st_cmp;
977 typedef cc::SplitListMap< rcu_gpb, Key, Value, SplitList_Lazy_st_cmp > SplitList_Lazy_RCU_GPB_st_cmp;
978 typedef cc::SplitListMap< rcu_gpt, Key, Value, SplitList_Lazy_st_cmp > SplitList_Lazy_RCU_GPT_st_cmp;
979 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
980 typedef cc::SplitListMap< rcu_shb, Key, Value, SplitList_Lazy_st_cmp > SplitList_Lazy_RCU_SHB_st_cmp;
981 typedef cc::SplitListMap< rcu_sht, Key, Value, SplitList_Lazy_st_cmp > SplitList_Lazy_RCU_SHT_st_cmp;
985 struct SplitList_Lazy_st_cmp_seqcst :
986 public cc::split_list::make_traits<
987 cc::split_list::ordered_list<cc::lazy_list_tag>
989 ,cc::split_list::dynamic_bucket_table< false >
990 ,co::memory_model< co::v::sequential_consistent >
991 ,cc::split_list::ordered_list_traits<
992 typename cc::lazy_list::make_traits<
993 co::compare< compare >
994 ,co::memory_model< co::v::sequential_consistent >
999 typedef cc::SplitListMap< cds::gc::HP, Key, Value, SplitList_Lazy_st_cmp_seqcst> SplitList_Lazy_HP_st_cmp_seqcst;
1000 typedef cc::SplitListMap< cds::gc::DHP, Key, Value, SplitList_Lazy_st_cmp_seqcst> SplitList_Lazy_DHP_st_cmp_seqcst;
1001 typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value, SplitList_Lazy_st_cmp_seqcst >> SplitList_Lazy_NOGC_st_cmp_seqcst;
1002 typedef cc::SplitListMap< rcu_gpi, Key, Value, SplitList_Lazy_st_cmp_seqcst> SplitList_Lazy_RCU_GPI_st_cmp_seqcst;
1003 typedef cc::SplitListMap< rcu_gpb, Key, Value, SplitList_Lazy_st_cmp_seqcst> SplitList_Lazy_RCU_GPB_st_cmp_seqcst;
1004 typedef cc::SplitListMap< rcu_gpt, Key, Value, SplitList_Lazy_st_cmp_seqcst> SplitList_Lazy_RCU_GPT_st_cmp_seqcst;
1005 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
1006 typedef cc::SplitListMap< rcu_shb, Key, Value, SplitList_Lazy_st_cmp_seqcst> SplitList_Lazy_RCU_SHB_st_cmp_seqcst;
1007 typedef cc::SplitListMap< rcu_sht, Key, Value, SplitList_Lazy_st_cmp_seqcst> SplitList_Lazy_RCU_SHT_st_cmp_seqcst;
1011 struct SplitList_Lazy_dyn_less :
1012 public cc::split_list::make_traits<
1013 cc::split_list::ordered_list<cc::lazy_list_tag>
1015 ,cc::split_list::ordered_list_traits<
1016 typename cc::lazy_list::make_traits<
1022 typedef cc::SplitListMap< cds::gc::HP, Key, Value, SplitList_Lazy_dyn_less > SplitList_Lazy_HP_dyn_less;
1023 typedef cc::SplitListMap< cds::gc::DHP, Key, Value, SplitList_Lazy_dyn_less > SplitList_Lazy_DHP_dyn_less;
1024 typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value, SplitList_Lazy_dyn_less >> SplitList_Lazy_NOGC_dyn_less;
1025 typedef cc::SplitListMap< rcu_gpi, Key, Value, SplitList_Lazy_dyn_less > SplitList_Lazy_RCU_GPI_dyn_less;
1026 typedef cc::SplitListMap< rcu_gpb, Key, Value, SplitList_Lazy_dyn_less > SplitList_Lazy_RCU_GPB_dyn_less;
1027 typedef cc::SplitListMap< rcu_gpt, Key, Value, SplitList_Lazy_dyn_less > SplitList_Lazy_RCU_GPT_dyn_less;
1028 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
1029 typedef cc::SplitListMap< rcu_shb, Key, Value, SplitList_Lazy_dyn_less > SplitList_Lazy_RCU_SHB_dyn_less;
1030 typedef cc::SplitListMap< rcu_sht, Key, Value, SplitList_Lazy_dyn_less > SplitList_Lazy_RCU_SHT_dyn_less;
1033 struct SplitList_Lazy_dyn_less_seqcst:
1034 public cc::split_list::make_traits<
1035 cc::split_list::ordered_list<cc::lazy_list_tag>
1037 ,co::memory_model< co::v::sequential_consistent >
1038 ,cc::split_list::ordered_list_traits<
1039 typename cc::lazy_list::make_traits<
1041 ,co::memory_model< co::v::sequential_consistent >
1046 typedef cc::SplitListMap< cds::gc::HP, Key, Value, SplitList_Lazy_dyn_less_seqcst > SplitList_Lazy_HP_dyn_less_seqcst;
1047 typedef cc::SplitListMap< cds::gc::DHP, Key, Value, SplitList_Lazy_dyn_less_seqcst > SplitList_Lazy_DHP_dyn_less_seqcst;
1048 typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value, SplitList_Lazy_dyn_less_seqcst >> SplitList_Lazy_NOGC_dyn_less_seqcst;
1049 typedef cc::SplitListMap< rcu_gpi, Key, Value, SplitList_Lazy_dyn_less_seqcst > SplitList_Lazy_RCU_GPI_dyn_less_seqcst;
1050 typedef cc::SplitListMap< rcu_gpb, Key, Value, SplitList_Lazy_dyn_less_seqcst > SplitList_Lazy_RCU_GPB_dyn_less_seqcst;
1051 typedef cc::SplitListMap< rcu_gpt, Key, Value, SplitList_Lazy_dyn_less_seqcst > SplitList_Lazy_RCU_GPT_dyn_less_seqcst;
1052 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
1053 typedef cc::SplitListMap< rcu_shb, Key, Value, SplitList_Lazy_dyn_less_seqcst > SplitList_Lazy_RCU_SHB_dyn_less_seqcst;
1054 typedef cc::SplitListMap< rcu_sht, Key, Value, SplitList_Lazy_dyn_less_seqcst > SplitList_Lazy_RCU_SHT_dyn_less_seqcst;
1057 struct SplitList_Lazy_st_less :
1058 public cc::split_list::make_traits<
1059 cc::split_list::ordered_list<cc::lazy_list_tag>
1060 ,cc::split_list::dynamic_bucket_table< false >
1062 ,cc::split_list::ordered_list_traits<
1063 typename cc::lazy_list::make_traits<
1069 typedef cc::SplitListMap< cds::gc::HP, Key, Value, SplitList_Lazy_st_less > SplitList_Lazy_HP_st_less;
1070 typedef cc::SplitListMap< cds::gc::DHP, Key, Value, SplitList_Lazy_st_less > SplitList_Lazy_DHP_st_less;
1071 typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value, SplitList_Lazy_st_less >> SplitList_Lazy_NOGC_st_less;
1072 typedef cc::SplitListMap< rcu_gpi, Key, Value, SplitList_Lazy_st_less > SplitList_Lazy_RCU_GPI_st_less;
1073 typedef cc::SplitListMap< rcu_gpb, Key, Value, SplitList_Lazy_st_less > SplitList_Lazy_RCU_GPB_st_less;
1074 typedef cc::SplitListMap< rcu_gpt, Key, Value, SplitList_Lazy_st_less > SplitList_Lazy_RCU_GPT_st_less;
1075 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
1076 typedef cc::SplitListMap< rcu_shb, Key, Value, SplitList_Lazy_st_less > SplitList_Lazy_RCU_SHB_st_less;
1077 typedef cc::SplitListMap< rcu_sht, Key, Value, SplitList_Lazy_st_less > SplitList_Lazy_RCU_SHT_st_less;
1080 struct SplitList_Lazy_st_less_stat : public SplitList_Lazy_st_less
1082 typedef cc::split_list::stat<> stat;
1084 typedef cc::SplitListMap< cds::gc::HP, Key, Value, SplitList_Lazy_st_less_stat > SplitList_Lazy_HP_st_less_stat;
1085 typedef cc::SplitListMap< cds::gc::DHP, Key, Value, SplitList_Lazy_st_less_stat > SplitList_Lazy_DHP_st_less_stat;
1086 typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value, SplitList_Lazy_st_less_stat >> SplitList_Lazy_NOGC_st_less_stat;
1087 typedef cc::SplitListMap< rcu_gpi, Key, Value, SplitList_Lazy_st_less_stat > SplitList_Lazy_RCU_GPI_st_less_stat;
1088 typedef cc::SplitListMap< rcu_gpb, Key, Value, SplitList_Lazy_st_less_stat > SplitList_Lazy_RCU_GPB_st_less_stat;
1089 typedef cc::SplitListMap< rcu_gpt, Key, Value, SplitList_Lazy_st_less_stat > SplitList_Lazy_RCU_GPT_st_less_stat;
1090 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
1091 typedef cc::SplitListMap< rcu_shb, Key, Value, SplitList_Lazy_st_less_stat > SplitList_Lazy_RCU_SHB_st_less_stat;
1092 typedef cc::SplitListMap< rcu_sht, Key, Value, SplitList_Lazy_st_less_stat > SplitList_Lazy_RCU_SHT_st_less_stat;
1095 struct SplitList_Lazy_st_less_seqcst :
1096 public cc::split_list::make_traits<
1097 cc::split_list::ordered_list<cc::lazy_list_tag>
1099 ,cc::split_list::dynamic_bucket_table< false >
1100 ,co::memory_model< co::v::sequential_consistent >
1101 ,cc::split_list::ordered_list_traits<
1102 typename cc::lazy_list::make_traits<
1104 ,co::memory_model< co::v::sequential_consistent >
1109 typedef cc::SplitListMap< cds::gc::HP, Key, Value, SplitList_Lazy_st_less_seqcst > SplitList_Lazy_HP_st_less_seqcst;
1110 typedef cc::SplitListMap< cds::gc::DHP, Key, Value, SplitList_Lazy_st_less_seqcst > SplitList_Lazy_DHP_st_less_seqcst;
1111 typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value, SplitList_Lazy_st_less_seqcst >> SplitList_Lazy_NOGC_st_less_seqcst;
1112 typedef cc::SplitListMap< rcu_gpi, Key, Value, SplitList_Lazy_st_less_seqcst > SplitList_Lazy_RCU_GPI_st_less_seqcst;
1113 typedef cc::SplitListMap< rcu_gpb, Key, Value, SplitList_Lazy_st_less_seqcst > SplitList_Lazy_RCU_GPB_st_less_seqcst;
1114 typedef cc::SplitListMap< rcu_gpt, Key, Value, SplitList_Lazy_st_less_seqcst > SplitList_Lazy_RCU_GPT_st_less_seqcst;
1115 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
1116 typedef cc::SplitListMap< rcu_shb, Key, Value, SplitList_Lazy_st_less_seqcst > SplitList_Lazy_RCU_SHB_st_less_seqcst;
1117 typedef cc::SplitListMap< rcu_sht, Key, Value, SplitList_Lazy_st_less_seqcst > SplitList_Lazy_RCU_SHT_st_less_seqcst;
1122 // ***************************************************************************
1125 // for sequential containers
1126 template <class BucketEntry, typename... Options>
1127 class StripedHashMap_seq:
1128 public cc::StripedMap< BucketEntry,
1129 co::mutex_policy< cc::striped_set::striping<> >
1130 ,co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
1134 typedef cc::StripedMap< BucketEntry,
1135 co::mutex_policy< cc::striped_set::striping<> >
1136 ,co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
1139 typedef typename base_class::resizing_policy resizing_policy_t;
1141 resizing_policy_t m_placeHolder;
1143 StripedHashMap_seq( size_t nCapacity, size_t nLoadFactor )
1144 : base_class( nCapacity / nLoadFactor / 16, *(new(&m_placeHolder) resizing_policy_t( nLoadFactor )) )
1148 // for non-sequential ordered containers
1149 template <class BucketEntry, typename... Options>
1150 class StripedHashMap_ord:
1151 public cc::StripedMap< BucketEntry,
1152 co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
1153 ,co::mutex_policy< cc::striped_set::striping<> >
1157 typedef cc::StripedMap< BucketEntry,
1158 co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
1159 ,co::mutex_policy< cc::striped_set::striping<> >
1162 typedef typename base_class::resizing_policy resizing_policy_t;
1164 resizing_policy_t m_placeHolder;
1166 StripedHashMap_ord( size_t nCapacity, size_t nLoadFactor )
1167 : base_class( 0, *(new(&m_placeHolder) resizing_policy_t( nLoadFactor * 1024 )) )
1172 typedef StripedHashMap_seq<
1173 std::list< std::pair< Key const, Value > >
1178 #if (CDS_COMPILER == CDS_COMPILER_MSVC || (CDS_COMPILER == CDS_COMPILER_INTEL && CDS_OS_INTERFACE == CDS_OSI_WINDOWS)) && _MSC_VER < 1600
1179 typedef StripedHashMap_ord<
1180 stdext::hash_map< Key, Value, stdext::hash_compare<Key, less > >
1182 > StripedMap_hashmap;
1184 typedef StripedHashMap_ord<
1185 std::unordered_map< Key, Value, hash, equal_to >
1187 > StripedMap_hashmap;
1190 typedef StripedHashMap_ord<
1191 std::map< Key, Value, less >
1195 typedef StripedHashMap_ord<
1196 boost::unordered_map< Key, Value, hash, equal_to >
1198 > StripedMap_boost_unordered_map;
1200 #if BOOST_VERSION >= 104800
1201 typedef StripedHashMap_seq<
1202 boost::container::slist< std::pair< Key const, Value > >
1207 typedef StripedHashMap_seq<
1208 boost::container::list< std::pair< Key const, Value > >
1211 > StripedMap_boost_list;
1213 typedef StripedHashMap_ord<
1214 boost::container::map< Key, Value, less >
1216 > StripedMap_boost_map;
1218 //# ifdef CDS_UNIT_MAP_TYPES_ENABLE_BOOST_FLAT_CONTAINERS
1219 typedef StripedHashMap_ord<
1220 boost::container::flat_map< Key, Value, less >
1222 > StripedMap_boost_flat_map;
1224 #endif // BOOST_VERSION >= 104800
1226 // ***************************************************************************
1229 // for sequential containers
1230 template <class BucketEntry, typename... Options>
1231 class RefinableHashMap_seq:
1232 public cc::StripedMap< BucketEntry,
1233 co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
1234 ,co::mutex_policy< cc::striped_set::refinable<> >
1238 typedef cc::StripedMap< BucketEntry,
1239 co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
1240 ,co::mutex_policy< cc::striped_set::refinable<> >
1243 typedef typename base_class::resizing_policy resizing_policy_t;
1245 resizing_policy_t m_placeHolder;
1247 RefinableHashMap_seq( size_t nCapacity, size_t nLoadFactor )
1248 : base_class( nCapacity / nLoadFactor / 16, *(new(&m_placeHolder) resizing_policy_t( nLoadFactor )) )
1252 // for non-sequential ordered containers
1253 template <class BucketEntry, typename... Options>
1254 class RefinableHashMap_ord:
1255 public cc::StripedMap< BucketEntry,
1256 co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
1257 ,co::mutex_policy< cc::striped_set::refinable<> >
1261 typedef cc::StripedMap< BucketEntry,
1262 co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
1263 ,co::mutex_policy< cc::striped_set::refinable<> >
1266 typedef typename base_class::resizing_policy resizing_policy_t;
1268 resizing_policy_t m_placeHolder;
1270 RefinableHashMap_ord( size_t nCapacity, size_t nLoadFactor )
1271 : base_class( 0, *(new(&m_placeHolder) resizing_policy_t( nLoadFactor * 1024 )) )
1276 typedef RefinableHashMap_seq<
1277 std::list< std::pair< Key const, Value > >
1280 > RefinableMap_list;
1282 #if BOOST_VERSION >= 104800
1283 typedef RefinableHashMap_seq<
1284 boost::container::slist< std::pair< Key const, Value > >
1287 > RefinableMap_slist;
1290 typedef RefinableHashMap_ord<
1291 std::map< Key, Value, less >
1295 #if (CDS_COMPILER == CDS_COMPILER_MSVC || (CDS_COMPILER == CDS_COMPILER_INTEL && CDS_OS_INTERFACE == CDS_OSI_WINDOWS)) && _MSC_VER < 1600
1296 typedef RefinableHashMap_ord<
1297 stdext::hash_map< Key, Value, stdext::hash_compare<Key, less > >
1299 > RefinableMap_hashmap;
1301 typedef RefinableHashMap_ord<
1302 std::unordered_map< Key, Value, hash, equal_to >
1304 > RefinableMap_hashmap;
1306 typedef RefinableHashMap_ord<
1307 boost::unordered_map< Key, Value, hash, equal_to >
1309 > RefinableMap_boost_unordered_map;
1311 #if BOOST_VERSION >= 104800
1312 typedef RefinableHashMap_seq<
1313 boost::container::list< std::pair< Key const, Value > >
1316 > RefinableMap_boost_list;
1318 typedef RefinableHashMap_ord<
1319 boost::container::map< Key, Value, less >
1321 > RefinableMap_boost_map;
1323 //# ifdef CDS_UNIT_MAP_TYPES_ENABLE_BOOST_FLAT_CONTAINERS
1324 typedef RefinableHashMap_ord<
1325 boost::container::flat_map< Key, Value, less >
1327 > RefinableMap_boost_flat_map;
1329 #endif // #if BOOST_VERSION >= 104800
1332 // ***************************************************************************
1335 typedef CuckooStripedMap< Key, Value,
1336 cc::cuckoo::probeset_type< cc::cuckoo::list >
1337 ,co::equal_to< equal_to >
1338 ,co::hash< std::tuple< hash, hash2 > >
1339 > CuckooStripedMap_list_unord;
1341 typedef CuckooStripedMap< Key, Value,
1342 cc::cuckoo::probeset_type< cc::cuckoo::list >
1343 ,co::equal_to< equal_to >
1344 ,co::hash< std::tuple< hash, hash2 > >
1345 ,co::stat< cc::cuckoo::stat >
1346 > CuckooStripedMap_list_unord_stat;
1348 typedef CuckooStripedMap< Key, Value,
1349 cc::cuckoo::probeset_type< cc::cuckoo::list >
1350 ,co::equal_to< equal_to >
1351 ,co::hash< std::tuple< hash, hash2 > >
1352 ,cc::cuckoo::store_hash< true >
1353 > CuckooStripedMap_list_unord_storehash;
1355 typedef CuckooStripedMap< Key, Value,
1356 cc::cuckoo::probeset_type< cc::cuckoo::list >
1357 ,co::compare< compare >
1358 ,co::hash< std::tuple< hash, hash2 > >
1359 > CuckooStripedMap_list_ord;
1361 typedef CuckooStripedMap< Key, Value,
1362 cc::cuckoo::probeset_type< cc::cuckoo::list >
1363 ,co::compare< compare >
1364 ,co::hash< std::tuple< hash, hash2 > >
1365 ,co::stat< cc::cuckoo::stat >
1366 > CuckooStripedMap_list_ord_stat;
1368 typedef CuckooStripedMap< Key, Value,
1369 cc::cuckoo::probeset_type< cc::cuckoo::list >
1370 ,co::compare< compare >
1371 ,co::hash< std::tuple< hash, hash2 > >
1372 ,cc::cuckoo::store_hash< true >
1373 > CuckooStripedMap_list_ord_storehash;
1375 typedef CuckooStripedMap< Key, Value,
1376 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
1377 ,co::equal_to< equal_to >
1378 ,co::hash< std::tuple< hash, hash2 > >
1379 > CuckooStripedMap_vector_unord;
1381 typedef CuckooStripedMap< Key, Value,
1382 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
1383 ,co::equal_to< equal_to >
1384 ,co::hash< std::tuple< hash, hash2 > >
1385 ,co::stat< cc::cuckoo::stat >
1386 > CuckooStripedMap_vector_unord_stat;
1388 typedef CuckooStripedMap< Key, Value,
1389 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
1390 ,co::equal_to< equal_to >
1391 ,co::hash< std::tuple< hash, hash2 > >
1392 ,cc::cuckoo::store_hash< true >
1393 > CuckooStripedMap_vector_unord_storehash;
1395 typedef CuckooStripedMap< Key, Value,
1396 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
1397 ,co::compare< compare >
1398 ,co::hash< std::tuple< hash, hash2 > >
1399 > CuckooStripedMap_vector_ord;
1401 typedef CuckooStripedMap< Key, Value,
1402 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
1403 ,co::compare< compare >
1404 ,co::hash< std::tuple< hash, hash2 > >
1405 ,co::stat< cc::cuckoo::stat >
1406 > CuckooStripedMap_vector_ord_stat;
1408 typedef CuckooStripedMap< Key, Value,
1409 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
1410 ,co::compare< compare >
1411 ,co::hash< std::tuple< hash, hash2 > >
1412 ,cc::cuckoo::store_hash< true >
1413 > CuckooStripedMap_vector_ord_storehash;
1415 typedef CuckooRefinableMap< Key, Value,
1416 cc::cuckoo::probeset_type< cc::cuckoo::list >
1417 ,co::equal_to< equal_to >
1418 ,co::hash< std::tuple< hash, hash2 > >
1419 > CuckooRefinableMap_list_unord;
1421 typedef CuckooRefinableMap< Key, Value,
1422 cc::cuckoo::probeset_type< cc::cuckoo::list >
1423 ,co::equal_to< equal_to >
1424 ,co::hash< std::tuple< hash, hash2 > >
1425 ,co::stat< cc::cuckoo::stat >
1426 > CuckooRefinableMap_list_unord_stat;
1428 typedef CuckooRefinableMap< Key, Value,
1429 cc::cuckoo::probeset_type< cc::cuckoo::list >
1430 ,co::equal_to< equal_to >
1431 ,co::hash< std::tuple< hash, hash2 > >
1432 ,cc::cuckoo::store_hash< true >
1433 > CuckooRefinableMap_list_unord_storehash;
1435 typedef CuckooRefinableMap< Key, Value,
1436 cc::cuckoo::probeset_type< cc::cuckoo::list >
1437 ,co::compare< compare >
1438 ,co::hash< std::tuple< hash, hash2 > >
1439 > CuckooRefinableMap_list_ord;
1441 typedef CuckooRefinableMap< Key, Value,
1442 cc::cuckoo::probeset_type< cc::cuckoo::list >
1443 ,co::compare< compare >
1444 ,co::hash< std::tuple< hash, hash2 > >
1445 ,co::stat< cc::cuckoo::stat >
1446 > CuckooRefinableMap_list_ord_stat;
1448 typedef CuckooRefinableMap< Key, Value,
1449 cc::cuckoo::probeset_type< cc::cuckoo::list >
1450 ,co::compare< compare >
1451 ,co::hash< std::tuple< hash, hash2 > >
1452 ,cc::cuckoo::store_hash< true >
1453 > CuckooRefinableMap_list_ord_storehash;
1455 typedef CuckooRefinableMap< Key, Value,
1456 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
1457 ,co::equal_to< equal_to >
1458 ,co::hash< std::tuple< hash, hash2 > >
1459 > CuckooRefinableMap_vector_unord;
1461 typedef CuckooRefinableMap< Key, Value,
1462 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
1463 ,co::equal_to< equal_to >
1464 ,co::hash< std::tuple< hash, hash2 > >
1465 ,co::stat< cc::cuckoo::stat >
1466 > CuckooRefinableMap_vector_unord_stat;
1468 typedef CuckooRefinableMap< Key, Value,
1469 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
1470 ,co::equal_to< equal_to >
1471 ,co::hash< std::tuple< hash, hash2 > >
1472 ,cc::cuckoo::store_hash< true >
1473 > CuckooRefinableMap_vector_unord_storehash;
1475 typedef CuckooRefinableMap< Key, Value,
1476 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
1477 ,co::compare< compare >
1478 ,co::hash< std::tuple< hash, hash2 > >
1479 > CuckooRefinableMap_vector_ord;
1481 typedef CuckooRefinableMap< Key, Value,
1482 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
1483 ,co::compare< compare >
1484 ,co::hash< std::tuple< hash, hash2 > >
1485 ,co::stat< cc::cuckoo::stat >
1486 > CuckooRefinableMap_vector_ord_stat;
1488 typedef CuckooRefinableMap< Key, Value,
1489 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
1490 ,co::compare< compare >
1491 ,co::hash< std::tuple< hash, hash2 > >
1492 ,cc::cuckoo::store_hash< true >
1493 > CuckooRefinableMap_vector_ord_storehash;
1495 // ***************************************************************************
1498 class traits_SkipListMap_hp_less_pascal: public cc::skip_list::make_traits <
1500 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
1501 ,co::item_counter< cds::atomicity::item_counter >
1504 typedef cc::SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_hp_less_pascal > SkipListMap_hp_less_pascal;
1506 class traits_SkipListMap_hp_less_pascal_seqcst: public cc::skip_list::make_traits <
1508 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
1509 ,co::memory_model< co::v::sequential_consistent >
1510 ,co::item_counter< cds::atomicity::item_counter >
1513 typedef cc::SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_hp_less_pascal_seqcst > SkipListMap_hp_less_pascal_seqcst;
1515 class traits_SkipListMap_hp_less_pascal_stat: public cc::skip_list::make_traits <
1517 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
1518 ,co::stat< cc::skip_list::stat<> >
1519 ,co::item_counter< cds::atomicity::item_counter >
1522 typedef cc::SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_hp_less_pascal_stat > SkipListMap_hp_less_pascal_stat;
1524 class traits_SkipListMap_hp_cmp_pascal: public cc::skip_list::make_traits <
1525 co::compare< compare >
1526 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
1527 ,co::item_counter< cds::atomicity::item_counter >
1530 typedef cc::SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_hp_cmp_pascal > SkipListMap_hp_cmp_pascal;
1532 class traits_SkipListMap_hp_cmp_pascal_stat: public cc::skip_list::make_traits <
1533 co::compare< compare >
1534 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
1535 ,co::stat< cc::skip_list::stat<> >
1536 ,co::item_counter< cds::atomicity::item_counter >
1539 typedef cc::SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_hp_cmp_pascal_stat > SkipListMap_hp_cmp_pascal_stat;
1541 class traits_SkipListMap_hp_less_xorshift: public cc::skip_list::make_traits <
1543 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
1544 ,co::item_counter< cds::atomicity::item_counter >
1547 typedef cc::SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_hp_less_xorshift > SkipListMap_hp_less_xorshift;
1549 class traits_SkipListMap_hp_less_xorshift_stat: public cc::skip_list::make_traits <
1551 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
1552 ,co::stat< cc::skip_list::stat<> >
1553 ,co::item_counter< cds::atomicity::item_counter >
1556 typedef cc::SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_hp_less_xorshift_stat > SkipListMap_hp_less_xorshift_stat;
1558 class traits_SkipListMap_hp_cmp_xorshift: public cc::skip_list::make_traits <
1559 co::compare< compare >
1560 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
1561 ,co::item_counter< cds::atomicity::item_counter >
1564 typedef cc::SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_hp_cmp_xorshift > SkipListMap_hp_cmp_xorshift;
1566 class traits_SkipListMap_hp_cmp_xorshift_stat: public cc::skip_list::make_traits <
1567 co::compare< compare >
1568 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
1569 ,co::stat< cc::skip_list::stat<> >
1570 ,co::item_counter< cds::atomicity::item_counter >
1573 typedef cc::SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_hp_cmp_xorshift_stat > SkipListMap_hp_cmp_xorshift_stat;
1575 // ***************************************************************************
1576 // SkipListMap - DHP
1578 class traits_SkipListMap_ptb_less_pascal: public cc::skip_list::make_traits <
1580 ,co::item_counter< cds::atomicity::item_counter >
1581 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
1584 typedef cc::SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_ptb_less_pascal > SkipListMap_ptb_less_pascal;
1586 class traits_SkipListMap_ptb_less_pascal_seqcst: public cc::skip_list::make_traits <
1588 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
1589 ,co::memory_model< co::v::sequential_consistent >
1590 ,co::item_counter< cds::atomicity::item_counter >
1593 typedef cc::SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_ptb_less_pascal_seqcst > SkipListMap_ptb_less_pascal_seqcst;
1595 class traits_SkipListMap_ptb_less_pascal_stat: public cc::skip_list::make_traits <
1597 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
1598 ,co::stat< cc::skip_list::stat<> >
1599 ,co::item_counter< cds::atomicity::item_counter >
1602 typedef cc::SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_ptb_less_pascal_stat > SkipListMap_ptb_less_pascal_stat;
1604 class traits_SkipListMap_ptb_cmp_pascal: public cc::skip_list::make_traits <
1605 co::compare< compare >
1606 ,co::item_counter< cds::atomicity::item_counter >
1607 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
1610 typedef cc::SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_ptb_cmp_pascal > SkipListMap_ptb_cmp_pascal;
1612 class traits_SkipListMap_ptb_cmp_pascal_stat: public cc::skip_list::make_traits <
1613 co::compare< compare >
1614 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
1615 ,co::item_counter< cds::atomicity::item_counter >
1616 ,co::stat< cc::skip_list::stat<> >
1619 typedef cc::SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_ptb_cmp_pascal_stat > SkipListMap_ptb_cmp_pascal_stat;
1621 class traits_SkipListMap_ptb_less_xorshift: public cc::skip_list::make_traits <
1623 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
1624 ,co::item_counter< cds::atomicity::item_counter >
1627 typedef cc::SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_ptb_less_xorshift > SkipListMap_ptb_less_xorshift;
1629 class traits_SkipListMap_ptb_less_xorshift_stat: public cc::skip_list::make_traits <
1631 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
1632 ,co::stat< cc::skip_list::stat<> >
1633 ,co::item_counter< cds::atomicity::item_counter >
1636 typedef cc::SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_ptb_less_xorshift_stat > SkipListMap_ptb_less_xorshift_stat;
1638 class traits_SkipListMap_ptb_cmp_xorshift: public cc::skip_list::make_traits <
1639 co::compare< compare >
1640 ,co::item_counter< cds::atomicity::item_counter >
1641 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
1644 typedef cc::SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_ptb_cmp_xorshift > SkipListMap_ptb_cmp_xorshift;
1646 class traits_SkipListMap_ptb_cmp_xorshift_stat: public cc::skip_list::make_traits <
1647 co::compare< compare >
1648 ,co::item_counter< cds::atomicity::item_counter >
1649 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
1650 ,co::stat< cc::skip_list::stat<> >
1653 typedef cc::SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_ptb_cmp_xorshift_stat > SkipListMap_ptb_cmp_xorshift_stat;
1655 // ***************************************************************************
1656 // SkipListMap< gc::nogc >
1658 class traits_SkipListMap_nogc_less_pascal: public cc::skip_list::make_traits <
1660 ,co::item_counter< cds::atomicity::item_counter >
1661 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
1664 typedef NogcMapWrapper_dctor<
1665 cc::SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_nogc_less_pascal >
1666 > SkipListMap_nogc_less_pascal;
1668 class traits_SkipListMap_nogc_less_pascal_seqcst: public cc::skip_list::make_traits <
1670 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
1671 ,co::memory_model< co::v::sequential_consistent >
1672 ,co::item_counter< cds::atomicity::item_counter >
1675 typedef NogcMapWrapper_dctor<
1676 cc::SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_nogc_less_pascal_seqcst >
1677 > SkipListMap_nogc_less_pascal_seqcst;
1679 class traits_SkipListMap_nogc_less_pascal_stat: public cc::skip_list::make_traits <
1681 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
1682 ,co::stat< cc::skip_list::stat<> >
1683 ,co::item_counter< cds::atomicity::item_counter >
1686 typedef NogcMapWrapper_dctor<
1687 cc::SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_nogc_less_pascal_stat >
1688 > SkipListMap_nogc_less_pascal_stat;
1690 class traits_SkipListMap_nogc_cmp_pascal: public cc::skip_list::make_traits <
1691 co::compare< compare >
1692 ,co::item_counter< cds::atomicity::item_counter >
1693 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
1696 typedef NogcMapWrapper_dctor<
1697 cc::SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_nogc_cmp_pascal >
1698 > SkipListMap_nogc_cmp_pascal;
1700 class traits_SkipListMap_nogc_cmp_pascal_stat: public cc::skip_list::make_traits <
1701 co::compare< compare >
1702 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
1703 ,co::item_counter< cds::atomicity::item_counter >
1704 ,co::stat< cc::skip_list::stat<> >
1707 typedef NogcMapWrapper_dctor<
1708 cc::SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_nogc_cmp_pascal_stat >
1709 > SkipListMap_nogc_cmp_pascal_stat;
1711 class traits_SkipListMap_nogc_less_xorshift: public cc::skip_list::make_traits <
1713 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
1714 ,co::item_counter< cds::atomicity::item_counter >
1717 typedef NogcMapWrapper_dctor<
1718 cc::SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_nogc_less_xorshift >
1719 > SkipListMap_nogc_less_xorshift;
1721 class traits_SkipListMap_nogc_less_xorshift_stat: public cc::skip_list::make_traits <
1723 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
1724 ,co::stat< cc::skip_list::stat<> >
1725 ,co::item_counter< cds::atomicity::item_counter >
1728 typedef NogcMapWrapper_dctor<
1729 cc::SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_nogc_less_xorshift_stat >
1730 > SkipListMap_nogc_less_xorshift_stat;
1732 class traits_SkipListMap_nogc_cmp_xorshift: public cc::skip_list::make_traits <
1733 co::compare< compare >
1734 ,co::item_counter< cds::atomicity::item_counter >
1735 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
1738 typedef NogcMapWrapper_dctor< cc::SkipListMap<
1739 cds::gc::nogc, Key, Value, traits_SkipListMap_nogc_cmp_xorshift >
1740 > SkipListMap_nogc_cmp_xorshift;
1742 class traits_SkipListMap_nogc_cmp_xorshift_stat: public cc::skip_list::make_traits <
1743 co::compare< compare >
1744 ,co::item_counter< cds::atomicity::item_counter >
1745 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
1746 ,co::stat< cc::skip_list::stat<> >
1749 typedef NogcMapWrapper_dctor<
1750 cc::SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_nogc_cmp_xorshift_stat >
1751 > SkipListMap_nogc_cmp_xorshift_stat;
1753 // ***************************************************************************
1754 // SkipListMap - RCU general_instant
1756 class traits_SkipListMap_rcu_gpi_less_pascal: public cc::skip_list::make_traits <
1758 ,co::item_counter< cds::atomicity::item_counter >
1759 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
1762 typedef cc::SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_rcu_gpi_less_pascal > SkipListMap_rcu_gpi_less_pascal;
1764 class traits_SkipListMap_rcu_gpi_less_pascal_seqcst: public cc::skip_list::make_traits <
1766 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
1767 ,co::memory_model< co::v::sequential_consistent >
1768 ,co::item_counter< cds::atomicity::item_counter >
1771 typedef cc::SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_rcu_gpi_less_pascal_seqcst > SkipListMap_rcu_gpi_less_pascal_seqcst;
1773 class traits_SkipListMap_rcu_gpi_less_pascal_stat: public cc::skip_list::make_traits <
1775 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
1776 ,co::stat< cc::skip_list::stat<> >
1777 ,co::item_counter< cds::atomicity::item_counter >
1780 typedef cc::SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_rcu_gpi_less_pascal_stat > SkipListMap_rcu_gpi_less_pascal_stat;
1782 class traits_SkipListMap_rcu_gpi_cmp_pascal: public cc::skip_list::make_traits <
1783 co::compare< compare >
1784 ,co::item_counter< cds::atomicity::item_counter >
1785 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
1788 typedef cc::SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_rcu_gpi_cmp_pascal > SkipListMap_rcu_gpi_cmp_pascal;
1790 class traits_SkipListMap_rcu_gpi_cmp_pascal_stat: public cc::skip_list::make_traits <
1791 co::compare< compare >
1792 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
1793 ,co::item_counter< cds::atomicity::item_counter >
1794 ,co::stat< cc::skip_list::stat<> >
1797 typedef cc::SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_rcu_gpi_cmp_pascal_stat > SkipListMap_rcu_gpi_cmp_pascal_stat;
1799 class traits_SkipListMap_rcu_gpi_less_xorshift: public cc::skip_list::make_traits <
1801 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
1802 ,co::item_counter< cds::atomicity::item_counter >
1805 typedef cc::SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_rcu_gpi_less_xorshift > SkipListMap_rcu_gpi_less_xorshift;
1807 class traits_SkipListMap_rcu_gpi_less_xorshift_stat: public cc::skip_list::make_traits <
1809 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
1810 ,co::stat< cc::skip_list::stat<> >
1811 ,co::item_counter< cds::atomicity::item_counter >
1814 typedef cc::SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_rcu_gpi_less_xorshift_stat > SkipListMap_rcu_gpi_less_xorshift_stat;
1816 class traits_SkipListMap_rcu_gpi_cmp_xorshift: public cc::skip_list::make_traits <
1817 co::compare< compare >
1818 ,co::item_counter< cds::atomicity::item_counter >
1819 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
1822 typedef cc::SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_rcu_gpi_cmp_xorshift > SkipListMap_rcu_gpi_cmp_xorshift;
1824 class traits_SkipListMap_rcu_gpi_cmp_xorshift_stat: public cc::skip_list::make_traits <
1825 co::compare< compare >
1826 ,co::item_counter< cds::atomicity::item_counter >
1827 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
1828 ,co::stat< cc::skip_list::stat<> >
1831 typedef cc::SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_rcu_gpi_cmp_xorshift_stat > SkipListMap_rcu_gpi_cmp_xorshift_stat;
1833 // ***************************************************************************
1834 // SkipListMap - RCU general_buffered
1836 class traits_SkipListMap_rcu_gpb_less_pascal: public cc::skip_list::make_traits <
1838 ,co::item_counter< cds::atomicity::item_counter >
1839 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
1842 typedef cc::SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_rcu_gpb_less_pascal > SkipListMap_rcu_gpb_less_pascal;
1844 class traits_SkipListMap_rcu_gpb_less_pascal_seqcst: public cc::skip_list::make_traits <
1846 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
1847 ,co::memory_model< co::v::sequential_consistent >
1848 ,co::item_counter< cds::atomicity::item_counter >
1851 typedef cc::SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_rcu_gpb_less_pascal_seqcst > SkipListMap_rcu_gpb_less_pascal_seqcst;
1853 class traits_SkipListMap_rcu_gpb_less_pascal_stat: public cc::skip_list::make_traits <
1855 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
1856 ,co::stat< cc::skip_list::stat<> >
1857 ,co::item_counter< cds::atomicity::item_counter >
1860 typedef cc::SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_rcu_gpb_less_pascal_stat > SkipListMap_rcu_gpb_less_pascal_stat;
1862 class traits_SkipListMap_rcu_gpb_cmp_pascal: public cc::skip_list::make_traits <
1863 co::compare< compare >
1864 ,co::item_counter< cds::atomicity::item_counter >
1865 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
1868 typedef cc::SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_rcu_gpb_cmp_pascal > SkipListMap_rcu_gpb_cmp_pascal;
1870 class traits_SkipListMap_rcu_gpb_cmp_pascal_stat: public cc::skip_list::make_traits <
1871 co::compare< compare >
1872 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
1873 ,co::item_counter< cds::atomicity::item_counter >
1874 ,co::stat< cc::skip_list::stat<> >
1877 typedef cc::SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_rcu_gpb_cmp_pascal_stat > SkipListMap_rcu_gpb_cmp_pascal_stat;
1879 class traits_SkipListMap_rcu_gpb_less_xorshift: public cc::skip_list::make_traits <
1881 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
1882 ,co::item_counter< cds::atomicity::item_counter >
1885 typedef cc::SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_rcu_gpb_less_xorshift > SkipListMap_rcu_gpb_less_xorshift;
1887 class traits_SkipListMap_rcu_gpb_less_xorshift_stat: public cc::skip_list::make_traits <
1889 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
1890 ,co::stat< cc::skip_list::stat<> >
1891 ,co::item_counter< cds::atomicity::item_counter >
1894 typedef cc::SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_rcu_gpb_less_xorshift_stat > SkipListMap_rcu_gpb_less_xorshift_stat;
1896 class traits_SkipListMap_rcu_gpb_cmp_xorshift: public cc::skip_list::make_traits <
1897 co::compare< compare >
1898 ,co::item_counter< cds::atomicity::item_counter >
1899 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
1902 typedef cc::SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_rcu_gpb_cmp_xorshift > SkipListMap_rcu_gpb_cmp_xorshift;
1904 class traits_SkipListMap_rcu_gpb_cmp_xorshift_stat: public cc::skip_list::make_traits <
1905 co::compare< compare >
1906 ,co::item_counter< cds::atomicity::item_counter >
1907 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
1908 ,co::stat< cc::skip_list::stat<> >
1911 typedef cc::SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_rcu_gpb_cmp_xorshift_stat > SkipListMap_rcu_gpb_cmp_xorshift_stat;
1913 // ***************************************************************************
1914 // SkipListMap - RCU general_threaded
1916 class traits_SkipListMap_rcu_gpt_less_pascal: public cc::skip_list::make_traits <
1918 ,co::item_counter< cds::atomicity::item_counter >
1919 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
1922 typedef cc::SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_rcu_gpt_less_pascal > SkipListMap_rcu_gpt_less_pascal;
1924 class traits_SkipListMap_rcu_gpt_less_pascal_seqcst: public cc::skip_list::make_traits <
1926 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
1927 ,co::memory_model< co::v::sequential_consistent >
1928 ,co::item_counter< cds::atomicity::item_counter >
1931 typedef cc::SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_rcu_gpt_less_pascal_seqcst > SkipListMap_rcu_gpt_less_pascal_seqcst;
1933 class traits_SkipListMap_rcu_gpt_less_pascal_stat: public cc::skip_list::make_traits <
1935 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
1936 ,co::stat< cc::skip_list::stat<> >
1937 ,co::item_counter< cds::atomicity::item_counter >
1940 typedef cc::SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_rcu_gpt_less_pascal_stat > SkipListMap_rcu_gpt_less_pascal_stat;
1942 class traits_SkipListMap_rcu_gpt_cmp_pascal: public cc::skip_list::make_traits <
1943 co::compare< compare >
1944 ,co::item_counter< cds::atomicity::item_counter >
1945 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
1948 typedef cc::SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_rcu_gpt_cmp_pascal > SkipListMap_rcu_gpt_cmp_pascal;
1950 class traits_SkipListMap_rcu_gpt_cmp_pascal_stat: public cc::skip_list::make_traits <
1951 co::compare< compare >
1952 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
1953 ,co::item_counter< cds::atomicity::item_counter >
1954 ,co::stat< cc::skip_list::stat<> >
1957 typedef cc::SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_rcu_gpt_cmp_pascal_stat > SkipListMap_rcu_gpt_cmp_pascal_stat;
1959 class traits_SkipListMap_rcu_gpt_less_xorshift: public cc::skip_list::make_traits <
1961 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
1962 ,co::item_counter< cds::atomicity::item_counter >
1965 typedef cc::SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_rcu_gpt_less_xorshift > SkipListMap_rcu_gpt_less_xorshift;
1967 class traits_SkipListMap_rcu_gpt_less_xorshift_stat: public cc::skip_list::make_traits <
1969 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
1970 ,co::stat< cc::skip_list::stat<> >
1971 ,co::item_counter< cds::atomicity::item_counter >
1974 typedef cc::SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_rcu_gpt_less_xorshift_stat > SkipListMap_rcu_gpt_less_xorshift_stat;
1976 class traits_SkipListMap_rcu_gpt_cmp_xorshift: public cc::skip_list::make_traits <
1977 co::compare< compare >
1978 ,co::item_counter< cds::atomicity::item_counter >
1979 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
1982 typedef cc::SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_rcu_gpt_cmp_xorshift > SkipListMap_rcu_gpt_cmp_xorshift;
1984 class traits_SkipListMap_rcu_gpt_cmp_xorshift_stat: public cc::skip_list::make_traits <
1985 co::compare< compare >
1986 ,co::item_counter< cds::atomicity::item_counter >
1987 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
1988 ,co::stat< cc::skip_list::stat<> >
1991 typedef cc::SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_rcu_gpt_cmp_xorshift_stat > SkipListMap_rcu_gpt_cmp_xorshift_stat;
1993 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
1994 // ***************************************************************************
1995 // SkipListMap - RCU signal_buffered
1997 class traits_SkipListMap_rcu_shb_less_pascal: public cc::skip_list::make_traits <
1999 ,co::item_counter< cds::atomicity::item_counter >
2000 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
2003 typedef cc::SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_rcu_shb_less_pascal > SkipListMap_rcu_shb_less_pascal;
2005 class traits_SkipListMap_rcu_shb_less_pascal_seqcst: public cc::skip_list::make_traits <
2007 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
2008 ,co::memory_model< co::v::sequential_consistent >
2009 ,co::item_counter< cds::atomicity::item_counter >
2012 typedef cc::SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_rcu_shb_less_pascal_seqcst > SkipListMap_rcu_shb_less_pascal_seqcst;
2014 class traits_SkipListMap_rcu_shb_less_pascal_stat: public cc::skip_list::make_traits <
2016 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
2017 ,co::stat< cc::skip_list::stat<> >
2018 ,co::item_counter< cds::atomicity::item_counter >
2021 typedef cc::SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_rcu_shb_less_pascal_stat > SkipListMap_rcu_shb_less_pascal_stat;
2023 class traits_SkipListMap_rcu_shb_cmp_pascal: public cc::skip_list::make_traits <
2024 co::compare< compare >
2025 ,co::item_counter< cds::atomicity::item_counter >
2026 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
2029 typedef cc::SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_rcu_shb_cmp_pascal > SkipListMap_rcu_shb_cmp_pascal;
2031 class traits_SkipListMap_rcu_shb_cmp_pascal_stat: public cc::skip_list::make_traits <
2032 co::compare< compare >
2033 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
2034 ,co::item_counter< cds::atomicity::item_counter >
2035 ,co::stat< cc::skip_list::stat<> >
2038 typedef cc::SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_rcu_shb_cmp_pascal_stat > SkipListMap_rcu_shb_cmp_pascal_stat;
2040 class traits_SkipListMap_rcu_shb_less_xorshift: public cc::skip_list::make_traits <
2042 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
2043 ,co::item_counter< cds::atomicity::item_counter >
2046 typedef cc::SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_rcu_shb_less_xorshift > SkipListMap_rcu_shb_less_xorshift;
2048 class traits_SkipListMap_rcu_shb_less_xorshift_stat: public cc::skip_list::make_traits <
2050 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
2051 ,co::stat< cc::skip_list::stat<> >
2052 ,co::item_counter< cds::atomicity::item_counter >
2055 typedef cc::SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_rcu_shb_less_xorshift_stat > SkipListMap_rcu_shb_less_xorshift_stat;
2057 class traits_SkipListMap_rcu_shb_cmp_xorshift: public cc::skip_list::make_traits <
2058 co::compare< compare >
2059 ,co::item_counter< cds::atomicity::item_counter >
2060 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
2063 typedef cc::SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_rcu_shb_cmp_xorshift > SkipListMap_rcu_shb_cmp_xorshift;
2065 class traits_SkipListMap_rcu_shb_cmp_xorshift_stat: public cc::skip_list::make_traits <
2066 co::compare< compare >
2067 ,co::item_counter< cds::atomicity::item_counter >
2068 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
2069 ,co::stat< cc::skip_list::stat<> >
2072 typedef cc::SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_rcu_shb_cmp_xorshift_stat > SkipListMap_rcu_shb_cmp_xorshift_stat;
2074 // ***************************************************************************
2075 // SkipListMap - RCU signal_threaded
2077 class traits_SkipListMap_rcu_sht_less_pascal: public cc::skip_list::make_traits <
2079 ,co::item_counter< cds::atomicity::item_counter >
2080 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
2083 typedef cc::SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_rcu_sht_less_pascal > SkipListMap_rcu_sht_less_pascal;
2085 class traits_SkipListMap_rcu_sht_less_pascal_seqcst: public cc::skip_list::make_traits <
2087 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
2088 ,co::memory_model< co::v::sequential_consistent >
2089 ,co::item_counter< cds::atomicity::item_counter >
2092 typedef cc::SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_rcu_sht_less_pascal_seqcst > SkipListMap_rcu_sht_less_pascal_seqcst;
2094 class traits_SkipListMap_rcu_sht_less_pascal_stat: public cc::skip_list::make_traits <
2096 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
2097 ,co::stat< cc::skip_list::stat<> >
2098 ,co::item_counter< cds::atomicity::item_counter >
2101 typedef cc::SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_rcu_sht_less_pascal_stat > SkipListMap_rcu_sht_less_pascal_stat;
2103 class traits_SkipListMap_rcu_sht_cmp_pascal: public cc::skip_list::make_traits <
2104 co::compare< compare >
2105 ,co::item_counter< cds::atomicity::item_counter >
2106 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
2109 typedef cc::SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_rcu_sht_cmp_pascal > SkipListMap_rcu_sht_cmp_pascal;
2111 class traits_SkipListMap_rcu_sht_cmp_pascal_stat: public cc::skip_list::make_traits <
2112 co::compare< compare >
2113 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
2114 ,co::item_counter< cds::atomicity::item_counter >
2115 ,co::stat< cc::skip_list::stat<> >
2118 typedef cc::SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_rcu_sht_cmp_pascal_stat > SkipListMap_rcu_sht_cmp_pascal_stat;
2120 class traits_SkipListMap_rcu_sht_less_xorshift: public cc::skip_list::make_traits <
2122 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
2123 ,co::item_counter< cds::atomicity::item_counter >
2126 typedef cc::SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_rcu_sht_less_xorshift > SkipListMap_rcu_sht_less_xorshift;
2128 class traits_SkipListMap_rcu_sht_less_xorshift_stat: public cc::skip_list::make_traits <
2130 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
2131 ,co::stat< cc::skip_list::stat<> >
2132 ,co::item_counter< cds::atomicity::item_counter >
2135 typedef cc::SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_rcu_sht_less_xorshift_stat > SkipListMap_rcu_sht_less_xorshift_stat;
2137 class traits_SkipListMap_rcu_sht_cmp_xorshift: public cc::skip_list::make_traits <
2138 co::compare< compare >
2139 ,co::item_counter< cds::atomicity::item_counter >
2140 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
2143 typedef cc::SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_rcu_sht_cmp_xorshift > SkipListMap_rcu_sht_cmp_xorshift;
2145 class traits_SkipListMap_rcu_sht_cmp_xorshift_stat: public cc::skip_list::make_traits <
2146 co::compare< compare >
2147 ,co::item_counter< cds::atomicity::item_counter >
2148 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
2149 ,co::stat< cc::skip_list::stat<> >
2152 typedef cc::SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_rcu_sht_cmp_xorshift_stat > SkipListMap_rcu_sht_cmp_xorshift_stat;
2156 // ***************************************************************************
2158 struct ellen_bintree_props {
2160 typedef cc::ellen_bintree::map_node<cds::gc::HP, Key, Value> leaf_node;
2161 typedef cc::ellen_bintree::internal_node< Key, leaf_node > internal_node;
2162 typedef cc::ellen_bintree::update_desc< leaf_node, internal_node > update_desc;
2165 typedef cc::ellen_bintree::map_node<cds::gc::DHP, Key, Value> leaf_node;
2166 typedef cc::ellen_bintree::internal_node< Key, leaf_node > internal_node;
2167 typedef cc::ellen_bintree::update_desc< leaf_node, internal_node > update_desc;
2170 typedef cc::ellen_bintree::map_node<rcu_gpi, Key, Value> leaf_node;
2171 typedef cc::ellen_bintree::internal_node< Key, leaf_node > internal_node;
2172 typedef cc::ellen_bintree::update_desc< leaf_node, internal_node > update_desc;
2175 typedef cc::ellen_bintree::map_node<rcu_gpb, Key, Value> leaf_node;
2176 typedef cc::ellen_bintree::internal_node< Key, leaf_node > internal_node;
2177 typedef cc::ellen_bintree::update_desc< leaf_node, internal_node > update_desc;
2180 typedef cc::ellen_bintree::map_node<rcu_gpt, Key, Value> leaf_node;
2181 typedef cc::ellen_bintree::internal_node< Key, leaf_node > internal_node;
2182 typedef cc::ellen_bintree::update_desc< leaf_node, internal_node > update_desc;
2184 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
2186 typedef cc::ellen_bintree::map_node<rcu_shb, Key, Value> leaf_node;
2187 typedef cc::ellen_bintree::internal_node< Key, leaf_node > internal_node;
2188 typedef cc::ellen_bintree::update_desc< leaf_node, internal_node > update_desc;
2191 typedef cc::ellen_bintree::map_node<rcu_sht, Key, Value> leaf_node;
2192 typedef cc::ellen_bintree::internal_node< Key, leaf_node > internal_node;
2193 typedef cc::ellen_bintree::update_desc< leaf_node, internal_node > update_desc;
2199 // ***************************************************************************
2200 // EllenBinTreeMap - HP
2202 struct traits_EllenBinTreeMap_hp: public cc::ellen_bintree::make_set_traits<
2204 ,cc::ellen_bintree::update_desc_allocator<
2205 cds::memory::pool_allocator< typename ellen_bintree_props::hp_gc::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
2207 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
2208 ,co::item_counter< cds::atomicity::item_counter >
2211 typedef cc::EllenBinTreeMap< cds::gc::HP, Key, Value, traits_EllenBinTreeMap_hp >EllenBinTreeMap_hp;
2213 struct traits_EllenBinTreeMap_hp_stat: public cc::ellen_bintree::make_set_traits<
2215 ,cc::ellen_bintree::update_desc_allocator<
2216 cds::memory::pool_allocator< typename ellen_bintree_props::hp_gc::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
2218 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
2219 ,co::stat< cc::ellen_bintree::stat<> >
2220 ,co::item_counter< cds::atomicity::item_counter >
2223 typedef cc::EllenBinTreeMap< cds::gc::HP, Key, Value, traits_EllenBinTreeMap_hp_stat > EllenBinTreeMap_hp_stat;
2225 // ***************************************************************************
2226 // EllenBinTreeMap - DHP
2228 struct traits_EllenBinTreeMap_ptb: public cc::ellen_bintree::make_set_traits<
2230 ,cc::ellen_bintree::update_desc_allocator<
2231 cds::memory::pool_allocator< typename ellen_bintree_props::ptb_gc::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
2233 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
2234 ,co::item_counter< cds::atomicity::item_counter >
2237 typedef cc::EllenBinTreeMap< cds::gc::DHP, Key, Value, traits_EllenBinTreeMap_ptb> EllenBinTreeMap_ptb;
2239 struct traits_EllenBinTreeMap_ptb_stat: public cc::ellen_bintree::make_set_traits<
2241 ,cc::ellen_bintree::update_desc_allocator<
2242 cds::memory::pool_allocator< typename ellen_bintree_props::ptb_gc::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
2244 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
2245 ,co::stat< cc::ellen_bintree::stat<> >
2246 ,co::item_counter< cds::atomicity::item_counter >
2249 typedef cc::EllenBinTreeMap< cds::gc::DHP, Key, Value, traits_EllenBinTreeMap_ptb_stat > EllenBinTreeMap_ptb_stat;
2251 // ***************************************************************************
2252 // EllenBinTreeMap - RCU
2254 struct traits_EllenBinTreeMap_rcu_gpi: public cc::ellen_bintree::make_set_traits<
2256 ,cc::ellen_bintree::update_desc_allocator<
2257 cds::memory::pool_allocator< typename ellen_bintree_props::gpi::update_desc, ellen_bintree_pool::bounded_update_desc_pool_accessor >
2259 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
2260 ,co::item_counter< cds::atomicity::item_counter >
2263 typedef cc::EllenBinTreeMap< rcu_gpi, Key, Value, traits_EllenBinTreeMap_rcu_gpi > EllenBinTreeMap_rcu_gpi;
2265 struct traits_EllenBinTreeMap_rcu_gpi_stat: public cc::ellen_bintree::make_set_traits<
2267 ,cc::ellen_bintree::update_desc_allocator<
2268 cds::memory::pool_allocator< typename ellen_bintree_props::gpi::update_desc, ellen_bintree_pool::bounded_update_desc_pool_accessor >
2270 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
2271 ,co::stat< cc::ellen_bintree::stat<> >
2272 ,co::item_counter< cds::atomicity::item_counter >
2275 typedef cc::EllenBinTreeMap< rcu_gpi, Key, Value, traits_EllenBinTreeMap_rcu_gpi_stat > EllenBinTreeMap_rcu_gpi_stat;
2277 struct traits_EllenBinTreeMap_rcu_gpb: public cc::ellen_bintree::make_set_traits<
2279 ,cc::ellen_bintree::update_desc_allocator<
2280 cds::memory::pool_allocator< typename ellen_bintree_props::gpb::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
2282 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
2283 ,co::item_counter< cds::atomicity::item_counter >
2286 typedef cc::EllenBinTreeMap< rcu_gpb, Key, Value, traits_EllenBinTreeMap_rcu_gpb > EllenBinTreeMap_rcu_gpb;
2288 struct traits_EllenBinTreeMap_rcu_gpb_stat: public cc::ellen_bintree::make_set_traits<
2290 ,cc::ellen_bintree::update_desc_allocator<
2291 cds::memory::pool_allocator< typename ellen_bintree_props::gpb::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
2293 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
2294 ,co::stat< cc::ellen_bintree::stat<> >
2295 ,co::item_counter< cds::atomicity::item_counter >
2298 typedef cc::EllenBinTreeMap< rcu_gpb, Key, Value, traits_EllenBinTreeMap_rcu_gpb_stat > EllenBinTreeMap_rcu_gpb_stat;
2300 struct traits_EllenBinTreeMap_rcu_gpt: public cc::ellen_bintree::make_set_traits<
2302 ,cc::ellen_bintree::update_desc_allocator<
2303 cds::memory::pool_allocator< typename ellen_bintree_props::gpt::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
2305 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
2306 ,co::item_counter< cds::atomicity::item_counter >
2309 typedef cc::EllenBinTreeMap< rcu_gpt, Key, Value, traits_EllenBinTreeMap_rcu_gpt > EllenBinTreeMap_rcu_gpt;
2311 struct traits_EllenBinTreeMap_rcu_gpt_stat: public cc::ellen_bintree::make_set_traits<
2313 ,cc::ellen_bintree::update_desc_allocator<
2314 cds::memory::pool_allocator< typename ellen_bintree_props::gpt::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
2316 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
2317 ,co::stat< cc::ellen_bintree::stat<> >
2318 ,co::item_counter< cds::atomicity::item_counter >
2321 typedef cc::EllenBinTreeMap< rcu_gpt, Key, Value, traits_EllenBinTreeMap_rcu_gpt_stat > EllenBinTreeMap_rcu_gpt_stat;
2323 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
2324 struct traits_EllenBinTreeMap_rcu_shb: public cc::ellen_bintree::make_set_traits<
2326 ,cc::ellen_bintree::update_desc_allocator<
2327 cds::memory::pool_allocator< typename ellen_bintree_props::shb::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
2329 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
2330 ,co::item_counter< cds::atomicity::item_counter >
2333 typedef cc::EllenBinTreeMap< rcu_shb, Key, Value, traits_EllenBinTreeMap_rcu_shb > EllenBinTreeMap_rcu_shb;
2335 struct traits_EllenBinTreeMap_rcu_shb_stat: public cc::ellen_bintree::make_set_traits<
2337 ,cc::ellen_bintree::update_desc_allocator<
2338 cds::memory::pool_allocator< typename ellen_bintree_props::shb::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
2340 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
2341 ,co::item_counter< cds::atomicity::item_counter >
2342 ,co::stat< cc::ellen_bintree::stat<> >
2345 typedef cc::EllenBinTreeMap< rcu_shb, Key, Value, traits_EllenBinTreeMap_rcu_shb_stat > EllenBinTreeMap_rcu_shb_stat;
2347 struct traits_EllenBinTreeMap_rcu_sht: public cc::ellen_bintree::make_set_traits<
2349 ,cc::ellen_bintree::update_desc_allocator<
2350 cds::memory::pool_allocator< typename ellen_bintree_props::sht::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
2352 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
2353 ,co::item_counter< cds::atomicity::item_counter >
2356 typedef cc::EllenBinTreeMap< rcu_sht, Key, Value, traits_EllenBinTreeMap_rcu_sht > EllenBinTreeMap_rcu_sht;
2358 struct traits_EllenBinTreeMap_rcu_sht_stat: public cc::ellen_bintree::make_set_traits<
2360 ,cc::ellen_bintree::update_desc_allocator<
2361 cds::memory::pool_allocator< typename ellen_bintree_props::sht::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
2363 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
2364 ,co::item_counter< cds::atomicity::item_counter >
2365 ,co::stat< cc::ellen_bintree::stat<> >
2368 typedef cc::EllenBinTreeMap< rcu_sht, Key, Value, traits_EllenBinTreeMap_rcu_sht_stat > EllenBinTreeMap_rcu_sht_stat;
2373 // ***************************************************************************
2374 // Standard implementations
2376 typedef StdMap< Key, Value, cds::SpinLock > StdMap_Spin;
2377 typedef StdMap< Key, Value, lock::NoLock> StdMap_NoLock;
2379 typedef StdHashMap< Key, Value, cds::SpinLock > StdHashMap_Spin;
2380 typedef StdHashMap< Key, Value, lock::NoLock > StdHashMap_NoLock;
2384 template <typename Map>
2385 static inline void print_stat( Map const& m )
2388 template <typename Map>
2389 static inline void additional_cleanup( Map& m )
2392 template <typename Map>
2393 static inline void additional_check( Map& m )
2397 template <typename K, typename T, typename Traits >
2398 static inline void print_stat( cc::CuckooMap< K, T, Traits > const& m )
2400 CPPUNIT_MSG( m.statistics() << m.mutex_policy_statistics() );
2403 template <typename GC, typename K, typename T, typename Traits >
2404 static inline void print_stat( cc::SkipListMap< GC, K, T, Traits > const& m )
2406 CPPUNIT_MSG( m.statistics() );
2409 template <typename GC, typename K, typename T, typename Traits >
2410 static inline void print_stat( cc::SplitListMap< GC, K, T, Traits > const& m )
2412 CPPUNIT_MSG( m.statistics() );
2416 template <typename GC, typename Key, typename T, typename Traits>
2417 static inline void print_stat( cc::EllenBinTreeMap<GC, Key, T, Traits> const& s )
2419 CPPUNIT_MSG( s.statistics() );
2421 template <typename GC, typename Key, typename T, typename Traits>
2422 static inline void additional_cleanup( cc::EllenBinTreeMap<GC, Key, T, Traits>& s )
2424 ellen_bintree_pool::internal_node_counter::reset();
2426 namespace ellen_bintree_check {
2427 static inline void check_stat( cds::intrusive::ellen_bintree::empty_stat const& s )
2429 // This check is not valid for thread-based RCU
2431 CPPUNIT_CHECK_CURRENT_EX( ellen_bintree_pool::internal_node_counter::m_nAlloc.get() == ellen_bintree_pool::internal_node_counter::m_nFree.get(),
2432 "m_nAlloc=" << ellen_bintree_pool::internal_node_counter::m_nAlloc.get()
2433 << ", m_nFree=" << ellen_bintree_pool::internal_node_counter::m_nFree.get()
2438 static inline void check_stat( cds::intrusive::ellen_bintree::stat<> const& stat )
2440 CPPUNIT_CHECK_CURRENT_EX( stat.m_nInternalNodeCreated == stat.m_nInternalNodeDeleted,
2441 "m_nInternalNodeCreated=" << stat.m_nInternalNodeCreated
2442 << " m_nInternalNodeDeleted=" << stat.m_nInternalNodeDeleted );
2443 CPPUNIT_CHECK_CURRENT_EX( stat.m_nUpdateDescCreated == stat.m_nUpdateDescDeleted,
2444 "m_nUpdateDescCreated=" << stat.m_nUpdateDescCreated
2445 << " m_nUpdateDescDeleted=" << stat.m_nUpdateDescDeleted );
2446 CPPUNIT_CHECK_CURRENT_EX( ellen_bintree_pool::internal_node_counter::m_nAlloc.get() == stat.m_nInternalNodeCreated,
2447 "allocated=" << ellen_bintree_pool::internal_node_counter::m_nAlloc.get()
2448 << "m_nInternalNodeCreated=" << stat.m_nInternalNodeCreated );
2450 } // namespace ellen_bintree_check
2451 template <typename GC, typename Key, typename T, typename Traits>
2452 static inline void additional_check( cc::EllenBinTreeMap<GC, Key, T, Traits>& s )
2454 GC::force_dispose();
2455 ellen_bintree_check::check_stat( s.statistics() );
2459 template <typename K, typename V, typename... Options>
2460 static inline void print_stat( CuckooStripedMap< K, V, Options... > const& m )
2462 typedef CuckooStripedMap< K, V, Options... > map_type;
2463 print_stat( static_cast<typename map_type::cuckoo_base_class const&>(m) );
2466 template <typename K, typename V, typename... Options>
2467 static inline void print_stat( CuckooRefinableMap< K, V, Options... > const& m )
2469 typedef CuckooRefinableMap< K, V, Options... > map_type;
2470 print_stat( static_cast<typename map_type::cuckoo_base_class const&>(m) );
2475 #endif // ifndef _CDSUNIT_MAP2_MAP_TYPES_H