3 #ifndef _CDSUNIT_SET2_SET_TYPES_H
4 #define _CDSUNIT_SET2_SET_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_list_hp.h>
13 #include <cds/container/michael_list_dhp.h>
14 #include <cds/container/michael_list_rcu.h>
15 #include <cds/container/lazy_list_hp.h>
16 #include <cds/container/lazy_list_dhp.h>
17 #include <cds/container/lazy_list_rcu.h>
19 #include <cds/container/michael_set.h>
20 #include <cds/container/michael_set_rcu.h>
22 #include <cds/container/split_list_set.h>
23 #include <cds/container/split_list_set_rcu.h>
25 #include <cds/container/cuckoo_set.h>
27 #include <cds/container/skip_list_set_hp.h>
28 #include <cds/container/skip_list_set_dhp.h>
29 #include <cds/container/skip_list_set_rcu.h>
31 #include <cds/container/ellen_bintree_set_rcu.h>
32 #include <cds/container/ellen_bintree_set_hp.h>
33 #include <cds/container/ellen_bintree_set_ptb.h>
35 #include <cds/container/striped_set/std_list.h>
36 #include <cds/container/striped_set/std_vector.h>
37 #include <cds/container/striped_set/std_set.h>
38 #include <cds/container/striped_set/std_hash_set.h>
39 #include <cds/container/striped_set/boost_unordered_set.h>
41 #include <boost/version.hpp>
42 #if BOOST_VERSION >= 104800
43 # include <cds/container/striped_set/boost_slist.h>
44 # include <cds/container/striped_set/boost_list.h>
45 # include <cds/container/striped_set/boost_vector.h>
46 # include <cds/container/striped_set/boost_stable_vector.h>
47 # include <cds/container/striped_set/boost_set.h>
48 # include <cds/container/striped_set/boost_flat_set.h>
50 #include <cds/container/striped_set.h>
52 #include <cds/lock/spinlock.h>
53 #include <boost/functional/hash/hash.hpp>
55 #include "cppunit/cppunit_mini.h"
56 #include "lock/nolock.h"
57 #include "set2/std_set.h"
58 #include "set2/std_hash_set.h"
59 #include "michael_alloc.h"
60 #include "print_cuckoo_stat.h"
61 #include "print_split_list_stat.h"
62 #include "print_skip_list_stat.h"
63 #include "print_ellenbintree_stat.h"
64 #include "ellen_bintree_update_desc_pool.h"
67 namespace cc = cds::container;
68 namespace co = cds::opt;
70 typedef cds::urcu::gc< cds::urcu::general_instant<> > rcu_gpi;
71 typedef cds::urcu::gc< cds::urcu::general_buffered<> > rcu_gpb;
72 typedef cds::urcu::gc< cds::urcu::general_threaded<> > rcu_gpt;
73 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
74 typedef cds::urcu::gc< cds::urcu::signal_buffered<> > rcu_shb;
75 typedef cds::urcu::gc< cds::urcu::signal_threaded<> > rcu_sht;
78 template <typename V, typename... Options>
79 class CuckooStripedSet:
80 public cc::CuckooSet< V,
81 typename cc::cuckoo::make_traits<
82 co::mutex_policy< cc::cuckoo::striping<> >
88 typedef typename cc::cuckoo::make_traits<
89 co::mutex_policy< cc::cuckoo::striping<> >
91 >::type cuckoo_traits;
93 typedef cc::CuckooSet< V, cuckoo_traits > cuckoo_base_class;
96 CuckooStripedSet( size_t nCapacity, size_t nLoadFactor )
97 : cuckoo_base_class( nCapacity / (nLoadFactor * 16), (unsigned int) 4 )
100 template <typename Q, typename Pred>
101 bool erase_with( Q const& key, Pred pred )
103 return cuckoo_base_class::erase_with( key, typename std::conditional< cuckoo_base_class::c_isSorted, Pred, typename Pred::equal_to>::type() );
107 template <typename V, typename... Options>
108 class CuckooRefinableSet:
109 public cc::CuckooSet< V,
110 typename cc::cuckoo::make_traits<
111 co::mutex_policy< cc::cuckoo::refinable<> >
117 typedef typename cc::cuckoo::make_traits<
118 co::mutex_policy< cc::cuckoo::refinable<> >
120 >::type cuckoo_traits;
122 typedef cc::CuckooSet< V, cuckoo_traits > cuckoo_base_class;
125 CuckooRefinableSet( size_t nCapacity, size_t nLoadFactor )
126 : cuckoo_base_class( nCapacity / (nLoadFactor * 16), (unsigned int) 4 )
129 template <typename Q, typename Pred>
130 bool erase_with( Q const& key, Pred pred )
132 return cuckoo_base_class::erase_with( key, typename std::conditional< cuckoo_base_class::c_isSorted, Pred, typename Pred::equal_to>::type() );
136 template <typename Key>
138 int operator ()(Key const& k1, Key const& k2) const
140 if ( std::less<Key>( k1, k2 ) )
142 return std::less<Key>( k2, k1 ) ? 1 : 0;
146 #define CDSUNIT_INT_COMPARE(t) template <> struct cmp<t> { int operator()( t k1, t k2 ){ return (int)(k1 - k2); } }
147 CDSUNIT_INT_COMPARE(char);
148 CDSUNIT_INT_COMPARE(unsigned char);
149 CDSUNIT_INT_COMPARE(int);
150 CDSUNIT_INT_COMPARE(unsigned int);
151 CDSUNIT_INT_COMPARE(long);
152 CDSUNIT_INT_COMPARE(unsigned long);
153 CDSUNIT_INT_COMPARE(long long);
154 CDSUNIT_INT_COMPARE(unsigned long long);
155 #undef CDSUNIT_INT_COMPARE
158 struct cmp<std::string>
160 int operator()(std::string const& s1, std::string const& s2)
162 return s1.compare( s2 );
164 int operator()(std::string const& s1, char const * s2)
166 return s1.compare( s2 );
168 int operator()(char const * s1, std::string const& s2)
170 return -s2.compare( s1 );
174 template <typename Key, typename Value>
177 typedef Key key_type;
178 typedef Value value_type;
184 /*explicit*/ key_val( key_type const& k ): key(k), val() {}
185 key_val( key_type const& k, value_type const& v ): key(k), val(v) {}
187 template <typename K>
188 /*explicit*/ key_val( K const& k ): key(k) {}
190 template <typename K, typename T>
191 key_val( K const& k, T const& v ): key(k), val(v) {}
194 typedef co::v::hash<key_type> key_hash;
195 typedef std::less<key_type> key_less;
196 typedef cmp<key_type> key_compare;
199 bool operator()( key_val const& k1, key_val const& k2 ) const
201 return key_less()( k1.key, k2.key );
203 bool operator()( key_type const& k1, key_val const& k2 ) const
205 return key_less()( k1, k2.key );
207 bool operator()( key_val const& k1, key_type const& k2 ) const
209 return key_less()( k1.key, k2 );
214 int operator()( key_val const& k1, key_val const& k2 ) const
216 return key_compare()( k1.key, k2.key );
218 int operator()( key_type const& k1, key_val const& k2 ) const
220 return key_compare()( k1, k2.key );
222 int operator()( key_val const& k1, key_type const& k2 ) const
224 return key_compare()( k1.key, k2 );
229 bool operator()( key_val const& k1, key_val const& k2 ) const
231 return key_compare()( k1.key, k2.key ) == 0;
233 bool operator()( key_type const& k1, key_val const& k2 ) const
235 return key_compare()( k1, k2.key ) == 0;
237 bool operator()( key_val const& k1, key_type const& k2 ) const
239 return key_compare()( k1.key, k2 ) == 0;
244 struct hash: public key_hash
246 size_t operator()( key_val const& v ) const
248 return key_hash::operator()( v.key );
250 size_t operator()( key_type const& key ) const
252 return key_hash::operator()( key );
254 template <typename Q>
255 size_t operator()( Q const& k ) const
257 return key_hash::operator()( k );
261 struct hash2: public hash
263 size_t operator()( key_val const& k ) const
265 size_t seed = ~hash::operator ()( k );
266 boost::hash_combine( seed, k.key );
269 size_t operator()( key_type const& k ) const
271 size_t seed = ~hash::operator ()( k );
272 boost::hash_combine( seed, k );
275 template <typename Q>
276 size_t operator()( Q const& k ) const
278 return key_hash::operator()( k );
282 // ***************************************************************************
285 struct traits_MichaelList_cmp_stdAlloc:
286 public cc::michael_list::make_traits<
287 co::compare< compare >
290 typedef cc::MichaelList< cds::gc::HP, key_val, traits_MichaelList_cmp_stdAlloc > MichaelList_HP_cmp_stdAlloc;
291 typedef cc::MichaelList< cds::gc::DHP, key_val, traits_MichaelList_cmp_stdAlloc > MichaelList_DHP_cmp_stdAlloc;
292 typedef cc::MichaelList< rcu_gpi, key_val, traits_MichaelList_cmp_stdAlloc > MichaelList_RCU_GPI_cmp_stdAlloc;
293 typedef cc::MichaelList< rcu_gpb, key_val, traits_MichaelList_cmp_stdAlloc > MichaelList_RCU_GPB_cmp_stdAlloc;
294 typedef cc::MichaelList< rcu_gpt, key_val, traits_MichaelList_cmp_stdAlloc > MichaelList_RCU_GPT_cmp_stdAlloc;
295 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
296 typedef cc::MichaelList< rcu_shb, key_val, traits_MichaelList_cmp_stdAlloc > MichaelList_RCU_SHB_cmp_stdAlloc;
297 typedef cc::MichaelList< rcu_sht, key_val, traits_MichaelList_cmp_stdAlloc > MichaelList_RCU_SHT_cmp_stdAlloc;
300 struct traits_MichaelList_cmp_stdAlloc_seqcst : public traits_MichaelList_cmp_stdAlloc
302 typedef co::v::sequential_consistent memory_model;
304 typedef cc::MichaelList< cds::gc::HP, key_val, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_HP_cmp_stdAlloc_seqcst;
305 typedef cc::MichaelList< cds::gc::DHP, key_val, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_DHP_cmp_stdAlloc_seqcst;
306 typedef cc::MichaelList< rcu_gpi, key_val, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_RCU_GPI_cmp_stdAlloc_seqcst;
307 typedef cc::MichaelList< rcu_gpb, key_val, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_RCU_GPB_cmp_stdAlloc_seqcst;
308 typedef cc::MichaelList< rcu_gpt, key_val, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_RCU_GPT_cmp_stdAlloc_seqcst;
309 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
310 typedef cc::MichaelList< rcu_shb, key_val, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_RCU_SHB_cmp_stdAlloc_seqcst;
311 typedef cc::MichaelList< rcu_sht, key_val, traits_MichaelList_cmp_stdAlloc_seqcst > MichaelList_RCU_SHT_cmp_stdAlloc_seqcst;
314 struct traits_MichaelList_less_stdAlloc :
315 public cc::michael_list::make_traits<
319 typedef cc::MichaelList< cds::gc::HP, key_val, traits_MichaelList_less_stdAlloc > MichaelList_HP_less_stdAlloc;
320 typedef cc::MichaelList< cds::gc::DHP, key_val, traits_MichaelList_less_stdAlloc > MichaelList_DHP_less_stdAlloc;
321 typedef cc::MichaelList< rcu_gpi, key_val, traits_MichaelList_less_stdAlloc > MichaelList_RCU_GPI_less_stdAlloc;
322 typedef cc::MichaelList< rcu_gpb, key_val, traits_MichaelList_less_stdAlloc > MichaelList_RCU_GPB_less_stdAlloc;
323 typedef cc::MichaelList< rcu_gpt, key_val, traits_MichaelList_less_stdAlloc > MichaelList_RCU_GPT_less_stdAlloc;
324 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
325 typedef cc::MichaelList< rcu_shb, key_val, traits_MichaelList_less_stdAlloc > MichaelList_RCU_SHB_less_stdAlloc;
326 typedef cc::MichaelList< rcu_sht, key_val, traits_MichaelList_less_stdAlloc > MichaelList_RCU_SHT_less_stdAlloc;
329 struct traits_MichaelList_less_stdAlloc_seqcst :
330 public cc::michael_list::make_traits<
332 ,co::memory_model< co::v::sequential_consistent >
335 typedef cc::MichaelList< cds::gc::HP, key_val, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_HP_less_stdAlloc_seqcst;
336 typedef cc::MichaelList< cds::gc::DHP, key_val, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_DHP_less_stdAlloc_seqcst;
337 typedef cc::MichaelList< rcu_gpi, key_val, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_RCU_GPI_less_stdAlloc_seqcst;
338 typedef cc::MichaelList< rcu_gpb, key_val, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_RCU_GPB_less_stdAlloc_seqcst;
339 typedef cc::MichaelList< rcu_gpt, key_val, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_RCU_GPT_less_stdAlloc_seqcst;
340 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
341 typedef cc::MichaelList< rcu_shb, key_val, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_RCU_SHB_less_stdAlloc_seqcst;
342 typedef cc::MichaelList< rcu_sht, key_val, traits_MichaelList_less_stdAlloc_seqcst > MichaelList_RCU_SHT_less_stdAlloc_seqcst;
345 struct traits_MichaelList_cmp_michaelAlloc :
346 public cc::michael_list::make_traits<
347 co::compare< compare >,
348 co::allocator< memory::MichaelAllocator<int> >
351 typedef cc::MichaelList< cds::gc::HP, key_val, traits_MichaelList_cmp_michaelAlloc > MichaelList_HP_cmp_michaelAlloc;
352 typedef cc::MichaelList< cds::gc::DHP, key_val, traits_MichaelList_cmp_michaelAlloc > MichaelList_DHP_cmp_michaelAlloc;
353 typedef cc::MichaelList< rcu_gpi, key_val, traits_MichaelList_cmp_michaelAlloc > MichaelList_RCU_GPI_cmp_michaelAlloc;
354 typedef cc::MichaelList< rcu_gpb, key_val, traits_MichaelList_cmp_michaelAlloc > MichaelList_RCU_GPB_cmp_michaelAlloc;
355 typedef cc::MichaelList< rcu_gpt, key_val, traits_MichaelList_cmp_michaelAlloc > MichaelList_RCU_GPT_cmp_michaelAlloc;
356 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
357 typedef cc::MichaelList< rcu_shb, key_val, traits_MichaelList_cmp_michaelAlloc > MichaelList_RCU_SHB_cmp_michaelAlloc;
358 typedef cc::MichaelList< rcu_sht, key_val, traits_MichaelList_cmp_michaelAlloc > MichaelList_RCU_SHT_cmp_michaelAlloc;
361 struct traits_MichaelList_less_michaelAlloc :
362 public cc::michael_list::make_traits<
364 co::allocator< memory::MichaelAllocator<int> >
367 typedef cc::MichaelList< cds::gc::HP, key_val, traits_MichaelList_less_michaelAlloc > MichaelList_HP_less_michaelAlloc;
368 typedef cc::MichaelList< cds::gc::DHP, key_val, traits_MichaelList_less_michaelAlloc > MichaelList_DHP_less_michaelAlloc;
369 typedef cc::MichaelList< rcu_gpi, key_val, traits_MichaelList_less_michaelAlloc > MichaelList_RCU_GPI_less_michaelAlloc;
370 typedef cc::MichaelList< rcu_gpb, key_val, traits_MichaelList_less_michaelAlloc > MichaelList_RCU_GPB_less_michaelAlloc;
371 typedef cc::MichaelList< rcu_gpt, key_val, traits_MichaelList_less_michaelAlloc > MichaelList_RCU_GPT_less_michaelAlloc;
372 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
373 typedef cc::MichaelList< rcu_shb, key_val, traits_MichaelList_less_michaelAlloc > MichaelList_RCU_SHB_less_michaelAlloc;
374 typedef cc::MichaelList< rcu_sht, key_val, traits_MichaelList_less_michaelAlloc > MichaelList_RCU_SHT_less_michaelAlloc;
377 // ***************************************************************************
378 // MichaelHashSet based on MichaelList
380 struct traits_MichaelSet_stdAlloc :
381 public cc::michael_set::make_traits<
385 typedef cc::MichaelHashSet< cds::gc::HP, MichaelList_HP_cmp_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_HP_cmp_stdAlloc;
386 typedef cc::MichaelHashSet< cds::gc::DHP, MichaelList_DHP_cmp_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_DHP_cmp_stdAlloc;
387 typedef cc::MichaelHashSet< rcu_gpi, MichaelList_RCU_GPI_cmp_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_RCU_GPI_cmp_stdAlloc;
388 typedef cc::MichaelHashSet< rcu_gpb, MichaelList_RCU_GPB_cmp_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_RCU_GPB_cmp_stdAlloc;
389 typedef cc::MichaelHashSet< rcu_gpt, MichaelList_RCU_GPT_cmp_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_RCU_GPT_cmp_stdAlloc;
390 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
391 typedef cc::MichaelHashSet< rcu_shb, MichaelList_RCU_SHB_cmp_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_RCU_SHB_cmp_stdAlloc;
392 typedef cc::MichaelHashSet< rcu_sht, MichaelList_RCU_SHT_cmp_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_RCU_SHT_cmp_stdAlloc;
395 typedef cc::MichaelHashSet< cds::gc::HP, MichaelList_HP_less_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_HP_less_stdAlloc;
396 typedef cc::MichaelHashSet< cds::gc::DHP, MichaelList_DHP_less_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_DHP_less_stdAlloc;
397 typedef cc::MichaelHashSet< rcu_gpi, MichaelList_RCU_GPI_less_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_RCU_GPI_less_stdAlloc;
398 typedef cc::MichaelHashSet< rcu_gpb, MichaelList_RCU_GPB_less_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_RCU_GPB_less_stdAlloc;
399 typedef cc::MichaelHashSet< rcu_gpt, MichaelList_RCU_GPT_less_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_RCU_GPT_less_stdAlloc;
400 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
401 typedef cc::MichaelHashSet< rcu_shb, MichaelList_RCU_SHB_less_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_RCU_SHB_less_stdAlloc;
402 typedef cc::MichaelHashSet< rcu_sht, MichaelList_RCU_SHT_less_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_RCU_SHT_less_stdAlloc;
405 typedef cc::MichaelHashSet< cds::gc::HP, MichaelList_HP_less_stdAlloc_seqcst, traits_MichaelSet_stdAlloc > MichaelSet_HP_less_stdAlloc_seqcst;
406 typedef cc::MichaelHashSet< cds::gc::DHP, MichaelList_DHP_less_stdAlloc_seqcst, traits_MichaelSet_stdAlloc > MichaelSet_DHP_less_stdAlloc_seqcst;
407 typedef cc::MichaelHashSet< rcu_gpi, MichaelList_RCU_GPI_less_stdAlloc_seqcst, traits_MichaelSet_stdAlloc > MichaelSet_RCU_GPI_less_stdAlloc_seqcst;
408 typedef cc::MichaelHashSet< rcu_gpb, MichaelList_RCU_GPB_less_stdAlloc_seqcst, traits_MichaelSet_stdAlloc > MichaelSet_RCU_GPB_less_stdAlloc_seqcst;
409 typedef cc::MichaelHashSet< rcu_gpt, MichaelList_RCU_GPT_less_stdAlloc_seqcst, traits_MichaelSet_stdAlloc > MichaelSet_RCU_GPT_less_stdAlloc_seqcst;
410 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
411 typedef cc::MichaelHashSet< rcu_shb, MichaelList_RCU_SHB_less_stdAlloc_seqcst, traits_MichaelSet_stdAlloc > MichaelSet_RCU_SHB_less_stdAlloc_seqcst;
412 typedef cc::MichaelHashSet< rcu_sht, MichaelList_RCU_SHT_less_stdAlloc_seqcst, traits_MichaelSet_stdAlloc > MichaelSet_RCU_SHT_less_stdAlloc_seqcst;
415 struct traits_MichaelSet_michaelAlloc :
416 public cc::michael_set::make_traits<
418 co::allocator< memory::MichaelAllocator<int> >
421 typedef cc::MichaelHashSet< cds::gc::HP, MichaelList_HP_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_HP_cmp_michaelAlloc;
422 typedef cc::MichaelHashSet< cds::gc::DHP, MichaelList_DHP_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_DHP_cmp_michaelAlloc;
423 typedef cc::MichaelHashSet< rcu_gpi, MichaelList_RCU_GPI_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_RCU_GPI_cmp_michaelAlloc;
424 typedef cc::MichaelHashSet< rcu_gpb, MichaelList_RCU_GPB_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_RCU_GPB_cmp_michaelAlloc;
425 typedef cc::MichaelHashSet< rcu_gpt, MichaelList_RCU_GPT_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_RCU_GPT_cmp_michaelAlloc;
426 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
427 typedef cc::MichaelHashSet< rcu_shb, MichaelList_RCU_SHB_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_RCU_SHB_cmp_michaelAlloc;
428 typedef cc::MichaelHashSet< rcu_sht, MichaelList_RCU_SHT_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_RCU_SHT_cmp_michaelAlloc;
431 typedef cc::MichaelHashSet< cds::gc::HP, MichaelList_HP_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_HP_less_michaelAlloc;
432 typedef cc::MichaelHashSet< cds::gc::DHP, MichaelList_DHP_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_DHP_less_michaelAlloc;
433 typedef cc::MichaelHashSet< rcu_gpi, MichaelList_RCU_GPI_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_RCU_GPI_less_michaelAlloc;
434 typedef cc::MichaelHashSet< rcu_gpb, MichaelList_RCU_GPB_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_RCU_GPB_less_michaelAlloc;
435 typedef cc::MichaelHashSet< rcu_gpt, MichaelList_RCU_GPT_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_RCU_GPT_less_michaelAlloc;
436 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
437 typedef cc::MichaelHashSet< rcu_shb, MichaelList_RCU_SHB_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_RCU_SHB_less_michaelAlloc;
438 typedef cc::MichaelHashSet< rcu_sht, MichaelList_RCU_SHT_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_RCU_SHT_less_michaelAlloc;
442 // ***************************************************************************
445 struct traits_LazyList_cmp_stdAlloc :
446 public cc::lazy_list::make_traits<
447 co::compare< compare >
450 typedef cc::LazyList< cds::gc::HP, key_val, traits_LazyList_cmp_stdAlloc > LazyList_HP_cmp_stdAlloc;
451 typedef cc::LazyList< cds::gc::DHP, key_val, traits_LazyList_cmp_stdAlloc > LazyList_DHP_cmp_stdAlloc;
452 typedef cc::LazyList< rcu_gpi, key_val, traits_LazyList_cmp_stdAlloc > LazyList_RCU_GPI_cmp_stdAlloc;
453 typedef cc::LazyList< rcu_gpb, key_val, traits_LazyList_cmp_stdAlloc > LazyList_RCU_GPB_cmp_stdAlloc;
454 typedef cc::LazyList< rcu_gpt, key_val, traits_LazyList_cmp_stdAlloc > LazyList_RCU_GPT_cmp_stdAlloc;
455 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
456 typedef cc::LazyList< rcu_shb, key_val, traits_LazyList_cmp_stdAlloc > LazyList_RCU_SHB_cmp_stdAlloc;
457 typedef cc::LazyList< rcu_sht, key_val, traits_LazyList_cmp_stdAlloc > LazyList_RCU_SHT_cmp_stdAlloc;
459 struct traits_LazyList_cmp_stdAlloc_seqcst :
460 public cc::lazy_list::make_traits<
461 co::compare< compare >
462 ,co::memory_model< co::v::sequential_consistent >
465 typedef cc::LazyList< cds::gc::HP, key_val, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_HP_cmp_stdAlloc_seqcst;
466 typedef cc::LazyList< cds::gc::DHP, key_val, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_DHP_cmp_stdAlloc_seqcst;
467 typedef cc::LazyList< rcu_gpi, key_val, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_RCU_GPI_cmp_stdAlloc_seqcst;
468 typedef cc::LazyList< rcu_gpb, key_val, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_RCU_GPB_cmp_stdAlloc_seqcst;
469 typedef cc::LazyList< rcu_gpt, key_val, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_RCU_GPT_cmp_stdAlloc_seqcst;
470 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
471 typedef cc::LazyList< rcu_shb, key_val, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_RCU_SHB_cmp_stdAlloc_seqcst;
472 typedef cc::LazyList< rcu_sht, key_val, traits_LazyList_cmp_stdAlloc_seqcst > LazyList_RCU_SHT_cmp_stdAlloc_seqcst;
474 struct traits_LazyList_cmp_michaelAlloc :
475 public cc::lazy_list::make_traits<
476 co::compare< compare >,
477 co::allocator< memory::MichaelAllocator<int> >
480 typedef cc::LazyList< cds::gc::HP, key_val, traits_LazyList_cmp_michaelAlloc > LazyList_HP_cmp_michaelAlloc;
481 typedef cc::LazyList< cds::gc::DHP, key_val, traits_LazyList_cmp_michaelAlloc > LazyList_DHP_cmp_michaelAlloc;
482 typedef cc::LazyList< rcu_gpi, key_val, traits_LazyList_cmp_michaelAlloc > LazyList_RCU_GPI_cmp_michaelAlloc;
483 typedef cc::LazyList< rcu_gpb, key_val, traits_LazyList_cmp_michaelAlloc > LazyList_RCU_GPB_cmp_michaelAlloc;
484 typedef cc::LazyList< rcu_gpt, key_val, traits_LazyList_cmp_michaelAlloc > LazyList_RCU_GPT_cmp_michaelAlloc;
485 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
486 typedef cc::LazyList< rcu_shb, key_val, traits_LazyList_cmp_michaelAlloc > LazyList_RCU_SHB_cmp_michaelAlloc;
487 typedef cc::LazyList< rcu_sht, key_val, traits_LazyList_cmp_michaelAlloc > LazyList_RCU_SHT_cmp_michaelAlloc;
490 struct traits_LazyList_less_stdAlloc:
491 public cc::lazy_list::make_traits<
495 typedef cc::LazyList< cds::gc::HP, key_val, traits_LazyList_less_stdAlloc > LazyList_HP_less_stdAlloc;
496 typedef cc::LazyList< cds::gc::DHP, key_val, traits_LazyList_less_stdAlloc > LazyList_DHP_less_stdAlloc;
497 typedef cc::LazyList< rcu_gpi, key_val, traits_LazyList_less_stdAlloc > LazyList_RCU_GPI_less_stdAlloc;
498 typedef cc::LazyList< rcu_gpb, key_val, traits_LazyList_less_stdAlloc > LazyList_RCU_GPB_less_stdAlloc;
499 typedef cc::LazyList< rcu_gpt, key_val, traits_LazyList_less_stdAlloc > LazyList_RCU_GPT_less_stdAlloc;
500 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
501 typedef cc::LazyList< rcu_shb, key_val, traits_LazyList_less_stdAlloc > LazyList_RCU_SHB_less_stdAlloc;
502 typedef cc::LazyList< rcu_sht, key_val, traits_LazyList_less_stdAlloc > LazyList_RCU_SHT_less_stdAlloc;
505 struct traits_LazyList_less_stdAlloc_seqcst :
506 public cc::lazy_list::make_traits<
508 ,co::memory_model< co::v::sequential_consistent >
511 typedef cc::LazyList< cds::gc::HP, key_val, traits_LazyList_less_stdAlloc_seqcst > LazyList_HP_less_stdAlloc_seqcst;
512 typedef cc::LazyList< cds::gc::DHP, key_val, traits_LazyList_less_stdAlloc_seqcst > LazyList_DHP_less_stdAlloc_seqcst;
513 typedef cc::LazyList< rcu_gpi, key_val, traits_LazyList_less_stdAlloc_seqcst > LazyList_RCU_GPI_less_stdAlloc_seqcst;
514 typedef cc::LazyList< rcu_gpb, key_val, traits_LazyList_less_stdAlloc_seqcst > LazyList_RCU_GPB_less_stdAlloc_seqcst;
515 typedef cc::LazyList< rcu_gpt, key_val, traits_LazyList_less_stdAlloc_seqcst > LazyList_RCU_GPT_less_stdAlloc_seqcst;
516 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
517 typedef cc::LazyList< rcu_shb, key_val, traits_LazyList_less_stdAlloc_seqcst > LazyList_RCU_SHB_less_stdAlloc_seqcst;
518 typedef cc::LazyList< rcu_sht, key_val, traits_LazyList_less_stdAlloc_seqcst > LazyList_RCU_SHT_less_stdAlloc_seqcst;
521 struct traits_LazyList_less_michaelAlloc :
522 public cc::lazy_list::make_traits<
524 co::allocator< memory::MichaelAllocator<int> >
527 typedef cc::LazyList< cds::gc::HP, key_val, traits_LazyList_less_michaelAlloc > LazyList_HP_less_michaelAlloc;
528 typedef cc::LazyList< cds::gc::DHP, key_val, traits_LazyList_less_michaelAlloc > LazyList_DHP_less_michaelAlloc;
529 typedef cc::LazyList< rcu_gpi, key_val, traits_LazyList_less_michaelAlloc > LazyList_RCU_GPI_less_michaelAlloc;
530 typedef cc::LazyList< rcu_gpb, key_val, traits_LazyList_less_michaelAlloc > LazyList_RCU_GPB_less_michaelAlloc;
531 typedef cc::LazyList< rcu_gpt, key_val, traits_LazyList_less_michaelAlloc > LazyList_RCU_GPT_less_michaelAlloc;
532 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
533 typedef cc::LazyList< rcu_shb, key_val, traits_LazyList_less_michaelAlloc > LazyList_RCU_SHB_less_michaelAlloc;
534 typedef cc::LazyList< rcu_sht, key_val, traits_LazyList_less_michaelAlloc > LazyList_RCU_SHT_less_michaelAlloc;
537 // ***************************************************************************
538 // MichaelHashSet based on LazyList
540 typedef cc::MichaelHashSet< cds::gc::HP, LazyList_HP_cmp_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_HP_cmp_stdAlloc;
541 typedef cc::MichaelHashSet< cds::gc::DHP, LazyList_DHP_cmp_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_DHP_cmp_stdAlloc;
542 typedef cc::MichaelHashSet< rcu_gpi, LazyList_RCU_GPI_cmp_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_GPI_cmp_stdAlloc;
543 typedef cc::MichaelHashSet< rcu_gpb, LazyList_RCU_GPB_cmp_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_GPB_cmp_stdAlloc;
544 typedef cc::MichaelHashSet< rcu_gpt, LazyList_RCU_GPT_cmp_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_GPT_cmp_stdAlloc;
545 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
546 typedef cc::MichaelHashSet< rcu_shb, LazyList_RCU_SHB_cmp_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_SHB_cmp_stdAlloc;
547 typedef cc::MichaelHashSet< rcu_sht, LazyList_RCU_SHT_cmp_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_SHT_cmp_stdAlloc;
550 typedef cc::MichaelHashSet< cds::gc::HP, LazyList_HP_less_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_HP_less_stdAlloc;
551 typedef cc::MichaelHashSet< cds::gc::DHP, LazyList_DHP_less_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_DHP_less_stdAlloc;
552 typedef cc::MichaelHashSet< rcu_gpi, LazyList_RCU_GPI_less_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_GPI_less_stdAlloc;
553 typedef cc::MichaelHashSet< rcu_gpb, LazyList_RCU_GPB_less_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_GPB_less_stdAlloc;
554 typedef cc::MichaelHashSet< rcu_gpt, LazyList_RCU_GPT_less_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_GPT_less_stdAlloc;
555 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
556 typedef cc::MichaelHashSet< rcu_shb, LazyList_RCU_SHB_less_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_SHB_less_stdAlloc;
557 typedef cc::MichaelHashSet< rcu_sht, LazyList_RCU_SHT_less_stdAlloc, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_SHT_less_stdAlloc;
560 typedef cc::MichaelHashSet< cds::gc::HP, LazyList_HP_less_stdAlloc_seqcst, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_HP_less_stdAlloc_seqcst;
561 typedef cc::MichaelHashSet< cds::gc::DHP, LazyList_DHP_less_stdAlloc_seqcst, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_DHP_less_stdAlloc_seqcst;
562 typedef cc::MichaelHashSet< rcu_gpi, LazyList_RCU_GPI_less_stdAlloc_seqcst, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_GPI_less_stdAlloc_seqcst;
563 typedef cc::MichaelHashSet< rcu_gpb, LazyList_RCU_GPB_less_stdAlloc_seqcst, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_GPB_less_stdAlloc_seqcst;
564 typedef cc::MichaelHashSet< rcu_gpt, LazyList_RCU_GPT_less_stdAlloc_seqcst, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_GPT_less_stdAlloc_seqcst;
565 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
566 typedef cc::MichaelHashSet< rcu_shb, LazyList_RCU_SHB_less_stdAlloc_seqcst, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_SHB_less_stdAlloc_seqcst;
567 typedef cc::MichaelHashSet< rcu_sht, LazyList_RCU_SHT_less_stdAlloc_seqcst, traits_MichaelSet_stdAlloc > MichaelSet_Lazy_RCU_SHT_less_stdAlloc_seqcst;
570 typedef cc::MichaelHashSet< cds::gc::HP, LazyList_HP_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_Lazy_HP_cmp_michaelAlloc;
571 typedef cc::MichaelHashSet< cds::gc::DHP, LazyList_DHP_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_Lazy_DHP_cmp_michaelAlloc;
572 typedef cc::MichaelHashSet< rcu_gpi, LazyList_RCU_GPI_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_Lazy_RCU_GPI_cmp_michaelAlloc;
573 typedef cc::MichaelHashSet< rcu_gpb, LazyList_RCU_GPB_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_Lazy_RCU_GPB_cmp_michaelAlloc;
574 typedef cc::MichaelHashSet< rcu_gpt, LazyList_RCU_GPT_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_Lazy_RCU_GPT_cmp_michaelAlloc;
575 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
576 typedef cc::MichaelHashSet< rcu_shb, LazyList_RCU_SHB_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_Lazy_RCU_SHB_cmp_michaelAlloc;
577 typedef cc::MichaelHashSet< rcu_sht, LazyList_RCU_SHT_cmp_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_Lazy_RCU_SHT_cmp_michaelAlloc;
580 typedef cc::MichaelHashSet< cds::gc::HP, LazyList_HP_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_Lazy_HP_less_michaelAlloc;
581 typedef cc::MichaelHashSet< cds::gc::DHP, LazyList_DHP_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_Lazy_DHP_less_michaelAlloc;
582 typedef cc::MichaelHashSet< rcu_gpi, LazyList_RCU_GPI_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_Lazy_RCU_GPI_less_michaelAlloc;
583 typedef cc::MichaelHashSet< rcu_gpb, LazyList_RCU_GPB_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_Lazy_RCU_GPB_less_michaelAlloc;
584 typedef cc::MichaelHashSet< rcu_gpt, LazyList_RCU_GPT_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_Lazy_RCU_GPT_less_michaelAlloc;
585 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
586 typedef cc::MichaelHashSet< rcu_shb, LazyList_RCU_SHB_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_Lazy_RCU_SHB_less_michaelAlloc;
587 typedef cc::MichaelHashSet< rcu_sht, LazyList_RCU_SHT_less_michaelAlloc, traits_MichaelSet_michaelAlloc > MichaelSet_Lazy_RCU_SHT_less_michaelAlloc;
590 // ***************************************************************************
591 // SplitListSet based on MichaelList
593 struct traits_SplitList_Michael_dyn_cmp :
594 public cc::split_list::make_traits<
595 cc::split_list::ordered_list<cc::michael_list_tag>
597 ,cc::split_list::ordered_list_traits<
598 typename cc::michael_list::make_traits<
599 co::compare< compare >
604 typedef cc::SplitListSet< cds::gc::HP, key_val, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_HP_dyn_cmp;
605 typedef cc::SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_DHP_dyn_cmp;
606 typedef cc::SplitListSet< rcu_gpi, key_val, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_RCU_GPI_dyn_cmp;
607 typedef cc::SplitListSet< rcu_gpb, key_val, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_RCU_GPB_dyn_cmp;
608 typedef cc::SplitListSet< rcu_gpt, key_val, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_RCU_GPT_dyn_cmp;
609 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
610 typedef cc::SplitListSet< rcu_shb, key_val, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_RCU_SHB_dyn_cmp;
611 typedef cc::SplitListSet< rcu_sht, key_val, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_RCU_SHT_dyn_cmp;
614 struct traits_SplitList_Michael_dyn_cmp_stat :
615 public cc::split_list::make_traits<
616 cc::split_list::ordered_list<cc::michael_list_tag>
618 ,co::stat< cc::split_list::stat<> >
619 ,cc::split_list::ordered_list_traits<
620 typename cc::michael_list::make_traits<
621 co::compare< compare >
626 typedef cc::SplitListSet< cds::gc::HP, key_val, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_HP_dyn_cmp_stat;
627 typedef cc::SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_DHP_dyn_cmp_stat;
628 typedef cc::SplitListSet< rcu_gpi, key_val, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_RCU_GPI_dyn_cmp_stat;
629 typedef cc::SplitListSet< rcu_gpb, key_val, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_RCU_GPB_dyn_cmp_stat;
630 typedef cc::SplitListSet< rcu_gpt, key_val, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_RCU_GPT_dyn_cmp_stat;
631 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
632 typedef cc::SplitListSet< rcu_shb, key_val, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_RCU_SHB_dyn_cmp_stat;
633 typedef cc::SplitListSet< rcu_sht, key_val, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_RCU_SHT_dyn_cmp_stat;
636 struct traits_SplitList_Michael_dyn_cmp_seqcst :
637 public cc::split_list::make_traits<
638 cc::split_list::ordered_list<cc::michael_list_tag>
640 ,co::memory_model< co::v::sequential_consistent >
641 ,cc::split_list::ordered_list_traits<
642 typename cc::michael_list::make_traits<
643 co::compare< compare >
644 ,co::memory_model< co::v::sequential_consistent >
649 typedef cc::SplitListSet< cds::gc::HP, key_val, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_HP_dyn_cmp_seqcst;
650 typedef cc::SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_DHP_dyn_cmp_seqcst;
651 typedef cc::SplitListSet< rcu_gpi, key_val, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_RCU_GPI_dyn_cmp_seqcst;
652 typedef cc::SplitListSet< rcu_gpb, key_val, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_RCU_GPB_dyn_cmp_seqcst;
653 typedef cc::SplitListSet< rcu_gpt, key_val, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_RCU_GPT_dyn_cmp_seqcst;
654 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
655 typedef cc::SplitListSet< rcu_shb, key_val, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_RCU_SHB_dyn_cmp_seqcst;
656 typedef cc::SplitListSet< rcu_sht, key_val, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_RCU_SHT_dyn_cmp_seqcst;
659 struct traits_SplitList_Michael_st_cmp :
660 public cc::split_list::make_traits<
661 cc::split_list::ordered_list<cc::michael_list_tag>
662 ,cc::split_list::dynamic_bucket_table< false >
664 ,cc::split_list::ordered_list_traits<
665 typename cc::michael_list::make_traits<
666 co::compare< compare >
671 typedef cc::SplitListSet< cds::gc::HP, key_val, traits_SplitList_Michael_st_cmp > SplitList_Michael_HP_st_cmp;
672 typedef cc::SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Michael_st_cmp > SplitList_Michael_DHP_st_cmp;
673 typedef cc::SplitListSet< rcu_gpi, key_val, traits_SplitList_Michael_st_cmp > SplitList_Michael_RCU_GPI_st_cmp;
674 typedef cc::SplitListSet< rcu_gpb, key_val, traits_SplitList_Michael_st_cmp > SplitList_Michael_RCU_GPB_st_cmp;
675 typedef cc::SplitListSet< rcu_gpt, key_val, traits_SplitList_Michael_st_cmp > SplitList_Michael_RCU_GPT_st_cmp;
676 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
677 typedef cc::SplitListSet< rcu_shb, key_val, traits_SplitList_Michael_st_cmp > SplitList_Michael_RCU_SHB_st_cmp;
678 typedef cc::SplitListSet< rcu_sht, key_val, traits_SplitList_Michael_st_cmp > SplitList_Michael_RCU_SHT_st_cmp;
681 struct traits_SplitList_Michael_st_cmp_seqcst :
682 public cc::split_list::make_traits<
683 cc::split_list::ordered_list<cc::michael_list_tag>
685 ,cc::split_list::dynamic_bucket_table< false >
686 ,co::memory_model< co::v::sequential_consistent >
687 ,cc::split_list::ordered_list_traits<
688 typename cc::michael_list::make_traits<
689 co::compare< compare >
690 ,co::memory_model< co::v::sequential_consistent >
695 typedef cc::SplitListSet< cds::gc::HP, key_val, traits_SplitList_Michael_st_cmp_seqcst> SplitList_Michael_HP_st_cmp_seqcst;
696 typedef cc::SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Michael_st_cmp_seqcst> SplitList_Michael_DHP_st_cmp_seqcst;
697 typedef cc::SplitListSet< rcu_gpi, key_val, traits_SplitList_Michael_st_cmp_seqcst> SplitList_Michael_RCU_GPI_st_cmp_seqcst;
698 typedef cc::SplitListSet< rcu_gpb, key_val, traits_SplitList_Michael_st_cmp_seqcst> SplitList_Michael_RCU_GPB_st_cmp_seqcst;
699 typedef cc::SplitListSet< rcu_gpt, key_val, traits_SplitList_Michael_st_cmp_seqcst> SplitList_Michael_RCU_GPT_st_cmp_seqcst;
700 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
701 typedef cc::SplitListSet< rcu_shb, key_val, traits_SplitList_Michael_st_cmp_seqcst> SplitList_Michael_RCU_SHB_st_cmp_seqcst;
702 typedef cc::SplitListSet< rcu_sht, key_val, traits_SplitList_Michael_st_cmp_seqcst> SplitList_Michael_RCU_SHT_st_cmp_seqcst;
706 struct traits_SplitList_Michael_dyn_less :
707 public cc::split_list::make_traits<
708 cc::split_list::ordered_list<cc::michael_list_tag>
710 ,cc::split_list::ordered_list_traits<
711 typename cc::michael_list::make_traits<
717 typedef cc::SplitListSet< cds::gc::HP, key_val, traits_SplitList_Michael_dyn_less > SplitList_Michael_HP_dyn_less;
718 typedef cc::SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Michael_dyn_less > SplitList_Michael_DHP_dyn_less;
719 typedef cc::SplitListSet< rcu_gpi, key_val, traits_SplitList_Michael_dyn_less > SplitList_Michael_RCU_GPI_dyn_less;
720 typedef cc::SplitListSet< rcu_gpb, key_val, traits_SplitList_Michael_dyn_less > SplitList_Michael_RCU_GPB_dyn_less;
721 typedef cc::SplitListSet< rcu_gpt, key_val, traits_SplitList_Michael_dyn_less > SplitList_Michael_RCU_GPT_dyn_less;
722 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
723 typedef cc::SplitListSet< rcu_shb, key_val, traits_SplitList_Michael_dyn_less > SplitList_Michael_RCU_SHB_dyn_less;
724 typedef cc::SplitListSet< rcu_sht, key_val, traits_SplitList_Michael_dyn_less > SplitList_Michael_RCU_SHT_dyn_less;
727 struct traits_SplitList_Michael_dyn_less_seqcst :
728 public cc::split_list::make_traits<
729 cc::split_list::ordered_list<cc::michael_list_tag>
731 ,co::memory_model< co::v::sequential_consistent >
732 ,cc::split_list::ordered_list_traits<
733 typename cc::michael_list::make_traits<
735 ,co::memory_model< co::v::sequential_consistent >
740 typedef cc::SplitListSet< cds::gc::HP, key_val, traits_SplitList_Michael_dyn_less_seqcst > SplitList_Michael_HP_dyn_less_seqcst;
741 typedef cc::SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Michael_dyn_less_seqcst > SplitList_Michael_DHP_dyn_less_seqcst;
742 typedef cc::SplitListSet< rcu_gpi, key_val, traits_SplitList_Michael_dyn_less_seqcst > SplitList_Michael_RCU_GPI_dyn_less_seqcst;
743 typedef cc::SplitListSet< rcu_gpb, key_val, traits_SplitList_Michael_dyn_less_seqcst > SplitList_Michael_RCU_GPB_dyn_less_seqcst;
744 typedef cc::SplitListSet< rcu_gpt, key_val, traits_SplitList_Michael_dyn_less_seqcst > SplitList_Michael_RCU_GPT_dyn_less_seqcst;
745 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
746 typedef cc::SplitListSet< rcu_shb, key_val, traits_SplitList_Michael_dyn_less_seqcst > SplitList_Michael_RCU_SHB_dyn_less_seqcst;
747 typedef cc::SplitListSet< rcu_sht, key_val, traits_SplitList_Michael_dyn_less_seqcst > SplitList_Michael_RCU_SHT_dyn_less_seqcst;
750 struct traits_SplitList_Michael_st_less :
751 public cc::split_list::make_traits<
752 cc::split_list::ordered_list<cc::michael_list_tag>
753 ,cc::split_list::dynamic_bucket_table< false >
755 ,cc::split_list::ordered_list_traits<
756 typename cc::michael_list::make_traits<
762 typedef cc::SplitListSet< cds::gc::HP, key_val, traits_SplitList_Michael_st_less > SplitList_Michael_HP_st_less;
763 typedef cc::SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Michael_st_less > SplitList_Michael_DHP_st_less;
764 typedef cc::SplitListSet< rcu_gpi, key_val, traits_SplitList_Michael_st_less > SplitList_Michael_RCU_GPI_st_less;
765 typedef cc::SplitListSet< rcu_gpb, key_val, traits_SplitList_Michael_st_less > SplitList_Michael_RCU_GPB_st_less;
766 typedef cc::SplitListSet< rcu_gpt, key_val, traits_SplitList_Michael_st_less > SplitList_Michael_RCU_GPT_st_less;
767 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
768 typedef cc::SplitListSet< rcu_shb, key_val, traits_SplitList_Michael_st_less > SplitList_Michael_RCU_SHB_st_less;
769 typedef cc::SplitListSet< rcu_sht, key_val, traits_SplitList_Michael_st_less > SplitList_Michael_RCU_SHT_st_less;
772 struct traits_SplitList_Michael_st_less_stat :
773 public cc::split_list::make_traits<
774 cc::split_list::ordered_list<cc::michael_list_tag>
775 ,cc::split_list::dynamic_bucket_table< false >
777 ,co::stat< cc::split_list::stat<>>
778 ,cc::split_list::ordered_list_traits<
779 typename cc::michael_list::make_traits<
785 typedef cc::SplitListSet< cds::gc::HP, key_val, traits_SplitList_Michael_st_less_stat > SplitList_Michael_HP_st_less_stat;
786 typedef cc::SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Michael_st_less_stat > SplitList_Michael_DHP_st_less_stat;
787 typedef cc::SplitListSet< rcu_gpi, key_val, traits_SplitList_Michael_st_less_stat > SplitList_Michael_RCU_GPI_st_less_stat;
788 typedef cc::SplitListSet< rcu_gpb, key_val, traits_SplitList_Michael_st_less_stat > SplitList_Michael_RCU_GPB_st_less_stat;
789 typedef cc::SplitListSet< rcu_gpt, key_val, traits_SplitList_Michael_st_less_stat > SplitList_Michael_RCU_GPT_st_less_stat;
790 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
791 typedef cc::SplitListSet< rcu_shb, key_val, traits_SplitList_Michael_st_less_stat > SplitList_Michael_RCU_SHB_st_less_stat;
792 typedef cc::SplitListSet< rcu_sht, key_val, traits_SplitList_Michael_st_less_stat > SplitList_Michael_RCU_SHT_st_less_stat;
795 struct traits_SplitList_Michael_st_less_seqcst :
796 public cc::split_list::make_traits<
797 cc::split_list::ordered_list<cc::michael_list_tag>
799 ,cc::split_list::dynamic_bucket_table< false >
800 ,co::memory_model< co::v::sequential_consistent >
801 ,cc::split_list::ordered_list_traits<
802 typename cc::michael_list::make_traits<
804 ,co::memory_model< co::v::sequential_consistent >
809 typedef cc::SplitListSet< cds::gc::HP, key_val, traits_SplitList_Michael_st_less_seqcst > SplitList_Michael_HP_st_less_seqcst;
810 typedef cc::SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Michael_st_less_seqcst > SplitList_Michael_DHP_st_less_seqcst;
811 typedef cc::SplitListSet< rcu_gpi, key_val, traits_SplitList_Michael_st_less_seqcst > SplitList_Michael_RCU_GPI_st_less_seqcst;
812 typedef cc::SplitListSet< rcu_gpb, key_val, traits_SplitList_Michael_st_less_seqcst > SplitList_Michael_RCU_GPB_st_less_seqcst;
813 typedef cc::SplitListSet< rcu_gpt, key_val, traits_SplitList_Michael_st_less_seqcst > SplitList_Michael_RCU_GPT_st_less_seqcst;
814 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
815 typedef cc::SplitListSet< rcu_shb, key_val, traits_SplitList_Michael_st_less_seqcst > SplitList_Michael_RCU_SHB_st_less_seqcst;
816 typedef cc::SplitListSet< rcu_sht, key_val, traits_SplitList_Michael_st_less_seqcst > SplitList_Michael_RCU_SHT_st_less_seqcst;
819 // ***************************************************************************
820 // SplitListSet based on LazyList
822 struct traits_SplitList_Lazy_dyn_cmp :
823 public cc::split_list::make_traits<
824 cc::split_list::ordered_list<cc::lazy_list_tag>
826 ,cc::split_list::ordered_list_traits<
827 typename cc::lazy_list::make_traits<
828 co::compare< compare >
833 typedef cc::SplitListSet< cds::gc::HP, key_val, traits_SplitList_Lazy_dyn_cmp > SplitList_Lazy_HP_dyn_cmp;
834 typedef cc::SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Lazy_dyn_cmp > SplitList_Lazy_DHP_dyn_cmp;
835 typedef cc::SplitListSet< rcu_gpi, key_val, traits_SplitList_Lazy_dyn_cmp > SplitList_Lazy_RCU_GPI_dyn_cmp;
836 typedef cc::SplitListSet< rcu_gpb, key_val, traits_SplitList_Lazy_dyn_cmp > SplitList_Lazy_RCU_GPB_dyn_cmp;
837 typedef cc::SplitListSet< rcu_gpt, key_val, traits_SplitList_Lazy_dyn_cmp > SplitList_Lazy_RCU_GPT_dyn_cmp;
838 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
839 typedef cc::SplitListSet< rcu_shb, key_val, traits_SplitList_Lazy_dyn_cmp > SplitList_Lazy_RCU_SHB_dyn_cmp;
840 typedef cc::SplitListSet< rcu_sht, key_val, traits_SplitList_Lazy_dyn_cmp > SplitList_Lazy_RCU_SHT_dyn_cmp;
843 struct traits_SplitList_Lazy_dyn_cmp_stat : public traits_SplitList_Lazy_dyn_cmp
845 typedef cc::split_list::stat<> stat;
847 typedef cc::SplitListSet< cds::gc::HP, key_val, traits_SplitList_Lazy_dyn_cmp_stat > SplitList_Lazy_HP_dyn_cmp_stat;
848 typedef cc::SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Lazy_dyn_cmp_stat > SplitList_Lazy_DHP_dyn_cmp_stat;
849 typedef cc::SplitListSet< rcu_gpi, key_val, traits_SplitList_Lazy_dyn_cmp_stat > SplitList_Lazy_RCU_GPI_dyn_cmp_stat;
850 typedef cc::SplitListSet< rcu_gpb, key_val, traits_SplitList_Lazy_dyn_cmp_stat > SplitList_Lazy_RCU_GPB_dyn_cmp_stat;
851 typedef cc::SplitListSet< rcu_gpt, key_val, traits_SplitList_Lazy_dyn_cmp_stat > SplitList_Lazy_RCU_GPT_dyn_cmp_stat;
852 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
853 typedef cc::SplitListSet< rcu_shb, key_val, traits_SplitList_Lazy_dyn_cmp > SplitList_Lazy_RCU_SHB_dyn_cmp_stat;
854 typedef cc::SplitListSet< rcu_sht, key_val, traits_SplitList_Lazy_dyn_cmp > SplitList_Lazy_RCU_SHT_dyn_cmp_stat;
857 struct traits_SplitList_Lazy_dyn_cmp_seqcst :
858 public cc::split_list::make_traits<
859 cc::split_list::ordered_list<cc::lazy_list_tag>
861 ,co::memory_model< co::v::sequential_consistent >
862 ,cc::split_list::ordered_list_traits<
863 typename cc::lazy_list::make_traits<
864 co::compare< compare >
865 ,co::memory_model< co::v::sequential_consistent >
870 typedef cc::SplitListSet< cds::gc::HP, key_val, traits_SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_HP_dyn_cmp_seqcst;
871 typedef cc::SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_DHP_dyn_cmp_seqcst;
872 typedef cc::SplitListSet< rcu_gpi, key_val, traits_SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_RCU_GPI_dyn_cmp_seqcst;
873 typedef cc::SplitListSet< rcu_gpb, key_val, traits_SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_RCU_GPB_dyn_cmp_seqcst;
874 typedef cc::SplitListSet< rcu_gpt, key_val, traits_SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_RCU_GPT_dyn_cmp_seqcst;
875 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
876 typedef cc::SplitListSet< rcu_shb, key_val, traits_SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_RCU_SHB_dyn_cmp_seqcst;
877 typedef cc::SplitListSet< rcu_sht, key_val, traits_SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_RCU_SHT_dyn_cmp_seqcst;
880 struct traits_SplitList_Lazy_st_cmp :
881 public cc::split_list::make_traits<
882 cc::split_list::ordered_list<cc::lazy_list_tag>
883 ,cc::split_list::dynamic_bucket_table< false >
885 ,cc::split_list::ordered_list_traits<
886 typename cc::lazy_list::make_traits<
887 co::compare< compare >
892 typedef cc::SplitListSet< cds::gc::HP, key_val, traits_SplitList_Lazy_st_cmp > SplitList_Lazy_HP_st_cmp;
893 typedef cc::SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Lazy_st_cmp > SplitList_Lazy_DHP_st_cmp;
894 typedef cc::SplitListSet< rcu_gpi, key_val, traits_SplitList_Lazy_st_cmp > SplitList_Lazy_RCU_GPI_st_cmp;
895 typedef cc::SplitListSet< rcu_gpb, key_val, traits_SplitList_Lazy_st_cmp > SplitList_Lazy_RCU_GPB_st_cmp;
896 typedef cc::SplitListSet< rcu_gpt, key_val, traits_SplitList_Lazy_st_cmp > SplitList_Lazy_RCU_GPT_st_cmp;
897 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
898 typedef cc::SplitListSet< rcu_shb, key_val, traits_SplitList_Lazy_st_cmp > SplitList_Lazy_RCU_SHB_st_cmp;
899 typedef cc::SplitListSet< rcu_sht, key_val, traits_SplitList_Lazy_st_cmp > SplitList_Lazy_RCU_SHT_st_cmp;
902 struct traits_SplitList_Lazy_st_cmp_seqcst :
903 public cc::split_list::make_traits<
904 cc::split_list::ordered_list<cc::lazy_list_tag>
906 ,cc::split_list::dynamic_bucket_table< false >
907 ,co::memory_model< co::v::sequential_consistent >
908 ,cc::split_list::ordered_list_traits<
909 typename cc::lazy_list::make_traits<
910 co::compare< compare >
911 ,co::memory_model< co::v::sequential_consistent >
916 typedef cc::SplitListSet< cds::gc::HP, key_val, traits_SplitList_Lazy_st_cmp_seqcst > SplitList_Lazy_HP_st_cmp_seqcst;
917 typedef cc::SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Lazy_st_cmp_seqcst > SplitList_Lazy_DHP_st_cmp_seqcst;
918 typedef cc::SplitListSet< rcu_gpi, key_val, traits_SplitList_Lazy_st_cmp_seqcst > SplitList_Lazy_RCU_GPI_st_cmp_seqcst;
919 typedef cc::SplitListSet< rcu_gpb, key_val, traits_SplitList_Lazy_st_cmp_seqcst > SplitList_Lazy_RCU_GPB_st_cmp_seqcst;
920 typedef cc::SplitListSet< rcu_gpt, key_val, traits_SplitList_Lazy_st_cmp_seqcst > SplitList_Lazy_RCU_GPT_st_cmp_seqcst;
921 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
922 typedef cc::SplitListSet< rcu_shb, key_val, traits_SplitList_Lazy_st_cmp_seqcst > SplitList_Lazy_RCU_SHB_st_cmp_seqcst;
923 typedef cc::SplitListSet< rcu_sht, key_val, traits_SplitList_Lazy_st_cmp_seqcst > SplitList_Lazy_RCU_SHT_st_cmp_seqcst;
926 struct traits_SplitList_Lazy_dyn_less :
927 public cc::split_list::make_traits<
928 cc::split_list::ordered_list<cc::lazy_list_tag>
930 ,cc::split_list::ordered_list_traits<
931 typename cc::lazy_list::make_traits<
937 typedef cc::SplitListSet< cds::gc::HP, key_val, traits_SplitList_Lazy_dyn_less > SplitList_Lazy_HP_dyn_less;
938 typedef cc::SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Lazy_dyn_less > SplitList_Lazy_DHP_dyn_less;
939 typedef cc::SplitListSet< rcu_gpi, key_val, traits_SplitList_Lazy_dyn_less > SplitList_Lazy_RCU_GPI_dyn_less;
940 typedef cc::SplitListSet< rcu_gpb, key_val, traits_SplitList_Lazy_dyn_less > SplitList_Lazy_RCU_GPB_dyn_less;
941 typedef cc::SplitListSet< rcu_gpt, key_val, traits_SplitList_Lazy_dyn_less > SplitList_Lazy_RCU_GPT_dyn_less;
942 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
943 typedef cc::SplitListSet< rcu_shb, key_val, traits_SplitList_Lazy_dyn_less > SplitList_Lazy_RCU_SHB_dyn_less;
944 typedef cc::SplitListSet< rcu_sht, key_val, traits_SplitList_Lazy_dyn_less > SplitList_Lazy_RCU_SHT_dyn_less;
947 struct traits_SplitList_Lazy_dyn_less_seqcst :
948 public cc::split_list::make_traits<
949 cc::split_list::ordered_list<cc::lazy_list_tag>
951 ,co::memory_model< co::v::sequential_consistent >
952 ,cc::split_list::ordered_list_traits<
953 typename cc::lazy_list::make_traits<
955 ,co::memory_model< co::v::sequential_consistent >
960 typedef cc::SplitListSet< cds::gc::HP, key_val, traits_SplitList_Lazy_dyn_less_seqcst > SplitList_Lazy_HP_dyn_less_seqcst;
961 typedef cc::SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Lazy_dyn_less_seqcst > SplitList_Lazy_DHP_dyn_less_seqcst;
962 typedef cc::SplitListSet< rcu_gpi, key_val, traits_SplitList_Lazy_dyn_less_seqcst > SplitList_Lazy_RCU_GPI_dyn_less_seqcst;
963 typedef cc::SplitListSet< rcu_gpb, key_val, traits_SplitList_Lazy_dyn_less_seqcst > SplitList_Lazy_RCU_GPB_dyn_less_seqcst;
964 typedef cc::SplitListSet< rcu_gpt, key_val, traits_SplitList_Lazy_dyn_less_seqcst > SplitList_Lazy_RCU_GPT_dyn_less_seqcst;
965 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
966 typedef cc::SplitListSet< rcu_shb, key_val, traits_SplitList_Lazy_dyn_less_seqcst > SplitList_Lazy_RCU_SHB_dyn_less_seqcst;
967 typedef cc::SplitListSet< rcu_sht, key_val, traits_SplitList_Lazy_dyn_less_seqcst > SplitList_Lazy_RCU_SHT_dyn_less_seqcst;
970 struct traits_SplitList_Lazy_st_less :
971 public cc::split_list::make_traits<
972 cc::split_list::ordered_list<cc::lazy_list_tag>
973 ,cc::split_list::dynamic_bucket_table< false >
975 ,cc::split_list::ordered_list_traits<
976 typename cc::lazy_list::make_traits<
982 typedef cc::SplitListSet< cds::gc::HP, key_val, traits_SplitList_Lazy_st_less > SplitList_Lazy_HP_st_less;
983 typedef cc::SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Lazy_st_less > SplitList_Lazy_DHP_st_less;
984 typedef cc::SplitListSet< rcu_gpi, key_val, traits_SplitList_Lazy_st_less > SplitList_Lazy_RCU_GPI_st_less;
985 typedef cc::SplitListSet< rcu_gpb, key_val, traits_SplitList_Lazy_st_less > SplitList_Lazy_RCU_GPB_st_less;
986 typedef cc::SplitListSet< rcu_gpt, key_val, traits_SplitList_Lazy_st_less > SplitList_Lazy_RCU_GPT_st_less;
987 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
988 typedef cc::SplitListSet< rcu_shb, key_val, traits_SplitList_Lazy_st_less > SplitList_Lazy_RCU_SHB_st_less;
989 typedef cc::SplitListSet< rcu_sht, key_val, traits_SplitList_Lazy_st_less > SplitList_Lazy_RCU_SHT_st_less;
992 struct traits_SplitList_Lazy_st_less_seqcst :
993 public cc::split_list::make_traits<
994 cc::split_list::ordered_list<cc::lazy_list_tag>
996 ,cc::split_list::dynamic_bucket_table< false >
997 ,co::memory_model< co::v::sequential_consistent >
998 ,cc::split_list::ordered_list_traits<
999 typename cc::lazy_list::make_traits<
1001 ,co::memory_model< co::v::sequential_consistent >
1006 typedef cc::SplitListSet< cds::gc::HP, key_val, traits_SplitList_Lazy_st_less_seqcst > SplitList_Lazy_HP_st_less_seqcst;
1007 typedef cc::SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Lazy_st_less_seqcst > SplitList_Lazy_DHP_st_less_seqcst;
1008 typedef cc::SplitListSet< rcu_gpi, key_val, traits_SplitList_Lazy_st_less_seqcst > SplitList_Lazy_RCU_GPI_st_less_seqcst;
1009 typedef cc::SplitListSet< rcu_gpb, key_val, traits_SplitList_Lazy_st_less_seqcst > SplitList_Lazy_RCU_GPB_st_less_seqcst;
1010 typedef cc::SplitListSet< rcu_gpt, key_val, traits_SplitList_Lazy_st_less_seqcst > SplitList_Lazy_RCU_GPT_st_less_seqcst;
1011 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
1012 typedef cc::SplitListSet< rcu_shb, key_val, traits_SplitList_Lazy_st_less_seqcst > SplitList_Lazy_RCU_SHB_st_less_seqcst;
1013 typedef cc::SplitListSet< rcu_sht, key_val, traits_SplitList_Lazy_st_less_seqcst > SplitList_Lazy_RCU_SHT_st_less_seqcst;
1016 struct traits_SplitList_Lazy_st_less_stat : public traits_SplitList_Lazy_st_less
1018 typedef cc::split_list::stat<> stat;
1020 typedef cc::SplitListSet< cds::gc::HP, key_val, traits_SplitList_Lazy_st_less_stat > SplitList_Lazy_HP_st_less_stat;
1021 typedef cc::SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Lazy_st_less_stat > SplitList_Lazy_DHP_st_less_stat;
1022 typedef cc::SplitListSet< rcu_gpi, key_val, traits_SplitList_Lazy_st_less_stat > SplitList_Lazy_RCU_GPI_st_less_stat;
1023 typedef cc::SplitListSet< rcu_gpb, key_val, traits_SplitList_Lazy_st_less_stat > SplitList_Lazy_RCU_GPB_st_less_stat;
1024 typedef cc::SplitListSet< rcu_gpt, key_val, traits_SplitList_Lazy_st_less_stat > SplitList_Lazy_RCU_GPT_st_less_stat;
1025 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
1026 typedef cc::SplitListSet< rcu_shb, key_val, traits_SplitList_Lazy_st_less_stat > SplitList_Lazy_RCU_SHB_st_less_stat;
1027 typedef cc::SplitListSet< rcu_sht, key_val, traits_SplitList_Lazy_st_less_stat > SplitList_Lazy_RCU_SHT_st_less_stat;
1031 // ***************************************************************************
1034 // for sequential containers
1035 template <class BucketEntry, typename... Options>
1036 class StripedHashSet_seq:
1037 public cc::StripedSet< BucketEntry,
1038 co::mutex_policy< cc::striped_set::striping<> >
1039 ,co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
1043 typedef cc::StripedSet< BucketEntry,
1044 co::mutex_policy< cc::striped_set::striping<> >
1045 ,co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
1048 typedef typename base_class::resizing_policy resizing_policy_t;
1050 resizing_policy_t m_placeHolder;
1052 StripedHashSet_seq( size_t nCapacity, size_t nLoadFactor )
1053 : base_class( nCapacity / nLoadFactor / 16, *(new(&m_placeHolder) resizing_policy_t( nLoadFactor )) )
1056 template <typename Q, typename Less>
1057 bool erase_with( Q const& v, Less pred )
1059 return base_class::erase( v );
1063 // for non-sequential ordered containers
1064 template <class BucketEntry, typename... Options>
1065 class StripedHashSet_ord:
1066 public cc::StripedSet< BucketEntry,
1067 co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
1068 ,co::mutex_policy< cc::striped_set::striping<> >
1072 typedef cc::StripedSet< BucketEntry,
1073 co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
1074 ,co::mutex_policy< cc::striped_set::striping<> >
1077 typedef typename base_class::resizing_policy resizing_policy_t;
1079 resizing_policy_t m_placeHolder;
1081 StripedHashSet_ord( size_t nCapacity, size_t nLoadFactor )
1082 : base_class( 0, *(new(&m_placeHolder) resizing_policy_t( nLoadFactor * 1024 )) )
1085 template <typename Q, typename Less>
1086 bool erase_with( Q const& v, Less pred )
1088 return base_class::erase( v );
1092 typedef StripedHashSet_seq<
1093 std::list< key_val >
1098 typedef StripedHashSet_seq<
1099 std::vector< key_val >
1102 > StripedSet_vector;
1104 #if BOOST_VERSION >= 104800
1105 typedef StripedHashSet_seq<
1106 boost::container::slist< key_val >
1109 > StripedSet_boost_slist;
1111 typedef StripedHashSet_seq<
1112 boost::container::list< key_val >
1115 > StripedSet_boost_list;
1117 typedef StripedHashSet_seq<
1118 boost::container::vector< key_val >
1121 > StripedSet_boost_vector;
1123 typedef StripedHashSet_seq<
1124 boost::container::stable_vector< key_val >
1127 > StripedSet_boost_stable_vector;
1130 typedef StripedHashSet_ord<
1131 std::set< key_val, less >
1135 #if (CDS_COMPILER == CDS_COMPILER_MSVC || (CDS_COMPILER == CDS_COMPILER_INTEL && CDS_OS_INTERFACE == CDS_OSI_WINDOWS)) && _MSC_VER < 1600
1136 typedef StripedHashSet_ord<
1137 stdext::hash_set< key_val, hash_less >
1139 > StripedSet_hashset;
1141 typedef StripedHashSet_ord<
1142 std::unordered_set< key_val, hash, equal_to >
1144 > StripedSet_hashset;
1147 #if BOOST_VERSION >= 104800
1148 typedef StripedHashSet_ord<
1149 boost::container::set< key_val, less >
1151 > StripedSet_boost_set;
1153 typedef StripedHashSet_ord<
1154 boost::container::flat_set< key_val, less >
1156 > StripedSet_boost_flat_set;
1159 typedef StripedHashSet_ord<
1160 boost::unordered_set< key_val, hash, equal_to >
1162 > StripedSet_boost_unordered_set;
1166 // ***************************************************************************
1169 // for sequential containers
1170 template <class BucketEntry, typename... Options>
1171 class RefinableHashSet_seq:
1172 public cc::StripedSet< BucketEntry,
1173 co::mutex_policy< cc::striped_set::refinable<> >
1174 ,co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
1178 typedef cc::StripedSet< BucketEntry,
1179 co::mutex_policy< cc::striped_set::refinable<> >
1180 ,co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
1183 typedef typename base_class::resizing_policy resizing_policy_t;
1185 resizing_policy_t m_placeHolder;
1187 RefinableHashSet_seq( size_t nCapacity, size_t nLoadFactor )
1188 : base_class( nCapacity / nLoadFactor / 16, *(new(&m_placeHolder) resizing_policy_t( nLoadFactor )) )
1191 template <typename Q, typename Less>
1192 bool erase_with( Q const& v, Less pred )
1194 return base_class::erase( v );
1198 // for non-sequential ordered containers
1199 template <class BucketEntry, typename... Options>
1200 class RefinableHashSet_ord:
1201 public cc::StripedSet< BucketEntry,
1202 co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
1203 ,co::mutex_policy< cc::striped_set::refinable<> >
1207 typedef cc::StripedSet< BucketEntry,
1208 co::resizing_policy<cc::striped_set::load_factor_resizing<0> >
1209 ,co::mutex_policy< cc::striped_set::refinable<> >
1212 typedef typename base_class::resizing_policy resizing_policy_t;
1214 resizing_policy_t m_placeHolder;
1216 RefinableHashSet_ord( size_t nCapacity, size_t nLoadFactor )
1217 : base_class( 0, *(new(&m_placeHolder) resizing_policy_t( nLoadFactor * 1024 )) )
1220 template <typename Q, typename Less>
1221 bool erase_with( Q const& v, Less pred )
1223 return base_class::erase( v );
1227 typedef RefinableHashSet_seq<
1228 std::list< key_val >
1231 > RefinableSet_list;
1233 typedef RefinableHashSet_seq<
1234 std::vector< key_val >
1237 > RefinableSet_vector;
1239 #if BOOST_VERSION >= 104800
1240 typedef RefinableHashSet_seq<
1241 boost::container::slist< key_val >
1244 > RefinableSet_boost_slist;
1246 typedef RefinableHashSet_seq<
1247 boost::container::list< key_val >
1250 > RefinableSet_boost_list;
1252 typedef RefinableHashSet_seq<
1253 boost::container::vector< key_val >
1256 > RefinableSet_boost_vector;
1258 typedef RefinableHashSet_seq<
1259 boost::container::stable_vector< key_val >
1262 > RefinableSet_boost_stable_vector;
1265 typedef RefinableHashSet_ord<
1266 std::set< key_val, less >
1270 #if (CDS_COMPILER == CDS_COMPILER_MSVC || (CDS_COMPILER == CDS_COMPILER_INTEL && CDS_OS_INTERFACE == CDS_OSI_WINDOWS)) && _MSC_VER < 1600
1271 typedef RefinableHashSet_ord<
1272 stdext::hash_set< key_val, hash_less >
1274 > RefinableSet_hashset;
1276 typedef RefinableHashSet_ord<
1277 std::unordered_set< key_val, hash, equal_to >
1279 > RefinableSet_hashset;
1282 #if BOOST_VERSION >= 104800
1283 typedef RefinableHashSet_ord<
1284 boost::container::set< key_val, less >
1286 > RefinableSet_boost_set;
1288 typedef RefinableHashSet_ord<
1289 boost::container::flat_set< key_val, less >
1291 > RefinableSet_boost_flat_set;
1294 typedef RefinableHashSet_ord<
1295 boost::unordered_set< key_val, hash, equal_to >
1297 > RefinableSet_boost_unordered_set;
1301 // ***************************************************************************
1304 typedef CuckooStripedSet< key_val,
1305 cc::cuckoo::probeset_type< cc::cuckoo::list >
1306 ,co::equal_to< equal_to >
1307 ,co::hash< std::tuple< hash, hash2 > >
1308 > CuckooStripedSet_list_unord;
1310 typedef CuckooStripedSet< key_val,
1311 cc::cuckoo::probeset_type< cc::cuckoo::list >
1312 ,co::equal_to< equal_to >
1313 ,co::hash< std::tuple< hash, hash2 > >
1314 ,co::stat< cc::cuckoo::stat >
1315 > CuckooStripedSet_list_unord_stat;
1317 typedef CuckooStripedSet< key_val,
1318 cc::cuckoo::probeset_type< cc::cuckoo::list >
1319 ,co::equal_to< equal_to >
1320 ,co::hash< std::tuple< hash, hash2 > >
1321 ,cc::cuckoo::store_hash< true >
1322 > CuckooStripedSet_list_unord_storehash;
1324 typedef CuckooStripedSet< key_val,
1325 cc::cuckoo::probeset_type< cc::cuckoo::list >
1326 ,co::compare< compare >
1327 ,co::hash< std::tuple< hash, hash2 > >
1328 > CuckooStripedSet_list_ord;
1330 typedef CuckooStripedSet< key_val,
1331 cc::cuckoo::probeset_type< cc::cuckoo::list >
1332 ,co::compare< compare >
1333 ,co::hash< std::tuple< hash, hash2 > >
1334 ,co::stat< cc::cuckoo::stat >
1335 > CuckooStripedSet_list_ord_stat;
1337 typedef CuckooStripedSet< key_val,
1338 cc::cuckoo::probeset_type< cc::cuckoo::list >
1339 ,co::compare< compare >
1340 ,co::hash< std::tuple< hash, hash2 > >
1341 ,cc::cuckoo::store_hash< true >
1342 > CuckooStripedSet_list_ord_storehash;
1344 typedef CuckooStripedSet< key_val,
1345 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
1346 ,co::equal_to< equal_to >
1347 ,co::hash< std::tuple< hash, hash2 > >
1348 > CuckooStripedSet_vector_unord;
1350 typedef CuckooStripedSet< key_val,
1351 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
1352 ,co::equal_to< equal_to >
1353 ,co::hash< std::tuple< hash, hash2 > >
1354 ,co::stat< cc::cuckoo::stat >
1355 > CuckooStripedSet_vector_unord_stat;
1357 typedef CuckooStripedSet< key_val,
1358 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
1359 ,co::equal_to< equal_to >
1360 ,co::hash< std::tuple< hash, hash2 > >
1361 ,cc::cuckoo::store_hash< true >
1362 > CuckooStripedSet_vector_unord_storehash;
1364 typedef CuckooStripedSet< key_val,
1365 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
1366 ,co::compare< compare >
1367 ,co::hash< std::tuple< hash, hash2 > >
1368 > CuckooStripedSet_vector_ord;
1370 typedef CuckooStripedSet< key_val,
1371 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
1372 ,co::compare< compare >
1373 ,co::hash< std::tuple< hash, hash2 > >
1374 ,co::stat< cc::cuckoo::stat >
1375 > CuckooStripedSet_vector_ord_stat;
1377 typedef CuckooStripedSet< key_val,
1378 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
1379 ,co::compare< compare >
1380 ,co::hash< std::tuple< hash, hash2 > >
1381 ,cc::cuckoo::store_hash< true >
1382 > CuckooStripedSet_vector_ord_storehash;
1384 typedef CuckooRefinableSet< key_val,
1385 cc::cuckoo::probeset_type< cc::cuckoo::list >
1386 ,co::equal_to< equal_to >
1387 ,co::hash< std::tuple< hash, hash2 > >
1388 > CuckooRefinableSet_list_unord;
1390 typedef CuckooRefinableSet< key_val,
1391 cc::cuckoo::probeset_type< cc::cuckoo::list >
1392 ,co::equal_to< equal_to >
1393 ,co::hash< std::tuple< hash, hash2 > >
1394 ,co::stat< cc::cuckoo::stat >
1395 > CuckooRefinableSet_list_unord_stat;
1397 typedef CuckooRefinableSet< key_val,
1398 cc::cuckoo::probeset_type< cc::cuckoo::list >
1399 ,co::equal_to< equal_to >
1400 ,co::hash< std::tuple< hash, hash2 > >
1401 ,cc::cuckoo::store_hash< true >
1402 > CuckooRefinableSet_list_unord_storehash;
1404 typedef CuckooRefinableSet< key_val,
1405 cc::cuckoo::probeset_type< cc::cuckoo::list >
1406 ,co::compare< compare >
1407 ,co::hash< std::tuple< hash, hash2 > >
1408 > CuckooRefinableSet_list_ord;
1410 typedef CuckooRefinableSet< key_val,
1411 cc::cuckoo::probeset_type< cc::cuckoo::list >
1412 ,co::compare< compare >
1413 ,co::hash< std::tuple< hash, hash2 > >
1414 ,co::stat< cc::cuckoo::stat >
1415 > CuckooRefinableSet_list_ord_stat;
1417 typedef CuckooRefinableSet< key_val,
1418 cc::cuckoo::probeset_type< cc::cuckoo::list >
1419 ,co::compare< compare >
1420 ,co::hash< std::tuple< hash, hash2 > >
1421 ,cc::cuckoo::store_hash< true >
1422 > CuckooRefinableSet_list_ord_storehash;
1424 typedef CuckooRefinableSet< key_val,
1425 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
1426 ,co::equal_to< equal_to >
1427 ,co::hash< std::tuple< hash, hash2 > >
1428 > CuckooRefinableSet_vector_unord;
1430 typedef CuckooRefinableSet< key_val,
1431 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
1432 ,co::equal_to< equal_to >
1433 ,co::hash< std::tuple< hash, hash2 > >
1434 ,co::stat< cc::cuckoo::stat >
1435 > CuckooRefinableSet_vector_unord_stat;
1437 typedef CuckooRefinableSet< key_val,
1438 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
1439 ,co::equal_to< equal_to >
1440 ,co::hash< std::tuple< hash, hash2 > >
1441 ,cc::cuckoo::store_hash< true >
1442 > CuckooRefinableSet_vector_unord_storehash;
1444 typedef CuckooRefinableSet< key_val,
1445 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
1446 ,co::compare< compare >
1447 ,co::hash< std::tuple< hash, hash2 > >
1448 > CuckooRefinableSet_vector_ord;
1450 typedef CuckooRefinableSet< key_val,
1451 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
1452 ,co::compare< compare >
1453 ,co::hash< std::tuple< hash, hash2 > >
1454 ,co::stat< cc::cuckoo::stat >
1455 > CuckooRefinableSet_vector_ord_stat;
1457 typedef CuckooRefinableSet< key_val,
1458 cc::cuckoo::probeset_type< cc::cuckoo::vector<4> >
1459 ,co::compare< compare >
1460 ,co::hash< std::tuple< hash, hash2 > >
1461 ,cc::cuckoo::store_hash< true >
1462 > CuckooRefinableSet_vector_ord_storehash;
1465 // ***************************************************************************
1468 class traits_SkipListSet_hp_less_pascal: public cc::skip_list::make_traits <
1470 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
1471 ,co::item_counter< cds::atomicity::item_counter >
1474 typedef cc::SkipListSet< cds::gc::HP, key_val, traits_SkipListSet_hp_less_pascal > SkipListSet_hp_less_pascal;
1476 class traits_SkipListSet_hp_less_pascal_seqcst: public cc::skip_list::make_traits <
1478 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
1479 ,co::memory_model< co::v::sequential_consistent >
1480 ,co::item_counter< cds::atomicity::item_counter >
1483 typedef cc::SkipListSet< cds::gc::HP, key_val, traits_SkipListSet_hp_less_pascal_seqcst > SkipListSet_hp_less_pascal_seqcst;
1485 class traits_SkipListSet_hp_less_pascal_stat: public cc::skip_list::make_traits <
1487 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
1488 ,co::stat< cc::skip_list::stat<> >
1489 ,co::item_counter< cds::atomicity::item_counter >
1492 typedef cc::SkipListSet< cds::gc::HP, key_val, traits_SkipListSet_hp_less_pascal_stat > SkipListSet_hp_less_pascal_stat;
1494 class traits_SkipListSet_hp_cmp_pascal: public cc::skip_list::make_traits <
1495 co::compare< compare >
1496 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
1497 ,co::item_counter< cds::atomicity::item_counter >
1500 typedef cc::SkipListSet< cds::gc::HP, key_val, traits_SkipListSet_hp_cmp_pascal > SkipListSet_hp_cmp_pascal;
1502 class traits_SkipListSet_hp_cmp_pascal_stat: public cc::skip_list::make_traits <
1503 co::compare< compare >
1504 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
1505 ,co::stat< cc::skip_list::stat<> >
1506 ,co::item_counter< cds::atomicity::item_counter >
1509 typedef cc::SkipListSet< cds::gc::HP, key_val, traits_SkipListSet_hp_cmp_pascal_stat > SkipListSet_hp_cmp_pascal_stat;
1511 class traits_SkipListSet_hp_less_xorshift: public cc::skip_list::make_traits <
1513 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
1514 ,co::item_counter< cds::atomicity::item_counter >
1517 typedef cc::SkipListSet< cds::gc::HP, key_val, traits_SkipListSet_hp_less_xorshift > SkipListSet_hp_less_xorshift;
1519 class traits_SkipListSet_hp_less_xorshift_stat: public cc::skip_list::make_traits <
1521 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
1522 ,co::stat< cc::skip_list::stat<> >
1523 ,co::item_counter< cds::atomicity::item_counter >
1526 typedef cc::SkipListSet< cds::gc::HP, key_val, traits_SkipListSet_hp_less_xorshift_stat > SkipListSet_hp_less_xorshift_stat;
1528 class traits_SkipListSet_hp_cmp_xorshift: public cc::skip_list::make_traits <
1529 co::compare< compare >
1530 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
1531 ,co::item_counter< cds::atomicity::item_counter >
1534 typedef cc::SkipListSet< cds::gc::HP, key_val, traits_SkipListSet_hp_cmp_xorshift > SkipListSet_hp_cmp_xorshift;
1536 class traits_SkipListSet_hp_cmp_xorshift_stat: public cc::skip_list::make_traits <
1537 co::compare< compare >
1538 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
1539 ,co::stat< cc::skip_list::stat<> >
1540 ,co::item_counter< cds::atomicity::item_counter >
1543 typedef cc::SkipListSet< cds::gc::HP, key_val, traits_SkipListSet_hp_cmp_xorshift_stat > SkipListSet_hp_cmp_xorshift_stat;
1545 // ***************************************************************************
1546 // SkipListSet - DHP
1548 class traits_SkipListSet_ptb_less_pascal: public cc::skip_list::make_traits <
1550 ,co::item_counter< cds::atomicity::item_counter >
1551 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
1554 typedef cc::SkipListSet< cds::gc::DHP, key_val, traits_SkipListSet_ptb_less_pascal > SkipListSet_ptb_less_pascal;
1556 class traits_SkipListSet_ptb_less_pascal_seqcst: public cc::skip_list::make_traits <
1558 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
1559 ,co::memory_model< co::v::sequential_consistent >
1560 ,co::item_counter< cds::atomicity::item_counter >
1563 typedef cc::SkipListSet< cds::gc::DHP, key_val, traits_SkipListSet_ptb_less_pascal_seqcst > SkipListSet_ptb_less_pascal_seqcst;
1565 class traits_SkipListSet_ptb_less_pascal_stat: public cc::skip_list::make_traits <
1567 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
1568 ,co::stat< cc::skip_list::stat<> >
1569 ,co::item_counter< cds::atomicity::item_counter >
1572 typedef cc::SkipListSet< cds::gc::DHP, key_val, traits_SkipListSet_ptb_less_pascal_stat > SkipListSet_ptb_less_pascal_stat;
1574 class traits_SkipListSet_ptb_cmp_pascal: public cc::skip_list::make_traits <
1575 co::compare< compare >
1576 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
1577 ,co::item_counter< cds::atomicity::item_counter >
1580 typedef cc::SkipListSet< cds::gc::DHP, key_val, traits_SkipListSet_ptb_cmp_pascal > SkipListSet_ptb_cmp_pascal;
1582 class traits_SkipListSet_ptb_cmp_pascal_stat: public cc::skip_list::make_traits <
1583 co::compare< compare >
1584 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
1585 ,co::stat< cc::skip_list::stat<> >
1586 ,co::item_counter< cds::atomicity::item_counter >
1589 typedef cc::SkipListSet< cds::gc::DHP, key_val, traits_SkipListSet_ptb_cmp_pascal_stat > SkipListSet_ptb_cmp_pascal_stat;
1591 class traits_SkipListSet_ptb_less_xorshift: public cc::skip_list::make_traits <
1593 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
1594 ,co::item_counter< cds::atomicity::item_counter >
1597 typedef cc::SkipListSet< cds::gc::DHP, key_val, traits_SkipListSet_ptb_less_xorshift > SkipListSet_ptb_less_xorshift;
1599 class traits_SkipListSet_ptb_less_xorshift_stat: public cc::skip_list::make_traits <
1601 ,co::item_counter< cds::atomicity::item_counter >
1602 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
1603 ,co::stat< cc::skip_list::stat<> >
1606 typedef cc::SkipListSet< cds::gc::DHP, key_val, traits_SkipListSet_ptb_less_xorshift_stat > SkipListSet_ptb_less_xorshift_stat;
1608 class traits_SkipListSet_ptb_cmp_xorshift: public cc::skip_list::make_traits <
1609 co::compare< compare >
1610 ,co::item_counter< cds::atomicity::item_counter >
1611 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
1614 typedef cc::SkipListSet< cds::gc::DHP, key_val, traits_SkipListSet_ptb_cmp_xorshift> SkipListSet_ptb_cmp_xorshift;
1616 class traits_SkipListSet_ptb_cmp_xorshift_stat: public cc::skip_list::make_traits <
1617 co::compare< compare >
1618 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
1619 ,co::stat< cc::skip_list::stat<> >
1620 ,co::item_counter< cds::atomicity::item_counter >
1623 typedef cc::SkipListSet< cds::gc::DHP, key_val, traits_SkipListSet_ptb_cmp_xorshift_stat > SkipListSet_ptb_cmp_xorshift_stat;
1626 // ***************************************************************************
1627 // SkipListSet - RCU general_instant
1629 class traits_SkipListSet_rcu_gpi_less_pascal: public cc::skip_list::make_traits <
1631 ,co::item_counter< cds::atomicity::item_counter >
1632 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
1635 typedef cc::SkipListSet< rcu_gpi, key_val, traits_SkipListSet_rcu_gpi_less_pascal > SkipListSet_rcu_gpi_less_pascal;
1637 class traits_SkipListSet_rcu_gpi_less_pascal_seqcst: public cc::skip_list::make_traits <
1639 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
1640 ,co::memory_model< co::v::sequential_consistent >
1641 ,co::item_counter< cds::atomicity::item_counter >
1644 typedef cc::SkipListSet< rcu_gpi, key_val, traits_SkipListSet_rcu_gpi_less_pascal_seqcst > SkipListSet_rcu_gpi_less_pascal_seqcst;
1646 class traits_SkipListSet_rcu_gpi_less_pascal_stat: public cc::skip_list::make_traits <
1648 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
1649 ,co::stat< cc::skip_list::stat<> >
1650 ,co::item_counter< cds::atomicity::item_counter >
1653 typedef cc::SkipListSet< rcu_gpi, key_val, traits_SkipListSet_rcu_gpi_less_pascal_stat > SkipListSet_rcu_gpi_less_pascal_stat;
1655 class traits_SkipListSet_rcu_gpi_cmp_pascal: public cc::skip_list::make_traits <
1656 co::compare< compare >
1657 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
1658 ,co::item_counter< cds::atomicity::item_counter >
1661 typedef cc::SkipListSet< rcu_gpi, key_val, traits_SkipListSet_rcu_gpi_cmp_pascal > SkipListSet_rcu_gpi_cmp_pascal;
1663 class traits_SkipListSet_rcu_gpi_cmp_pascal_stat: public cc::skip_list::make_traits <
1664 co::compare< compare >
1665 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
1666 ,co::stat< cc::skip_list::stat<> >
1667 ,co::item_counter< cds::atomicity::item_counter >
1670 typedef cc::SkipListSet< rcu_gpi, key_val, traits_SkipListSet_rcu_gpi_cmp_pascal_stat > SkipListSet_rcu_gpi_cmp_pascal_stat;
1672 class traits_SkipListSet_rcu_gpi_less_xorshift: public cc::skip_list::make_traits <
1674 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
1675 ,co::item_counter< cds::atomicity::item_counter >
1678 typedef cc::SkipListSet< rcu_gpi, key_val, traits_SkipListSet_rcu_gpi_less_xorshift > SkipListSet_rcu_gpi_less_xorshift;
1680 class traits_SkipListSet_rcu_gpi_less_xorshift_stat: public cc::skip_list::make_traits <
1682 ,co::item_counter< cds::atomicity::item_counter >
1683 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
1684 ,co::stat< cc::skip_list::stat<> >
1687 typedef cc::SkipListSet< rcu_gpi, key_val, traits_SkipListSet_rcu_gpi_less_xorshift_stat > SkipListSet_rcu_gpi_less_xorshift_stat;
1689 class traits_SkipListSet_rcu_gpi_cmp_xorshift: public cc::skip_list::make_traits <
1690 co::compare< compare >
1691 ,co::item_counter< cds::atomicity::item_counter >
1692 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
1695 typedef cc::SkipListSet< rcu_gpi, key_val, traits_SkipListSet_rcu_gpi_cmp_xorshift > SkipListSet_rcu_gpi_cmp_xorshift;
1697 class traits_SkipListSet_rcu_gpi_cmp_xorshift_stat: public cc::skip_list::make_traits <
1698 co::compare< compare >
1699 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
1700 ,co::stat< cc::skip_list::stat<> >
1701 ,co::item_counter< cds::atomicity::item_counter >
1704 typedef cc::SkipListSet< rcu_gpi, key_val, traits_SkipListSet_rcu_gpi_cmp_xorshift_stat > SkipListSet_rcu_gpi_cmp_xorshift_stat;
1707 // ***************************************************************************
1708 // SkipListSet - RCU general_buffered
1710 class traits_SkipListSet_rcu_gpb_less_pascal: public cc::skip_list::make_traits <
1712 ,co::item_counter< cds::atomicity::item_counter >
1713 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
1716 typedef cc::SkipListSet< rcu_gpb, key_val, traits_SkipListSet_rcu_gpb_less_pascal > SkipListSet_rcu_gpb_less_pascal;
1718 class traits_SkipListSet_rcu_gpb_less_pascal_seqcst: public cc::skip_list::make_traits <
1720 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
1721 ,co::memory_model< co::v::sequential_consistent >
1722 ,co::item_counter< cds::atomicity::item_counter >
1725 typedef cc::SkipListSet< rcu_gpb, key_val, traits_SkipListSet_rcu_gpb_less_pascal_seqcst > SkipListSet_rcu_gpb_less_pascal_seqcst;
1727 class traits_SkipListSet_rcu_gpb_less_pascal_stat: public cc::skip_list::make_traits <
1729 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
1730 ,co::stat< cc::skip_list::stat<> >
1731 ,co::item_counter< cds::atomicity::item_counter >
1734 typedef cc::SkipListSet< rcu_gpb, key_val, traits_SkipListSet_rcu_gpb_less_pascal_stat > SkipListSet_rcu_gpb_less_pascal_stat;
1736 class traits_SkipListSet_rcu_gpb_cmp_pascal: public cc::skip_list::make_traits <
1737 co::compare< compare >
1738 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
1739 ,co::item_counter< cds::atomicity::item_counter >
1742 typedef cc::SkipListSet< rcu_gpb, key_val, traits_SkipListSet_rcu_gpb_cmp_pascal > SkipListSet_rcu_gpb_cmp_pascal;
1744 class traits_SkipListSet_rcu_gpb_cmp_pascal_stat: public cc::skip_list::make_traits <
1745 co::compare< compare >
1746 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
1747 ,co::stat< cc::skip_list::stat<> >
1748 ,co::item_counter< cds::atomicity::item_counter >
1751 typedef cc::SkipListSet< rcu_gpb, key_val, traits_SkipListSet_rcu_gpb_cmp_pascal_stat > SkipListSet_rcu_gpb_cmp_pascal_stat;
1753 class traits_SkipListSet_rcu_gpb_less_xorshift: public cc::skip_list::make_traits <
1755 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
1756 ,co::item_counter< cds::atomicity::item_counter >
1759 typedef cc::SkipListSet< rcu_gpb, key_val, traits_SkipListSet_rcu_gpb_less_xorshift > SkipListSet_rcu_gpb_less_xorshift;
1761 class traits_SkipListSet_rcu_gpb_less_xorshift_stat: public cc::skip_list::make_traits <
1763 ,co::item_counter< cds::atomicity::item_counter >
1764 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
1765 ,co::stat< cc::skip_list::stat<> >
1768 typedef cc::SkipListSet< rcu_gpb, key_val, traits_SkipListSet_rcu_gpb_less_xorshift_stat > SkipListSet_rcu_gpb_less_xorshift_stat;
1770 class traits_SkipListSet_rcu_gpb_cmp_xorshift: public cc::skip_list::make_traits <
1771 co::compare< compare >
1772 ,co::item_counter< cds::atomicity::item_counter >
1773 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
1776 typedef cc::SkipListSet< rcu_gpb, key_val, traits_SkipListSet_rcu_gpb_cmp_xorshift > SkipListSet_rcu_gpb_cmp_xorshift;
1778 class traits_SkipListSet_rcu_gpb_cmp_xorshift_stat: public cc::skip_list::make_traits <
1779 co::compare< compare >
1780 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
1781 ,co::stat< cc::skip_list::stat<> >
1782 ,co::item_counter< cds::atomicity::item_counter >
1785 typedef cc::SkipListSet< rcu_gpb, key_val, traits_SkipListSet_rcu_gpb_cmp_xorshift_stat > SkipListSet_rcu_gpb_cmp_xorshift_stat;
1787 // ***************************************************************************
1788 // SkipListSet - RCU general_threaded
1790 class traits_SkipListSet_rcu_gpt_less_pascal: public cc::skip_list::make_traits <
1792 ,co::item_counter< cds::atomicity::item_counter >
1793 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
1796 typedef cc::SkipListSet< rcu_gpt, key_val, traits_SkipListSet_rcu_gpt_less_pascal > SkipListSet_rcu_gpt_less_pascal;
1798 class traits_SkipListSet_rcu_gpt_less_pascal_seqcst: public cc::skip_list::make_traits <
1800 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
1801 ,co::memory_model< co::v::sequential_consistent >
1802 ,co::item_counter< cds::atomicity::item_counter >
1805 typedef cc::SkipListSet< rcu_gpt, key_val, traits_SkipListSet_rcu_gpt_less_pascal_seqcst > SkipListSet_rcu_gpt_less_pascal_seqcst;
1807 class traits_SkipListSet_rcu_gpt_less_pascal_stat: public cc::skip_list::make_traits <
1809 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
1810 ,co::stat< cc::skip_list::stat<> >
1811 ,co::item_counter< cds::atomicity::item_counter >
1814 typedef cc::SkipListSet< rcu_gpt, key_val, traits_SkipListSet_rcu_gpt_less_pascal_stat > SkipListSet_rcu_gpt_less_pascal_stat;
1816 class traits_SkipListSet_rcu_gpt_cmp_pascal: public cc::skip_list::make_traits <
1817 co::compare< compare >
1818 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
1819 ,co::item_counter< cds::atomicity::item_counter >
1822 typedef cc::SkipListSet< rcu_gpt, key_val, traits_SkipListSet_rcu_gpt_cmp_pascal > SkipListSet_rcu_gpt_cmp_pascal;
1824 class traits_SkipListSet_rcu_gpt_cmp_pascal_stat: public cc::skip_list::make_traits <
1825 co::compare< compare >
1826 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
1827 ,co::stat< cc::skip_list::stat<> >
1828 ,co::item_counter< cds::atomicity::item_counter >
1831 typedef cc::SkipListSet< rcu_gpt, key_val, traits_SkipListSet_rcu_gpt_cmp_pascal_stat > SkipListSet_rcu_gpt_cmp_pascal_stat;
1833 class traits_SkipListSet_rcu_gpt_less_xorshift: public cc::skip_list::make_traits <
1835 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
1836 ,co::item_counter< cds::atomicity::item_counter >
1839 typedef cc::SkipListSet< rcu_gpt, key_val, traits_SkipListSet_rcu_gpt_less_xorshift > SkipListSet_rcu_gpt_less_xorshift;
1841 class traits_SkipListSet_rcu_gpt_less_xorshift_stat: public cc::skip_list::make_traits <
1843 ,co::item_counter< cds::atomicity::item_counter >
1844 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
1845 ,co::stat< cc::skip_list::stat<> >
1848 typedef cc::SkipListSet< rcu_gpt, key_val, traits_SkipListSet_rcu_gpt_less_xorshift_stat > SkipListSet_rcu_gpt_less_xorshift_stat;
1850 class traits_SkipListSet_rcu_gpt_cmp_xorshift: public cc::skip_list::make_traits <
1851 co::compare< compare >
1852 ,co::item_counter< cds::atomicity::item_counter >
1853 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
1856 typedef cc::SkipListSet< rcu_gpt, key_val, traits_SkipListSet_rcu_gpt_cmp_xorshift > SkipListSet_rcu_gpt_cmp_xorshift;
1858 class traits_SkipListSet_rcu_gpt_cmp_xorshift_stat: public cc::skip_list::make_traits <
1859 co::compare< compare >
1860 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
1861 ,co::stat< cc::skip_list::stat<> >
1862 ,co::item_counter< cds::atomicity::item_counter >
1865 typedef cc::SkipListSet< rcu_gpt, key_val, traits_SkipListSet_rcu_gpt_cmp_xorshift_stat > SkipListSet_rcu_gpt_cmp_xorshift_stat;
1867 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
1868 // ***************************************************************************
1869 // SkipListSet - RCU signal_buffered
1871 class traits_SkipListSet_rcu_shb_less_pascal: public cc::skip_list::make_traits <
1873 ,co::item_counter< cds::atomicity::item_counter >
1874 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
1877 typedef cc::SkipListSet< rcu_shb, key_val, traits_SkipListSet_rcu_shb_less_pascal > SkipListSet_rcu_shb_less_pascal;
1879 class traits_SkipListSet_rcu_shb_less_pascal_seqcst: public cc::skip_list::make_traits <
1881 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
1882 ,co::memory_model< co::v::sequential_consistent >
1883 ,co::item_counter< cds::atomicity::item_counter >
1886 typedef cc::SkipListSet< rcu_shb, key_val, traits_SkipListSet_rcu_shb_less_pascal_seqcst > SkipListSet_rcu_shb_less_pascal_seqcst;
1888 class traits_SkipListSet_rcu_shb_less_pascal_stat: public cc::skip_list::make_traits <
1890 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
1891 ,co::stat< cc::skip_list::stat<> >
1892 ,co::item_counter< cds::atomicity::item_counter >
1895 typedef cc::SkipListSet< rcu_shb, key_val, traits_SkipListSet_rcu_shb_less_pascal_stat > SkipListSet_rcu_shb_less_pascal_stat;
1897 class traits_SkipListSet_rcu_shb_cmp_pascal: public cc::skip_list::make_traits <
1898 co::compare< compare >
1899 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
1900 ,co::item_counter< cds::atomicity::item_counter >
1903 typedef cc::SkipListSet< rcu_shb, key_val, traits_SkipListSet_rcu_shb_cmp_pascal > SkipListSet_rcu_shb_cmp_pascal;
1905 class traits_SkipListSet_rcu_shb_cmp_pascal_stat: public cc::skip_list::make_traits <
1906 co::compare< compare >
1907 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
1908 ,co::stat< cc::skip_list::stat<> >
1909 ,co::item_counter< cds::atomicity::item_counter >
1912 typedef cc::SkipListSet< rcu_shb, key_val, traits_SkipListSet_rcu_shb_cmp_pascal_stat > SkipListSet_rcu_shb_cmp_pascal_stat;
1914 class traits_SkipListSet_rcu_shb_less_xorshift: public cc::skip_list::make_traits <
1916 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
1917 ,co::item_counter< cds::atomicity::item_counter >
1920 typedef cc::SkipListSet< rcu_shb, key_val, traits_SkipListSet_rcu_shb_less_xorshift > SkipListSet_rcu_shb_less_xorshift;
1922 class traits_SkipListSet_rcu_shb_less_xorshift_stat: public cc::skip_list::make_traits <
1924 ,co::item_counter< cds::atomicity::item_counter >
1925 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
1926 ,co::stat< cc::skip_list::stat<> >
1929 typedef cc::SkipListSet< rcu_shb, key_val, traits_SkipListSet_rcu_shb_less_xorshift_stat > SkipListSet_rcu_shb_less_xorshift_stat;
1931 class traits_SkipListSet_rcu_shb_cmp_xorshift: public cc::skip_list::make_traits <
1932 co::compare< compare >
1933 ,co::item_counter< cds::atomicity::item_counter >
1934 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
1937 typedef cc::SkipListSet< rcu_shb, key_val, traits_SkipListSet_rcu_shb_cmp_xorshift > SkipListSet_rcu_shb_cmp_xorshift;
1939 class traits_SkipListSet_rcu_shb_cmp_xorshift_stat: public cc::skip_list::make_traits <
1940 co::compare< compare >
1941 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
1942 ,co::stat< cc::skip_list::stat<> >
1943 ,co::item_counter< cds::atomicity::item_counter >
1946 typedef cc::SkipListSet< rcu_shb, key_val, traits_SkipListSet_rcu_shb_cmp_xorshift_stat > SkipListSet_rcu_shb_cmp_xorshift_stat;
1948 // ***************************************************************************
1949 // SkipListSet - RCU signal_threaded
1951 class traits_SkipListSet_rcu_sht_less_pascal: public cc::skip_list::make_traits <
1953 ,co::item_counter< cds::atomicity::item_counter >
1954 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
1957 typedef cc::SkipListSet< rcu_sht, key_val, traits_SkipListSet_rcu_sht_less_pascal > SkipListSet_rcu_sht_less_pascal;
1959 class traits_SkipListSet_rcu_sht_less_pascal_seqcst: public cc::skip_list::make_traits <
1961 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
1962 ,co::memory_model< co::v::sequential_consistent >
1963 ,co::item_counter< cds::atomicity::item_counter >
1966 typedef cc::SkipListSet< rcu_sht, key_val, traits_SkipListSet_rcu_sht_less_pascal_seqcst > SkipListSet_rcu_sht_less_pascal_seqcst;
1968 class traits_SkipListSet_rcu_sht_less_pascal_stat: public cc::skip_list::make_traits <
1970 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
1971 ,co::stat< cc::skip_list::stat<> >
1972 ,co::item_counter< cds::atomicity::item_counter >
1975 typedef cc::SkipListSet< rcu_sht, key_val, traits_SkipListSet_rcu_sht_less_pascal_stat > SkipListSet_rcu_sht_less_pascal_stat;
1977 class traits_SkipListSet_rcu_sht_cmp_pascal: public cc::skip_list::make_traits <
1978 co::compare< compare >
1979 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
1980 ,co::item_counter< cds::atomicity::item_counter >
1983 typedef cc::SkipListSet< rcu_sht, key_val, traits_SkipListSet_rcu_sht_cmp_pascal > SkipListSet_rcu_sht_cmp_pascal;
1985 class traits_SkipListSet_rcu_sht_cmp_pascal_stat: public cc::skip_list::make_traits <
1986 co::compare< compare >
1987 ,cc::skip_list::random_level_generator< cc::skip_list::turbo_pascal >
1988 ,co::stat< cc::skip_list::stat<> >
1989 ,co::item_counter< cds::atomicity::item_counter >
1992 typedef cc::SkipListSet< rcu_sht, key_val, traits_SkipListSet_rcu_sht_cmp_pascal_stat > SkipListSet_rcu_sht_cmp_pascal_stat;
1994 class traits_SkipListSet_rcu_sht_less_xorshift: public cc::skip_list::make_traits <
1996 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
1997 ,co::item_counter< cds::atomicity::item_counter >
2000 typedef cc::SkipListSet< rcu_sht, key_val, traits_SkipListSet_rcu_sht_less_xorshift > SkipListSet_rcu_sht_less_xorshift;
2002 class traits_SkipListSet_rcu_sht_less_xorshift_stat: public cc::skip_list::make_traits <
2004 ,co::item_counter< cds::atomicity::item_counter >
2005 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
2006 ,co::stat< cc::skip_list::stat<> >
2009 typedef cc::SkipListSet< rcu_sht, key_val, traits_SkipListSet_rcu_sht_less_xorshift_stat > SkipListSet_rcu_sht_less_xorshift_stat;
2011 class traits_SkipListSet_rcu_sht_cmp_xorshift: public cc::skip_list::make_traits <
2012 co::compare< compare >
2013 ,co::item_counter< cds::atomicity::item_counter >
2014 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
2017 typedef cc::SkipListSet< rcu_sht, key_val, traits_SkipListSet_rcu_sht_cmp_xorshift > SkipListSet_rcu_sht_cmp_xorshift;
2019 class traits_SkipListSet_rcu_sht_cmp_xorshift_stat: public cc::skip_list::make_traits <
2020 co::compare< compare >
2021 ,cc::skip_list::random_level_generator< cc::skip_list::xorshift >
2022 ,co::stat< cc::skip_list::stat<> >
2023 ,co::item_counter< cds::atomicity::item_counter >
2026 typedef cc::SkipListSet< rcu_sht, key_val, traits_SkipListSet_rcu_sht_cmp_xorshift_stat > SkipListSet_rcu_sht_cmp_xorshift_stat;
2029 // ***************************************************************************
2031 struct ellen_bintree_props {
2032 struct key_extractor {
2033 void operator()( key_type& dest, key_val const& src ) const
2040 bool operator()( key_val const& v1, key_val const& v2 ) const
2042 return key_less()( v1.key, v2.key );
2044 bool operator()( key_type const& k, key_val const& v ) const
2046 return key_less()( k, v.key );
2048 bool operator()( key_val const& v, key_type const& k ) const
2050 return key_less()( v.key, k );
2052 bool operator()( key_type const& k1, key_type const& k2 ) const
2054 return key_less()( k1, k2 );
2059 typedef cc::ellen_bintree::node<cds::gc::HP, key_val> leaf_node;
2060 typedef cc::ellen_bintree::internal_node< key_type, leaf_node > internal_node;
2061 typedef cc::ellen_bintree::update_desc< leaf_node, internal_node > update_desc;
2065 typedef cc::ellen_bintree::node<cds::gc::DHP, key_val> leaf_node;
2066 typedef cc::ellen_bintree::internal_node< key_type, leaf_node > internal_node;
2067 typedef cc::ellen_bintree::update_desc< leaf_node, internal_node > update_desc;
2071 typedef cc::ellen_bintree::node<rcu_gpi, key_val> leaf_node;
2072 typedef cc::ellen_bintree::internal_node< key_type, leaf_node > internal_node;
2073 typedef cc::ellen_bintree::update_desc< leaf_node, internal_node > update_desc;
2076 typedef cc::ellen_bintree::node<rcu_gpb, key_val> leaf_node;
2077 typedef cc::ellen_bintree::internal_node< key_type, leaf_node > internal_node;
2078 typedef cc::ellen_bintree::update_desc< leaf_node, internal_node > update_desc;
2081 typedef cc::ellen_bintree::node<rcu_gpt, key_val> leaf_node;
2082 typedef cc::ellen_bintree::internal_node< key_type, leaf_node > internal_node;
2083 typedef cc::ellen_bintree::update_desc< leaf_node, internal_node > update_desc;
2085 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
2087 typedef cc::ellen_bintree::node<rcu_shb, key_val> leaf_node;
2088 typedef cc::ellen_bintree::internal_node< key_type, leaf_node > internal_node;
2089 typedef cc::ellen_bintree::update_desc< leaf_node, internal_node > update_desc;
2092 typedef cc::ellen_bintree::node<rcu_sht, key_val> leaf_node;
2093 typedef cc::ellen_bintree::internal_node< key_type, leaf_node > internal_node;
2094 typedef cc::ellen_bintree::update_desc< leaf_node, internal_node > update_desc;
2100 // ***************************************************************************
2101 // EllenBinTreeSet - HP
2103 class traits_EllenBinTreeSet_hp: public cc::ellen_bintree::make_set_traits<
2104 cc::ellen_bintree::key_extractor< typename ellen_bintree_props::key_extractor >
2105 ,co::less< typename ellen_bintree_props::less >
2106 ,cc::ellen_bintree::update_desc_allocator<
2107 cds::memory::pool_allocator< typename ellen_bintree_props::hp_gc::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
2109 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
2112 typedef cc::EllenBinTreeSet< cds::gc::HP, key_type, key_val, traits_EllenBinTreeSet_hp > EllenBinTreeSet_hp;
2114 class traits_EllenBinTreeSet_hp_stat: public cc::ellen_bintree::make_set_traits<
2115 cc::ellen_bintree::key_extractor< typename ellen_bintree_props::key_extractor >
2116 ,co::less< typename ellen_bintree_props::less >
2117 ,cc::ellen_bintree::update_desc_allocator<
2118 cds::memory::pool_allocator< typename ellen_bintree_props::hp_gc::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
2120 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
2121 ,co::stat< cc::ellen_bintree::stat<> >
2124 typedef cc::EllenBinTreeSet< cds::gc::HP, key_type, key_val, traits_EllenBinTreeSet_hp_stat > EllenBinTreeSet_hp_stat;
2126 // ***************************************************************************
2127 // EllenBinTreeSet - DHP
2129 class traits_EllenBinTreeSet_ptb: public cc::ellen_bintree::make_set_traits<
2130 cc::ellen_bintree::key_extractor< typename ellen_bintree_props::key_extractor >
2131 ,co::less< typename ellen_bintree_props::less >
2132 ,cc::ellen_bintree::update_desc_allocator<
2133 cds::memory::pool_allocator< typename ellen_bintree_props::ptb_gc::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
2135 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
2138 typedef cc::EllenBinTreeSet< cds::gc::DHP, key_type, key_val, traits_EllenBinTreeSet_ptb > EllenBinTreeSet_ptb;
2140 class traits_EllenBinTreeSet_ptb_stat: public cc::ellen_bintree::make_set_traits<
2141 cc::ellen_bintree::key_extractor< typename ellen_bintree_props::key_extractor >
2142 ,co::less< typename ellen_bintree_props::less >
2143 ,cc::ellen_bintree::update_desc_allocator<
2144 cds::memory::pool_allocator< typename ellen_bintree_props::ptb_gc::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
2146 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
2147 ,co::stat< cc::ellen_bintree::stat<> >
2150 typedef cc::EllenBinTreeSet< cds::gc::DHP, key_type, key_val, traits_EllenBinTreeSet_ptb_stat > EllenBinTreeSet_ptb_stat;
2153 // ***************************************************************************
2154 // EllenBinTreeSet - RCU
2156 class traits_EllenBinTreeSet_rcu_gpi: public cc::ellen_bintree::make_set_traits<
2157 cc::ellen_bintree::key_extractor< typename ellen_bintree_props::key_extractor >
2158 ,co::less< typename ellen_bintree_props::less >
2159 ,cc::ellen_bintree::update_desc_allocator<
2160 cds::memory::pool_allocator< typename ellen_bintree_props::gpi::update_desc, ellen_bintree_pool::bounded_update_desc_pool_accessor >
2162 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
2165 typedef cc::EllenBinTreeSet< rcu_gpi, key_type, key_val, traits_EllenBinTreeSet_rcu_gpi > EllenBinTreeSet_rcu_gpi;
2167 class traits_EllenBinTreeSet_rcu_gpi_stat: public cc::ellen_bintree::make_set_traits<
2168 cc::ellen_bintree::key_extractor< typename ellen_bintree_props::key_extractor >
2169 ,co::less< typename ellen_bintree_props::less >
2170 ,cc::ellen_bintree::update_desc_allocator<
2171 cds::memory::pool_allocator< typename ellen_bintree_props::gpi::update_desc, ellen_bintree_pool::bounded_update_desc_pool_accessor >
2173 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
2174 ,co::stat< cc::ellen_bintree::stat<> >
2177 typedef cc::EllenBinTreeSet< rcu_gpi, key_type, key_val, traits_EllenBinTreeSet_rcu_gpi_stat > EllenBinTreeSet_rcu_gpi_stat;
2179 class traits_EllenBinTreeSet_rcu_gpb: public cc::ellen_bintree::make_set_traits<
2180 cc::ellen_bintree::key_extractor< typename ellen_bintree_props::key_extractor >
2181 ,co::less< typename ellen_bintree_props::less >
2182 ,cc::ellen_bintree::update_desc_allocator<
2183 cds::memory::pool_allocator< typename ellen_bintree_props::gpb::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
2185 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
2188 typedef cc::EllenBinTreeSet< rcu_gpb, key_type, key_val, traits_EllenBinTreeSet_rcu_gpb > EllenBinTreeSet_rcu_gpb;
2190 class traits_EllenBinTreeSet_rcu_gpb_stat: public cc::ellen_bintree::make_set_traits<
2191 cc::ellen_bintree::key_extractor< typename ellen_bintree_props::key_extractor >
2192 ,co::less< typename ellen_bintree_props::less >
2193 ,cc::ellen_bintree::update_desc_allocator<
2194 cds::memory::pool_allocator< typename ellen_bintree_props::gpb::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
2196 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
2197 ,co::stat< cc::ellen_bintree::stat<> >
2200 typedef cc::EllenBinTreeSet< rcu_gpb, key_type, key_val, traits_EllenBinTreeSet_rcu_gpb_stat > EllenBinTreeSet_rcu_gpb_stat;
2202 class traits_EllenBinTreeSet_rcu_gpt: public cc::ellen_bintree::make_set_traits<
2203 cc::ellen_bintree::key_extractor< typename ellen_bintree_props::key_extractor >
2204 ,co::less< typename ellen_bintree_props::less >
2205 ,cc::ellen_bintree::update_desc_allocator<
2206 cds::memory::pool_allocator< typename ellen_bintree_props::gpt::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
2208 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
2211 typedef cc::EllenBinTreeSet< rcu_gpt, key_type, key_val, traits_EllenBinTreeSet_rcu_gpt > EllenBinTreeSet_rcu_gpt;
2213 class traits_EllenBinTreeSet_rcu_gpt_stat: public cc::ellen_bintree::make_set_traits<
2214 cc::ellen_bintree::key_extractor< typename ellen_bintree_props::key_extractor >
2215 ,co::less< typename ellen_bintree_props::less >
2216 ,cc::ellen_bintree::update_desc_allocator<
2217 cds::memory::pool_allocator< typename ellen_bintree_props::gpt::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
2219 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
2220 ,co::stat< cc::ellen_bintree::stat<> >
2223 typedef cc::EllenBinTreeSet< rcu_gpt, key_type, key_val, traits_EllenBinTreeSet_rcu_gpt_stat > EllenBinTreeSet_rcu_gpt_stat;
2225 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
2226 class traits_EllenBinTreeSet_rcu_shb: public cc::ellen_bintree::make_set_traits<
2227 cc::ellen_bintree::key_extractor< typename ellen_bintree_props::key_extractor >
2228 ,co::less< typename ellen_bintree_props::less >
2229 ,cc::ellen_bintree::update_desc_allocator<
2230 cds::memory::pool_allocator< typename ellen_bintree_props::shb::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
2232 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
2235 typedef cc::EllenBinTreeSet< rcu_shb, key_type, key_val, traits_EllenBinTreeSet_rcu_shb > EllenBinTreeSet_rcu_shb;
2237 class traits_EllenBinTreeSet_rcu_shb_stat: public cc::ellen_bintree::make_set_traits<
2238 cc::ellen_bintree::key_extractor< typename ellen_bintree_props::key_extractor >
2239 ,co::less< typename ellen_bintree_props::less >
2240 ,cc::ellen_bintree::update_desc_allocator<
2241 cds::memory::pool_allocator< typename ellen_bintree_props::shb::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
2243 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
2244 ,co::stat< cc::ellen_bintree::stat<> >
2247 typedef cc::EllenBinTreeSet< rcu_shb, key_type, key_val, traits_EllenBinTreeSet_rcu_shb_stat > EllenBinTreeSet_rcu_shb_stat;
2249 class traits_EllenBinTreeSet_rcu_sht: public cc::ellen_bintree::make_set_traits<
2250 cc::ellen_bintree::key_extractor< typename ellen_bintree_props::key_extractor >
2251 ,co::less< typename ellen_bintree_props::less >
2252 ,cc::ellen_bintree::update_desc_allocator<
2253 cds::memory::pool_allocator< typename ellen_bintree_props::sht::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
2255 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
2258 typedef cc::EllenBinTreeSet< rcu_sht, key_type, key_val, traits_EllenBinTreeSet_rcu_sht > EllenBinTreeSet_rcu_sht;
2260 class traits_EllenBinTreeSet_rcu_sht_stat: public cc::ellen_bintree::make_set_traits<
2261 cc::ellen_bintree::key_extractor< typename ellen_bintree_props::key_extractor >
2262 ,co::less< typename ellen_bintree_props::less >
2263 ,cc::ellen_bintree::update_desc_allocator<
2264 cds::memory::pool_allocator< typename ellen_bintree_props::sht::update_desc, ellen_bintree_pool::update_desc_pool_accessor >
2266 ,co::node_allocator< ellen_bintree_pool::internal_node_allocator< int > >
2267 ,co::stat< cc::ellen_bintree::stat<> >
2270 typedef cc::EllenBinTreeSet< rcu_sht, key_type, key_val, traits_EllenBinTreeSet_rcu_sht_stat > EllenBinTreeSet_rcu_sht_stat;
2274 // ***************************************************************************
2275 // Standard implementations
2277 typedef StdSet< key_val, less, cds::SpinLock > StdSet_Spin;
2278 typedef StdSet< key_val, less, lock::NoLock> StdSet_NoLock;
2280 typedef StdHashSet< key_val, hash, less, equal_to, cds::SpinLock > StdHashSet_Spin;
2281 typedef StdHashSet< key_val, hash, less, equal_to, lock::NoLock > StdHashSet_NoLock;
2286 // *************************************************
2288 // *************************************************
2290 template <typename Set>
2291 static inline void print_stat( Set const& s )
2294 template <typename GC, typename T, typename Traits>
2295 static inline void print_stat( cc::SplitListSet<GC, T, Traits> const& s )
2297 CPPUNIT_MSG( s.statistics() );
2300 template <typename GC, typename T, typename Traits>
2301 static inline void print_stat( cc::SkipListSet<GC, T, Traits> const& s )
2303 CPPUNIT_MSG( s.statistics() );
2306 template <typename GC, typename Key, typename T, typename Traits>
2307 static inline void print_stat( cc::EllenBinTreeSet<GC, Key, T, Traits> const& s )
2309 CPPUNIT_MSG( s.statistics() );
2312 template <typename T, typename Traits >
2313 static inline void print_stat( cc::CuckooSet< T, Traits > const& s )
2315 CPPUNIT_MSG( s.statistics() << s.mutex_policy_statistics() );
2318 template <typename V, typename... Options>
2319 static inline void print_stat( CuckooStripedSet< V, Options... > const& s )
2321 typedef CuckooStripedSet< V, Options... > set_type;
2322 print_stat( static_cast<typename set_type::cuckoo_base_class const&>(s) );
2325 template <typename V, typename... Options>
2326 static inline void print_stat( CuckooRefinableSet< V, Options... > const& s )
2328 typedef CuckooRefinableSet< V, Options... > set_type;
2329 print_stat( static_cast<typename set_type::cuckoo_base_class const&>(s) );
2334 //*******************************************************
2336 //*******************************************************
2338 template <typename Set>
2339 static inline void additional_check( Set& set )
2342 template <typename Set>
2343 static inline void additional_cleanup( Set& set )
2346 namespace ellen_bintree_check {
2347 static inline void check_stat( cds::intrusive::ellen_bintree::empty_stat const& s )
2349 // Not true for threaded RCU
2351 CPPUNIT_CHECK_CURRENT_EX( ellen_bintree_pool::internal_node_counter::m_nAlloc.get() == ellen_bintree_pool::internal_node_counter::m_nFree.get(),
2352 "m_nAlloc=" << ellen_bintree_pool::internal_node_counter::m_nAlloc.get()
2353 << ", m_nFree=" << ellen_bintree_pool::internal_node_counter::m_nFree.get()
2358 static inline void check_stat( cds::intrusive::ellen_bintree::stat<> const& stat )
2360 CPPUNIT_CHECK_CURRENT( stat.m_nInternalNodeCreated == stat.m_nInternalNodeDeleted );
2361 CPPUNIT_CHECK_CURRENT( stat.m_nUpdateDescCreated == stat.m_nUpdateDescDeleted );
2362 //CPPUNIT_CHECK_CURRENT( ellen_bintree_pool::internal_node_counter::m_nAlloc.get() == ellen_bintree_pool::internal_node_counter::m_nFree.get() );
2363 CPPUNIT_CHECK_CURRENT( ellen_bintree_pool::internal_node_counter::m_nAlloc.get() == stat.m_nInternalNodeCreated );
2364 // true if RCU is not threaded
2365 //CPPUNIT_CHECK_CURRENT( stat.m_nInternalNodeDeleted == ellen_bintree_pool::internal_node_counter::m_nFree.get() );
2367 } // namespace ellen_bintree_check
2369 template <typename GC, typename Key, typename T, typename Traits>
2370 static inline void additional_check( cc::EllenBinTreeSet<GC, Key, T, Traits>& s )
2372 GC::force_dispose();
2373 ellen_bintree_check::check_stat( s.statistics() );
2376 template <typename GC, typename Key, typename T, typename Traits>
2377 static inline void additional_cleanup( cc::EllenBinTreeSet<GC, Key, T, Traits>& s )
2379 ellen_bintree_pool::internal_node_counter::reset();
2384 #endif // ifndef _CDSUNIT_SET2_SET_TYPES_H