3 #ifndef CDSUNIT_MAP_TYPES_H
4 #define CDSUNIT_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 <cds/sync/pool_monitor.h>
45 #include <cds/container/bronson_avltree_map_rcu.h>
47 #include <boost/version.hpp>
48 #if BOOST_VERSION >= 104800
49 # include <cds/container/striped_map/boost_list.h>
50 # include <cds/container/striped_map/boost_slist.h>
51 # include <cds/container/striped_map/boost_map.h>
52 # include <cds/container/striped_map/boost_flat_map.h>
54 #include <cds/container/striped_map/boost_unordered_map.h>
55 #include <cds/container/striped_map.h>
57 #include <cds/sync/spinlock.h>
59 #include "cppunit/cppunit_mini.h"
60 #include "lock/nolock.h"
61 #include "map2/std_map.h"
62 #include "map2/std_hash_map.h"
63 #include "michael_alloc.h"
64 #include "print_cuckoo_stat.h"
65 #include "print_split_list_stat.h"
66 #include "print_skip_list_stat.h"
67 #include "print_ellenbintree_stat.h"
68 #include "print_bronsonavltree_stat.h"
69 #include "ellen_bintree_update_desc_pool.h"
72 namespace cc = cds::container;
73 namespace co = cds::opt;
75 typedef cds::urcu::gc< cds::urcu::general_instant<> > rcu_gpi;
76 typedef cds::urcu::gc< cds::urcu::general_buffered<> > rcu_gpb;
77 typedef cds::urcu::gc< cds::urcu::general_threaded<> > rcu_gpt;
78 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
79 typedef cds::urcu::gc< cds::urcu::signal_buffered<> > rcu_shb;
80 typedef cds::urcu::gc< cds::urcu::signal_threaded<> > rcu_sht;
83 template <typename Key>
85 int operator ()(Key const& k1, Key const& k2) const
87 if ( std::less<Key>( k1, k2 ) )
89 return std::less<Key>( k2, k1 ) ? 1 : 0;
93 #define CDSUNIT_INT_COMPARE(t) template <> struct cmp<t> { int operator()( t k1, t k2 ){ return (int)(k1 - k2); } }
94 CDSUNIT_INT_COMPARE(char);
95 CDSUNIT_INT_COMPARE(unsigned char);
96 CDSUNIT_INT_COMPARE(int);
97 CDSUNIT_INT_COMPARE(unsigned int);
98 CDSUNIT_INT_COMPARE(long);
99 CDSUNIT_INT_COMPARE(unsigned long);
100 CDSUNIT_INT_COMPARE(long long);
101 CDSUNIT_INT_COMPARE(unsigned long long);
102 #undef CDSUNIT_INT_COMPARE
105 struct cmp<std::string>
107 int operator()(std::string const& s1, std::string const& s2)
109 return s1.compare( s2 );
111 int operator()(std::string const& s1, char const * s2)
113 return s1.compare( s2 );
115 int operator()(char const * s1, std::string const& s2)
117 return -s2.compare( s1 );
121 template <typename K, typename V, typename Traits>
123 public cc::CuckooMap< K, V, Traits >
126 typedef cc::CuckooMap< K, V, Traits > cuckoo_base_class;
129 CuckooMap( size_t nCapacity, size_t nLoadFactor )
130 : cuckoo_base_class( nCapacity / (nLoadFactor * 16), (unsigned int) 4 )
133 template <typename Q, typename Pred>
134 bool erase_with( Q const& key, Pred /*pred*/ )
136 return cuckoo_base_class::erase_with( key, typename std::conditional< cuckoo_base_class::c_isSorted, Pred, typename Pred::equal_to>::type() );
140 template <typename Key, typename Value>
142 typedef co::v::hash<Key> key_hash;
143 typedef std::less<Key> less;
144 typedef cmp<Key> compare;
147 bool operator()( Key const& k1, Key const& k2 ) const
149 return compare()( k1, k2 ) == 0;
153 struct hash: public key_hash
155 size_t operator()( Key const& k ) const
157 return key_hash::operator()( k );
159 template <typename Q>
160 size_t operator()( Q const& k ) const
162 return key_hash::operator()( k );
166 struct hash2: public key_hash
168 size_t operator()( Key const& k ) const
170 size_t seed = ~key_hash::operator ()( k );
171 boost::hash_combine( seed, k );
174 template <typename Q>
175 size_t operator()( Q const& k ) const
177 size_t seed = ~key_hash::operator()( k );
178 boost::hash_combine( seed, k );
183 // ***************************************************************************
186 struct traits_MichaelList_cmp_stdAlloc :
187 public cc::michael_list::make_traits<
188 co::compare< compare >
191 typedef cc::MichaelKVList< cds::gc::HP, Key, Value, traits_MichaelList_cmp_stdAlloc > MichaelList_HP_cmp_stdAlloc;
192 typedef cc::MichaelKVList< cds::gc::DHP, Key, Value, traits_MichaelList_cmp_stdAlloc > MichaelList_DHP_cmp_stdAlloc;
193 typedef cc::MichaelKVList< cds::gc::nogc, Key, Value, traits_MichaelList_cmp_stdAlloc > MichaelList_NOGC_cmp_stdAlloc;
194 typedef cc::MichaelKVList< rcu_gpi, Key, Value, traits_MichaelList_cmp_stdAlloc > MichaelList_RCU_GPI_cmp_stdAlloc;
195 typedef cc::MichaelKVList< rcu_gpb, Key, Value, traits_MichaelList_cmp_stdAlloc > MichaelList_RCU_GPB_cmp_stdAlloc;
196 typedef cc::MichaelKVList< rcu_gpt, Key, Value, traits_MichaelList_cmp_stdAlloc > MichaelList_RCU_GPT_cmp_stdAlloc;
197 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
198 typedef cc::MichaelKVList< rcu_shb, Key, Value, traits_MichaelList_cmp_stdAlloc > MichaelList_RCU_SHB_cmp_stdAlloc;
199 typedef cc::MichaelKVList< rcu_sht, Key, Value, traits_MichaelList_cmp_stdAlloc > MichaelList_RCU_SHT_cmp_stdAlloc;
202 struct traits_MichaelList_cmp_stdAlloc_seqcst :
203 public cc::michael_list::make_traits<
204 co::compare< compare >
205 ,co::memory_model< co::v::sequential_consistent >
208 typedef cc::MichaelKVList< cds::gc::HP, Key, Value, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_HP_cmp_stdAlloc_seqcst;
209 typedef cc::MichaelKVList< cds::gc::DHP, Key, Value, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_DHP_cmp_stdAlloc_seqcst;
210 typedef cc::MichaelKVList< cds::gc::nogc, Key, Value, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_NOGC_cmp_stdAlloc_seqcst;
211 typedef cc::MichaelKVList< rcu_gpi, Key, Value, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_RCU_GPI_cmp_stdAlloc_seqcst;
212 typedef cc::MichaelKVList< rcu_gpb, Key, Value, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_RCU_GPB_cmp_stdAlloc_seqcst;
213 typedef cc::MichaelKVList< rcu_gpt, Key, Value, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_RCU_GPT_cmp_stdAlloc_seqcst;
214 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
215 typedef cc::MichaelKVList< rcu_shb, Key, Value, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_RCU_SHB_cmp_stdAlloc_seqcst;
216 typedef cc::MichaelKVList< rcu_sht, Key, Value, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_RCU_SHT_cmp_stdAlloc_seqcst;
219 struct traits_MichaelList_cmp_michaelAlloc :
220 public cc::michael_list::make_traits<
221 co::compare< compare >,
222 co::allocator< memory::MichaelAllocator<int> >
225 typedef cc::MichaelKVList< cds::gc::HP, Key, Value, traits_MichaelList_cmp_michaelAlloc > MichaelList_HP_cmp_michaelAlloc;
226 typedef cc::MichaelKVList< cds::gc::DHP, Key, Value, traits_MichaelList_cmp_michaelAlloc > MichaelList_DHP_cmp_michaelAlloc;
227 typedef cc::MichaelKVList< cds::gc::nogc, Key, Value, traits_MichaelList_cmp_michaelAlloc > MichaelList_NOGC_cmp_michaelAlloc;
228 typedef cc::MichaelKVList< rcu_gpi, Key, Value, traits_MichaelList_cmp_michaelAlloc > MichaelList_RCU_GPI_cmp_michaelAlloc;
229 typedef cc::MichaelKVList< rcu_gpb, Key, Value, traits_MichaelList_cmp_michaelAlloc > MichaelList_RCU_GPB_cmp_michaelAlloc;
230 typedef cc::MichaelKVList< rcu_gpt, Key, Value, traits_MichaelList_cmp_michaelAlloc > MichaelList_RCU_GPT_cmp_michaelAlloc;
231 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
232 typedef cc::MichaelKVList< rcu_shb, Key, Value, traits_MichaelList_cmp_michaelAlloc > MichaelList_RCU_SHB_cmp_michaelAlloc;
233 typedef cc::MichaelKVList< rcu_sht, Key, Value, traits_MichaelList_cmp_michaelAlloc > MichaelList_RCU_SHT_cmp_michaelAlloc;
236 struct traits_MichaelList_less_stdAlloc :
237 public cc::michael_list::make_traits<
241 typedef cc::MichaelKVList< cds::gc::HP, Key, Value, traits_MichaelList_less_stdAlloc > MichaelList_HP_less_stdAlloc;
242 typedef cc::MichaelKVList< cds::gc::DHP, Key, Value, traits_MichaelList_less_stdAlloc > MichaelList_DHP_less_stdAlloc;
243 typedef cc::MichaelKVList< cds::gc::nogc, Key, Value, traits_MichaelList_less_stdAlloc > MichaelList_NOGC_less_stdAlloc;
244 typedef cc::MichaelKVList< rcu_gpi, Key, Value, traits_MichaelList_less_stdAlloc > MichaelList_RCU_GPI_less_stdAlloc;
245 typedef cc::MichaelKVList< rcu_gpb, Key, Value, traits_MichaelList_less_stdAlloc > MichaelList_RCU_GPB_less_stdAlloc;
246 typedef cc::MichaelKVList< rcu_gpt, Key, Value, traits_MichaelList_less_stdAlloc > MichaelList_RCU_GPT_less_stdAlloc;
247 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
248 typedef cc::MichaelKVList< rcu_shb, Key, Value, traits_MichaelList_less_stdAlloc > MichaelList_RCU_SHB_less_stdAlloc;
249 typedef cc::MichaelKVList< rcu_sht, Key, Value, traits_MichaelList_less_stdAlloc > MichaelList_RCU_SHT_less_stdAlloc;
252 struct traits_MichaelList_less_stdAlloc_seqcst :
253 public cc::michael_list::make_traits<
255 ,co::memory_model< co::v::sequential_consistent >
258 typedef cc::MichaelKVList< cds::gc::HP, Key, Value, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_HP_less_stdAlloc_seqcst;
259 typedef cc::MichaelKVList< cds::gc::DHP, Key, Value, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_DHP_less_stdAlloc_seqcst;
260 typedef cc::MichaelKVList< cds::gc::nogc, Key, Value, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_NOGC_less_stdAlloc_seqcst;
261 typedef cc::MichaelKVList< rcu_gpi, Key, Value, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_RCU_GPI_less_stdAlloc_seqcst;
262 typedef cc::MichaelKVList< rcu_gpb, Key, Value, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_RCU_GPB_less_stdAlloc_seqcst;
263 typedef cc::MichaelKVList< rcu_gpt, Key, Value, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_RCU_GPT_less_stdAlloc_seqcst;
264 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
265 typedef cc::MichaelKVList< rcu_shb, Key, Value, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_RCU_SHB_less_stdAlloc_seqcst;
266 typedef cc::MichaelKVList< rcu_sht, Key, Value, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_RCU_SHT_less_stdAlloc_seqcst;
269 struct traits_MichaelList_less_michaelAlloc :
270 public cc::michael_list::make_traits<
272 co::allocator< memory::MichaelAllocator<int> >
275 typedef cc::MichaelKVList< cds::gc::HP, Key, Value, traits_MichaelList_less_michaelAlloc > MichaelList_HP_less_michaelAlloc;
276 typedef cc::MichaelKVList< cds::gc::DHP, Key, Value, traits_MichaelList_less_michaelAlloc > MichaelList_DHP_less_michaelAlloc;
277 typedef cc::MichaelKVList< cds::gc::nogc, Key, Value, traits_MichaelList_less_michaelAlloc > MichaelList_NOGC_less_michaelAlloc;
278 typedef cc::MichaelKVList< rcu_gpi, Key, Value, traits_MichaelList_less_michaelAlloc > MichaelList_RCU_GPI_less_michaelAlloc;
279 typedef cc::MichaelKVList< rcu_gpb, Key, Value, traits_MichaelList_less_michaelAlloc > MichaelList_RCU_GPB_less_michaelAlloc;
280 typedef cc::MichaelKVList< rcu_gpt, Key, Value, traits_MichaelList_less_michaelAlloc > MichaelList_RCU_GPT_less_michaelAlloc;
281 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
282 typedef cc::MichaelKVList< rcu_shb, Key, Value, traits_MichaelList_less_michaelAlloc > MichaelList_RCU_SHB_less_michaelAlloc;
283 typedef cc::MichaelKVList< rcu_sht, Key, Value, traits_MichaelList_less_michaelAlloc > MichaelList_RCU_SHT_less_michaelAlloc;
286 template <typename Base>
287 class NogcMapWrapper: public Base
289 typedef Base base_class;
291 NogcMapWrapper( size_t nMaxItemCount, size_t nLoadFactor )
292 : base_class( nMaxItemCount, nLoadFactor )
295 template <typename K>
296 bool insert( K const& key )
298 return base_class::insert( key ) != base_class::end();
301 template <typename K, typename V>
302 bool insert( K const& key, V const& val )
304 return base_class::insert( key, val ) != base_class::end();
307 template <typename K, typename Func>
308 bool insert_with( K const& key, Func func )
310 return base_class::insert_with( key, func ) != base_class::end();
313 template <typename K>
314 bool find( K const& key )
316 return base_class::find( key ) != base_class::end();
325 template <typename Base>
326 class NogcMapWrapper_dctor: public Base
328 typedef Base base_class;
330 NogcMapWrapper_dctor()
333 template <typename K>
334 bool insert( K const& key )
336 return base_class::insert( key ) != base_class::end();
339 template <typename K, typename V>
340 bool insert( K const& key, V const& val )
342 return base_class::insert( key, val ) != base_class::end();
345 template <typename K, typename Func>
346 bool insert_with( K const& key, Func func )
348 return base_class::insert_with( key, func ) != base_class::end();
351 template <typename K>
352 bool find( K const& key )
354 return base_class::find( key ) != base_class::end();
358 // SplitListMap<gc::nogc> has no clear() method
359 template <typename Base>
360 class NogcSplitMapWrapper: public Base
362 typedef Base base_class;
364 NogcSplitMapWrapper( size_t nMaxItemCount, size_t nLoadFactor )
365 : base_class( nMaxItemCount, nLoadFactor )
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_with( K const& key, Func func )
383 return base_class::insert_with( key, func ) != base_class::end();
386 template <typename K>
387 bool find( K const& key )
389 return base_class::find( key ) != base_class::end();
397 // ***************************************************************************
398 // MichaelHashMap based on MichaelKVList
400 struct traits_MichaelMap_hash :
401 public cc::michael_map::make_traits<
405 typedef cc::MichaelHashMap< cds::gc::HP, MichaelList_HP_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_HP_cmp_stdAlloc;
406 typedef cc::MichaelHashMap< cds::gc::DHP, MichaelList_DHP_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_DHP_cmp_stdAlloc;
407 typedef cc::MichaelHashMap< cds::gc::nogc, MichaelList_NOGC_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_NOGC_cmp_stdAlloc;
408 typedef cc::MichaelHashMap< rcu_gpi, MichaelList_RCU_GPI_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_RCU_GPI_cmp_stdAlloc;
409 typedef cc::MichaelHashMap< rcu_gpb, MichaelList_RCU_GPB_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_RCU_GPB_cmp_stdAlloc;
410 typedef cc::MichaelHashMap< rcu_gpt, MichaelList_RCU_GPT_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_RCU_GPT_cmp_stdAlloc;
411 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
412 typedef cc::MichaelHashMap< rcu_shb, MichaelList_RCU_SHB_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_RCU_SHB_cmp_stdAlloc;
413 typedef cc::MichaelHashMap< rcu_sht, MichaelList_RCU_SHT_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_RCU_SHT_cmp_stdAlloc;
416 typedef cc::MichaelHashMap< cds::gc::HP, MichaelList_HP_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_HP_less_stdAlloc;
417 typedef cc::MichaelHashMap< cds::gc::DHP, MichaelList_DHP_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_DHP_less_stdAlloc;
418 typedef cc::MichaelHashMap< cds::gc::nogc, MichaelList_NOGC_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_NOGC_less_stdAlloc;
419 typedef cc::MichaelHashMap< rcu_gpi, MichaelList_RCU_GPI_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_RCU_GPI_less_stdAlloc;
420 typedef cc::MichaelHashMap< rcu_gpb, MichaelList_RCU_GPB_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_RCU_GPB_less_stdAlloc;
421 typedef cc::MichaelHashMap< rcu_gpt, MichaelList_RCU_GPT_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_RCU_GPT_less_stdAlloc;
422 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
423 typedef cc::MichaelHashMap< rcu_shb, MichaelList_RCU_SHB_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_RCU_SHB_less_stdAlloc;
424 typedef cc::MichaelHashMap< rcu_sht, MichaelList_RCU_SHT_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_RCU_SHT_less_stdAlloc;
427 typedef cc::MichaelHashMap< cds::gc::HP, MichaelList_HP_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_HP_cmp_stdAlloc_seqcst;
428 typedef cc::MichaelHashMap< cds::gc::DHP, MichaelList_DHP_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_DHP_cmp_stdAlloc_seqcst;
429 typedef cc::MichaelHashMap< cds::gc::nogc, MichaelList_NOGC_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_NOGC_cmp_stdAlloc_seqcst;
430 typedef cc::MichaelHashMap< rcu_gpi, MichaelList_RCU_GPI_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_GPI_cmp_stdAlloc_seqcst;
431 typedef cc::MichaelHashMap< rcu_gpb, MichaelList_RCU_GPB_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_GPB_cmp_stdAlloc_seqcst;
432 typedef cc::MichaelHashMap< rcu_gpt, MichaelList_RCU_GPT_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_GPT_cmp_stdAlloc_seqcst;
433 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
434 typedef cc::MichaelHashMap< rcu_shb, MichaelList_RCU_SHB_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_SHB_cmp_stdAlloc_seqcst;
435 typedef cc::MichaelHashMap< rcu_sht, MichaelList_RCU_SHT_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_SHT_cmp_stdAlloc_seqcst;
438 typedef cc::MichaelHashMap< cds::gc::HP, MichaelList_HP_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_HP_less_stdAlloc_seqcst;
439 typedef cc::MichaelHashMap< cds::gc::DHP, MichaelList_DHP_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_DHP_less_stdAlloc_seqcst;
440 typedef cc::MichaelHashMap< cds::gc::nogc, MichaelList_NOGC_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_NOGC_less_stdAlloc_seqcst;
441 typedef cc::MichaelHashMap< rcu_gpi, MichaelList_RCU_GPI_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_GPI_less_stdAlloc_seqcst;
442 typedef cc::MichaelHashMap< rcu_gpb, MichaelList_RCU_GPB_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_GPB_less_stdAlloc_seqcst;
443 typedef cc::MichaelHashMap< rcu_gpt, MichaelList_RCU_GPT_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_GPT_less_stdAlloc_seqcst;
444 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
445 typedef cc::MichaelHashMap< rcu_shb, MichaelList_RCU_SHB_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_SHB_less_stdAlloc_seqcst;
446 typedef cc::MichaelHashMap< rcu_sht, MichaelList_RCU_SHT_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_RCU_SHT_less_stdAlloc_seqcst;
449 struct traits_MichaelSet_michaelAlloc :
450 public traits_MichaelMap_hash
452 typedef memory::MichaelAllocator<int> allocator;
454 typedef cc::MichaelHashMap< cds::gc::HP, MichaelList_HP_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_HP_cmp_michaelAlloc;
455 typedef cc::MichaelHashMap< cds::gc::DHP, MichaelList_DHP_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_DHP_cmp_michaelAlloc;
456 typedef cc::MichaelHashMap< cds::gc::nogc, MichaelList_NOGC_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_NOGC_cmp_michaelAlloc;
457 typedef cc::MichaelHashMap< rcu_gpi, MichaelList_RCU_GPI_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_RCU_GPI_cmp_michaelAlloc;
458 typedef cc::MichaelHashMap< rcu_gpb, MichaelList_RCU_GPB_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_RCU_GPB_cmp_michaelAlloc;
459 typedef cc::MichaelHashMap< rcu_gpt, MichaelList_RCU_GPT_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_RCU_GPT_cmp_michaelAlloc;
460 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
461 typedef cc::MichaelHashMap< rcu_shb, MichaelList_RCU_SHB_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_RCU_SHB_cmp_michaelAlloc;
462 typedef cc::MichaelHashMap< rcu_sht, MichaelList_RCU_SHT_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_RCU_SHT_cmp_michaelAlloc;
464 typedef cc::MichaelHashMap< cds::gc::HP, MichaelList_HP_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_HP_less_michaelAlloc;
465 typedef cc::MichaelHashMap< cds::gc::DHP, MichaelList_DHP_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_DHP_less_michaelAlloc;
466 typedef cc::MichaelHashMap< cds::gc::nogc, MichaelList_NOGC_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_NOGC_less_michaelAlloc;
467 typedef cc::MichaelHashMap< rcu_gpi, MichaelList_RCU_GPI_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_RCU_GPI_less_michaelAlloc;
468 typedef cc::MichaelHashMap< rcu_gpb, MichaelList_RCU_GPB_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_RCU_GPB_less_michaelAlloc;
469 typedef cc::MichaelHashMap< rcu_gpt, MichaelList_RCU_GPT_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_RCU_GPT_less_michaelAlloc;
470 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
471 typedef cc::MichaelHashMap< rcu_shb, MichaelList_RCU_SHB_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_RCU_SHB_less_michaelAlloc;
472 typedef cc::MichaelHashMap< rcu_sht, MichaelList_RCU_SHT_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_RCU_SHT_less_michaelAlloc;
475 // ***************************************************************************
478 struct traits_LazyList_cmp_stdAlloc :
479 public cc::lazy_list::make_traits<
480 co::compare< compare >
483 typedef cc::LazyKVList< cds::gc::HP, Key, Value, traits_LazyList_cmp_stdAlloc > LazyList_HP_cmp_stdAlloc;
484 typedef cc::LazyKVList< cds::gc::DHP, Key, Value, traits_LazyList_cmp_stdAlloc > LazyList_DHP_cmp_stdAlloc;
485 typedef cc::LazyKVList< cds::gc::nogc, Key, Value, traits_LazyList_cmp_stdAlloc > LazyList_NOGC_cmp_stdAlloc;
486 typedef cc::LazyKVList< rcu_gpi, Key, Value, traits_LazyList_cmp_stdAlloc > LazyList_RCU_GPI_cmp_stdAlloc;
487 typedef cc::LazyKVList< rcu_gpb, Key, Value, traits_LazyList_cmp_stdAlloc > LazyList_RCU_GPB_cmp_stdAlloc;
488 typedef cc::LazyKVList< rcu_gpt, Key, Value, traits_LazyList_cmp_stdAlloc > LazyList_RCU_GPT_cmp_stdAlloc;
489 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
490 typedef cc::LazyKVList< rcu_shb, Key, Value, traits_LazyList_cmp_stdAlloc > LazyList_RCU_SHB_cmp_stdAlloc;
491 typedef cc::LazyKVList< rcu_sht, Key, Value, traits_LazyList_cmp_stdAlloc > LazyList_RCU_SHT_cmp_stdAlloc;
494 struct traits_LazyList_cmp_stdAlloc_seqcst :
495 public cc::lazy_list::make_traits<
496 co::compare< compare >
497 ,co::memory_model< co::v::sequential_consistent >
500 typedef cc::LazyKVList< cds::gc::HP, Key, Value, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_HP_cmp_stdAlloc_seqcst;
501 typedef cc::LazyKVList< cds::gc::DHP, Key, Value, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_DHP_cmp_stdAlloc_seqcst;
502 typedef cc::LazyKVList< cds::gc::nogc, Key, Value, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_NOGC_cmp_stdAlloc_seqcst;
503 typedef cc::LazyKVList< rcu_gpi, Key, Value, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_RCU_GPI_cmp_stdAlloc_seqcst;
504 typedef cc::LazyKVList< rcu_gpb, Key, Value, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_RCU_GPB_cmp_stdAlloc_seqcst;
505 typedef cc::LazyKVList< rcu_gpt, Key, Value, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_RCU_GPT_cmp_stdAlloc_seqcst;
506 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
507 typedef cc::LazyKVList< rcu_shb, Key, Value, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_RCU_SHB_cmp_stdAlloc_seqcst;
508 typedef cc::LazyKVList< rcu_sht, Key, Value, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_RCU_SHT_cmp_stdAlloc_seqcst;
511 struct traits_LazyList_cmp_michaelAlloc :
512 public cc::lazy_list::make_traits<
513 co::compare< compare >,
514 co::allocator< memory::MichaelAllocator<int> >
517 typedef cc::LazyKVList< cds::gc::HP, Key, Value, traits_LazyList_cmp_michaelAlloc > LazyList_HP_cmp_michaelAlloc;
518 typedef cc::LazyKVList< cds::gc::DHP, Key, Value, traits_LazyList_cmp_michaelAlloc > LazyList_DHP_cmp_michaelAlloc;
519 typedef cc::LazyKVList< cds::gc::nogc, Key, Value, traits_LazyList_cmp_michaelAlloc > LazyList_NOGC_cmp_michaelAlloc;
520 typedef cc::LazyKVList< rcu_gpi, Key, Value, traits_LazyList_cmp_michaelAlloc > LazyList_RCU_GPI_cmp_michaelAlloc;
521 typedef cc::LazyKVList< rcu_gpb, Key, Value, traits_LazyList_cmp_michaelAlloc > LazyList_RCU_GPB_cmp_michaelAlloc;
522 typedef cc::LazyKVList< rcu_gpt, Key, Value, traits_LazyList_cmp_michaelAlloc > LazyList_RCU_GPT_cmp_michaelAlloc;
523 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
524 typedef cc::LazyKVList< rcu_shb, Key, Value, traits_LazyList_cmp_michaelAlloc > LazyList_RCU_SHB_cmp_michaelAlloc;
525 typedef cc::LazyKVList< rcu_sht, Key, Value, traits_LazyList_cmp_michaelAlloc > LazyList_RCU_SHT_cmp_michaelAlloc;
527 struct traits_LazyList_less_stdAlloc :
528 public cc::lazy_list::make_traits<
532 typedef cc::LazyKVList< cds::gc::HP, Key, Value, traits_LazyList_less_stdAlloc > LazyList_HP_less_stdAlloc;
533 typedef cc::LazyKVList< cds::gc::DHP, Key, Value, traits_LazyList_less_stdAlloc > LazyList_DHP_less_stdAlloc;
534 typedef cc::LazyKVList< cds::gc::nogc, Key, Value, traits_LazyList_less_stdAlloc > LazyList_NOGC_less_stdAlloc;
535 typedef cc::LazyKVList< rcu_gpi, Key, Value, traits_LazyList_less_stdAlloc > LazyList_RCU_GPI_less_stdAlloc;
536 typedef cc::LazyKVList< rcu_gpb, Key, Value, traits_LazyList_less_stdAlloc > LazyList_RCU_GPB_less_stdAlloc;
537 typedef cc::LazyKVList< rcu_gpt, Key, Value, traits_LazyList_less_stdAlloc > LazyList_RCU_GPT_less_stdAlloc;
538 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
539 typedef cc::LazyKVList< rcu_shb, Key, Value, traits_LazyList_less_stdAlloc > LazyList_RCU_SHB_less_stdAlloc;
540 typedef cc::LazyKVList< rcu_sht, Key, Value, traits_LazyList_less_stdAlloc > LazyList_RCU_SHT_less_stdAlloc;
543 struct traits_LazyList_less_stdAlloc_seqcst :
544 public cc::lazy_list::make_traits<
546 ,co::memory_model< co::v::sequential_consistent >
549 typedef cc::LazyKVList< cds::gc::HP, Key, Value, traits_LazyList_less_stdAlloc_seqcst > LazyList_HP_less_stdAlloc_seqcst;
550 typedef cc::LazyKVList< cds::gc::DHP, Key, Value, traits_LazyList_less_stdAlloc_seqcst > LazyList_DHP_less_stdAlloc_seqcst;
551 typedef cc::LazyKVList< cds::gc::nogc, Key, Value, traits_LazyList_less_stdAlloc_seqcst > LazyList_NOGC_less_stdAlloc_seqcst;
552 typedef cc::LazyKVList< rcu_gpi, Key, Value, traits_LazyList_less_stdAlloc_seqcst > LazyList_RCU_GPI_less_stdAlloc_seqcst;
553 typedef cc::LazyKVList< rcu_gpb, Key, Value, traits_LazyList_less_stdAlloc_seqcst > LazyList_RCU_GPB_less_stdAlloc_seqcst;
554 typedef cc::LazyKVList< rcu_gpt, Key, Value, traits_LazyList_less_stdAlloc_seqcst > LazyList_RCU_GPT_less_stdAlloc_seqcst;
555 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
556 typedef cc::LazyKVList< rcu_shb, Key, Value, traits_LazyList_less_stdAlloc_seqcst > LazyList_RCU_SHB_less_stdAlloc_seqcst;
557 typedef cc::LazyKVList< rcu_sht, Key, Value, traits_LazyList_less_stdAlloc_seqcst > LazyList_RCU_SHT_less_stdAlloc_seqcst;
560 struct traits_LazyList_less_michaelAlloc :
561 public cc::lazy_list::make_traits<
563 co::allocator< memory::MichaelAllocator<int> >
566 typedef cc::LazyKVList< cds::gc::HP, Key, Value, traits_LazyList_less_michaelAlloc > LazyList_HP_less_michaelAlloc;
567 typedef cc::LazyKVList< cds::gc::DHP, Key, Value, traits_LazyList_less_michaelAlloc > LazyList_DHP_less_michaelAlloc;
568 typedef cc::LazyKVList< cds::gc::nogc, Key, Value, traits_LazyList_less_michaelAlloc > LazyList_NOGC_less_michaelAlloc;
569 typedef cc::LazyKVList< rcu_gpi, Key, Value, traits_LazyList_less_michaelAlloc > LazyList_RCU_GPI_less_michaelAlloc;
570 typedef cc::LazyKVList< rcu_gpb, Key, Value, traits_LazyList_less_michaelAlloc > LazyList_RCU_GPB_less_michaelAlloc;
571 typedef cc::LazyKVList< rcu_gpt, Key, Value, traits_LazyList_less_michaelAlloc > LazyList_RCU_GPT_less_michaelAlloc;
572 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
573 typedef cc::LazyKVList< rcu_shb, Key, Value, traits_LazyList_less_michaelAlloc > LazyList_RCU_SHB_less_michaelAlloc;
574 typedef cc::LazyKVList< rcu_sht, Key, Value, traits_LazyList_less_michaelAlloc > LazyList_RCU_SHT_less_michaelAlloc;
577 // ***************************************************************************
578 // MichaelHashMap based on LazyKVList
579 typedef cc::MichaelHashMap< cds::gc::HP, LazyList_HP_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_HP_cmp_stdAlloc;
580 typedef cc::MichaelHashMap< cds::gc::DHP, LazyList_DHP_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_DHP_cmp_stdAlloc;
581 typedef cc::MichaelHashMap< cds::gc::nogc, LazyList_NOGC_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_NOGC_cmp_stdAlloc;
582 typedef cc::MichaelHashMap< rcu_gpi, LazyList_RCU_GPI_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPI_cmp_stdAlloc;
583 typedef cc::MichaelHashMap< rcu_gpb, LazyList_RCU_GPB_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPB_cmp_stdAlloc;
584 typedef cc::MichaelHashMap< rcu_gpt, LazyList_RCU_GPT_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPT_cmp_stdAlloc;
585 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
586 typedef cc::MichaelHashMap< rcu_shb, LazyList_RCU_SHB_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_SHB_cmp_stdAlloc;
587 typedef cc::MichaelHashMap< rcu_sht, LazyList_RCU_SHT_cmp_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_SHT_cmp_stdAlloc;
590 typedef cc::MichaelHashMap< cds::gc::HP, LazyList_HP_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_HP_less_stdAlloc;
591 typedef cc::MichaelHashMap< cds::gc::DHP, LazyList_DHP_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_DHP_less_stdAlloc;
592 typedef cc::MichaelHashMap< cds::gc::nogc, LazyList_NOGC_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_NOGC_less_stdAlloc;
593 typedef cc::MichaelHashMap< rcu_gpi, LazyList_RCU_GPI_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPI_less_stdAlloc;
594 typedef cc::MichaelHashMap< rcu_gpb, LazyList_RCU_GPB_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPB_less_stdAlloc;
595 typedef cc::MichaelHashMap< rcu_gpt, LazyList_RCU_GPT_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPT_less_stdAlloc;
596 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
597 typedef cc::MichaelHashMap< rcu_shb, LazyList_RCU_SHB_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_SHB_less_stdAlloc;
598 typedef cc::MichaelHashMap< rcu_sht, LazyList_RCU_SHT_less_stdAlloc, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_SHT_less_stdAlloc;
601 typedef cc::MichaelHashMap< cds::gc::HP, LazyList_HP_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_HP_cmp_stdAlloc_seqcst;
602 typedef cc::MichaelHashMap< cds::gc::DHP, LazyList_DHP_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_DHP_cmp_stdAlloc_seqcst;
603 typedef cc::MichaelHashMap< cds::gc::nogc, LazyList_NOGC_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_NOGC_cmp_stdAlloc_seqcst;
604 typedef cc::MichaelHashMap< rcu_gpi, LazyList_RCU_GPI_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPI_cmp_stdAlloc_seqcst;
605 typedef cc::MichaelHashMap< rcu_gpb, LazyList_RCU_GPB_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPB_cmp_stdAlloc_seqcst;
606 typedef cc::MichaelHashMap< rcu_gpt, LazyList_RCU_GPT_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPT_cmp_stdAlloc_seqcst;
607 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
608 typedef cc::MichaelHashMap< rcu_shb, LazyList_RCU_SHB_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_SHB_cmp_stdAlloc_seqcst;
609 typedef cc::MichaelHashMap< rcu_sht, LazyList_RCU_SHT_cmp_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_SHT_cmp_stdAlloc_seqcst;
612 typedef cc::MichaelHashMap< cds::gc::HP, LazyList_HP_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_HP_less_stdAlloc_seqcst;
613 typedef cc::MichaelHashMap< cds::gc::DHP, LazyList_DHP_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_DHP_less_stdAlloc_seqcst;
614 typedef cc::MichaelHashMap< cds::gc::nogc, LazyList_NOGC_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_NOGC_less_stdAlloc_seqcst;
615 typedef cc::MichaelHashMap< rcu_gpi, LazyList_RCU_GPI_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPI_less_stdAlloc_seqcst;
616 typedef cc::MichaelHashMap< rcu_gpb, LazyList_RCU_GPB_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPB_less_stdAlloc_seqcst;
617 typedef cc::MichaelHashMap< rcu_gpt, LazyList_RCU_GPT_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_GPT_less_stdAlloc_seqcst;
618 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
619 typedef cc::MichaelHashMap< rcu_shb, LazyList_RCU_SHB_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_SHB_less_stdAlloc_seqcst;
620 typedef cc::MichaelHashMap< rcu_sht, LazyList_RCU_SHT_less_stdAlloc_seqcst, traits_MichaelMap_hash > MichaelMap_Lazy_RCU_SHT_less_stdAlloc_seqcst;
623 typedef cc::MichaelHashMap< cds::gc::HP, LazyList_HP_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_HP_cmp_michaelAlloc;
624 typedef cc::MichaelHashMap< cds::gc::DHP, LazyList_DHP_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_DHP_cmp_michaelAlloc;
625 typedef cc::MichaelHashMap< cds::gc::nogc, LazyList_NOGC_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_NOGC_cmp_michaelAlloc;
626 typedef cc::MichaelHashMap< rcu_gpi, LazyList_RCU_GPI_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_RCU_GPI_cmp_michaelAlloc;
627 typedef cc::MichaelHashMap< rcu_gpb, LazyList_RCU_GPB_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_RCU_GPB_cmp_michaelAlloc;
628 typedef cc::MichaelHashMap< rcu_gpt, LazyList_RCU_GPT_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_RCU_GPT_cmp_michaelAlloc;
629 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
630 typedef cc::MichaelHashMap< rcu_shb, LazyList_RCU_SHB_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_RCU_SHB_cmp_michaelAlloc;
631 typedef cc::MichaelHashMap< rcu_sht, LazyList_RCU_SHT_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_RCU_SHT_cmp_michaelAlloc;
633 typedef cc::MichaelHashMap< cds::gc::HP, LazyList_HP_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_HP_less_michaelAlloc;
634 typedef cc::MichaelHashMap< cds::gc::DHP, LazyList_DHP_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_DHP_less_michaelAlloc;
635 typedef cc::MichaelHashMap< cds::gc::nogc, LazyList_NOGC_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_NOGC_less_michaelAlloc;
636 typedef cc::MichaelHashMap< rcu_gpi, LazyList_RCU_GPI_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_RCU_GPI_less_michaelAlloc;
637 typedef cc::MichaelHashMap< rcu_gpb, LazyList_RCU_GPB_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_RCU_GPB_less_michaelAlloc;
638 typedef cc::MichaelHashMap< rcu_gpt, LazyList_RCU_GPT_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_RCU_GPT_less_michaelAlloc;
639 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
640 typedef cc::MichaelHashMap< rcu_shb, LazyList_RCU_SHB_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_RCU_SHB_less_michaelAlloc;
641 typedef cc::MichaelHashMap< rcu_sht, LazyList_RCU_SHT_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelMap_Lazy_RCU_SHT_less_michaelAlloc;
644 // ***************************************************************************
645 // SplitListMap based on MichaelList
648 struct traits_SplitList_Michael_dyn_cmp: public cc::split_list::make_traits<
649 cc::split_list::ordered_list<cc::michael_list_tag>
651 ,cc::split_list::ordered_list_traits<
652 typename cc::michael_list::make_traits<
653 co::compare< compare >
658 typedef cc::SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_HP_dyn_cmp;
659 typedef cc::SplitListMap< cds::gc::DHP, Key, Value, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_DHP_dyn_cmp;
660 typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value, traits_SplitList_Michael_dyn_cmp >> SplitList_Michael_NOGC_dyn_cmp;
661 typedef cc::SplitListMap< rcu_gpi, Key, Value, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_RCU_GPI_dyn_cmp;
662 typedef cc::SplitListMap< rcu_gpb, Key, Value, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_RCU_GPB_dyn_cmp;
663 typedef cc::SplitListMap< rcu_gpt, Key, Value, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_RCU_GPT_dyn_cmp;
664 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
665 typedef cc::SplitListMap< rcu_shb, Key, Value, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_RCU_SHB_dyn_cmp;
666 typedef cc::SplitListMap< rcu_sht, Key, Value, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_RCU_SHT_dyn_cmp;
669 struct traits_SplitList_Michael_dyn_cmp_stat : public traits_SplitList_Michael_dyn_cmp
671 typedef cc::split_list::stat<> stat;
673 typedef cc::SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_HP_dyn_cmp_stat;
674 typedef cc::SplitListMap< cds::gc::DHP, Key, Value, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_DHP_dyn_cmp_stat;
675 typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value, traits_SplitList_Michael_dyn_cmp_stat >> SplitList_Michael_NOGC_dyn_cmp_stat;
676 typedef cc::SplitListMap< rcu_gpi, Key, Value, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_RCU_GPI_dyn_cmp_stat;
677 typedef cc::SplitListMap< rcu_gpb, Key, Value, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_RCU_GPB_dyn_cmp_stat;
678 typedef cc::SplitListMap< rcu_gpt, Key, Value, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_RCU_GPT_dyn_cmp_stat;
679 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
680 typedef cc::SplitListMap< rcu_shb, Key, Value, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_RCU_SHB_dyn_cmp_stat;
681 typedef cc::SplitListMap< rcu_sht, Key, Value, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_RCU_SHT_dyn_cmp_stat;
684 struct traits_SplitList_Michael_dyn_cmp_seqcst: public cc::split_list::make_traits<
685 cc::split_list::ordered_list<cc::michael_list_tag>
687 ,co::memory_model< co::v::sequential_consistent >
688 ,cc::split_list::ordered_list_traits<
689 typename cc::michael_list::make_traits<
690 co::compare< compare >
691 ,co::memory_model< co::v::sequential_consistent >
696 typedef cc::SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_HP_dyn_cmp_seqcst;
697 typedef cc::SplitListMap< cds::gc::DHP, Key, Value, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_DHP_dyn_cmp_seqcst;
698 typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value, traits_SplitList_Michael_dyn_cmp_seqcst >> SplitList_Michael_NOGC_dyn_cmp_seqcst;
699 typedef cc::SplitListMap< rcu_gpi, Key, Value, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_RCU_GPI_dyn_cmp_seqcst;
700 typedef cc::SplitListMap< rcu_gpb, Key, Value, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_RCU_GPB_dyn_cmp_seqcst;
701 typedef cc::SplitListMap< rcu_gpt, Key, Value, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_RCU_GPT_dyn_cmp_seqcst;
702 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
703 typedef cc::SplitListMap< rcu_shb, Key, Value, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_RCU_SHB_dyn_cmp_seqcst;
704 typedef cc::SplitListMap< rcu_sht, Key, Value, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_RCU_SHT_dyn_cmp_seqcst;
707 struct traits_SplitList_Michael_st_cmp: public cc::split_list::make_traits<
708 cc::split_list::ordered_list<cc::michael_list_tag>
709 ,cc::split_list::dynamic_bucket_table< false >
711 ,cc::split_list::ordered_list_traits<
712 typename cc::michael_list::make_traits<
713 co::compare< compare >
718 typedef cc::SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Michael_st_cmp > SplitList_Michael_HP_st_cmp;
719 typedef cc::SplitListMap< cds::gc::DHP, Key, Value, traits_SplitList_Michael_st_cmp > SplitList_Michael_DHP_st_cmp;
720 typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value, traits_SplitList_Michael_st_cmp >> SplitList_Michael_NOGC_st_cmp;
721 typedef cc::SplitListMap< rcu_gpi, Key, Value, traits_SplitList_Michael_st_cmp > SplitList_Michael_RCU_GPI_st_cmp;
722 typedef cc::SplitListMap< rcu_gpb, Key, Value, traits_SplitList_Michael_st_cmp > SplitList_Michael_RCU_GPB_st_cmp;
723 typedef cc::SplitListMap< rcu_gpt, Key, Value, traits_SplitList_Michael_st_cmp > SplitList_Michael_RCU_GPT_st_cmp;
724 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
725 typedef cc::SplitListMap< rcu_shb, Key, Value, traits_SplitList_Michael_st_cmp > SplitList_Michael_RCU_SHB_st_cmp;
726 typedef cc::SplitListMap< rcu_sht, Key, Value, traits_SplitList_Michael_st_cmp > SplitList_Michael_RCU_SHT_st_cmp;
729 struct traits_SplitList_Michael_st_cmp_seqcst: public cc::split_list::make_traits<
730 cc::split_list::ordered_list<cc::michael_list_tag>
732 ,cc::split_list::dynamic_bucket_table< false >
733 ,co::memory_model< co::v::sequential_consistent >
734 ,cc::split_list::ordered_list_traits<
735 typename cc::michael_list::make_traits<
736 co::compare< compare >
737 ,co::memory_model< co::v::sequential_consistent >
742 typedef cc::SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Michael_st_cmp_seqcst > SplitList_Michael_HP_st_cmp_seqcst;
743 typedef cc::SplitListMap< cds::gc::DHP, Key, Value, traits_SplitList_Michael_st_cmp_seqcst > SplitList_Michael_DHP_st_cmp_seqcst;
744 typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value, traits_SplitList_Michael_st_cmp_seqcst >> SplitList_Michael_NOGC_st_cmp_seqcst;
745 typedef cc::SplitListMap< rcu_gpi, Key, Value, traits_SplitList_Michael_st_cmp_seqcst > SplitList_Michael_RCU_GPI_st_cmp_seqcst;
746 typedef cc::SplitListMap< rcu_gpb, Key, Value, traits_SplitList_Michael_st_cmp_seqcst > SplitList_Michael_RCU_GPB_st_cmp_seqcst;
747 typedef cc::SplitListMap< rcu_gpt, Key, Value, traits_SplitList_Michael_st_cmp_seqcst > SplitList_Michael_RCU_GPT_st_cmp_seqcst;
748 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
749 typedef cc::SplitListMap< rcu_shb, Key, Value, traits_SplitList_Michael_st_cmp_seqcst > SplitList_Michael_RCU_SHB_st_cmp_seqcst;
750 typedef cc::SplitListMap< rcu_sht, Key, Value, traits_SplitList_Michael_st_cmp_seqcst > SplitList_Michael_RCU_SHT_st_cmp_seqcst;
754 struct traits_SplitList_Michael_dyn_less: public cc::split_list::make_traits<
755 cc::split_list::ordered_list<cc::michael_list_tag>
757 ,cc::split_list::ordered_list_traits<
758 typename cc::michael_list::make_traits<
764 typedef cc::SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Michael_dyn_less > SplitList_Michael_HP_dyn_less;
765 typedef cc::SplitListMap< cds::gc::DHP, Key, Value, traits_SplitList_Michael_dyn_less > SplitList_Michael_DHP_dyn_less;
766 typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value, traits_SplitList_Michael_dyn_less >> SplitList_Michael_NOGC_dyn_less;
767 typedef cc::SplitListMap< rcu_gpi, Key, Value, traits_SplitList_Michael_dyn_less > SplitList_Michael_RCU_GPI_dyn_less;
768 typedef cc::SplitListMap< rcu_gpb, Key, Value, traits_SplitList_Michael_dyn_less > SplitList_Michael_RCU_GPB_dyn_less;
769 typedef cc::SplitListMap< rcu_gpt, Key, Value, traits_SplitList_Michael_dyn_less > SplitList_Michael_RCU_GPT_dyn_less;
770 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
771 typedef cc::SplitListMap< rcu_shb, Key, Value, traits_SplitList_Michael_dyn_less > SplitList_Michael_RCU_SHB_dyn_less;
772 typedef cc::SplitListMap< rcu_sht, Key, Value, traits_SplitList_Michael_dyn_less > SplitList_Michael_RCU_SHT_dyn_less;
776 struct traits_SplitList_Michael_dyn_less_seqcst: public cc::split_list::make_traits<
777 cc::split_list::ordered_list<cc::michael_list_tag>
779 ,co::memory_model< co::v::sequential_consistent >
780 ,cc::split_list::ordered_list_traits<
781 typename cc::michael_list::make_traits<
783 ,co::memory_model< co::v::sequential_consistent >
788 typedef cc::SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Michael_dyn_less_seqcst > SplitList_Michael_HP_dyn_less_seqcst;
789 typedef cc::SplitListMap< cds::gc::DHP, Key, Value, traits_SplitList_Michael_dyn_less_seqcst > SplitList_Michael_DHP_dyn_less_seqcst;
790 typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value, traits_SplitList_Michael_dyn_less_seqcst >> SplitList_Michael_NOGC_dyn_less_seqcst;
791 typedef cc::SplitListMap< rcu_gpi, Key, Value, traits_SplitList_Michael_dyn_less_seqcst > SplitList_Michael_RCU_GPI_dyn_less_seqcst;
792 typedef cc::SplitListMap< rcu_gpb, Key, Value, traits_SplitList_Michael_dyn_less_seqcst > SplitList_Michael_RCU_GPB_dyn_less_seqcst;
793 typedef cc::SplitListMap< rcu_gpt, Key, Value, traits_SplitList_Michael_dyn_less_seqcst > SplitList_Michael_RCU_GPT_dyn_less_seqcst;
794 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
795 typedef cc::SplitListMap< rcu_shb, Key, Value, traits_SplitList_Michael_dyn_less_seqcst > SplitList_Michael_RCU_SHB_dyn_less_seqcst;
796 typedef cc::SplitListMap< rcu_sht, Key, Value, traits_SplitList_Michael_dyn_less_seqcst > SplitList_Michael_RCU_SHT_dyn_less_seqcst;
799 struct traits_SplitList_Michael_st_less: public cc::split_list::make_traits<
800 cc::split_list::ordered_list<cc::michael_list_tag>
801 ,cc::split_list::dynamic_bucket_table< false >
803 ,cc::split_list::ordered_list_traits<
804 typename cc::michael_list::make_traits<
810 typedef cc::SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Michael_st_less > SplitList_Michael_HP_st_less;
811 typedef cc::SplitListMap< cds::gc::DHP, Key, Value, traits_SplitList_Michael_st_less > SplitList_Michael_DHP_st_less;
812 typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value, traits_SplitList_Michael_st_less >> SplitList_Michael_NOGC_st_less;
813 typedef cc::SplitListMap< rcu_gpi, Key, Value, traits_SplitList_Michael_st_less > SplitList_Michael_RCU_GPI_st_less;
814 typedef cc::SplitListMap< rcu_gpb, Key, Value, traits_SplitList_Michael_st_less > SplitList_Michael_RCU_GPB_st_less;
815 typedef cc::SplitListMap< rcu_gpt, Key, Value, traits_SplitList_Michael_st_less > SplitList_Michael_RCU_GPT_st_less;
816 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
817 typedef cc::SplitListMap< rcu_shb, Key, Value, traits_SplitList_Michael_st_less > SplitList_Michael_RCU_SHB_st_less;
818 typedef cc::SplitListMap< rcu_sht, Key, Value, traits_SplitList_Michael_st_less > SplitList_Michael_RCU_SHT_st_less;
821 struct traits_SplitList_Michael_st_less_stat : traits_SplitList_Michael_st_less
823 typedef cc::split_list::stat<> stat;
825 typedef cc::SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Michael_st_less_stat > SplitList_Michael_HP_st_less_stat;
826 typedef cc::SplitListMap< cds::gc::DHP, Key, Value, traits_SplitList_Michael_st_less_stat > SplitList_Michael_DHP_st_less_stat;
827 typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value, traits_SplitList_Michael_st_less_stat >> SplitList_Michael_NOGC_st_less_stat;
828 typedef cc::SplitListMap< rcu_gpi, Key, Value, traits_SplitList_Michael_st_less_stat > SplitList_Michael_RCU_GPI_st_less_stat;
829 typedef cc::SplitListMap< rcu_gpb, Key, Value, traits_SplitList_Michael_st_less_stat > SplitList_Michael_RCU_GPB_st_less_stat;
830 typedef cc::SplitListMap< rcu_gpt, Key, Value, traits_SplitList_Michael_st_less_stat > SplitList_Michael_RCU_GPT_st_less_stat;
831 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
832 typedef cc::SplitListMap< rcu_shb, Key, Value, traits_SplitList_Michael_st_less_stat > SplitList_Michael_RCU_SHB_st_less_stat;
833 typedef cc::SplitListMap< rcu_sht, Key, Value, traits_SplitList_Michael_st_less_stat > SplitList_Michael_RCU_SHT_st_less_stat;
837 class traits_SplitList_Michael_st_less_seqcst: public cc::split_list::make_traits<
838 cc::split_list::ordered_list<cc::michael_list_tag>
840 ,cc::split_list::dynamic_bucket_table< false >
841 ,co::memory_model< co::v::sequential_consistent >
842 ,cc::split_list::ordered_list_traits<
843 typename cc::michael_list::make_traits<
845 ,co::memory_model< co::v::sequential_consistent >
850 typedef cc::SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Michael_st_less_seqcst > SplitList_Michael_HP_st_less_seqcst;
851 typedef cc::SplitListMap< cds::gc::DHP, Key, Value, traits_SplitList_Michael_st_less_seqcst > SplitList_Michael_DHP_st_less_seqcst;
852 typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value, traits_SplitList_Michael_st_less_seqcst >> SplitList_Michael_NOGC_st_less_seqcst;
853 typedef cc::SplitListMap< rcu_gpi, Key, Value, traits_SplitList_Michael_st_less_seqcst > SplitList_Michael_RCU_GPI_st_less_seqcst;
854 typedef cc::SplitListMap< rcu_gpb, Key, Value, traits_SplitList_Michael_st_less_seqcst > SplitList_Michael_RCU_GPB_st_less_seqcst;
855 typedef cc::SplitListMap< rcu_gpt, Key, Value, traits_SplitList_Michael_st_less_seqcst > SplitList_Michael_RCU_GPT_st_less_seqcst;
856 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
857 typedef cc::SplitListMap< rcu_shb, Key, Value, traits_SplitList_Michael_st_less_seqcst > SplitList_Michael_RCU_SHB_st_less_seqcst;
858 typedef cc::SplitListMap< rcu_sht, Key, Value, traits_SplitList_Michael_st_less_seqcst > SplitList_Michael_RCU_SHT_st_less_seqcst;
862 // ***************************************************************************
863 // SplitListMap based on LazyKVList
865 struct SplitList_Lazy_dyn_cmp :
866 public cc::split_list::make_traits<
867 cc::split_list::ordered_list<cc::lazy_list_tag>
869 ,cc::split_list::ordered_list_traits<
870 typename cc::lazy_list::make_traits<
871 co::compare< compare >
876 typedef cc::SplitListMap< cds::gc::HP, Key, Value, SplitList_Lazy_dyn_cmp > SplitList_Lazy_HP_dyn_cmp;
877 typedef cc::SplitListMap< cds::gc::DHP, Key, Value, SplitList_Lazy_dyn_cmp > SplitList_Lazy_DHP_dyn_cmp;
878 typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value, SplitList_Lazy_dyn_cmp >> SplitList_Lazy_NOGC_dyn_cmp;
879 typedef cc::SplitListMap< rcu_gpi, Key, Value, SplitList_Lazy_dyn_cmp > SplitList_Lazy_RCU_GPI_dyn_cmp;
880 typedef cc::SplitListMap< rcu_gpb, Key, Value, SplitList_Lazy_dyn_cmp > SplitList_Lazy_RCU_GPB_dyn_cmp;
881 typedef cc::SplitListMap< rcu_gpt, Key, Value, SplitList_Lazy_dyn_cmp > SplitList_Lazy_RCU_GPT_dyn_cmp;
882 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
883 typedef cc::SplitListMap< rcu_shb, Key, Value, SplitList_Lazy_dyn_cmp > SplitList_Lazy_RCU_SHB_dyn_cmp;
884 typedef cc::SplitListMap< rcu_sht, Key, Value, SplitList_Lazy_dyn_cmp > SplitList_Lazy_RCU_SHT_dyn_cmp;
887 struct SplitList_Lazy_dyn_cmp_stat : public SplitList_Lazy_dyn_cmp
889 typedef cc::split_list::stat<> stat;
891 typedef cc::SplitListMap< cds::gc::HP, Key, Value, SplitList_Lazy_dyn_cmp_stat > SplitList_Lazy_HP_dyn_cmp_stat;
892 typedef cc::SplitListMap< cds::gc::DHP, Key, Value, SplitList_Lazy_dyn_cmp_stat > SplitList_Lazy_DHP_dyn_cmp_stat;
893 typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value, SplitList_Lazy_dyn_cmp_stat >> SplitList_Lazy_NOGC_dyn_cmp_stat;
894 typedef cc::SplitListMap< rcu_gpi, Key, Value, SplitList_Lazy_dyn_cmp_stat > SplitList_Lazy_RCU_GPI_dyn_cmp_stat;
895 typedef cc::SplitListMap< rcu_gpb, Key, Value, SplitList_Lazy_dyn_cmp_stat > SplitList_Lazy_RCU_GPB_dyn_cmp_stat;
896 typedef cc::SplitListMap< rcu_gpt, Key, Value, SplitList_Lazy_dyn_cmp_stat > SplitList_Lazy_RCU_GPT_dyn_cmp_stat;
897 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
898 typedef cc::SplitListMap< rcu_shb, Key, Value, SplitList_Lazy_dyn_cmp_stat > SplitList_Lazy_RCU_SHB_dyn_cmp_stat;
899 typedef cc::SplitListMap< rcu_sht, Key, Value, SplitList_Lazy_dyn_cmp_stat > SplitList_Lazy_RCU_SHT_dyn_cmp_stat;
902 struct SplitList_Lazy_dyn_cmp_seqcst :
903 public cc::split_list::make_traits<
904 cc::split_list::ordered_list<cc::lazy_list_tag>
906 ,co::memory_model< co::v::sequential_consistent >
907 ,cc::split_list::ordered_list_traits<
908 typename cc::lazy_list::make_traits<
909 co::compare< compare >
910 ,co::memory_model< co::v::sequential_consistent >
915 typedef cc::SplitListMap< cds::gc::HP, Key, Value, SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_HP_dyn_cmp_seqcst;
916 typedef cc::SplitListMap< cds::gc::DHP, Key, Value, SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_DHP_dyn_cmp_seqcst;
917 typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value, SplitList_Lazy_dyn_cmp_seqcst >> SplitList_Lazy_NOGC_dyn_cmp_seqcst;
918 typedef cc::SplitListMap< rcu_gpi, Key, Value, SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_RCU_GPI_dyn_cmp_seqcst;
919 typedef cc::SplitListMap< rcu_gpb, Key, Value, SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_RCU_GPB_dyn_cmp_seqcst;
920 typedef cc::SplitListMap< rcu_gpt, Key, Value, SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_RCU_GPT_dyn_cmp_seqcst;
921 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
922 typedef cc::SplitListMap< rcu_shb, Key, Value, SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_RCU_SHB_dyn_cmp_seqcst;
923 typedef cc::SplitListMap< rcu_sht, Key, Value, SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_RCU_SHT_dyn_cmp_seqcst;
926 struct SplitList_Lazy_st_cmp :
927 public cc::split_list::make_traits<
928 cc::split_list::ordered_list<cc::lazy_list_tag>
929 ,cc::split_list::dynamic_bucket_table< false >
931 ,cc::split_list::ordered_list_traits<
932 typename cc::lazy_list::make_traits<
933 co::compare< compare >
938 typedef cc::SplitListMap< cds::gc::HP, Key, Value, SplitList_Lazy_st_cmp > SplitList_Lazy_HP_st_cmp;
939 typedef cc::SplitListMap< cds::gc::DHP, Key, Value, SplitList_Lazy_st_cmp > SplitList_Lazy_DHP_st_cmp;
940 typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value, SplitList_Lazy_st_cmp >> SplitList_Lazy_NOGC_st_cmp;
941 typedef cc::SplitListMap< rcu_gpi, Key, Value, SplitList_Lazy_st_cmp > SplitList_Lazy_RCU_GPI_st_cmp;
942 typedef cc::SplitListMap< rcu_gpb, Key, Value, SplitList_Lazy_st_cmp > SplitList_Lazy_RCU_GPB_st_cmp;
943 typedef cc::SplitListMap< rcu_gpt, Key, Value, SplitList_Lazy_st_cmp > SplitList_Lazy_RCU_GPT_st_cmp;
944 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
945 typedef cc::SplitListMap< rcu_shb, Key, Value, SplitList_Lazy_st_cmp > SplitList_Lazy_RCU_SHB_st_cmp;
946 typedef cc::SplitListMap< rcu_sht, Key, Value, SplitList_Lazy_st_cmp > SplitList_Lazy_RCU_SHT_st_cmp;
950 struct SplitList_Lazy_st_cmp_seqcst :
951 public cc::split_list::make_traits<
952 cc::split_list::ordered_list<cc::lazy_list_tag>
954 ,cc::split_list::dynamic_bucket_table< false >
955 ,co::memory_model< co::v::sequential_consistent >
956 ,cc::split_list::ordered_list_traits<
957 typename cc::lazy_list::make_traits<
958 co::compare< compare >
959 ,co::memory_model< co::v::sequential_consistent >
964 typedef cc::SplitListMap< cds::gc::HP, Key, Value, SplitList_Lazy_st_cmp_seqcst> SplitList_Lazy_HP_st_cmp_seqcst;
965 typedef cc::SplitListMap< cds::gc::DHP, Key, Value, SplitList_Lazy_st_cmp_seqcst> SplitList_Lazy_DHP_st_cmp_seqcst;
966 typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value, SplitList_Lazy_st_cmp_seqcst >> SplitList_Lazy_NOGC_st_cmp_seqcst;
967 typedef cc::SplitListMap< rcu_gpi, Key, Value, SplitList_Lazy_st_cmp_seqcst> SplitList_Lazy_RCU_GPI_st_cmp_seqcst;
968 typedef cc::SplitListMap< rcu_gpb, Key, Value, SplitList_Lazy_st_cmp_seqcst> SplitList_Lazy_RCU_GPB_st_cmp_seqcst;
969 typedef cc::SplitListMap< rcu_gpt, Key, Value, SplitList_Lazy_st_cmp_seqcst> SplitList_Lazy_RCU_GPT_st_cmp_seqcst;
970 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
971 typedef cc::SplitListMap< rcu_shb, Key, Value, SplitList_Lazy_st_cmp_seqcst> SplitList_Lazy_RCU_SHB_st_cmp_seqcst;
972 typedef cc::SplitListMap< rcu_sht, Key, Value, SplitList_Lazy_st_cmp_seqcst> SplitList_Lazy_RCU_SHT_st_cmp_seqcst;
976 struct SplitList_Lazy_dyn_less :
977 public cc::split_list::make_traits<
978 cc::split_list::ordered_list<cc::lazy_list_tag>
980 ,cc::split_list::ordered_list_traits<
981 typename cc::lazy_list::make_traits<
987 typedef cc::SplitListMap< cds::gc::HP, Key, Value, SplitList_Lazy_dyn_less > SplitList_Lazy_HP_dyn_less;
988 typedef cc::SplitListMap< cds::gc::DHP, Key, Value, SplitList_Lazy_dyn_less > SplitList_Lazy_DHP_dyn_less;
989 typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value, SplitList_Lazy_dyn_less >> SplitList_Lazy_NOGC_dyn_less;
990 typedef cc::SplitListMap< rcu_gpi, Key, Value, SplitList_Lazy_dyn_less > SplitList_Lazy_RCU_GPI_dyn_less;
991 typedef cc::SplitListMap< rcu_gpb, Key, Value, SplitList_Lazy_dyn_less > SplitList_Lazy_RCU_GPB_dyn_less;
992 typedef cc::SplitListMap< rcu_gpt, Key, Value, SplitList_Lazy_dyn_less > SplitList_Lazy_RCU_GPT_dyn_less;
993 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
994 typedef cc::SplitListMap< rcu_shb, Key, Value, SplitList_Lazy_dyn_less > SplitList_Lazy_RCU_SHB_dyn_less;
995 typedef cc::SplitListMap< rcu_sht, Key, Value, SplitList_Lazy_dyn_less > SplitList_Lazy_RCU_SHT_dyn_less;
998 struct SplitList_Lazy_dyn_less_seqcst:
999 public cc::split_list::make_traits<
1000 cc::split_list::ordered_list<cc::lazy_list_tag>
1002 ,co::memory_model< co::v::sequential_consistent >
1003 ,cc::split_list::ordered_list_traits<
1004 typename cc::lazy_list::make_traits<
1006 ,co::memory_model< co::v::sequential_consistent >
1011 typedef cc::SplitListMap< cds::gc::HP, Key, Value, SplitList_Lazy_dyn_less_seqcst > SplitList_Lazy_HP_dyn_less_seqcst;
1012 typedef cc::SplitListMap< cds::gc::DHP, Key, Value, SplitList_Lazy_dyn_less_seqcst > SplitList_Lazy_DHP_dyn_less_seqcst;
1013 typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value, SplitList_Lazy_dyn_less_seqcst >> SplitList_Lazy_NOGC_dyn_less_seqcst;
1014 typedef cc::SplitListMap< rcu_gpi, Key, Value, SplitList_Lazy_dyn_less_seqcst > SplitList_Lazy_RCU_GPI_dyn_less_seqcst;
1015 typedef cc::SplitListMap< rcu_gpb, Key, Value, SplitList_Lazy_dyn_less_seqcst > SplitList_Lazy_RCU_GPB_dyn_less_seqcst;
1016 typedef cc::SplitListMap< rcu_gpt, Key, Value, SplitList_Lazy_dyn_less_seqcst > SplitList_Lazy_RCU_GPT_dyn_less_seqcst;
1017 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
1018 typedef cc::SplitListMap< rcu_shb, Key, Value, SplitList_Lazy_dyn_less_seqcst > SplitList_Lazy_RCU_SHB_dyn_less_seqcst;
1019 typedef cc::SplitListMap< rcu_sht, Key, Value, SplitList_Lazy_dyn_less_seqcst > SplitList_Lazy_RCU_SHT_dyn_less_seqcst;
1022 struct SplitList_Lazy_st_less :
1023 public cc::split_list::make_traits<
1024 cc::split_list::ordered_list<cc::lazy_list_tag>
1025 ,cc::split_list::dynamic_bucket_table< false >
1027 ,cc::split_list::ordered_list_traits<
1028 typename cc::lazy_list::make_traits<
1034 typedef cc::SplitListMap< cds::gc::HP, Key, Value, SplitList_Lazy_st_less > SplitList_Lazy_HP_st_less;
1035 typedef cc::SplitListMap< cds::gc::DHP, Key, Value, SplitList_Lazy_st_less > SplitList_Lazy_DHP_st_less;
1036 typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value, SplitList_Lazy_st_less >> SplitList_Lazy_NOGC_st_less;
1037 typedef cc::SplitListMap< rcu_gpi, Key, Value, SplitList_Lazy_st_less > SplitList_Lazy_RCU_GPI_st_less;
1038 typedef cc::SplitListMap< rcu_gpb, Key, Value, SplitList_Lazy_st_less > SplitList_Lazy_RCU_GPB_st_less;
1039 typedef cc::SplitListMap< rcu_gpt, Key, Value, SplitList_Lazy_st_less > SplitList_Lazy_RCU_GPT_st_less;
1040 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
1041 typedef cc::SplitListMap< rcu_shb, Key, Value, SplitList_Lazy_st_less > SplitList_Lazy_RCU_SHB_st_less;
1042 typedef cc::SplitListMap< rcu_sht, Key, Value, SplitList_Lazy_st_less > SplitList_Lazy_RCU_SHT_st_less;
1045 struct SplitList_Lazy_st_less_stat : public SplitList_Lazy_st_less
1047 typedef cc::split_list::stat<> stat;
1049 typedef cc::SplitListMap< cds::gc::HP, Key, Value, SplitList_Lazy_st_less_stat > SplitList_Lazy_HP_st_less_stat;
1050 typedef cc::SplitListMap< cds::gc::DHP, Key, Value, SplitList_Lazy_st_less_stat > SplitList_Lazy_DHP_st_less_stat;
1051 typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value, SplitList_Lazy_st_less_stat >> SplitList_Lazy_NOGC_st_less_stat;
1052 typedef cc::SplitListMap< rcu_gpi, Key, Value, SplitList_Lazy_st_less_stat > SplitList_Lazy_RCU_GPI_st_less_stat;
1053 typedef cc::SplitListMap< rcu_gpb, Key, Value, SplitList_Lazy_st_less_stat > SplitList_Lazy_RCU_GPB_st_less_stat;
1054 typedef cc::SplitListMap< rcu_gpt, Key, Value, SplitList_Lazy_st_less_stat > SplitList_Lazy_RCU_GPT_st_less_stat;
1055 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
1056 typedef cc::SplitListMap< rcu_shb, Key, Value, SplitList_Lazy_st_less_stat > SplitList_Lazy_RCU_SHB_st_less_stat;
1057 typedef cc::SplitListMap< rcu_sht, Key, Value, SplitList_Lazy_st_less_stat > SplitList_Lazy_RCU_SHT_st_less_stat;
1060 struct SplitList_Lazy_st_less_seqcst :
1061 public cc::split_list::make_traits<
1062 cc::split_list::ordered_list<cc::lazy_list_tag>
1064 ,cc::split_list::dynamic_bucket_table< false >
1065 ,co::memory_model< co::v::sequential_consistent >
1066 ,cc::split_list::ordered_list_traits<
1067 typename cc::lazy_list::make_traits<
1069 ,co::memory_model< co::v::sequential_consistent >
1074 typedef cc::SplitListMap< cds::gc::HP, Key, Value, SplitList_Lazy_st_less_seqcst > SplitList_Lazy_HP_st_less_seqcst;
1075 typedef cc::SplitListMap< cds::gc::DHP, Key, Value, SplitList_Lazy_st_less_seqcst > SplitList_Lazy_DHP_st_less_seqcst;
1076 typedef NogcSplitMapWrapper< cc::SplitListMap< cds::gc::nogc, Key, Value, SplitList_Lazy_st_less_seqcst >> SplitList_Lazy_NOGC_st_less_seqcst;
1077 typedef cc::SplitListMap< rcu_gpi, Key, Value, SplitList_Lazy_st_less_seqcst > SplitList_Lazy_RCU_GPI_st_less_seqcst;
1078 typedef cc::SplitListMap< rcu_gpb, Key, Value, SplitList_Lazy_st_less_seqcst > SplitList_Lazy_RCU_GPB_st_less_seqcst;
1079 typedef cc::SplitListMap< rcu_gpt, Key, Value, SplitList_Lazy_st_less_seqcst > SplitList_Lazy_RCU_GPT_st_less_seqcst;
1080 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
1081 typedef cc::SplitListMap< rcu_shb, Key, Value, SplitList_Lazy_st_less_seqcst > SplitList_Lazy_RCU_SHB_st_less_seqcst;
1082 typedef cc::SplitListMap< rcu_sht, Key, Value, SplitList_Lazy_st_less_seqcst > SplitList_Lazy_RCU_SHT_st_less_seqcst;
1087 // ***************************************************************************
1090 // for sequential containers
1091 template <class BucketEntry, typename... Options>
1092 class StripedHashMap_seq:
1093 public cc::StripedMap< BucketEntry,
1094 co::mutex_policy< cc::striped_set::striping<> >
1095 ,co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
1099 typedef cc::StripedMap< BucketEntry,
1100 co::mutex_policy< cc::striped_set::striping<> >
1101 ,co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
1104 typedef typename base_class::resizing_policy resizing_policy_t;
1106 resizing_policy_t m_placeHolder;
1108 StripedHashMap_seq( size_t nCapacity, size_t nLoadFactor )
1109 : base_class( nCapacity / nLoadFactor / 16, *(new(&m_placeHolder) resizing_policy_t( nLoadFactor )) )
1113 // for non-sequential ordered containers
1114 template <class BucketEntry, typename... Options>
1115 class StripedHashMap_ord:
1116 public cc::StripedMap< BucketEntry,
1117 co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
1118 ,co::mutex_policy< cc::striped_set::striping<> >
1122 typedef cc::StripedMap< BucketEntry,
1123 co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
1124 ,co::mutex_policy< cc::striped_set::striping<> >
1127 typedef typename base_class::resizing_policy resizing_policy_t;
1129 resizing_policy_t m_placeHolder;
1131 StripedHashMap_ord( size_t /*nCapacity*/, size_t nLoadFactor )
1132 : base_class( 0, *(new(&m_placeHolder) resizing_policy_t( nLoadFactor * 1024 )) )
1137 typedef StripedHashMap_seq<
1138 std::list< std::pair< Key const, Value > >
1143 #if (CDS_COMPILER == CDS_COMPILER_MSVC || (CDS_COMPILER == CDS_COMPILER_INTEL && CDS_OS_INTERFACE == CDS_OSI_WINDOWS)) && _MSC_VER < 1600
1144 typedef StripedHashMap_ord<
1145 stdext::hash_map< Key, Value, stdext::hash_compare<Key, less > >
1147 > StripedMap_hashmap;
1149 typedef StripedHashMap_ord<
1150 std::unordered_map< Key, Value, hash, equal_to >
1152 > StripedMap_hashmap;
1155 typedef StripedHashMap_ord<
1156 std::map< Key, Value, less >
1160 typedef StripedHashMap_ord<
1161 boost::unordered_map< Key, Value, hash, equal_to >
1163 > StripedMap_boost_unordered_map;
1165 #if BOOST_VERSION >= 104800
1166 typedef StripedHashMap_seq<
1167 boost::container::slist< std::pair< Key const, Value > >
1172 typedef StripedHashMap_seq<
1173 boost::container::list< std::pair< Key const, Value > >
1176 > StripedMap_boost_list;
1178 typedef StripedHashMap_ord<
1179 boost::container::map< Key, Value, less >
1181 > StripedMap_boost_map;
1183 //# ifdef CDS_UNIT_MAP_TYPES_ENABLE_BOOST_FLAT_CONTAINERS
1184 typedef StripedHashMap_ord<
1185 boost::container::flat_map< Key, Value, less >
1187 > StripedMap_boost_flat_map;
1189 #endif // BOOST_VERSION >= 104800
1191 // ***************************************************************************
1194 // for sequential containers
1195 template <class BucketEntry, typename... Options>
1196 class RefinableHashMap_seq:
1197 public cc::StripedMap< BucketEntry,
1198 co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
1199 ,co::mutex_policy< cc::striped_set::refinable<> >
1203 typedef cc::StripedMap< BucketEntry,
1204 co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
1205 ,co::mutex_policy< cc::striped_set::refinable<> >
1208 typedef typename base_class::resizing_policy resizing_policy_t;
1210 resizing_policy_t m_placeHolder;
1212 RefinableHashMap_seq( size_t nCapacity, size_t nLoadFactor )
1213 : base_class( nCapacity / nLoadFactor / 16, *(new(&m_placeHolder) resizing_policy_t( nLoadFactor )) )
1217 // for non-sequential ordered containers
1218 template <class BucketEntry, typename... Options>
1219 class RefinableHashMap_ord:
1220 public cc::StripedMap< BucketEntry,
1221 co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
1222 ,co::mutex_policy< cc::striped_set::refinable<> >
1226 typedef cc::StripedMap< BucketEntry,
1227 co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
1228 ,co::mutex_policy< cc::striped_set::refinable<> >
1231 typedef typename base_class::resizing_policy resizing_policy_t;
1233 resizing_policy_t m_placeHolder;
1235 RefinableHashMap_ord( size_t /*nCapacity*/, size_t nLoadFactor )
1236 : base_class( 0, *(new(&m_placeHolder) resizing_policy_t( nLoadFactor * 1024 )) )
1241 typedef RefinableHashMap_seq<
1242 std::list< std::pair< Key const, Value > >
1245 > RefinableMap_list;
1247 #if BOOST_VERSION >= 104800
1248 typedef RefinableHashMap_seq<
1249 boost::container::slist< std::pair< Key const, Value > >
1252 > RefinableMap_slist;
1255 typedef RefinableHashMap_ord<
1256 std::map< Key, Value, less >
1260 typedef RefinableHashMap_ord<
1261 std::unordered_map< Key, Value, hash, equal_to >
1263 > RefinableMap_hashmap;
1265 typedef RefinableHashMap_ord<
1266 boost::unordered_map< Key, Value, hash, equal_to >
1268 > RefinableMap_boost_unordered_map;
1270 #if BOOST_VERSION >= 104800
1271 typedef RefinableHashMap_seq<
1272 boost::container::list< std::pair< Key const, Value > >
1275 > RefinableMap_boost_list;
1277 typedef RefinableHashMap_ord<
1278 boost::container::map< Key, Value, less >
1280 > RefinableMap_boost_map;
1282 typedef RefinableHashMap_ord<
1283 boost::container::flat_map< Key, Value, less >
1285 > RefinableMap_boost_flat_map;
1286 #endif // #if BOOST_VERSION >= 104800
1289 // ***************************************************************************
1292 template <typename Traits>
1293 struct traits_CuckooStripedMap: public Traits
1295 typedef cc::cuckoo::striping<> mutex_policy;
1297 template <typename Traits>
1298 struct traits_CuckooRefinableMap : public Traits
1300 typedef cc::cuckoo::refinable<> mutex_policy;
1303 struct traits_CuckooMap_list_unord :
1304 public cc::cuckoo::make_traits <
1305 cc::cuckoo::probeset_type< cc::cuckoo::list >
1306 , co::equal_to< equal_to >
1307 , co::hash< std::tuple< hash, hash2 > >
1310 typedef CuckooMap< Key, Value, traits_CuckooStripedMap<traits_CuckooMap_list_unord>> CuckooStripedMap_list_unord;
1311 typedef CuckooMap< Key, Value, traits_CuckooRefinableMap<traits_CuckooMap_list_unord>> CuckooRefinableMap_list_unord;
1313 struct traits_CuckooMap_list_unord_stat : public traits_CuckooMap_list_unord
1315 typedef cc::cuckoo::stat stat;
1317 typedef CuckooMap< Key, Value, traits_CuckooStripedMap<traits_CuckooMap_list_unord_stat>> CuckooStripedMap_list_unord_stat;
1318 typedef CuckooMap< Key, Value, traits_CuckooRefinableMap<traits_CuckooMap_list_unord_stat>> CuckooRefinableMap_list_unord_stat;
1320 struct traits_CuckooMap_list_unord_storehash : public traits_CuckooMap_list_unord
1322 static CDS_CONSTEXPR const bool store_hash = true;
1324 typedef CuckooMap< Key, Value, traits_CuckooStripedMap<traits_CuckooMap_list_unord_storehash>> CuckooStripedMap_list_unord_storehash;
1325 typedef CuckooMap< Key, Value, traits_CuckooRefinableMap<traits_CuckooMap_list_unord_storehash>> CuckooRefinableMap_list_unord_storehash;
1327 struct traits_CuckooMap_list_ord :
1328 public cc::cuckoo::make_traits <
1329 cc::cuckoo::probeset_type< cc::cuckoo::list >
1330 , co::compare< compare >
1331 , co::hash< std::tuple< hash, hash2 > >
1334 typedef CuckooMap< Key, Value, traits_CuckooStripedMap<traits_CuckooMap_list_ord>> CuckooStripedMap_list_ord;
1335 typedef CuckooMap< Key, Value, traits_CuckooRefinableMap<traits_CuckooMap_list_ord>> CuckooRefinableMap_list_ord;
1337 struct traits_CuckooMap_list_ord_stat : public traits_CuckooMap_list_ord
1339 typedef cc::cuckoo::stat stat;
1341 typedef CuckooMap< Key, Value, traits_CuckooStripedMap<traits_CuckooMap_list_ord_stat>> CuckooStripedMap_list_ord_stat;
1342 typedef CuckooMap< Key, Value, traits_CuckooRefinableMap<traits_CuckooMap_list_ord_stat>> CuckooRefinableMap_list_ord_stat;
1344 struct traits_CuckooMap_list_ord_storehash : public traits_CuckooMap_list_ord
1346 static CDS_CONSTEXPR const bool store_hash = true;
1348 typedef CuckooMap< Key, Value, traits_CuckooStripedMap<traits_CuckooMap_list_ord_storehash>> CuckooStripedMap_list_ord_storehash;
1349 typedef CuckooMap< Key, Value, traits_CuckooRefinableMap<traits_CuckooMap_list_ord_storehash>> CuckooRefinableMap_list_ord_storehash;
1351 struct traits_CuckooMap_vector_unord :
1352 public cc::cuckoo::make_traits <
1353 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
1354 , co::equal_to< equal_to >
1355 , co::hash< std::tuple< hash, hash2 > >
1358 typedef CuckooMap< Key, Value, traits_CuckooStripedMap<traits_CuckooMap_vector_unord>> CuckooStripedMap_vector_unord;
1359 typedef CuckooMap< Key, Value, traits_CuckooRefinableMap<traits_CuckooMap_vector_unord>> CuckooRefinableMap_vector_unord;
1361 struct traits_CuckooMap_vector_unord_stat : public traits_CuckooMap_vector_unord
1363 typedef cc::cuckoo::stat stat;
1365 typedef CuckooMap< Key, Value, traits_CuckooStripedMap<traits_CuckooMap_vector_unord_stat>> CuckooStripedMap_vector_unord_stat;
1366 typedef CuckooMap< Key, Value, traits_CuckooRefinableMap<traits_CuckooMap_vector_unord_stat>> CuckooRefinableMap_vector_unord_stat;
1368 struct traits_CuckooMap_vector_unord_storehash : public traits_CuckooMap_vector_unord
1370 static CDS_CONSTEXPR const bool store_hash = true;
1372 typedef CuckooMap< Key, Value, traits_CuckooStripedMap<traits_CuckooMap_vector_unord_storehash>> CuckooStripedMap_vector_unord_storehash;
1373 typedef CuckooMap< Key, Value, traits_CuckooRefinableMap<traits_CuckooMap_vector_unord_storehash>> CuckooRefinableMap_vector_unord_storehash;
1375 struct traits_CuckooMap_vector_ord :
1376 public cc::cuckoo::make_traits <
1377 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
1378 , co::compare< compare >
1379 , co::hash< std::tuple< hash, hash2 > >
1382 typedef CuckooMap< Key, Value, traits_CuckooStripedMap<traits_CuckooMap_vector_ord>> CuckooStripedMap_vector_ord;
1383 typedef CuckooMap< Key, Value, traits_CuckooRefinableMap<traits_CuckooMap_vector_ord>> CuckooRefinableMap_vector_ord;
1385 struct traits_CuckooMap_vector_ord_stat : public traits_CuckooMap_vector_ord
1387 typedef cc::cuckoo::stat stat;
1389 typedef CuckooMap< Key, Value, traits_CuckooStripedMap<traits_CuckooMap_vector_ord_stat>> CuckooStripedMap_vector_ord_stat;
1390 typedef CuckooMap< Key, Value, traits_CuckooRefinableMap<traits_CuckooMap_vector_ord_stat>> CuckooRefinableMap_vector_ord_stat;
1392 struct traits_CuckooMap_vector_ord_storehash : public traits_CuckooMap_vector_ord
1394 static CDS_CONSTEXPR const bool store_hash = true;
1396 typedef CuckooMap< Key, Value, traits_CuckooStripedMap<traits_CuckooMap_vector_ord_storehash>> CuckooStripedMap_vector_ord_storehash;
1397 typedef CuckooMap< Key, Value, traits_CuckooRefinableMap<traits_CuckooMap_vector_ord_storehash>> CuckooRefinableMap_vector_ord_storehash;
1399 // ***************************************************************************
1402 class traits_SkipListMap_less_pascal: public cc::skip_list::make_traits <
1404 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
1405 ,co::item_counter< cds::atomicity::item_counter >
1408 typedef cc::SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_less_pascal > SkipListMap_hp_less_pascal;
1409 typedef cc::SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_less_pascal > SkipListMap_dhp_less_pascal;
1410 typedef cc::SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_less_pascal > SkipListMap_nogc_less_pascal;
1411 typedef cc::SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_less_pascal > SkipListMap_rcu_gpi_less_pascal;
1412 typedef cc::SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_less_pascal > SkipListMap_rcu_gpb_less_pascal;
1413 typedef cc::SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_less_pascal > SkipListMap_rcu_gpt_less_pascal;
1414 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
1415 typedef cc::SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_less_pascal > SkipListMap_rcu_shb_less_pascal;
1416 typedef cc::SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_less_pascal > SkipListMap_rcu_sht_less_pascal;
1419 class traits_SkipListMap_less_pascal_seqcst: public cc::skip_list::make_traits <
1421 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
1422 ,co::memory_model< co::v::sequential_consistent >
1423 ,co::item_counter< cds::atomicity::item_counter >
1426 typedef cc::SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_less_pascal_seqcst > SkipListMap_hp_less_pascal_seqcst;
1427 typedef cc::SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_less_pascal_seqcst > SkipListMap_dhp_less_pascal_seqcst;
1428 typedef cc::SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_less_pascal_seqcst > SkipListMap_nogc_less_pascal_seqcst;
1429 typedef cc::SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_less_pascal_seqcst > SkipListMap_rcu_gpi_less_pascal_seqcst;
1430 typedef cc::SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_less_pascal_seqcst > SkipListMap_rcu_gpb_less_pascal_seqcst;
1431 typedef cc::SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_less_pascal_seqcst > SkipListMap_rcu_gpt_less_pascal_seqcst;
1432 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
1433 typedef cc::SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_less_pascal_seqcst > SkipListMap_rcu_shb_less_pascal_seqcst;
1434 typedef cc::SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_less_pascal_seqcst > SkipListMap_rcu_sht_less_pascal_seqcst;
1437 class traits_SkipListMap_less_pascal_stat: public cc::skip_list::make_traits <
1439 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
1440 ,co::stat< cc::skip_list::stat<> >
1441 ,co::item_counter< cds::atomicity::item_counter >
1444 typedef cc::SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_less_pascal_stat > SkipListMap_hp_less_pascal_stat;
1445 typedef cc::SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_less_pascal_stat > SkipListMap_dhp_less_pascal_stat;
1446 typedef cc::SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_less_pascal_stat > SkipListMap_nogc_less_pascal_stat;
1447 typedef cc::SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_less_pascal_stat > SkipListMap_rcu_gpi_less_pascal_stat;
1448 typedef cc::SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_less_pascal_stat > SkipListMap_rcu_gpb_less_pascal_stat;
1449 typedef cc::SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_less_pascal_stat > SkipListMap_rcu_gpt_less_pascal_stat;
1450 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
1451 typedef cc::SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_less_pascal_stat > SkipListMap_rcu_shb_less_pascal_stat;
1452 typedef cc::SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_less_pascal_stat > SkipListMap_rcu_sht_less_pascal_stat;
1455 class traits_SkipListMap_cmp_pascal: public cc::skip_list::make_traits <
1456 co::compare< compare >
1457 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
1458 ,co::item_counter< cds::atomicity::item_counter >
1461 typedef cc::SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_cmp_pascal > SkipListMap_hp_cmp_pascal;
1462 typedef cc::SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_cmp_pascal > SkipListMap_dhp_cmp_pascal;
1463 typedef cc::SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_cmp_pascal > SkipListMap_nogc_cmp_pascal;
1464 typedef cc::SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_cmp_pascal > SkipListMap_rcu_gpi_cmp_pascal;
1465 typedef cc::SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_cmp_pascal > SkipListMap_rcu_gpb_cmp_pascal;
1466 typedef cc::SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_cmp_pascal > SkipListMap_rcu_gpt_cmp_pascal;
1467 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
1468 typedef cc::SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_cmp_pascal > SkipListMap_rcu_shb_cmp_pascal;
1469 typedef cc::SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_cmp_pascal > SkipListMap_rcu_sht_cmp_pascal;
1472 class traits_SkipListMap_cmp_pascal_stat: public cc::skip_list::make_traits <
1473 co::compare< compare >
1474 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
1475 ,co::stat< cc::skip_list::stat<> >
1476 ,co::item_counter< cds::atomicity::item_counter >
1479 typedef cc::SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_cmp_pascal_stat > SkipListMap_hp_cmp_pascal_stat;
1480 typedef cc::SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_cmp_pascal_stat > SkipListMap_dhp_cmp_pascal_stat;
1481 typedef cc::SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_cmp_pascal_stat > SkipListMap_nogc_cmp_pascal_stat;
1482 typedef cc::SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_cmp_pascal_stat > SkipListMap_rcu_gpi_cmp_pascal_stat;
1483 typedef cc::SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_cmp_pascal_stat > SkipListMap_rcu_gpb_cmp_pascal_stat;
1484 typedef cc::SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_cmp_pascal_stat > SkipListMap_rcu_gpt_cmp_pascal_stat;
1485 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
1486 typedef cc::SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_cmp_pascal_stat > SkipListMap_rcu_shb_cmp_pascal_stat;
1487 typedef cc::SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_cmp_pascal_stat > SkipListMap_rcu_sht_cmp_pascal_stat;
1490 class traits_SkipListMap_less_xorshift: public cc::skip_list::make_traits <
1492 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
1493 ,co::item_counter< cds::atomicity::item_counter >
1496 typedef cc::SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_less_xorshift > SkipListMap_hp_less_xorshift;
1497 typedef cc::SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_less_xorshift > SkipListMap_dhp_less_xorshift;
1498 typedef cc::SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_less_xorshift > SkipListMap_nogc_less_xorshift;
1499 typedef cc::SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_less_xorshift > SkipListMap_rcu_gpi_less_xorshift;
1500 typedef cc::SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_less_xorshift > SkipListMap_rcu_gpb_less_xorshift;
1501 typedef cc::SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_less_xorshift > SkipListMap_rcu_gpt_less_xorshift;
1502 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
1503 typedef cc::SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_less_xorshift > SkipListMap_rcu_shb_less_xorshift;
1504 typedef cc::SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_less_xorshift > SkipListMap_rcu_sht_less_xorshift;
1507 class traits_SkipListMap_less_xorshift_stat: public cc::skip_list::make_traits <
1509 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
1510 ,co::stat< cc::skip_list::stat<> >
1511 ,co::item_counter< cds::atomicity::item_counter >
1514 typedef cc::SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_less_xorshift_stat > SkipListMap_hp_less_xorshift_stat;
1515 typedef cc::SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_less_xorshift_stat > SkipListMap_dhp_less_xorshift_stat;
1516 typedef cc::SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_less_xorshift_stat > SkipListMap_nogc_less_xorshift_stat;
1517 typedef cc::SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_less_xorshift_stat > SkipListMap_rcu_gpi_less_xorshift_stat;
1518 typedef cc::SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_less_xorshift_stat > SkipListMap_rcu_gpb_less_xorshift_stat;
1519 typedef cc::SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_less_xorshift_stat > SkipListMap_rcu_gpt_less_xorshift_stat;
1520 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
1521 typedef cc::SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_less_xorshift_stat > SkipListMap_rcu_shb_less_xorshift_stat;
1522 typedef cc::SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_less_xorshift_stat > SkipListMap_rcu_sht_less_xorshift_stat;
1525 class traits_SkipListMap_cmp_xorshift: public cc::skip_list::make_traits <
1526 co::compare< compare >
1527 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
1528 ,co::item_counter< cds::atomicity::item_counter >
1531 typedef cc::SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_cmp_xorshift > SkipListMap_hp_cmp_xorshift;
1532 typedef cc::SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_cmp_xorshift > SkipListMap_dhp_cmp_xorshift;
1533 typedef cc::SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_cmp_xorshift > SkipListMap_nogc_cmp_xorshift;
1534 typedef cc::SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_cmp_xorshift > SkipListMap_rcu_gpi_cmp_xorshift;
1535 typedef cc::SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_cmp_xorshift > SkipListMap_rcu_gpb_cmp_xorshift;
1536 typedef cc::SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_cmp_xorshift > SkipListMap_rcu_gpt_cmp_xorshift;
1537 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
1538 typedef cc::SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_cmp_xorshift > SkipListMap_rcu_shb_cmp_xorshift;
1539 typedef cc::SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_cmp_xorshift > SkipListMap_rcu_sht_cmp_xorshift;
1542 class traits_SkipListMap_cmp_xorshift_stat: public cc::skip_list::make_traits <
1543 co::compare< compare >
1544 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
1545 ,co::stat< cc::skip_list::stat<> >
1546 ,co::item_counter< cds::atomicity::item_counter >
1549 typedef cc::SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_cmp_xorshift_stat > SkipListMap_hp_cmp_xorshift_stat;
1550 typedef cc::SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_cmp_xorshift_stat > SkipListMap_dhp_cmp_xorshift_stat;
1551 typedef cc::SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_cmp_xorshift_stat > SkipListMap_nogc_cmp_xorshift_stat;
1552 typedef cc::SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_cmp_xorshift_stat > SkipListMap_rcu_gpi_cmp_xorshift_stat;
1553 typedef cc::SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_cmp_xorshift_stat > SkipListMap_rcu_gpb_cmp_xorshift_stat;
1554 typedef cc::SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_cmp_xorshift_stat > SkipListMap_rcu_gpt_cmp_xorshift_stat;
1555 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
1556 typedef cc::SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_cmp_xorshift_stat > SkipListMap_rcu_shb_cmp_xorshift_stat;
1557 typedef cc::SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_cmp_xorshift_stat > SkipListMap_rcu_sht_cmp_xorshift_stat;
1561 // ***************************************************************************
1563 struct ellen_bintree_props {
1565 typedef cc::ellen_bintree::map_node<cds::gc::HP, Key, Value> leaf_node;
1566 typedef cc::ellen_bintree::internal_node< Key, leaf_node > internal_node;
1567 typedef cc::ellen_bintree::update_desc< leaf_node, internal_node > update_desc;
1570 typedef cc::ellen_bintree::map_node<cds::gc::DHP, Key, Value> leaf_node;
1571 typedef cc::ellen_bintree::internal_node< Key, leaf_node > internal_node;
1572 typedef cc::ellen_bintree::update_desc< leaf_node, internal_node > update_desc;
1575 typedef cc::ellen_bintree::map_node<rcu_gpi, Key, Value> leaf_node;
1576 typedef cc::ellen_bintree::internal_node< Key, leaf_node > internal_node;
1577 typedef cc::ellen_bintree::update_desc< leaf_node, internal_node > update_desc;
1580 typedef cc::ellen_bintree::map_node<rcu_gpb, Key, Value> leaf_node;
1581 typedef cc::ellen_bintree::internal_node< Key, leaf_node > internal_node;
1582 typedef cc::ellen_bintree::update_desc< leaf_node, internal_node > update_desc;
1585 typedef cc::ellen_bintree::map_node<rcu_gpt, Key, Value> leaf_node;
1586 typedef cc::ellen_bintree::internal_node< Key, leaf_node > internal_node;
1587 typedef cc::ellen_bintree::update_desc< leaf_node, internal_node > update_desc;
1589 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
1591 typedef cc::ellen_bintree::map_node<rcu_shb, Key, Value> leaf_node;
1592 typedef cc::ellen_bintree::internal_node< Key, leaf_node > internal_node;
1593 typedef cc::ellen_bintree::update_desc< leaf_node, internal_node > update_desc;
1596 typedef cc::ellen_bintree::map_node<rcu_sht, Key, Value> leaf_node;
1597 typedef cc::ellen_bintree::internal_node< Key, leaf_node > internal_node;
1598 typedef cc::ellen_bintree::update_desc< leaf_node, internal_node > update_desc;
1603 struct traits_EllenBinTreeMap: public cc::ellen_bintree::make_set_traits<
1605 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
1606 ,co::item_counter< cds::atomicity::item_counter >
1609 struct traits_EllenBinTreeMap_hp : traits_EllenBinTreeMap {
1610 typedef cds::memory::pool_allocator< typename ellen_bintree_props::hp_gc::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
1612 typedef cc::EllenBinTreeMap< cds::gc::HP, Key, Value, traits_EllenBinTreeMap_hp >EllenBinTreeMap_hp;
1614 struct traits_EllenBinTreeMap_dhp : traits_EllenBinTreeMap {
1615 typedef cds::memory::pool_allocator< typename ellen_bintree_props::dhp_gc::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
1617 typedef cc::EllenBinTreeMap< cds::gc::DHP, Key, Value, traits_EllenBinTreeMap_dhp >EllenBinTreeMap_dhp;
1619 struct traits_EllenBinTreeMap_gpi : traits_EllenBinTreeMap {
1620 typedef cds::memory::pool_allocator< typename ellen_bintree_props::gpi::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
1622 typedef cc::EllenBinTreeMap< rcu_gpi, Key, Value, traits_EllenBinTreeMap_gpi >EllenBinTreeMap_rcu_gpi;
1624 struct traits_EllenBinTreeMap_gpb : traits_EllenBinTreeMap {
1625 typedef cds::memory::pool_allocator< typename ellen_bintree_props::gpb::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
1627 typedef cc::EllenBinTreeMap< rcu_gpb, Key, Value, traits_EllenBinTreeMap_gpb >EllenBinTreeMap_rcu_gpb;
1629 struct traits_EllenBinTreeMap_gpt : traits_EllenBinTreeMap {
1630 typedef cds::memory::pool_allocator< typename ellen_bintree_props::gpt::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
1632 typedef cc::EllenBinTreeMap< rcu_gpt, Key, Value, traits_EllenBinTreeMap_gpt >EllenBinTreeMap_rcu_gpt;
1634 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
1635 struct traits_EllenBinTreeMap_shb : traits_EllenBinTreeMap {
1636 typedef cds::memory::pool_allocator< typename ellen_bintree_props::shb::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
1638 typedef cc::EllenBinTreeMap< rcu_shb, Key, Value, traits_EllenBinTreeMap_shb >EllenBinTreeMap_rcu_shb;
1640 struct traits_EllenBinTreeMap_sht : traits_EllenBinTreeMap {
1641 typedef cds::memory::pool_allocator< typename ellen_bintree_props::sht::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
1643 typedef cc::EllenBinTreeMap< rcu_sht, Key, Value, traits_EllenBinTreeMap_sht >EllenBinTreeMap_rcu_sht;
1646 struct traits_EllenBinTreeMap_yield : public traits_EllenBinTreeMap
1648 typedef cds::backoff::yield back_off;
1650 struct traits_EllenBinTreeMap_hp_yield : traits_EllenBinTreeMap_yield {
1651 typedef cds::memory::pool_allocator< typename ellen_bintree_props::hp_gc::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
1653 typedef cc::EllenBinTreeMap< cds::gc::HP, Key, Value, traits_EllenBinTreeMap_hp_yield >EllenBinTreeMap_hp_yield;
1655 struct traits_EllenBinTreeMap_dhp_yield : traits_EllenBinTreeMap_yield {
1656 typedef cds::memory::pool_allocator< typename ellen_bintree_props::dhp_gc::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
1658 typedef cc::EllenBinTreeMap< cds::gc::DHP, Key, Value, traits_EllenBinTreeMap_dhp_yield >EllenBinTreeMap_dhp_yield;
1660 struct traits_EllenBinTreeMap_gpb_yield : traits_EllenBinTreeMap_yield {
1661 typedef cds::memory::pool_allocator< typename ellen_bintree_props::gpb::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
1663 typedef cc::EllenBinTreeMap< rcu_gpb, Key, Value, traits_EllenBinTreeMap_gpb_yield >EllenBinTreeMap_rcu_gpb_yield;
1666 struct traits_EllenBinTreeMap_stat: public cc::ellen_bintree::make_set_traits<
1668 ,cc::ellen_bintree::update_desc_allocator<
1669 cds::memory::pool_allocator< typename ellen_bintree_props::hp_gc::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
1671 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
1672 ,co::stat< cc::ellen_bintree::stat<> >
1673 ,co::item_counter< cds::atomicity::item_counter >
1677 struct traits_EllenBinTreeMap_stat_hp : public traits_EllenBinTreeMap_stat
1679 typedef cds::memory::pool_allocator< typename ellen_bintree_props::hp_gc::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
1681 typedef cc::EllenBinTreeMap< cds::gc::HP, Key, Value, traits_EllenBinTreeMap_stat_hp > EllenBinTreeMap_hp_stat;
1683 struct traits_EllenBinTreeMap_stat_dhp : public traits_EllenBinTreeMap_stat
1685 typedef cds::memory::pool_allocator< typename ellen_bintree_props::dhp_gc::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
1687 typedef cc::EllenBinTreeMap< cds::gc::HP, Key, Value, traits_EllenBinTreeMap_stat_dhp > EllenBinTreeMap_dhp_stat;
1689 struct traits_EllenBinTreeMap_stat_gpi : public traits_EllenBinTreeMap_stat
1691 typedef cds::memory::pool_allocator< typename ellen_bintree_props::gpi::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
1693 typedef cc::EllenBinTreeMap< rcu_gpi, Key, Value, traits_EllenBinTreeMap_stat_gpi > EllenBinTreeMap_rcu_gpi_stat;
1695 struct traits_EllenBinTreeMap_stat_gpb : public traits_EllenBinTreeMap_stat
1697 typedef cds::memory::pool_allocator< typename ellen_bintree_props::gpb::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
1699 typedef cc::EllenBinTreeMap< rcu_gpb, Key, Value, traits_EllenBinTreeMap_stat_gpb > EllenBinTreeMap_rcu_gpb_stat;
1701 struct traits_EllenBinTreeMap_stat_gpt : public traits_EllenBinTreeMap_stat
1703 typedef cds::memory::pool_allocator< typename ellen_bintree_props::gpt::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
1705 typedef cc::EllenBinTreeMap< rcu_gpt, Key, Value, traits_EllenBinTreeMap_stat_gpt > EllenBinTreeMap_rcu_gpt_stat;
1707 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
1708 struct traits_EllenBinTreeMap_stat_shb : public traits_EllenBinTreeMap_stat
1710 typedef cds::memory::pool_allocator< typename ellen_bintree_props::shb::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
1712 typedef cc::EllenBinTreeMap< rcu_shb, Key, Value, traits_EllenBinTreeMap_stat_shb > EllenBinTreeMap_rcu_shb_stat;
1714 struct traits_EllenBinTreeMap_stat_sht : public traits_EllenBinTreeMap_stat
1716 typedef cds::memory::pool_allocator< typename ellen_bintree_props::sht::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
1718 typedef cc::EllenBinTreeMap< rcu_sht, Key, Value, traits_EllenBinTreeMap_stat_sht > EllenBinTreeMap_rcu_sht_stat;
1721 // ***************************************************************************
1722 // BronsonAVLTreeMap
1723 typedef cds::memory::vyukov_queue_pool< std::mutex > BronsonAVLTreeMap_simple_pool;
1724 typedef cds::memory::lazy_vyukov_queue_pool< std::mutex > BronsonAVLTreeMap_lazy_pool;
1725 typedef cds::memory::bounded_vyukov_queue_pool< std::mutex > BronsonAVLTreeMap_bounded_pool;
1727 struct BronsonAVLTreeMap_less: public
1728 cc::bronson_avltree::make_traits<
1730 ,cc::bronson_avltree::relaxed_insert< false >
1731 ,co::item_counter< cds::atomicity::item_counter >
1734 typedef cc::BronsonAVLTreeMap< rcu_gpi, Key, Value, BronsonAVLTreeMap_less > BronsonAVLTreeMap_rcu_gpi_less;
1735 typedef cc::BronsonAVLTreeMap< rcu_gpb, Key, Value, BronsonAVLTreeMap_less > BronsonAVLTreeMap_rcu_gpb_less;
1736 typedef cc::BronsonAVLTreeMap< rcu_gpt, Key, Value, BronsonAVLTreeMap_less > BronsonAVLTreeMap_rcu_gpt_less;
1737 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
1738 typedef cc::BronsonAVLTreeMap< rcu_shb, Key, Value, BronsonAVLTreeMap_less > BronsonAVLTreeMap_rcu_shb_less;
1739 typedef cc::BronsonAVLTreeMap< rcu_sht, Key, Value, BronsonAVLTreeMap_less > BronsonAVLTreeMap_rcu_sht_less;
1741 struct BronsonAVLTreeMap_cmp_stat: public
1742 cc::bronson_avltree::make_traits<
1743 co::compare< compare >
1744 ,cc::bronson_avltree::relaxed_insert< false >
1745 ,co::item_counter< cds::atomicity::item_counter >
1746 ,co::stat< cc::bronson_avltree::stat<>>
1749 typedef cc::BronsonAVLTreeMap< rcu_gpi, Key, Value, BronsonAVLTreeMap_cmp_stat > BronsonAVLTreeMap_rcu_gpi_cmp_stat;
1750 typedef cc::BronsonAVLTreeMap< rcu_gpb, Key, Value, BronsonAVLTreeMap_cmp_stat > BronsonAVLTreeMap_rcu_gpb_cmp_stat;
1751 typedef cc::BronsonAVLTreeMap< rcu_gpt, Key, Value, BronsonAVLTreeMap_cmp_stat > BronsonAVLTreeMap_rcu_gpt_cmp_stat;
1752 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
1753 typedef cc::BronsonAVLTreeMap< rcu_shb, Key, Value, BronsonAVLTreeMap_cmp_stat > BronsonAVLTreeMap_rcu_shb_cmp_stat;
1754 typedef cc::BronsonAVLTreeMap< rcu_sht, Key, Value, BronsonAVLTreeMap_cmp_stat > BronsonAVLTreeMap_rcu_sht_cmp_stat;
1757 struct BronsonAVLTreeMap_less_pool_simple: public BronsonAVLTreeMap_less
1759 typedef cds::sync::pool_monitor<BronsonAVLTreeMap_simple_pool> sync_monitor;
1761 typedef cc::BronsonAVLTreeMap< rcu_gpi, Key, Value, BronsonAVLTreeMap_less_pool_simple > BronsonAVLTreeMap_rcu_gpi_less_pool_simple;
1762 typedef cc::BronsonAVLTreeMap< rcu_gpb, Key, Value, BronsonAVLTreeMap_less_pool_simple > BronsonAVLTreeMap_rcu_gpb_less_pool_simple;
1763 typedef cc::BronsonAVLTreeMap< rcu_gpt, Key, Value, BronsonAVLTreeMap_less_pool_simple > BronsonAVLTreeMap_rcu_gpt_less_pool_simple;
1764 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
1765 typedef cc::BronsonAVLTreeMap< rcu_shb, Key, Value, BronsonAVLTreeMap_less_pool_simple > BronsonAVLTreeMap_rcu_shb_less_pool_simple;
1766 typedef cc::BronsonAVLTreeMap< rcu_sht, Key, Value, BronsonAVLTreeMap_less_pool_simple > BronsonAVLTreeMap_rcu_sht_less_pool_simple;
1768 struct BronsonAVLTreeMap_less_pool_simple_stat : public BronsonAVLTreeMap_less_pool_simple
1770 typedef cc::bronson_avltree::stat<> stat;
1772 typedef cc::BronsonAVLTreeMap< rcu_gpi, Key, Value, BronsonAVLTreeMap_less_pool_simple_stat > BronsonAVLTreeMap_rcu_gpi_less_pool_simple_stat;
1773 typedef cc::BronsonAVLTreeMap< rcu_gpb, Key, Value, BronsonAVLTreeMap_less_pool_simple_stat > BronsonAVLTreeMap_rcu_gpb_less_pool_simple_stat;
1774 typedef cc::BronsonAVLTreeMap< rcu_gpt, Key, Value, BronsonAVLTreeMap_less_pool_simple_stat > BronsonAVLTreeMap_rcu_gpt_less_pool_simple_stat;
1775 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
1776 typedef cc::BronsonAVLTreeMap< rcu_shb, Key, Value, BronsonAVLTreeMap_less_pool_simple_stat > BronsonAVLTreeMap_rcu_shb_less_pool_simple_stat;
1777 typedef cc::BronsonAVLTreeMap< rcu_sht, Key, Value, BronsonAVLTreeMap_less_pool_simple_stat > BronsonAVLTreeMap_rcu_sht_less_pool_simple_stat;
1779 struct BronsonAVLTreeMap_less_pool_lazy: public BronsonAVLTreeMap_less
1781 typedef cds::sync::pool_monitor<BronsonAVLTreeMap_lazy_pool> sync_monitor;
1782 static CDS_CONSTEXPR bool const relaxed_insert = true;
1784 typedef cc::BronsonAVLTreeMap< rcu_gpi, Key, Value, BronsonAVLTreeMap_less_pool_lazy > BronsonAVLTreeMap_rcu_gpi_less_pool_lazy;
1785 typedef cc::BronsonAVLTreeMap< rcu_gpb, Key, Value, BronsonAVLTreeMap_less_pool_lazy > BronsonAVLTreeMap_rcu_gpb_less_pool_lazy;
1786 typedef cc::BronsonAVLTreeMap< rcu_gpt, Key, Value, BronsonAVLTreeMap_less_pool_lazy > BronsonAVLTreeMap_rcu_gpt_less_pool_lazy;
1787 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
1788 typedef cc::BronsonAVLTreeMap< rcu_shb, Key, Value, BronsonAVLTreeMap_less_pool_lazy > BronsonAVLTreeMap_rcu_shb_less_pool_lazy;
1789 typedef cc::BronsonAVLTreeMap< rcu_sht, Key, Value, BronsonAVLTreeMap_less_pool_lazy > BronsonAVLTreeMap_rcu_sht_less_pool_lazy;
1791 struct BronsonAVLTreeMap_less_pool_lazy_stat : public BronsonAVLTreeMap_less_pool_lazy
1793 typedef cc::bronson_avltree::stat<> stat;
1795 typedef cc::BronsonAVLTreeMap< rcu_gpi, Key, Value, BronsonAVLTreeMap_less_pool_lazy_stat > BronsonAVLTreeMap_rcu_gpi_less_pool_lazy_stat;
1796 typedef cc::BronsonAVLTreeMap< rcu_gpb, Key, Value, BronsonAVLTreeMap_less_pool_lazy_stat > BronsonAVLTreeMap_rcu_gpb_less_pool_lazy_stat;
1797 typedef cc::BronsonAVLTreeMap< rcu_gpt, Key, Value, BronsonAVLTreeMap_less_pool_lazy_stat > BronsonAVLTreeMap_rcu_gpt_less_pool_lazy_stat;
1798 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
1799 typedef cc::BronsonAVLTreeMap< rcu_shb, Key, Value, BronsonAVLTreeMap_less_pool_lazy_stat > BronsonAVLTreeMap_rcu_shb_less_pool_lazy_stat;
1800 typedef cc::BronsonAVLTreeMap< rcu_sht, Key, Value, BronsonAVLTreeMap_less_pool_lazy_stat > BronsonAVLTreeMap_rcu_sht_less_pool_lazy_stat;
1802 struct BronsonAVLTreeMap_less_pool_bounded: public BronsonAVLTreeMap_less
1804 typedef cds::sync::pool_monitor<BronsonAVLTreeMap_bounded_pool> sync_monitor;
1805 static CDS_CONSTEXPR bool const relaxed_insert = true;
1807 typedef cc::BronsonAVLTreeMap< rcu_gpi, Key, Value, BronsonAVLTreeMap_less_pool_bounded > BronsonAVLTreeMap_rcu_gpi_less_pool_bounded;
1808 typedef cc::BronsonAVLTreeMap< rcu_gpb, Key, Value, BronsonAVLTreeMap_less_pool_bounded > BronsonAVLTreeMap_rcu_gpb_less_pool_bounded;
1809 typedef cc::BronsonAVLTreeMap< rcu_gpt, Key, Value, BronsonAVLTreeMap_less_pool_bounded > BronsonAVLTreeMap_rcu_gpt_less_pool_bounded;
1810 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
1811 typedef cc::BronsonAVLTreeMap< rcu_shb, Key, Value, BronsonAVLTreeMap_less_pool_bounded > BronsonAVLTreeMap_rcu_shb_less_pool_bounded;
1812 typedef cc::BronsonAVLTreeMap< rcu_sht, Key, Value, BronsonAVLTreeMap_less_pool_bounded > BronsonAVLTreeMap_rcu_sht_less_pool_bounded;
1814 struct BronsonAVLTreeMap_less_pool_bounded_stat : public BronsonAVLTreeMap_less_pool_bounded
1816 typedef cc::bronson_avltree::stat<> stat;
1818 typedef cc::BronsonAVLTreeMap< rcu_gpi, Key, Value, BronsonAVLTreeMap_less_pool_bounded_stat > BronsonAVLTreeMap_rcu_gpi_less_pool_bounded_stat;
1819 typedef cc::BronsonAVLTreeMap< rcu_gpb, Key, Value, BronsonAVLTreeMap_less_pool_bounded_stat > BronsonAVLTreeMap_rcu_gpb_less_pool_bounded_stat;
1820 typedef cc::BronsonAVLTreeMap< rcu_gpt, Key, Value, BronsonAVLTreeMap_less_pool_bounded_stat > BronsonAVLTreeMap_rcu_gpt_less_pool_bounded_stat;
1821 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
1822 typedef cc::BronsonAVLTreeMap< rcu_shb, Key, Value, BronsonAVLTreeMap_less_pool_bounded_stat > BronsonAVLTreeMap_rcu_shb_less_pool_bounded_stat;
1823 typedef cc::BronsonAVLTreeMap< rcu_sht, Key, Value, BronsonAVLTreeMap_less_pool_bounded_stat > BronsonAVLTreeMap_rcu_sht_less_pool_bounded_stat;
1826 // ***************************************************************************
1827 // Standard implementations
1829 typedef StdMap< Key, Value, cds::sync::spin > StdMap_Spin;
1830 typedef StdMap< Key, Value, lock::NoLock> StdMap_NoLock;
1832 typedef StdHashMap< Key, Value, cds::sync::spin > StdHashMap_Spin;
1833 typedef StdHashMap< Key, Value, lock::NoLock > StdHashMap_NoLock;
1837 template <typename Map>
1838 static inline void print_stat( Map const& /*m*/ )
1841 template <typename Map>
1842 static inline void additional_cleanup( Map& /*m*/ )
1845 template <typename Map>
1846 static inline void additional_check( Map& /*m*/ )
1850 template <typename K, typename T, typename Traits >
1851 static inline void print_stat( cc::CuckooMap< K, T, Traits > const& m )
1853 CPPUNIT_MSG( m.statistics() << m.mutex_policy_statistics() );
1856 template <typename GC, typename K, typename T, typename Traits >
1857 static inline void print_stat( cc::SkipListMap< GC, K, T, Traits > const& m )
1859 CPPUNIT_MSG( m.statistics() );
1862 template <typename GC, typename K, typename T, typename Traits >
1863 static inline void print_stat( cc::SplitListMap< GC, K, T, Traits > const& m )
1865 CPPUNIT_MSG( m.statistics() );
1869 template <typename GC, typename Key, typename T, typename Traits>
1870 static inline void print_stat( cc::EllenBinTreeMap<GC, Key, T, Traits> const& s )
1872 CPPUNIT_MSG( s.statistics() );
1874 template <typename GC, typename Key, typename T, typename Traits>
1875 static inline void additional_cleanup( cc::EllenBinTreeMap<GC, Key, T, Traits>& /*s*/ )
1877 ellen_bintree_pool::internal_node_counter::reset();
1879 namespace ellen_bintree_check {
1880 static inline void check_stat( cds::intrusive::ellen_bintree::empty_stat const& /*s*/ )
1882 // This check is not valid for thread-based RCU
1884 CPPUNIT_CHECK_CURRENT_EX( ellen_bintree_pool::internal_node_counter::m_nAlloc.get() == ellen_bintree_pool::internal_node_counter::m_nFree.get(),
1885 "m_nAlloc=" << ellen_bintree_pool::internal_node_counter::m_nAlloc.get()
1886 << ", m_nFree=" << ellen_bintree_pool::internal_node_counter::m_nFree.get()
1891 static inline void check_stat( cds::intrusive::ellen_bintree::stat<> const& stat )
1893 CPPUNIT_CHECK_CURRENT_EX( stat.m_nInternalNodeCreated == stat.m_nInternalNodeDeleted,
1894 "m_nInternalNodeCreated=" << stat.m_nInternalNodeCreated
1895 << " m_nInternalNodeDeleted=" << stat.m_nInternalNodeDeleted );
1896 CPPUNIT_CHECK_CURRENT_EX( stat.m_nUpdateDescCreated == stat.m_nUpdateDescDeleted,
1897 "m_nUpdateDescCreated=" << stat.m_nUpdateDescCreated
1898 << " m_nUpdateDescDeleted=" << stat.m_nUpdateDescDeleted );
1899 CPPUNIT_CHECK_CURRENT_EX( ellen_bintree_pool::internal_node_counter::m_nAlloc.get() == stat.m_nInternalNodeCreated,
1900 "allocated=" << ellen_bintree_pool::internal_node_counter::m_nAlloc.get()
1901 << "m_nInternalNodeCreated=" << stat.m_nInternalNodeCreated );
1903 } // namespace ellen_bintree_check
1904 template <typename GC, typename Key, typename T, typename Traits>
1905 static inline void additional_check( cc::EllenBinTreeMap<GC, Key, T, Traits>& s )
1907 GC::force_dispose();
1908 ellen_bintree_check::check_stat( s.statistics() );
1911 // BronsonAVLTreeMap
1912 template <typename GC, typename Key, typename T, typename Traits>
1913 static inline void print_stat( cc::BronsonAVLTreeMap<GC, Key, T, Traits> const& s )
1915 CPPUNIT_MSG( s.statistics() );
1918 template <typename GC, typename Key, typename T, typename Traits>
1919 static inline void additional_check( cc::BronsonAVLTreeMap<GC, Key, T, Traits>& m )
1921 m.check_consistency([]( size_t nLevel, size_t hLeft, size_t hRight )
1923 CPPUNIT_MSG( "Tree violation on level=" << nLevel << ": hLeft=" << hLeft << ", hRight=" << hRight )
1927 template <typename K, typename V, typename Traits>
1928 static inline void print_stat( CuckooMap< K, V, Traits > const& m )
1930 typedef CuckooMap< K, V, Traits > map_type;
1931 print_stat( static_cast<typename map_type::cuckoo_base_class const&>(m) );
1935 #endif // ifndef CDSUNIT_MAP_TYPES_H