3 #ifndef CDSUNIT_SET_TYPE_SPLIT_LIST_H
4 #define CDSUNIT_SET_TYPE_SPLIT_LIST_H
6 #include "set2/set_type.h"
8 #include <cds/container/michael_list_hp.h>
9 #include <cds/container/michael_list_dhp.h>
10 #include <cds/container/michael_list_rcu.h>
11 #include <cds/container/lazy_list_hp.h>
12 #include <cds/container/lazy_list_dhp.h>
13 #include <cds/container/lazy_list_rcu.h>
15 #include <cds/container/split_list_set.h>
16 #include <cds/container/split_list_set_rcu.h>
18 #include "print_split_list_stat.h"
22 template <typename GC, typename T, typename Traits = cc::split_list::traits>
23 class SplitListSet : public cc::SplitListSet< GC, T, Traits >
25 typedef cc::SplitListSet< GC, T, Traits > base_class;
27 template <typename Config>
28 SplitListSet( Config const& cfg )
29 : base_class( cfg.c_nSetSize, cfg.c_nLoadFactor )
33 static CDS_CONSTEXPR bool const c_bExtractSupported = true;
34 static CDS_CONSTEXPR bool const c_bLoadFactorDepended = true;
37 struct tag_SplitListSet;
39 template <typename Key, typename Val>
40 struct set_type< tag_SplitListSet, Key, Val >: public set_type_base< Key, Val >
42 typedef set_type_base< Key, Val > base_class;
43 typedef typename base_class::key_val key_val;
44 typedef typename base_class::compare compare;
45 typedef typename base_class::less less;
46 typedef typename base_class::hash hash;
48 // ***************************************************************************
49 // SplitListSet based on MichaelList
51 struct traits_SplitList_Michael_dyn_cmp :
52 public cc::split_list::make_traits<
53 cc::split_list::ordered_list<cc::michael_list_tag>
55 ,cc::split_list::ordered_list_traits<
56 typename cc::michael_list::make_traits<
57 co::compare< compare >
62 typedef SplitListSet< cds::gc::HP, key_val, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_HP_dyn_cmp;
63 typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_DHP_dyn_cmp;
64 typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_RCU_GPI_dyn_cmp;
65 typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_RCU_GPB_dyn_cmp;
66 typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_RCU_GPT_dyn_cmp;
67 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
68 typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_RCU_SHB_dyn_cmp;
69 typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_RCU_SHT_dyn_cmp;
72 struct traits_SplitList_Michael_dyn_cmp_stat :
73 public cc::split_list::make_traits<
74 cc::split_list::ordered_list<cc::michael_list_tag>
76 ,co::stat< cc::split_list::stat<> >
77 ,cc::split_list::ordered_list_traits<
78 typename cc::michael_list::make_traits<
79 co::compare< compare >
84 typedef SplitListSet< cds::gc::HP, key_val, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_HP_dyn_cmp_stat;
85 typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_DHP_dyn_cmp_stat;
86 typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_RCU_GPI_dyn_cmp_stat;
87 typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_RCU_GPB_dyn_cmp_stat;
88 typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_RCU_GPT_dyn_cmp_stat;
89 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
90 typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_RCU_SHB_dyn_cmp_stat;
91 typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_RCU_SHT_dyn_cmp_stat;
94 struct traits_SplitList_Michael_dyn_cmp_seqcst :
95 public cc::split_list::make_traits<
96 cc::split_list::ordered_list<cc::michael_list_tag>
98 ,co::memory_model< co::v::sequential_consistent >
99 ,cc::split_list::ordered_list_traits<
100 typename cc::michael_list::make_traits<
101 co::compare< compare >
102 ,co::memory_model< co::v::sequential_consistent >
107 typedef SplitListSet< cds::gc::HP, key_val, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_HP_dyn_cmp_seqcst;
108 typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_DHP_dyn_cmp_seqcst;
109 typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_RCU_GPI_dyn_cmp_seqcst;
110 typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_RCU_GPB_dyn_cmp_seqcst;
111 typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_RCU_GPT_dyn_cmp_seqcst;
112 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
113 typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_RCU_SHB_dyn_cmp_seqcst;
114 typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_RCU_SHT_dyn_cmp_seqcst;
117 struct traits_SplitList_Michael_st_cmp :
118 public cc::split_list::make_traits<
119 cc::split_list::ordered_list<cc::michael_list_tag>
120 ,cc::split_list::dynamic_bucket_table< false >
122 ,cc::split_list::ordered_list_traits<
123 typename cc::michael_list::make_traits<
124 co::compare< compare >
129 typedef SplitListSet< cds::gc::HP, key_val, traits_SplitList_Michael_st_cmp > SplitList_Michael_HP_st_cmp;
130 typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Michael_st_cmp > SplitList_Michael_DHP_st_cmp;
131 typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Michael_st_cmp > SplitList_Michael_RCU_GPI_st_cmp;
132 typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Michael_st_cmp > SplitList_Michael_RCU_GPB_st_cmp;
133 typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Michael_st_cmp > SplitList_Michael_RCU_GPT_st_cmp;
134 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
135 typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Michael_st_cmp > SplitList_Michael_RCU_SHB_st_cmp;
136 typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Michael_st_cmp > SplitList_Michael_RCU_SHT_st_cmp;
139 struct traits_SplitList_Michael_st_cmp_seqcst :
140 public cc::split_list::make_traits<
141 cc::split_list::ordered_list<cc::michael_list_tag>
143 ,cc::split_list::dynamic_bucket_table< false >
144 ,co::memory_model< co::v::sequential_consistent >
145 ,cc::split_list::ordered_list_traits<
146 typename cc::michael_list::make_traits<
147 co::compare< compare >
148 ,co::memory_model< co::v::sequential_consistent >
153 typedef SplitListSet< cds::gc::HP, key_val, traits_SplitList_Michael_st_cmp_seqcst> SplitList_Michael_HP_st_cmp_seqcst;
154 typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Michael_st_cmp_seqcst> SplitList_Michael_DHP_st_cmp_seqcst;
155 typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Michael_st_cmp_seqcst> SplitList_Michael_RCU_GPI_st_cmp_seqcst;
156 typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Michael_st_cmp_seqcst> SplitList_Michael_RCU_GPB_st_cmp_seqcst;
157 typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Michael_st_cmp_seqcst> SplitList_Michael_RCU_GPT_st_cmp_seqcst;
158 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
159 typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Michael_st_cmp_seqcst> SplitList_Michael_RCU_SHB_st_cmp_seqcst;
160 typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Michael_st_cmp_seqcst> SplitList_Michael_RCU_SHT_st_cmp_seqcst;
164 struct traits_SplitList_Michael_dyn_less :
165 public cc::split_list::make_traits<
166 cc::split_list::ordered_list<cc::michael_list_tag>
168 ,cc::split_list::ordered_list_traits<
169 typename cc::michael_list::make_traits<
175 typedef SplitListSet< cds::gc::HP, key_val, traits_SplitList_Michael_dyn_less > SplitList_Michael_HP_dyn_less;
176 typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Michael_dyn_less > SplitList_Michael_DHP_dyn_less;
177 typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Michael_dyn_less > SplitList_Michael_RCU_GPI_dyn_less;
178 typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Michael_dyn_less > SplitList_Michael_RCU_GPB_dyn_less;
179 typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Michael_dyn_less > SplitList_Michael_RCU_GPT_dyn_less;
180 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
181 typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Michael_dyn_less > SplitList_Michael_RCU_SHB_dyn_less;
182 typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Michael_dyn_less > SplitList_Michael_RCU_SHT_dyn_less;
185 struct traits_SplitList_Michael_dyn_less_seqcst :
186 public cc::split_list::make_traits<
187 cc::split_list::ordered_list<cc::michael_list_tag>
189 ,co::memory_model< co::v::sequential_consistent >
190 ,cc::split_list::ordered_list_traits<
191 typename cc::michael_list::make_traits<
193 ,co::memory_model< co::v::sequential_consistent >
198 typedef SplitListSet< cds::gc::HP, key_val, traits_SplitList_Michael_dyn_less_seqcst > SplitList_Michael_HP_dyn_less_seqcst;
199 typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Michael_dyn_less_seqcst > SplitList_Michael_DHP_dyn_less_seqcst;
200 typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Michael_dyn_less_seqcst > SplitList_Michael_RCU_GPI_dyn_less_seqcst;
201 typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Michael_dyn_less_seqcst > SplitList_Michael_RCU_GPB_dyn_less_seqcst;
202 typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Michael_dyn_less_seqcst > SplitList_Michael_RCU_GPT_dyn_less_seqcst;
203 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
204 typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Michael_dyn_less_seqcst > SplitList_Michael_RCU_SHB_dyn_less_seqcst;
205 typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Michael_dyn_less_seqcst > SplitList_Michael_RCU_SHT_dyn_less_seqcst;
208 struct traits_SplitList_Michael_st_less :
209 public cc::split_list::make_traits<
210 cc::split_list::ordered_list<cc::michael_list_tag>
211 ,cc::split_list::dynamic_bucket_table< false >
213 ,cc::split_list::ordered_list_traits<
214 typename cc::michael_list::make_traits<
220 typedef SplitListSet< cds::gc::HP, key_val, traits_SplitList_Michael_st_less > SplitList_Michael_HP_st_less;
221 typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Michael_st_less > SplitList_Michael_DHP_st_less;
222 typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Michael_st_less > SplitList_Michael_RCU_GPI_st_less;
223 typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Michael_st_less > SplitList_Michael_RCU_GPB_st_less;
224 typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Michael_st_less > SplitList_Michael_RCU_GPT_st_less;
225 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
226 typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Michael_st_less > SplitList_Michael_RCU_SHB_st_less;
227 typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Michael_st_less > SplitList_Michael_RCU_SHT_st_less;
230 struct traits_SplitList_Michael_st_less_stat :
231 public cc::split_list::make_traits<
232 cc::split_list::ordered_list<cc::michael_list_tag>
233 ,cc::split_list::dynamic_bucket_table< false >
235 ,co::stat< cc::split_list::stat<>>
236 ,cc::split_list::ordered_list_traits<
237 typename cc::michael_list::make_traits<
243 typedef SplitListSet< cds::gc::HP, key_val, traits_SplitList_Michael_st_less_stat > SplitList_Michael_HP_st_less_stat;
244 typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Michael_st_less_stat > SplitList_Michael_DHP_st_less_stat;
245 typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Michael_st_less_stat > SplitList_Michael_RCU_GPI_st_less_stat;
246 typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Michael_st_less_stat > SplitList_Michael_RCU_GPB_st_less_stat;
247 typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Michael_st_less_stat > SplitList_Michael_RCU_GPT_st_less_stat;
248 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
249 typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Michael_st_less_stat > SplitList_Michael_RCU_SHB_st_less_stat;
250 typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Michael_st_less_stat > SplitList_Michael_RCU_SHT_st_less_stat;
253 struct traits_SplitList_Michael_st_less_seqcst :
254 public cc::split_list::make_traits<
255 cc::split_list::ordered_list<cc::michael_list_tag>
257 ,cc::split_list::dynamic_bucket_table< false >
258 ,co::memory_model< co::v::sequential_consistent >
259 ,cc::split_list::ordered_list_traits<
260 typename cc::michael_list::make_traits<
262 ,co::memory_model< co::v::sequential_consistent >
267 typedef SplitListSet< cds::gc::HP, key_val, traits_SplitList_Michael_st_less_seqcst > SplitList_Michael_HP_st_less_seqcst;
268 typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Michael_st_less_seqcst > SplitList_Michael_DHP_st_less_seqcst;
269 typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Michael_st_less_seqcst > SplitList_Michael_RCU_GPI_st_less_seqcst;
270 typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Michael_st_less_seqcst > SplitList_Michael_RCU_GPB_st_less_seqcst;
271 typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Michael_st_less_seqcst > SplitList_Michael_RCU_GPT_st_less_seqcst;
272 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
273 typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Michael_st_less_seqcst > SplitList_Michael_RCU_SHB_st_less_seqcst;
274 typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Michael_st_less_seqcst > SplitList_Michael_RCU_SHT_st_less_seqcst;
277 // ***************************************************************************
278 // SplitListSet based on LazyList
280 struct traits_SplitList_Lazy_dyn_cmp :
281 public cc::split_list::make_traits<
282 cc::split_list::ordered_list<cc::lazy_list_tag>
284 ,cc::split_list::ordered_list_traits<
285 typename cc::lazy_list::make_traits<
286 co::compare< compare >
291 typedef SplitListSet< cds::gc::HP, key_val, traits_SplitList_Lazy_dyn_cmp > SplitList_Lazy_HP_dyn_cmp;
292 typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Lazy_dyn_cmp > SplitList_Lazy_DHP_dyn_cmp;
293 typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Lazy_dyn_cmp > SplitList_Lazy_RCU_GPI_dyn_cmp;
294 typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Lazy_dyn_cmp > SplitList_Lazy_RCU_GPB_dyn_cmp;
295 typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Lazy_dyn_cmp > SplitList_Lazy_RCU_GPT_dyn_cmp;
296 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
297 typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Lazy_dyn_cmp > SplitList_Lazy_RCU_SHB_dyn_cmp;
298 typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Lazy_dyn_cmp > SplitList_Lazy_RCU_SHT_dyn_cmp;
301 struct traits_SplitList_Lazy_dyn_cmp_stat : public traits_SplitList_Lazy_dyn_cmp
303 typedef cc::split_list::stat<> stat;
305 typedef SplitListSet< cds::gc::HP, key_val, traits_SplitList_Lazy_dyn_cmp_stat > SplitList_Lazy_HP_dyn_cmp_stat;
306 typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Lazy_dyn_cmp_stat > SplitList_Lazy_DHP_dyn_cmp_stat;
307 typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Lazy_dyn_cmp_stat > SplitList_Lazy_RCU_GPI_dyn_cmp_stat;
308 typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Lazy_dyn_cmp_stat > SplitList_Lazy_RCU_GPB_dyn_cmp_stat;
309 typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Lazy_dyn_cmp_stat > SplitList_Lazy_RCU_GPT_dyn_cmp_stat;
310 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
311 typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Lazy_dyn_cmp > SplitList_Lazy_RCU_SHB_dyn_cmp_stat;
312 typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Lazy_dyn_cmp > SplitList_Lazy_RCU_SHT_dyn_cmp_stat;
315 struct traits_SplitList_Lazy_dyn_cmp_seqcst :
316 public cc::split_list::make_traits<
317 cc::split_list::ordered_list<cc::lazy_list_tag>
319 ,co::memory_model< co::v::sequential_consistent >
320 ,cc::split_list::ordered_list_traits<
321 typename cc::lazy_list::make_traits<
322 co::compare< compare >
323 ,co::memory_model< co::v::sequential_consistent >
328 typedef SplitListSet< cds::gc::HP, key_val, traits_SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_HP_dyn_cmp_seqcst;
329 typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_DHP_dyn_cmp_seqcst;
330 typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_RCU_GPI_dyn_cmp_seqcst;
331 typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_RCU_GPB_dyn_cmp_seqcst;
332 typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_RCU_GPT_dyn_cmp_seqcst;
333 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
334 typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_RCU_SHB_dyn_cmp_seqcst;
335 typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_RCU_SHT_dyn_cmp_seqcst;
338 struct traits_SplitList_Lazy_st_cmp :
339 public cc::split_list::make_traits<
340 cc::split_list::ordered_list<cc::lazy_list_tag>
341 ,cc::split_list::dynamic_bucket_table< false >
343 ,cc::split_list::ordered_list_traits<
344 typename cc::lazy_list::make_traits<
345 co::compare< compare >
350 typedef SplitListSet< cds::gc::HP, key_val, traits_SplitList_Lazy_st_cmp > SplitList_Lazy_HP_st_cmp;
351 typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Lazy_st_cmp > SplitList_Lazy_DHP_st_cmp;
352 typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Lazy_st_cmp > SplitList_Lazy_RCU_GPI_st_cmp;
353 typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Lazy_st_cmp > SplitList_Lazy_RCU_GPB_st_cmp;
354 typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Lazy_st_cmp > SplitList_Lazy_RCU_GPT_st_cmp;
355 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
356 typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Lazy_st_cmp > SplitList_Lazy_RCU_SHB_st_cmp;
357 typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Lazy_st_cmp > SplitList_Lazy_RCU_SHT_st_cmp;
360 struct traits_SplitList_Lazy_st_cmp_seqcst :
361 public cc::split_list::make_traits<
362 cc::split_list::ordered_list<cc::lazy_list_tag>
364 ,cc::split_list::dynamic_bucket_table< false >
365 ,co::memory_model< co::v::sequential_consistent >
366 ,cc::split_list::ordered_list_traits<
367 typename cc::lazy_list::make_traits<
368 co::compare< compare >
369 ,co::memory_model< co::v::sequential_consistent >
374 typedef SplitListSet< cds::gc::HP, key_val, traits_SplitList_Lazy_st_cmp_seqcst > SplitList_Lazy_HP_st_cmp_seqcst;
375 typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Lazy_st_cmp_seqcst > SplitList_Lazy_DHP_st_cmp_seqcst;
376 typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Lazy_st_cmp_seqcst > SplitList_Lazy_RCU_GPI_st_cmp_seqcst;
377 typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Lazy_st_cmp_seqcst > SplitList_Lazy_RCU_GPB_st_cmp_seqcst;
378 typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Lazy_st_cmp_seqcst > SplitList_Lazy_RCU_GPT_st_cmp_seqcst;
379 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
380 typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Lazy_st_cmp_seqcst > SplitList_Lazy_RCU_SHB_st_cmp_seqcst;
381 typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Lazy_st_cmp_seqcst > SplitList_Lazy_RCU_SHT_st_cmp_seqcst;
384 struct traits_SplitList_Lazy_dyn_less :
385 public cc::split_list::make_traits<
386 cc::split_list::ordered_list<cc::lazy_list_tag>
388 ,cc::split_list::ordered_list_traits<
389 typename cc::lazy_list::make_traits<
395 typedef SplitListSet< cds::gc::HP, key_val, traits_SplitList_Lazy_dyn_less > SplitList_Lazy_HP_dyn_less;
396 typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Lazy_dyn_less > SplitList_Lazy_DHP_dyn_less;
397 typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Lazy_dyn_less > SplitList_Lazy_RCU_GPI_dyn_less;
398 typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Lazy_dyn_less > SplitList_Lazy_RCU_GPB_dyn_less;
399 typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Lazy_dyn_less > SplitList_Lazy_RCU_GPT_dyn_less;
400 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
401 typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Lazy_dyn_less > SplitList_Lazy_RCU_SHB_dyn_less;
402 typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Lazy_dyn_less > SplitList_Lazy_RCU_SHT_dyn_less;
405 struct traits_SplitList_Lazy_dyn_less_seqcst :
406 public cc::split_list::make_traits<
407 cc::split_list::ordered_list<cc::lazy_list_tag>
409 ,co::memory_model< co::v::sequential_consistent >
410 ,cc::split_list::ordered_list_traits<
411 typename cc::lazy_list::make_traits<
413 ,co::memory_model< co::v::sequential_consistent >
418 typedef SplitListSet< cds::gc::HP, key_val, traits_SplitList_Lazy_dyn_less_seqcst > SplitList_Lazy_HP_dyn_less_seqcst;
419 typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Lazy_dyn_less_seqcst > SplitList_Lazy_DHP_dyn_less_seqcst;
420 typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Lazy_dyn_less_seqcst > SplitList_Lazy_RCU_GPI_dyn_less_seqcst;
421 typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Lazy_dyn_less_seqcst > SplitList_Lazy_RCU_GPB_dyn_less_seqcst;
422 typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Lazy_dyn_less_seqcst > SplitList_Lazy_RCU_GPT_dyn_less_seqcst;
423 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
424 typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Lazy_dyn_less_seqcst > SplitList_Lazy_RCU_SHB_dyn_less_seqcst;
425 typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Lazy_dyn_less_seqcst > SplitList_Lazy_RCU_SHT_dyn_less_seqcst;
428 struct traits_SplitList_Lazy_st_less :
429 public cc::split_list::make_traits<
430 cc::split_list::ordered_list<cc::lazy_list_tag>
431 ,cc::split_list::dynamic_bucket_table< false >
433 ,cc::split_list::ordered_list_traits<
434 typename cc::lazy_list::make_traits<
440 typedef SplitListSet< cds::gc::HP, key_val, traits_SplitList_Lazy_st_less > SplitList_Lazy_HP_st_less;
441 typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Lazy_st_less > SplitList_Lazy_DHP_st_less;
442 typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Lazy_st_less > SplitList_Lazy_RCU_GPI_st_less;
443 typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Lazy_st_less > SplitList_Lazy_RCU_GPB_st_less;
444 typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Lazy_st_less > SplitList_Lazy_RCU_GPT_st_less;
445 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
446 typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Lazy_st_less > SplitList_Lazy_RCU_SHB_st_less;
447 typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Lazy_st_less > SplitList_Lazy_RCU_SHT_st_less;
450 struct traits_SplitList_Lazy_st_less_seqcst :
451 public cc::split_list::make_traits<
452 cc::split_list::ordered_list<cc::lazy_list_tag>
454 ,cc::split_list::dynamic_bucket_table< false >
455 ,co::memory_model< co::v::sequential_consistent >
456 ,cc::split_list::ordered_list_traits<
457 typename cc::lazy_list::make_traits<
459 ,co::memory_model< co::v::sequential_consistent >
464 typedef SplitListSet< cds::gc::HP, key_val, traits_SplitList_Lazy_st_less_seqcst > SplitList_Lazy_HP_st_less_seqcst;
465 typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Lazy_st_less_seqcst > SplitList_Lazy_DHP_st_less_seqcst;
466 typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Lazy_st_less_seqcst > SplitList_Lazy_RCU_GPI_st_less_seqcst;
467 typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Lazy_st_less_seqcst > SplitList_Lazy_RCU_GPB_st_less_seqcst;
468 typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Lazy_st_less_seqcst > SplitList_Lazy_RCU_GPT_st_less_seqcst;
469 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
470 typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Lazy_st_less_seqcst > SplitList_Lazy_RCU_SHB_st_less_seqcst;
471 typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Lazy_st_less_seqcst > SplitList_Lazy_RCU_SHT_st_less_seqcst;
474 struct traits_SplitList_Lazy_st_less_stat : public traits_SplitList_Lazy_st_less
476 typedef cc::split_list::stat<> stat;
478 typedef SplitListSet< cds::gc::HP, key_val, traits_SplitList_Lazy_st_less_stat > SplitList_Lazy_HP_st_less_stat;
479 typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Lazy_st_less_stat > SplitList_Lazy_DHP_st_less_stat;
480 typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Lazy_st_less_stat > SplitList_Lazy_RCU_GPI_st_less_stat;
481 typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Lazy_st_less_stat > SplitList_Lazy_RCU_GPB_st_less_stat;
482 typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Lazy_st_less_stat > SplitList_Lazy_RCU_GPT_st_less_stat;
483 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
484 typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Lazy_st_less_stat > SplitList_Lazy_RCU_SHB_st_less_stat;
485 typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Lazy_st_less_stat > SplitList_Lazy_RCU_SHT_st_less_stat;
489 template <typename GC, typename T, typename Traits>
490 static inline void print_stat( SplitListSet<GC, T, Traits> const& s )
492 CPPUNIT_MSG( s.statistics() );
497 #endif // #ifndef CDSUNIT_SET_TYPE_SPLIT_LIST_H