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_dhp.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_stat;
934 typedef cc::SplitListMap< rcu_sht, Key, Value, SplitList_Lazy_dyn_cmp_stat > SplitList_Lazy_RCU_SHT_dyn_cmp_stat;
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 typedef RefinableHashMap_ord<
1296 std::unordered_map< Key, Value, hash, equal_to >
1298 > RefinableMap_hashmap;
1300 typedef RefinableHashMap_ord<
1301 boost::unordered_map< Key, Value, hash, equal_to >
1303 > RefinableMap_boost_unordered_map;
1305 #if BOOST_VERSION >= 104800
1306 typedef RefinableHashMap_seq<
1307 boost::container::list< std::pair< Key const, Value > >
1310 > RefinableMap_boost_list;
1312 typedef RefinableHashMap_ord<
1313 boost::container::map< Key, Value, less >
1315 > RefinableMap_boost_map;
1317 typedef RefinableHashMap_ord<
1318 boost::container::flat_map< Key, Value, less >
1320 > RefinableMap_boost_flat_map;
1321 #endif // #if BOOST_VERSION >= 104800
1324 // ***************************************************************************
1327 typedef CuckooStripedMap< Key, Value,
1328 cc::cuckoo::probeset_type< cc::cuckoo::list >
1329 ,co::equal_to< equal_to >
1330 ,co::hash< std::tuple< hash, hash2 > >
1331 > CuckooStripedMap_list_unord;
1333 typedef CuckooStripedMap< Key, Value,
1334 cc::cuckoo::probeset_type< cc::cuckoo::list >
1335 ,co::equal_to< equal_to >
1336 ,co::hash< std::tuple< hash, hash2 > >
1337 ,co::stat< cc::cuckoo::stat >
1338 > CuckooStripedMap_list_unord_stat;
1340 typedef CuckooStripedMap< Key, Value,
1341 cc::cuckoo::probeset_type< cc::cuckoo::list >
1342 ,co::equal_to< equal_to >
1343 ,co::hash< std::tuple< hash, hash2 > >
1344 ,cc::cuckoo::store_hash< true >
1345 > CuckooStripedMap_list_unord_storehash;
1347 typedef CuckooStripedMap< Key, Value,
1348 cc::cuckoo::probeset_type< cc::cuckoo::list >
1349 ,co::compare< compare >
1350 ,co::hash< std::tuple< hash, hash2 > >
1351 > CuckooStripedMap_list_ord;
1353 typedef CuckooStripedMap< Key, Value,
1354 cc::cuckoo::probeset_type< cc::cuckoo::list >
1355 ,co::compare< compare >
1356 ,co::hash< std::tuple< hash, hash2 > >
1357 ,co::stat< cc::cuckoo::stat >
1358 > CuckooStripedMap_list_ord_stat;
1360 typedef CuckooStripedMap< Key, Value,
1361 cc::cuckoo::probeset_type< cc::cuckoo::list >
1362 ,co::compare< compare >
1363 ,co::hash< std::tuple< hash, hash2 > >
1364 ,cc::cuckoo::store_hash< true >
1365 > CuckooStripedMap_list_ord_storehash;
1367 typedef CuckooStripedMap< Key, Value,
1368 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
1369 ,co::equal_to< equal_to >
1370 ,co::hash< std::tuple< hash, hash2 > >
1371 > CuckooStripedMap_vector_unord;
1373 typedef CuckooStripedMap< Key, Value,
1374 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
1375 ,co::equal_to< equal_to >
1376 ,co::hash< std::tuple< hash, hash2 > >
1377 ,co::stat< cc::cuckoo::stat >
1378 > CuckooStripedMap_vector_unord_stat;
1380 typedef CuckooStripedMap< Key, Value,
1381 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
1382 ,co::equal_to< equal_to >
1383 ,co::hash< std::tuple< hash, hash2 > >
1384 ,cc::cuckoo::store_hash< true >
1385 > CuckooStripedMap_vector_unord_storehash;
1387 typedef CuckooStripedMap< Key, Value,
1388 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
1389 ,co::compare< compare >
1390 ,co::hash< std::tuple< hash, hash2 > >
1391 > CuckooStripedMap_vector_ord;
1393 typedef CuckooStripedMap< Key, Value,
1394 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
1395 ,co::compare< compare >
1396 ,co::hash< std::tuple< hash, hash2 > >
1397 ,co::stat< cc::cuckoo::stat >
1398 > CuckooStripedMap_vector_ord_stat;
1400 typedef CuckooStripedMap< Key, Value,
1401 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
1402 ,co::compare< compare >
1403 ,co::hash< std::tuple< hash, hash2 > >
1404 ,cc::cuckoo::store_hash< true >
1405 > CuckooStripedMap_vector_ord_storehash;
1407 typedef CuckooRefinableMap< Key, Value,
1408 cc::cuckoo::probeset_type< cc::cuckoo::list >
1409 ,co::equal_to< equal_to >
1410 ,co::hash< std::tuple< hash, hash2 > >
1411 > CuckooRefinableMap_list_unord;
1413 typedef CuckooRefinableMap< Key, Value,
1414 cc::cuckoo::probeset_type< cc::cuckoo::list >
1415 ,co::equal_to< equal_to >
1416 ,co::hash< std::tuple< hash, hash2 > >
1417 ,co::stat< cc::cuckoo::stat >
1418 > CuckooRefinableMap_list_unord_stat;
1420 typedef CuckooRefinableMap< Key, Value,
1421 cc::cuckoo::probeset_type< cc::cuckoo::list >
1422 ,co::equal_to< equal_to >
1423 ,co::hash< std::tuple< hash, hash2 > >
1424 ,cc::cuckoo::store_hash< true >
1425 > CuckooRefinableMap_list_unord_storehash;
1427 typedef CuckooRefinableMap< Key, Value,
1428 cc::cuckoo::probeset_type< cc::cuckoo::list >
1429 ,co::compare< compare >
1430 ,co::hash< std::tuple< hash, hash2 > >
1431 > CuckooRefinableMap_list_ord;
1433 typedef CuckooRefinableMap< Key, Value,
1434 cc::cuckoo::probeset_type< cc::cuckoo::list >
1435 ,co::compare< compare >
1436 ,co::hash< std::tuple< hash, hash2 > >
1437 ,co::stat< cc::cuckoo::stat >
1438 > CuckooRefinableMap_list_ord_stat;
1440 typedef CuckooRefinableMap< Key, Value,
1441 cc::cuckoo::probeset_type< cc::cuckoo::list >
1442 ,co::compare< compare >
1443 ,co::hash< std::tuple< hash, hash2 > >
1444 ,cc::cuckoo::store_hash< true >
1445 > CuckooRefinableMap_list_ord_storehash;
1447 typedef CuckooRefinableMap< Key, Value,
1448 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
1449 ,co::equal_to< equal_to >
1450 ,co::hash< std::tuple< hash, hash2 > >
1451 > CuckooRefinableMap_vector_unord;
1453 typedef CuckooRefinableMap< Key, Value,
1454 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
1455 ,co::equal_to< equal_to >
1456 ,co::hash< std::tuple< hash, hash2 > >
1457 ,co::stat< cc::cuckoo::stat >
1458 > CuckooRefinableMap_vector_unord_stat;
1460 typedef CuckooRefinableMap< Key, Value,
1461 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
1462 ,co::equal_to< equal_to >
1463 ,co::hash< std::tuple< hash, hash2 > >
1464 ,cc::cuckoo::store_hash< true >
1465 > CuckooRefinableMap_vector_unord_storehash;
1467 typedef CuckooRefinableMap< Key, Value,
1468 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
1469 ,co::compare< compare >
1470 ,co::hash< std::tuple< hash, hash2 > >
1471 > CuckooRefinableMap_vector_ord;
1473 typedef CuckooRefinableMap< Key, Value,
1474 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
1475 ,co::compare< compare >
1476 ,co::hash< std::tuple< hash, hash2 > >
1477 ,co::stat< cc::cuckoo::stat >
1478 > CuckooRefinableMap_vector_ord_stat;
1480 typedef CuckooRefinableMap< Key, Value,
1481 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
1482 ,co::compare< compare >
1483 ,co::hash< std::tuple< hash, hash2 > >
1484 ,cc::cuckoo::store_hash< true >
1485 > CuckooRefinableMap_vector_ord_storehash;
1487 // ***************************************************************************
1490 class traits_SkipListMap_less_pascal: public cc::skip_list::make_traits <
1492 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
1493 ,co::item_counter< cds::atomicity::item_counter >
1496 typedef cc::SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_less_pascal > SkipListMap_hp_less_pascal;
1497 typedef cc::SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_less_pascal > SkipListMap_dhp_less_pascal;
1498 typedef cc::SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_less_pascal > SkipListMap_nogc_less_pascal;
1499 typedef cc::SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_less_pascal > SkipListMap_rcu_gpi_less_pascal;
1500 typedef cc::SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_less_pascal > SkipListMap_rcu_gpb_less_pascal;
1501 typedef cc::SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_less_pascal > SkipListMap_rcu_gpt_less_pascal;
1502 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
1503 typedef cc::SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_less_pascal > SkipListMap_rcu_shb_less_pascal;
1504 typedef cc::SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_less_pascal > SkipListMap_rcu_sht_less_pascal;
1507 class traits_SkipListMap_less_pascal_seqcst: public cc::skip_list::make_traits <
1509 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
1510 ,co::memory_model< co::v::sequential_consistent >
1511 ,co::item_counter< cds::atomicity::item_counter >
1514 typedef cc::SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_less_pascal_seqcst > SkipListMap_hp_less_pascal_seqcst;
1515 typedef cc::SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_less_pascal_seqcst > SkipListMap_dhp_less_pascal_seqcst;
1516 typedef cc::SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_less_pascal_seqcst > SkipListMap_nogc_less_pascal_seqcst;
1517 typedef cc::SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_less_pascal_seqcst > SkipListMap_rcu_gpi_less_pascal_seqcst;
1518 typedef cc::SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_less_pascal_seqcst > SkipListMap_rcu_gpb_less_pascal_seqcst;
1519 typedef cc::SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_less_pascal_seqcst > SkipListMap_rcu_gpt_less_pascal_seqcst;
1520 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
1521 typedef cc::SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_less_pascal_seqcst > SkipListMap_rcu_shb_less_pascal_seqcst;
1522 typedef cc::SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_less_pascal_seqcst > SkipListMap_rcu_sht_less_pascal_seqcst;
1525 class traits_SkipListMap_less_pascal_stat: public cc::skip_list::make_traits <
1527 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
1528 ,co::stat< cc::skip_list::stat<> >
1529 ,co::item_counter< cds::atomicity::item_counter >
1532 typedef cc::SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_less_pascal_stat > SkipListMap_hp_less_pascal_stat;
1533 typedef cc::SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_less_pascal_stat > SkipListMap_dhp_less_pascal_stat;
1534 typedef cc::SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_less_pascal_stat > SkipListMap_nogc_less_pascal_stat;
1535 typedef cc::SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_less_pascal_stat > SkipListMap_rcu_gpi_less_pascal_stat;
1536 typedef cc::SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_less_pascal_stat > SkipListMap_rcu_gpb_less_pascal_stat;
1537 typedef cc::SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_less_pascal_stat > SkipListMap_rcu_gpt_less_pascal_stat;
1538 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
1539 typedef cc::SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_less_pascal_stat > SkipListMap_rcu_shb_less_pascal_stat;
1540 typedef cc::SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_less_pascal_stat > SkipListMap_rcu_sht_less_pascal_stat;
1543 class traits_SkipListMap_cmp_pascal: public cc::skip_list::make_traits <
1544 co::compare< compare >
1545 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
1546 ,co::item_counter< cds::atomicity::item_counter >
1549 typedef cc::SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_cmp_pascal > SkipListMap_hp_cmp_pascal;
1550 typedef cc::SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_cmp_pascal > SkipListMap_dhp_cmp_pascal;
1551 typedef cc::SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_cmp_pascal > SkipListMap_nogc_cmp_pascal;
1552 typedef cc::SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_cmp_pascal > SkipListMap_rcu_gpi_cmp_pascal;
1553 typedef cc::SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_cmp_pascal > SkipListMap_rcu_gpb_cmp_pascal;
1554 typedef cc::SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_cmp_pascal > SkipListMap_rcu_gpt_cmp_pascal;
1555 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
1556 typedef cc::SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_cmp_pascal > SkipListMap_rcu_shb_cmp_pascal;
1557 typedef cc::SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_cmp_pascal > SkipListMap_rcu_sht_cmp_pascal;
1560 class traits_SkipListMap_cmp_pascal_stat: public cc::skip_list::make_traits <
1561 co::compare< compare >
1562 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
1563 ,co::stat< cc::skip_list::stat<> >
1564 ,co::item_counter< cds::atomicity::item_counter >
1567 typedef cc::SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_cmp_pascal_stat > SkipListMap_hp_cmp_pascal_stat;
1568 typedef cc::SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_cmp_pascal_stat > SkipListMap_dhp_cmp_pascal_stat;
1569 typedef cc::SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_cmp_pascal_stat > SkipListMap_nogc_cmp_pascal_stat;
1570 typedef cc::SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_cmp_pascal_stat > SkipListMap_rcu_gpi_cmp_pascal_stat;
1571 typedef cc::SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_cmp_pascal_stat > SkipListMap_rcu_gpb_cmp_pascal_stat;
1572 typedef cc::SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_cmp_pascal_stat > SkipListMap_rcu_gpt_cmp_pascal_stat;
1573 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
1574 typedef cc::SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_cmp_pascal_stat > SkipListMap_rcu_shb_cmp_pascal_stat;
1575 typedef cc::SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_cmp_pascal_stat > SkipListMap_rcu_sht_cmp_pascal_stat;
1578 class traits_SkipListMap_less_xorshift: public cc::skip_list::make_traits <
1580 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
1581 ,co::item_counter< cds::atomicity::item_counter >
1584 typedef cc::SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_less_xorshift > SkipListMap_hp_less_xorshift;
1585 typedef cc::SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_less_xorshift > SkipListMap_dhp_less_xorshift;
1586 typedef cc::SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_less_xorshift > SkipListMap_nogc_less_xorshift;
1587 typedef cc::SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_less_xorshift > SkipListMap_rcu_gpi_less_xorshift;
1588 typedef cc::SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_less_xorshift > SkipListMap_rcu_gpb_less_xorshift;
1589 typedef cc::SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_less_xorshift > SkipListMap_rcu_gpt_less_xorshift;
1590 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
1591 typedef cc::SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_less_xorshift > SkipListMap_rcu_shb_less_xorshift;
1592 typedef cc::SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_less_xorshift > SkipListMap_rcu_sht_less_xorshift;
1595 class traits_SkipListMap_less_xorshift_stat: public cc::skip_list::make_traits <
1597 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
1598 ,co::stat< cc::skip_list::stat<> >
1599 ,co::item_counter< cds::atomicity::item_counter >
1602 typedef cc::SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_less_xorshift_stat > SkipListMap_hp_less_xorshift_stat;
1603 typedef cc::SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_less_xorshift_stat > SkipListMap_dhp_less_xorshift_stat;
1604 typedef cc::SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_less_xorshift_stat > SkipListMap_nogc_less_xorshift_stat;
1605 typedef cc::SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_less_xorshift_stat > SkipListMap_rcu_gpi_less_xorshift_stat;
1606 typedef cc::SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_less_xorshift_stat > SkipListMap_rcu_gpb_less_xorshift_stat;
1607 typedef cc::SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_less_xorshift_stat > SkipListMap_rcu_gpt_less_xorshift_stat;
1608 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
1609 typedef cc::SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_less_xorshift_stat > SkipListMap_rcu_shb_less_xorshift_stat;
1610 typedef cc::SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_less_xorshift_stat > SkipListMap_rcu_sht_less_xorshift_stat;
1613 class traits_SkipListMap_cmp_xorshift: public cc::skip_list::make_traits <
1614 co::compare< compare >
1615 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
1616 ,co::item_counter< cds::atomicity::item_counter >
1619 typedef cc::SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_cmp_xorshift > SkipListMap_hp_cmp_xorshift;
1620 typedef cc::SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_cmp_xorshift > SkipListMap_dhp_cmp_xorshift;
1621 typedef cc::SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_cmp_xorshift > SkipListMap_nogc_cmp_xorshift;
1622 typedef cc::SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_cmp_xorshift > SkipListMap_rcu_gpi_cmp_xorshift;
1623 typedef cc::SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_cmp_xorshift > SkipListMap_rcu_gpb_cmp_xorshift;
1624 typedef cc::SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_cmp_xorshift > SkipListMap_rcu_gpt_cmp_xorshift;
1625 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
1626 typedef cc::SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_cmp_xorshift > SkipListMap_rcu_shb_cmp_xorshift;
1627 typedef cc::SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_cmp_xorshift > SkipListMap_rcu_sht_cmp_xorshift;
1630 class traits_SkipListMap_cmp_xorshift_stat: public cc::skip_list::make_traits <
1631 co::compare< compare >
1632 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
1633 ,co::stat< cc::skip_list::stat<> >
1634 ,co::item_counter< cds::atomicity::item_counter >
1637 typedef cc::SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_cmp_xorshift_stat > SkipListMap_hp_cmp_xorshift_stat;
1638 typedef cc::SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_cmp_xorshift_stat > SkipListMap_dhp_cmp_xorshift_stat;
1639 typedef cc::SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_cmp_xorshift_stat > SkipListMap_nogc_cmp_xorshift_stat;
1640 typedef cc::SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_cmp_xorshift_stat > SkipListMap_rcu_gpi_cmp_xorshift_stat;
1641 typedef cc::SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_cmp_xorshift_stat > SkipListMap_rcu_gpb_cmp_xorshift_stat;
1642 typedef cc::SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_cmp_xorshift_stat > SkipListMap_rcu_gpt_cmp_xorshift_stat;
1643 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
1644 typedef cc::SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_cmp_xorshift_stat > SkipListMap_rcu_shb_cmp_xorshift_stat;
1645 typedef cc::SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_cmp_xorshift_stat > SkipListMap_rcu_sht_cmp_xorshift_stat;
1649 // ***************************************************************************
1651 struct ellen_bintree_props {
1653 typedef cc::ellen_bintree::map_node<cds::gc::HP, Key, Value> leaf_node;
1654 typedef cc::ellen_bintree::internal_node< Key, leaf_node > internal_node;
1655 typedef cc::ellen_bintree::update_desc< leaf_node, internal_node > update_desc;
1658 typedef cc::ellen_bintree::map_node<cds::gc::DHP, Key, Value> leaf_node;
1659 typedef cc::ellen_bintree::internal_node< Key, leaf_node > internal_node;
1660 typedef cc::ellen_bintree::update_desc< leaf_node, internal_node > update_desc;
1663 typedef cc::ellen_bintree::map_node<rcu_gpi, Key, Value> leaf_node;
1664 typedef cc::ellen_bintree::internal_node< Key, leaf_node > internal_node;
1665 typedef cc::ellen_bintree::update_desc< leaf_node, internal_node > update_desc;
1668 typedef cc::ellen_bintree::map_node<rcu_gpb, Key, Value> leaf_node;
1669 typedef cc::ellen_bintree::internal_node< Key, leaf_node > internal_node;
1670 typedef cc::ellen_bintree::update_desc< leaf_node, internal_node > update_desc;
1673 typedef cc::ellen_bintree::map_node<rcu_gpt, Key, Value> leaf_node;
1674 typedef cc::ellen_bintree::internal_node< Key, leaf_node > internal_node;
1675 typedef cc::ellen_bintree::update_desc< leaf_node, internal_node > update_desc;
1677 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
1679 typedef cc::ellen_bintree::map_node<rcu_shb, Key, Value> leaf_node;
1680 typedef cc::ellen_bintree::internal_node< Key, leaf_node > internal_node;
1681 typedef cc::ellen_bintree::update_desc< leaf_node, internal_node > update_desc;
1684 typedef cc::ellen_bintree::map_node<rcu_sht, Key, Value> leaf_node;
1685 typedef cc::ellen_bintree::internal_node< Key, leaf_node > internal_node;
1686 typedef cc::ellen_bintree::update_desc< leaf_node, internal_node > update_desc;
1691 struct traits_EllenBinTreeMap: public cc::ellen_bintree::make_set_traits<
1693 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
1694 ,co::item_counter< cds::atomicity::item_counter >
1697 struct traits_EllenBinTreeMap_hp : traits_EllenBinTreeMap {
1698 typedef cds::memory::pool_allocator< typename ellen_bintree_props::hp_gc::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
1700 typedef cc::EllenBinTreeMap< cds::gc::HP, Key, Value, traits_EllenBinTreeMap_hp >EllenBinTreeMap_hp;
1702 struct traits_EllenBinTreeMap_dhp : traits_EllenBinTreeMap {
1703 typedef cds::memory::pool_allocator< typename ellen_bintree_props::dhp_gc::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
1705 typedef cc::EllenBinTreeMap< cds::gc::DHP, Key, Value, traits_EllenBinTreeMap_dhp >EllenBinTreeMap_dhp;
1707 struct traits_EllenBinTreeMap_gpi : traits_EllenBinTreeMap {
1708 typedef cds::memory::pool_allocator< typename ellen_bintree_props::gpi::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
1710 typedef cc::EllenBinTreeMap< rcu_gpi, Key, Value, traits_EllenBinTreeMap_gpi >EllenBinTreeMap_rcu_gpi;
1712 struct traits_EllenBinTreeMap_gpb : traits_EllenBinTreeMap {
1713 typedef cds::memory::pool_allocator< typename ellen_bintree_props::gpb::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
1715 typedef cc::EllenBinTreeMap< rcu_gpb, Key, Value, traits_EllenBinTreeMap_gpb >EllenBinTreeMap_rcu_gpb;
1717 struct traits_EllenBinTreeMap_gpt : traits_EllenBinTreeMap {
1718 typedef cds::memory::pool_allocator< typename ellen_bintree_props::gpt::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
1720 typedef cc::EllenBinTreeMap< rcu_gpt, Key, Value, traits_EllenBinTreeMap_gpt >EllenBinTreeMap_rcu_gpt;
1722 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
1723 struct traits_EllenBinTreeMap_shb : traits_EllenBinTreeMap {
1724 typedef cds::memory::pool_allocator< typename ellen_bintree_props::shb::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
1726 typedef cc::EllenBinTreeMap< rcu_shb, Key, Value, traits_EllenBinTreeMap_shb >EllenBinTreeMap_rcu_shb;
1728 struct traits_EllenBinTreeMap_sht : traits_EllenBinTreeMap {
1729 typedef cds::memory::pool_allocator< typename ellen_bintree_props::sht::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
1731 typedef cc::EllenBinTreeMap< rcu_sht, Key, Value, traits_EllenBinTreeMap_sht >EllenBinTreeMap_rcu_sht;
1734 struct traits_EllenBinTreeMap_stat: public cc::ellen_bintree::make_set_traits<
1736 ,cc::ellen_bintree::update_desc_allocator<
1737 cds::memory::pool_allocator< typename ellen_bintree_props::hp_gc::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
1739 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
1740 ,co::stat< cc::ellen_bintree::stat<> >
1741 ,co::item_counter< cds::atomicity::item_counter >
1745 struct traits_EllenBinTreeMap_stat_hp : public traits_EllenBinTreeMap_stat
1747 typedef cds::memory::pool_allocator< typename ellen_bintree_props::hp_gc::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
1749 typedef cc::EllenBinTreeMap< cds::gc::HP, Key, Value, traits_EllenBinTreeMap_stat_hp > EllenBinTreeMap_hp_stat;
1751 struct traits_EllenBinTreeMap_stat_dhp : public traits_EllenBinTreeMap_stat
1753 typedef cds::memory::pool_allocator< typename ellen_bintree_props::dhp_gc::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
1755 typedef cc::EllenBinTreeMap< cds::gc::HP, Key, Value, traits_EllenBinTreeMap_stat_dhp > EllenBinTreeMap_dhp_stat;
1757 struct traits_EllenBinTreeMap_stat_gpi : public traits_EllenBinTreeMap_stat
1759 typedef cds::memory::pool_allocator< typename ellen_bintree_props::gpi::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
1761 typedef cc::EllenBinTreeMap< rcu_gpi, Key, Value, traits_EllenBinTreeMap_stat_gpi > EllenBinTreeMap_rcu_gpi_stat;
1763 struct traits_EllenBinTreeMap_stat_gpb : public traits_EllenBinTreeMap_stat
1765 typedef cds::memory::pool_allocator< typename ellen_bintree_props::gpb::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
1767 typedef cc::EllenBinTreeMap< rcu_gpb, Key, Value, traits_EllenBinTreeMap_stat_gpb > EllenBinTreeMap_rcu_gpb_stat;
1769 struct traits_EllenBinTreeMap_stat_gpt : public traits_EllenBinTreeMap_stat
1771 typedef cds::memory::pool_allocator< typename ellen_bintree_props::gpt::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
1773 typedef cc::EllenBinTreeMap< rcu_gpt, Key, Value, traits_EllenBinTreeMap_stat_gpt > EllenBinTreeMap_rcu_gpt_stat;
1775 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
1776 struct traits_EllenBinTreeMap_stat_shb : public traits_EllenBinTreeMap_stat
1778 typedef cds::memory::pool_allocator< typename ellen_bintree_props::shb::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
1780 typedef cc::EllenBinTreeMap< rcu_shb, Key, Value, traits_EllenBinTreeMap_stat_shb > EllenBinTreeMap_rcu_shb_stat;
1782 struct traits_EllenBinTreeMap_stat_sht : public traits_EllenBinTreeMap_stat
1784 typedef cds::memory::pool_allocator< typename ellen_bintree_props::sht::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
1786 typedef cc::EllenBinTreeMap< rcu_sht, Key, Value, traits_EllenBinTreeMap_stat_sht > EllenBinTreeMap_rcu_sht_stat;
1789 // ***************************************************************************
1790 // Standard implementations
1792 typedef StdMap< Key, Value, cds::SpinLock > StdMap_Spin;
1793 typedef StdMap< Key, Value, lock::NoLock> StdMap_NoLock;
1795 typedef StdHashMap< Key, Value, cds::SpinLock > StdHashMap_Spin;
1796 typedef StdHashMap< Key, Value, lock::NoLock > StdHashMap_NoLock;
1800 template <typename Map>
1801 static inline void print_stat( Map const& m )
1804 template <typename Map>
1805 static inline void additional_cleanup( Map& m )
1808 template <typename Map>
1809 static inline void additional_check( Map& m )
1813 template <typename K, typename T, typename Traits >
1814 static inline void print_stat( cc::CuckooMap< K, T, Traits > const& m )
1816 CPPUNIT_MSG( m.statistics() << m.mutex_policy_statistics() );
1819 template <typename GC, typename K, typename T, typename Traits >
1820 static inline void print_stat( cc::SkipListMap< GC, K, T, Traits > const& m )
1822 CPPUNIT_MSG( m.statistics() );
1825 template <typename GC, typename K, typename T, typename Traits >
1826 static inline void print_stat( cc::SplitListMap< GC, K, T, Traits > const& m )
1828 CPPUNIT_MSG( m.statistics() );
1832 template <typename GC, typename Key, typename T, typename Traits>
1833 static inline void print_stat( cc::EllenBinTreeMap<GC, Key, T, Traits> const& s )
1835 CPPUNIT_MSG( s.statistics() );
1837 template <typename GC, typename Key, typename T, typename Traits>
1838 static inline void additional_cleanup( cc::EllenBinTreeMap<GC, Key, T, Traits>& s )
1840 ellen_bintree_pool::internal_node_counter::reset();
1842 namespace ellen_bintree_check {
1843 static inline void check_stat( cds::intrusive::ellen_bintree::empty_stat const& s )
1845 // This check is not valid for thread-based RCU
1847 CPPUNIT_CHECK_CURRENT_EX( ellen_bintree_pool::internal_node_counter::m_nAlloc.get() == ellen_bintree_pool::internal_node_counter::m_nFree.get(),
1848 "m_nAlloc=" << ellen_bintree_pool::internal_node_counter::m_nAlloc.get()
1849 << ", m_nFree=" << ellen_bintree_pool::internal_node_counter::m_nFree.get()
1854 static inline void check_stat( cds::intrusive::ellen_bintree::stat<> const& stat )
1856 CPPUNIT_CHECK_CURRENT_EX( stat.m_nInternalNodeCreated == stat.m_nInternalNodeDeleted,
1857 "m_nInternalNodeCreated=" << stat.m_nInternalNodeCreated
1858 << " m_nInternalNodeDeleted=" << stat.m_nInternalNodeDeleted );
1859 CPPUNIT_CHECK_CURRENT_EX( stat.m_nUpdateDescCreated == stat.m_nUpdateDescDeleted,
1860 "m_nUpdateDescCreated=" << stat.m_nUpdateDescCreated
1861 << " m_nUpdateDescDeleted=" << stat.m_nUpdateDescDeleted );
1862 CPPUNIT_CHECK_CURRENT_EX( ellen_bintree_pool::internal_node_counter::m_nAlloc.get() == stat.m_nInternalNodeCreated,
1863 "allocated=" << ellen_bintree_pool::internal_node_counter::m_nAlloc.get()
1864 << "m_nInternalNodeCreated=" << stat.m_nInternalNodeCreated );
1866 } // namespace ellen_bintree_check
1867 template <typename GC, typename Key, typename T, typename Traits>
1868 static inline void additional_check( cc::EllenBinTreeMap<GC, Key, T, Traits>& s )
1870 GC::force_dispose();
1871 ellen_bintree_check::check_stat( s.statistics() );
1875 template <typename K, typename V, typename... Options>
1876 static inline void print_stat( CuckooStripedMap< K, V, Options... > const& m )
1878 typedef CuckooStripedMap< K, V, Options... > map_type;
1879 print_stat( static_cast<typename map_type::cuckoo_base_class const&>(m) );
1882 template <typename K, typename V, typename... Options>
1883 static inline void print_stat( CuckooRefinableMap< K, V, Options... > const& m )
1885 typedef CuckooRefinableMap< K, V, Options... > map_type;
1886 print_stat( static_cast<typename map_type::cuckoo_base_class const&>(m) );
1891 #endif // ifndef _CDSUNIT_MAP2_MAP_TYPES_H