2 This file is a part of libcds - Concurrent Data Structures library
4 (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
6 Source code repo: http://github.com/khizmax/libcds/
7 Download: http://sourceforge.net/projects/libcds/files/
9 Redistribution and use in source and binary forms, with or without
10 modification, are permitted provided that the following conditions are met:
12 * Redistributions of source code must retain the above copyright notice, this
13 list of conditions and the following disclaimer.
15 * Redistributions in binary form must reproduce the above copyright notice,
16 this list of conditions and the following disclaimer in the documentation
17 and/or other materials provided with the distribution.
19 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22 DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
23 FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24 DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
25 SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
26 CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
27 OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31 #ifndef CDSUNIT_SET_TYPE_SPLIT_LIST_H
32 #define CDSUNIT_SET_TYPE_SPLIT_LIST_H
36 #include <cds/container/michael_list_hp.h>
37 #include <cds/container/michael_list_dhp.h>
38 #include <cds/container/michael_list_rcu.h>
39 #include <cds/container/lazy_list_hp.h>
40 #include <cds/container/lazy_list_dhp.h>
41 #include <cds/container/lazy_list_rcu.h>
42 #include <cds/container/iterable_list_hp.h>
43 #include <cds/container/iterable_list_dhp.h>
45 #include <cds/container/split_list_set.h>
46 #include <cds/container/split_list_set_rcu.h>
48 #include <cds_test/stat_splitlist_out.h>
52 template <typename GC, typename T, typename Traits = cc::split_list::traits>
53 class SplitListSet : public cc::SplitListSet< GC, T, Traits >
55 typedef cc::SplitListSet< GC, T, Traits > base_class;
57 template <typename Config>
58 SplitListSet( Config const& cfg )
59 : base_class( cfg.s_nSetSize, cfg.s_nLoadFactor )
63 static CDS_CONSTEXPR bool const c_bExtractSupported = true;
64 static CDS_CONSTEXPR bool const c_bLoadFactorDepended = true;
65 static CDS_CONSTEXPR bool const c_bEraseExactKey = false;
68 struct tag_SplitListSet;
70 template <typename Key, typename Val>
71 struct set_type< tag_SplitListSet, Key, Val >: public set_type_base< Key, Val >
73 typedef set_type_base< Key, Val > base_class;
74 typedef typename base_class::key_val key_val;
75 typedef typename base_class::compare compare;
76 typedef typename base_class::less less;
77 typedef typename base_class::hash hash;
79 // ***************************************************************************
80 // SplitListSet based on MichaelList
82 struct traits_SplitList_Michael_dyn_cmp :
83 public cc::split_list::make_traits<
84 cc::split_list::ordered_list<cc::michael_list_tag>
86 ,cc::split_list::ordered_list_traits<
87 typename cc::michael_list::make_traits<
88 co::compare< compare >
93 typedef SplitListSet< cds::gc::HP, key_val, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_HP_dyn_cmp;
94 typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_DHP_dyn_cmp;
95 typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_RCU_GPI_dyn_cmp;
96 typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_RCU_GPB_dyn_cmp;
97 typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_RCU_GPT_dyn_cmp;
98 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
99 typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_RCU_SHB_dyn_cmp;
100 typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_RCU_SHT_dyn_cmp;
103 struct traits_SplitList_Michael_dyn_cmp_stat :
104 public cc::split_list::make_traits<
105 cc::split_list::ordered_list<cc::michael_list_tag>
107 ,co::stat< cc::split_list::stat<> >
108 ,cc::split_list::ordered_list_traits<
109 typename cc::michael_list::make_traits<
110 co::compare< compare >
115 typedef SplitListSet< cds::gc::HP, key_val, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_HP_dyn_cmp_stat;
116 typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_DHP_dyn_cmp_stat;
117 typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_RCU_GPI_dyn_cmp_stat;
118 typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_RCU_GPB_dyn_cmp_stat;
119 typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_RCU_GPT_dyn_cmp_stat;
120 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
121 typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_RCU_SHB_dyn_cmp_stat;
122 typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_RCU_SHT_dyn_cmp_stat;
125 struct traits_SplitList_Michael_dyn_cmp_seqcst :
126 public cc::split_list::make_traits<
127 cc::split_list::ordered_list<cc::michael_list_tag>
129 ,co::memory_model< co::v::sequential_consistent >
130 ,cc::split_list::ordered_list_traits<
131 typename cc::michael_list::make_traits<
132 co::compare< compare >
133 ,co::memory_model< co::v::sequential_consistent >
138 typedef SplitListSet< cds::gc::HP, key_val, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_HP_dyn_cmp_seqcst;
139 typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_DHP_dyn_cmp_seqcst;
140 typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_RCU_GPI_dyn_cmp_seqcst;
141 typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_RCU_GPB_dyn_cmp_seqcst;
142 typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_RCU_GPT_dyn_cmp_seqcst;
143 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
144 typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_RCU_SHB_dyn_cmp_seqcst;
145 typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_RCU_SHT_dyn_cmp_seqcst;
148 struct traits_SplitList_Michael_st_cmp :
149 public cc::split_list::make_traits<
150 cc::split_list::ordered_list<cc::michael_list_tag>
151 ,cc::split_list::dynamic_bucket_table< false >
153 ,cc::split_list::ordered_list_traits<
154 typename cc::michael_list::make_traits<
155 co::compare< compare >
160 typedef SplitListSet< cds::gc::HP, key_val, traits_SplitList_Michael_st_cmp > SplitList_Michael_HP_st_cmp;
161 typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Michael_st_cmp > SplitList_Michael_DHP_st_cmp;
162 typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Michael_st_cmp > SplitList_Michael_RCU_GPI_st_cmp;
163 typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Michael_st_cmp > SplitList_Michael_RCU_GPB_st_cmp;
164 typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Michael_st_cmp > SplitList_Michael_RCU_GPT_st_cmp;
165 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
166 typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Michael_st_cmp > SplitList_Michael_RCU_SHB_st_cmp;
167 typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Michael_st_cmp > SplitList_Michael_RCU_SHT_st_cmp;
171 struct traits_SplitList_Michael_dyn_less :
172 public cc::split_list::make_traits<
173 cc::split_list::ordered_list<cc::michael_list_tag>
175 ,cc::split_list::ordered_list_traits<
176 typename cc::michael_list::make_traits<
182 typedef SplitListSet< cds::gc::HP, key_val, traits_SplitList_Michael_dyn_less > SplitList_Michael_HP_dyn_less;
183 typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Michael_dyn_less > SplitList_Michael_DHP_dyn_less;
184 typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Michael_dyn_less > SplitList_Michael_RCU_GPI_dyn_less;
185 typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Michael_dyn_less > SplitList_Michael_RCU_GPB_dyn_less;
186 typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Michael_dyn_less > SplitList_Michael_RCU_GPT_dyn_less;
187 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
188 typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Michael_dyn_less > SplitList_Michael_RCU_SHB_dyn_less;
189 typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Michael_dyn_less > SplitList_Michael_RCU_SHT_dyn_less;
192 struct traits_SplitList_Michael_st_less :
193 public cc::split_list::make_traits<
194 cc::split_list::ordered_list<cc::michael_list_tag>
195 ,cc::split_list::dynamic_bucket_table< false >
197 ,cc::split_list::ordered_list_traits<
198 typename cc::michael_list::make_traits<
204 typedef SplitListSet< cds::gc::HP, key_val, traits_SplitList_Michael_st_less > SplitList_Michael_HP_st_less;
205 typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Michael_st_less > SplitList_Michael_DHP_st_less;
206 typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Michael_st_less > SplitList_Michael_RCU_GPI_st_less;
207 typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Michael_st_less > SplitList_Michael_RCU_GPB_st_less;
208 typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Michael_st_less > SplitList_Michael_RCU_GPT_st_less;
209 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
210 typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Michael_st_less > SplitList_Michael_RCU_SHB_st_less;
211 typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Michael_st_less > SplitList_Michael_RCU_SHT_st_less;
214 struct traits_SplitList_Michael_st_less_stat :
215 public cc::split_list::make_traits<
216 cc::split_list::ordered_list<cc::michael_list_tag>
217 ,cc::split_list::dynamic_bucket_table< false >
219 ,co::stat< cc::split_list::stat<>>
220 ,cc::split_list::ordered_list_traits<
221 typename cc::michael_list::make_traits<
227 typedef SplitListSet< cds::gc::HP, key_val, traits_SplitList_Michael_st_less_stat > SplitList_Michael_HP_st_less_stat;
228 typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Michael_st_less_stat > SplitList_Michael_DHP_st_less_stat;
229 typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Michael_st_less_stat > SplitList_Michael_RCU_GPI_st_less_stat;
230 typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Michael_st_less_stat > SplitList_Michael_RCU_GPB_st_less_stat;
231 typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Michael_st_less_stat > SplitList_Michael_RCU_GPT_st_less_stat;
232 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
233 typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Michael_st_less_stat > SplitList_Michael_RCU_SHB_st_less_stat;
234 typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Michael_st_less_stat > SplitList_Michael_RCU_SHT_st_less_stat;
237 // ***************************************************************************
238 // SplitListSet based on LazyList
240 struct traits_SplitList_Lazy_dyn_cmp :
241 public cc::split_list::make_traits<
242 cc::split_list::ordered_list<cc::lazy_list_tag>
244 ,cc::split_list::ordered_list_traits<
245 typename cc::lazy_list::make_traits<
246 co::compare< compare >
251 typedef SplitListSet< cds::gc::HP, key_val, traits_SplitList_Lazy_dyn_cmp > SplitList_Lazy_HP_dyn_cmp;
252 typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Lazy_dyn_cmp > SplitList_Lazy_DHP_dyn_cmp;
253 typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Lazy_dyn_cmp > SplitList_Lazy_RCU_GPI_dyn_cmp;
254 typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Lazy_dyn_cmp > SplitList_Lazy_RCU_GPB_dyn_cmp;
255 typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Lazy_dyn_cmp > SplitList_Lazy_RCU_GPT_dyn_cmp;
256 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
257 typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Lazy_dyn_cmp > SplitList_Lazy_RCU_SHB_dyn_cmp;
258 typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Lazy_dyn_cmp > SplitList_Lazy_RCU_SHT_dyn_cmp;
261 struct traits_SplitList_Lazy_dyn_cmp_stat : public traits_SplitList_Lazy_dyn_cmp
263 typedef cc::split_list::stat<> stat;
265 typedef SplitListSet< cds::gc::HP, key_val, traits_SplitList_Lazy_dyn_cmp_stat > SplitList_Lazy_HP_dyn_cmp_stat;
266 typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Lazy_dyn_cmp_stat > SplitList_Lazy_DHP_dyn_cmp_stat;
267 typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Lazy_dyn_cmp_stat > SplitList_Lazy_RCU_GPI_dyn_cmp_stat;
268 typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Lazy_dyn_cmp_stat > SplitList_Lazy_RCU_GPB_dyn_cmp_stat;
269 typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Lazy_dyn_cmp_stat > SplitList_Lazy_RCU_GPT_dyn_cmp_stat;
270 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
271 typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Lazy_dyn_cmp > SplitList_Lazy_RCU_SHB_dyn_cmp_stat;
272 typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Lazy_dyn_cmp > SplitList_Lazy_RCU_SHT_dyn_cmp_stat;
275 struct traits_SplitList_Lazy_dyn_cmp_seqcst :
276 public cc::split_list::make_traits<
277 cc::split_list::ordered_list<cc::lazy_list_tag>
279 ,co::memory_model< co::v::sequential_consistent >
280 ,cc::split_list::ordered_list_traits<
281 typename cc::lazy_list::make_traits<
282 co::compare< compare >
283 ,co::memory_model< co::v::sequential_consistent >
288 typedef SplitListSet< cds::gc::HP, key_val, traits_SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_HP_dyn_cmp_seqcst;
289 typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_DHP_dyn_cmp_seqcst;
290 typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_RCU_GPI_dyn_cmp_seqcst;
291 typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_RCU_GPB_dyn_cmp_seqcst;
292 typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_RCU_GPT_dyn_cmp_seqcst;
293 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
294 typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_RCU_SHB_dyn_cmp_seqcst;
295 typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_RCU_SHT_dyn_cmp_seqcst;
298 struct traits_SplitList_Lazy_st_cmp :
299 public cc::split_list::make_traits<
300 cc::split_list::ordered_list<cc::lazy_list_tag>
301 ,cc::split_list::dynamic_bucket_table< false >
303 ,cc::split_list::ordered_list_traits<
304 typename cc::lazy_list::make_traits<
305 co::compare< compare >
310 typedef SplitListSet< cds::gc::HP, key_val, traits_SplitList_Lazy_st_cmp > SplitList_Lazy_HP_st_cmp;
311 typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Lazy_st_cmp > SplitList_Lazy_DHP_st_cmp;
312 typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Lazy_st_cmp > SplitList_Lazy_RCU_GPI_st_cmp;
313 typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Lazy_st_cmp > SplitList_Lazy_RCU_GPB_st_cmp;
314 typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Lazy_st_cmp > SplitList_Lazy_RCU_GPT_st_cmp;
315 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
316 typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Lazy_st_cmp > SplitList_Lazy_RCU_SHB_st_cmp;
317 typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Lazy_st_cmp > SplitList_Lazy_RCU_SHT_st_cmp;
320 struct traits_SplitList_Lazy_dyn_less :
321 public cc::split_list::make_traits<
322 cc::split_list::ordered_list<cc::lazy_list_tag>
324 ,cc::split_list::ordered_list_traits<
325 typename cc::lazy_list::make_traits<
331 typedef SplitListSet< cds::gc::HP, key_val, traits_SplitList_Lazy_dyn_less > SplitList_Lazy_HP_dyn_less;
332 typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Lazy_dyn_less > SplitList_Lazy_DHP_dyn_less;
333 typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Lazy_dyn_less > SplitList_Lazy_RCU_GPI_dyn_less;
334 typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Lazy_dyn_less > SplitList_Lazy_RCU_GPB_dyn_less;
335 typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Lazy_dyn_less > SplitList_Lazy_RCU_GPT_dyn_less;
336 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
337 typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Lazy_dyn_less > SplitList_Lazy_RCU_SHB_dyn_less;
338 typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Lazy_dyn_less > SplitList_Lazy_RCU_SHT_dyn_less;
341 struct traits_SplitList_Lazy_st_less :
342 public cc::split_list::make_traits<
343 cc::split_list::ordered_list<cc::lazy_list_tag>
344 ,cc::split_list::dynamic_bucket_table< false >
346 ,cc::split_list::ordered_list_traits<
347 typename cc::lazy_list::make_traits<
353 typedef SplitListSet< cds::gc::HP, key_val, traits_SplitList_Lazy_st_less > SplitList_Lazy_HP_st_less;
354 typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Lazy_st_less > SplitList_Lazy_DHP_st_less;
355 typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Lazy_st_less > SplitList_Lazy_RCU_GPI_st_less;
356 typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Lazy_st_less > SplitList_Lazy_RCU_GPB_st_less;
357 typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Lazy_st_less > SplitList_Lazy_RCU_GPT_st_less;
358 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
359 typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Lazy_st_less > SplitList_Lazy_RCU_SHB_st_less;
360 typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Lazy_st_less > SplitList_Lazy_RCU_SHT_st_less;
363 struct traits_SplitList_Lazy_st_less_stat : public traits_SplitList_Lazy_st_less
365 typedef cc::split_list::stat<> stat;
367 typedef SplitListSet< cds::gc::HP, key_val, traits_SplitList_Lazy_st_less_stat > SplitList_Lazy_HP_st_less_stat;
368 typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Lazy_st_less_stat > SplitList_Lazy_DHP_st_less_stat;
369 typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Lazy_st_less_stat > SplitList_Lazy_RCU_GPI_st_less_stat;
370 typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Lazy_st_less_stat > SplitList_Lazy_RCU_GPB_st_less_stat;
371 typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Lazy_st_less_stat > SplitList_Lazy_RCU_GPT_st_less_stat;
372 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
373 typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Lazy_st_less_stat > SplitList_Lazy_RCU_SHB_st_less_stat;
374 typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Lazy_st_less_stat > SplitList_Lazy_RCU_SHT_st_less_stat;
377 // ***************************************************************************
378 // SplitListSet based on IterableList
380 struct traits_SplitList_Iterable_dyn_cmp :
381 public cc::split_list::make_traits<
382 cc::split_list::ordered_list<cc::iterable_list_tag>
384 ,cc::split_list::ordered_list_traits<
385 typename cc::iterable_list::make_traits<
386 co::compare< compare >
391 typedef SplitListSet< cds::gc::HP, key_val, traits_SplitList_Iterable_dyn_cmp > SplitList_Iterable_HP_dyn_cmp;
392 typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Iterable_dyn_cmp > SplitList_Iterable_DHP_dyn_cmp;
394 typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Iterable_dyn_cmp > SplitList_Iterable_RCU_GPI_dyn_cmp;
395 typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Iterable_dyn_cmp > SplitList_Iterable_RCU_GPB_dyn_cmp;
396 typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Iterable_dyn_cmp > SplitList_Iterable_RCU_GPT_dyn_cmp;
397 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
398 typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Iterable_dyn_cmp > SplitList_Iterable_RCU_SHB_dyn_cmp;
399 typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Iterable_dyn_cmp > SplitList_Iterable_RCU_SHT_dyn_cmp;
403 struct traits_SplitList_Iterable_dyn_cmp_stat:
404 public cc::split_list::make_traits<
405 cc::split_list::ordered_list<cc::iterable_list_tag>
407 ,co::stat< cc::split_list::stat<> >
408 ,cc::split_list::ordered_list_traits<
409 typename cc::iterable_list::make_traits<
410 co::compare< compare >
415 typedef SplitListSet< cds::gc::HP, key_val, traits_SplitList_Iterable_dyn_cmp_stat > SplitList_Iterable_HP_dyn_cmp_stat;
416 typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Iterable_dyn_cmp_stat > SplitList_Iterable_DHP_dyn_cmp_stat;
418 typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Iterable_dyn_cmp_stat > SplitList_Iterable_RCU_GPI_dyn_cmp_stat;
419 typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Iterable_dyn_cmp_stat > SplitList_Iterable_RCU_GPB_dyn_cmp_stat;
420 typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Iterable_dyn_cmp_stat > SplitList_Iterable_RCU_GPT_dyn_cmp_stat;
421 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
422 typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Iterable_dyn_cmp_stat > SplitList_Iterable_RCU_SHB_dyn_cmp_stat;
423 typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Iterable_dyn_cmp_stat > SplitList_Iterable_RCU_SHT_dyn_cmp_stat;
427 struct traits_SplitList_Iterable_dyn_cmp_seqcst :
428 public cc::split_list::make_traits<
429 cc::split_list::ordered_list<cc::iterable_list_tag>
431 ,co::memory_model< co::v::sequential_consistent >
432 ,cc::split_list::ordered_list_traits<
433 typename cc::iterable_list::make_traits<
434 co::compare< compare >
435 ,co::memory_model< co::v::sequential_consistent >
440 typedef SplitListSet< cds::gc::HP, key_val, traits_SplitList_Iterable_dyn_cmp_seqcst > SplitList_Iterable_HP_dyn_cmp_seqcst;
441 typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Iterable_dyn_cmp_seqcst > SplitList_Iterable_DHP_dyn_cmp_seqcst;
443 typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Iterable_dyn_cmp_seqcst > SplitList_Iterable_RCU_GPI_dyn_cmp_seqcst;
444 typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Iterable_dyn_cmp_seqcst > SplitList_Iterable_RCU_GPB_dyn_cmp_seqcst;
445 typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Iterable_dyn_cmp_seqcst > SplitList_Iterable_RCU_GPT_dyn_cmp_seqcst;
446 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
447 typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Iterable_dyn_cmp_seqcst > SplitList_Iterable_RCU_SHB_dyn_cmp_seqcst;
448 typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Iterable_dyn_cmp_seqcst > SplitList_Iterable_RCU_SHT_dyn_cmp_seqcst;
452 struct traits_SplitList_Iterable_st_cmp :
453 public cc::split_list::make_traits<
454 cc::split_list::ordered_list<cc::iterable_list_tag>
455 ,cc::split_list::dynamic_bucket_table< false >
457 ,cc::split_list::ordered_list_traits<
458 typename cc::iterable_list::make_traits<
459 co::compare< compare >
464 typedef SplitListSet< cds::gc::HP, key_val, traits_SplitList_Iterable_st_cmp > SplitList_Iterable_HP_st_cmp;
465 typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Iterable_st_cmp > SplitList_Iterable_DHP_st_cmp;
467 typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Iterable_st_cmp > SplitList_Iterable_RCU_GPI_st_cmp;
468 typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Iterable_st_cmp > SplitList_Iterable_RCU_GPB_st_cmp;
469 typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Iterable_st_cmp > SplitList_Iterable_RCU_GPT_st_cmp;
470 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
471 typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Iterable_st_cmp > SplitList_Iterable_RCU_SHB_st_cmp;
472 typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Iterable_st_cmp > SplitList_Iterable_RCU_SHT_st_cmp;
477 struct traits_SplitList_Iterable_dyn_less :
478 public cc::split_list::make_traits<
479 cc::split_list::ordered_list<cc::iterable_list_tag>
481 ,cc::split_list::ordered_list_traits<
482 typename cc::iterable_list::make_traits<
488 typedef SplitListSet< cds::gc::HP, key_val, traits_SplitList_Iterable_dyn_less > SplitList_Iterable_HP_dyn_less;
489 typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Iterable_dyn_less > SplitList_Iterable_DHP_dyn_less;
491 typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Iterable_dyn_less > SplitList_Iterable_RCU_GPI_dyn_less;
492 typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Iterable_dyn_less > SplitList_Iterable_RCU_GPB_dyn_less;
493 typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Iterable_dyn_less > SplitList_Iterable_RCU_GPT_dyn_less;
494 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
495 typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Iterable_dyn_less > SplitList_Iterable_RCU_SHB_dyn_less;
496 typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Iterable_dyn_less > SplitList_Iterable_RCU_SHT_dyn_less;
500 struct traits_SplitList_Iterable_st_less :
501 public cc::split_list::make_traits<
502 cc::split_list::ordered_list<cc::iterable_list_tag>
503 ,cc::split_list::dynamic_bucket_table< false >
505 ,cc::split_list::ordered_list_traits<
506 typename cc::iterable_list::make_traits<
512 typedef SplitListSet< cds::gc::HP, key_val, traits_SplitList_Iterable_st_less > SplitList_Iterable_HP_st_less;
513 typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Iterable_st_less > SplitList_Iterable_DHP_st_less;
515 typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Iterable_st_less > SplitList_Iterable_RCU_GPI_st_less;
516 typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Iterable_st_less > SplitList_Iterable_RCU_GPB_st_less;
517 typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Iterable_st_less > SplitList_Iterable_RCU_GPT_st_less;
518 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
519 typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Iterable_st_less > SplitList_Iterable_RCU_SHB_st_less;
520 typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Iterable_st_less > SplitList_Iterable_RCU_SHT_st_less;
524 struct traits_SplitList_Iterable_st_less_stat :
525 public cc::split_list::make_traits<
526 cc::split_list::ordered_list<cc::iterable_list_tag>
527 ,cc::split_list::dynamic_bucket_table< false >
529 ,co::stat< cc::split_list::stat<>>
530 ,cc::split_list::ordered_list_traits<
531 typename cc::iterable_list::make_traits<
537 typedef SplitListSet< cds::gc::HP, key_val, traits_SplitList_Iterable_st_less_stat > SplitList_Iterable_HP_st_less_stat;
538 typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Iterable_st_less_stat > SplitList_Iterable_DHP_st_less_stat;
540 typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Iterable_st_less_stat > SplitList_Iterable_RCU_GPI_st_less_stat;
541 typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Iterable_st_less_stat > SplitList_Iterable_RCU_GPB_st_less_stat;
542 typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Iterable_st_less_stat > SplitList_Iterable_RCU_GPT_st_less_stat;
543 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
544 typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Iterable_st_less_stat > SplitList_Iterable_RCU_SHB_st_less_stat;
545 typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Iterable_st_less_stat > SplitList_Iterable_RCU_SHT_st_less_stat;
551 template <typename GC, typename T, typename Traits>
552 static inline void print_stat( cds_test::property_stream& o, SplitListSet<GC, T, Traits> const& s )
560 #define CDSSTRESS_SplitListSet_case( fixture, test_case, splitlist_set_type, key_type, value_type, level ) \
561 TEST_P( fixture, splitlist_set_type ) \
563 if ( !check_detail_level( level )) return; \
564 typedef set::set_type< tag_SplitListSet, key_type, value_type >::splitlist_set_type set_type; \
565 test_case<set_type>(); \
569 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
570 # define CDSSTRESS_SplitListSet_SHRCU( fixture, test_case, key_type, value_type ) \
571 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_SHB_dyn_cmp, key_type, value_type, 0 ) \
572 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_SHT_dyn_cmp, key_type, value_type, 1 ) \
573 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_SHB_dyn_cmp_stat, key_type, value_type, 1 ) \
574 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_SHT_dyn_cmp_stat, key_type, value_type, 0 ) \
575 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_SHB_dyn_cmp_seqcst, key_type, value_type, 2 ) \
576 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_SHT_dyn_cmp_seqcst, key_type, value_type, 2 ) \
577 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_SHB_st_cmp, key_type, value_type, 1 ) \
578 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_SHT_st_cmp, key_type, value_type, 0 ) \
579 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_SHB_dyn_less, key_type, value_type, 1 ) \
580 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_SHT_dyn_less, key_type, value_type, 0 ) \
581 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_SHB_st_less, key_type, value_type, 1 ) \
582 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_SHT_st_less, key_type, value_type, 0 ) \
583 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_SHB_st_less_stat, key_type, value_type, 0 ) \
584 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_SHT_st_less_stat, key_type, value_type, 1 ) \
585 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_SHB_dyn_cmp, key_type, value_type, 0 ) \
586 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_SHT_dyn_cmp, key_type, value_type, 1 ) \
587 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_SHB_dyn_cmp_stat, key_type, value_type, 1 ) \
588 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_SHT_dyn_cmp_stat, key_type, value_type, 0 ) \
589 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_SHB_st_cmp, key_type, value_type, 0 ) \
590 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_SHT_st_cmp, key_type, value_type, 1 ) \
591 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_SHB_dyn_less, key_type, value_type, 1 ) \
592 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_SHT_dyn_less, key_type, value_type, 0 ) \
593 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_SHB_st_less, key_type, value_type, 0 ) \
594 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_SHT_st_less, key_type, value_type, 1 ) \
595 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_SHB_st_less_stat, key_type, value_type, 1 ) \
596 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_SHT_st_less_stat, key_type, value_type, 0 ) \
598 # define CDSSTRESS_SplitListIterableSet_SHRCU( fixture, test_case, key_type, value_type )
600 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_RCU_SHB_dyn_cmp, key_type, value_type, 0 ) \
601 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_RCU_SHT_dyn_cmp, key_type, value_type, 1 ) \
602 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_RCU_SHB_dyn_cmp_stat, key_type, value_type, 1 ) \
603 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_RCU_SHT_dyn_cmp_stat, key_type, value_type, 0 ) \
604 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_RCU_SHB_dyn_cmp_seqcst, key_type, value_type, 2 ) \
605 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_RCU_SHT_dyn_cmp_seqcst, key_type, value_type, 2 ) \
606 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_RCU_SHB_st_cmp, key_type, value_type, 1 ) \
607 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_RCU_SHT_st_cmp, key_type, value_type, 0 ) \
608 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_RCU_SHB_dyn_less, key_type, value_type, 1 ) \
609 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_RCU_SHT_dyn_less, key_type, value_type, 0 ) \
610 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_RCU_SHB_st_less, key_type, value_type, 1 ) \
611 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_RCU_SHT_st_less, key_type, value_type, 0 ) \
612 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_RCU_SHB_st_less_stat, key_type, value_type, 0 ) \
613 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_RCU_SHT_st_less_stat, key_type, value_type, 1 ) \
616 # define CDSSTRESS_SplitListSet_SHRCU( fixture, test_case, key_type, value_type )
617 # define CDSSTRESS_SplitListIterableSet_SHRCU( fixture, test_case, key_type, value_type )
620 #define CDSSTRESS_SplitListSet( fixture, test_case, key_type, value_type ) \
621 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_HP_dyn_cmp, key_type, value_type, 0 ) \
622 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_DHP_dyn_cmp, key_type, value_type, 1 ) \
623 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_GPI_dyn_cmp, key_type, value_type, 0 ) \
624 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_GPB_dyn_cmp, key_type, value_type, 1 ) \
625 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_GPT_dyn_cmp, key_type, value_type, 0 ) \
626 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_HP_dyn_cmp_stat, key_type, value_type, 1 ) \
627 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_DHP_dyn_cmp_stat, key_type, value_type, 0 ) \
628 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_GPI_dyn_cmp_stat, key_type, value_type, 1 ) \
629 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_GPB_dyn_cmp_stat, key_type, value_type, 0 ) \
630 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_GPT_dyn_cmp_stat, key_type, value_type, 1 ) \
631 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_HP_dyn_cmp_seqcst, key_type, value_type, 2 ) \
632 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_DHP_dyn_cmp_seqcst, key_type, value_type, 2 ) \
633 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_GPI_dyn_cmp_seqcst, key_type, value_type, 2 ) \
634 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_GPB_dyn_cmp_seqcst, key_type, value_type, 2 ) \
635 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_GPT_dyn_cmp_seqcst, key_type, value_type, 2 ) \
636 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_HP_st_cmp, key_type, value_type, 1 ) \
637 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_DHP_st_cmp, key_type, value_type, 0 ) \
638 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_GPI_st_cmp, key_type, value_type, 1 ) \
639 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_GPB_st_cmp, key_type, value_type, 0 ) \
640 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_GPT_st_cmp, key_type, value_type, 1 ) \
641 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_HP_dyn_less, key_type, value_type, 0 ) \
642 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_DHP_dyn_less, key_type, value_type, 1 ) \
643 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_GPI_dyn_less, key_type, value_type, 0 ) \
644 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_GPB_dyn_less, key_type, value_type, 1 ) \
645 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_GPT_dyn_less, key_type, value_type, 0 ) \
646 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_HP_st_less, key_type, value_type, 1 ) \
647 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_DHP_st_less, key_type, value_type, 0 ) \
648 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_GPI_st_less, key_type, value_type, 1 ) \
649 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_GPB_st_less, key_type, value_type, 0 ) \
650 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_GPT_st_less, key_type, value_type, 1 ) \
651 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_HP_st_less_stat, key_type, value_type, 0 ) \
652 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_DHP_st_less_stat, key_type, value_type, 1 ) \
653 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_GPI_st_less_stat, key_type, value_type, 0 ) \
654 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_GPB_st_less_stat, key_type, value_type, 1 ) \
655 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_GPT_st_less_stat, key_type, value_type, 0 ) \
656 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_HP_dyn_cmp, key_type, value_type, 0 ) \
657 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_DHP_dyn_cmp, key_type, value_type, 1 ) \
658 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_GPI_dyn_cmp, key_type, value_type, 0 ) \
659 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_GPB_dyn_cmp, key_type, value_type, 1 ) \
660 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_GPT_dyn_cmp, key_type, value_type, 0 ) \
661 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_HP_dyn_cmp_stat, key_type, value_type, 1 ) \
662 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_DHP_dyn_cmp_stat, key_type, value_type, 0 ) \
663 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_GPI_dyn_cmp_stat, key_type, value_type, 1 ) \
664 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_GPB_dyn_cmp_stat, key_type, value_type, 0 ) \
665 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_GPT_dyn_cmp_stat, key_type, value_type, 1 ) \
666 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_HP_st_cmp, key_type, value_type, 0 ) \
667 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_DHP_st_cmp, key_type, value_type, 1 ) \
668 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_GPI_st_cmp, key_type, value_type, 0 ) \
669 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_GPB_st_cmp, key_type, value_type, 1 ) \
670 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_GPT_st_cmp, key_type, value_type, 0 ) \
671 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_HP_dyn_less, key_type, value_type, 1 ) \
672 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_DHP_dyn_less, key_type, value_type, 0 ) \
673 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_GPI_dyn_less, key_type, value_type, 1 ) \
674 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_GPB_dyn_less, key_type, value_type, 0 ) \
675 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_GPT_dyn_less, key_type, value_type, 1 ) \
676 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_HP_st_less, key_type, value_type, 0 ) \
677 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_DHP_st_less, key_type, value_type, 1 ) \
678 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_GPI_st_less, key_type, value_type, 0 ) \
679 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_GPB_st_less, key_type, value_type, 1 ) \
680 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_GPT_st_less, key_type, value_type, 0 ) \
681 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_HP_st_less_stat, key_type, value_type, 1 ) \
682 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_DHP_st_less_stat, key_type, value_type, 0 ) \
683 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_GPI_st_less_stat, key_type, value_type, 1 ) \
684 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_GPB_st_less_stat, key_type, value_type, 0 ) \
685 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_GPT_st_less_stat, key_type, value_type, 1 ) \
686 CDSSTRESS_SplitListSet_SHRCU( fixture, test_case, key_type, value_type )
688 #define CDSSTRESS_SplitListIterableSet( fixture, test_case, key_type, value_type ) \
689 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_HP_dyn_cmp, key_type, value_type, 0 ) \
690 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_DHP_dyn_cmp, key_type, value_type, 1 ) \
691 /*CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_RCU_GPI_dyn_cmp, key_type, value_type, 0 )*/ \
692 /*CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_RCU_GPB_dyn_cmp, key_type, value_type, 1 )*/ \
693 /*CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_RCU_GPT_dyn_cmp, key_type, value_type, 0 )*/ \
694 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_HP_dyn_cmp_stat, key_type, value_type, 1 ) \
695 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_DHP_dyn_cmp_stat, key_type, value_type, 0 ) \
696 /*CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_RCU_GPI_dyn_cmp_stat, key_type, value_type, 1 )*/ \
697 /*CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_RCU_GPB_dyn_cmp_stat, key_type, value_type, 0 )*/ \
698 /*CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_RCU_GPT_dyn_cmp_stat, key_type, value_type, 1 )*/ \
699 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_HP_dyn_cmp_seqcst, key_type, value_type, 2 ) \
700 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_DHP_dyn_cmp_seqcst, key_type, value_type, 2 ) \
701 /*CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_RCU_GPI_dyn_cmp_seqcst, key_type, value_type, 2 )*/ \
702 /*CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_RCU_GPB_dyn_cmp_seqcst, key_type, value_type, 2 )*/ \
703 /*CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_RCU_GPT_dyn_cmp_seqcst, key_type, value_type, 2 )*/ \
704 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_HP_st_cmp, key_type, value_type, 1 ) \
705 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_DHP_st_cmp, key_type, value_type, 0 ) \
706 /*CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_RCU_GPI_st_cmp, key_type, value_type, 1 )*/ \
707 /*CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_RCU_GPB_st_cmp, key_type, value_type, 0 )*/ \
708 /*CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_RCU_GPT_st_cmp, key_type, value_type, 1 )*/ \
709 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_HP_dyn_less, key_type, value_type, 0 ) \
710 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_DHP_dyn_less, key_type, value_type, 1 ) \
711 /*CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_RCU_GPI_dyn_less, key_type, value_type, 0 )*/ \
712 /*CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_RCU_GPB_dyn_less, key_type, value_type, 1 )*/ \
713 /*CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_RCU_GPT_dyn_less, key_type, value_type, 0 )*/ \
714 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_HP_st_less, key_type, value_type, 1 ) \
715 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_DHP_st_less, key_type, value_type, 0 ) \
716 /*CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_RCU_GPI_st_less, key_type, value_type, 1 )*/ \
717 /*CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_RCU_GPB_st_less, key_type, value_type, 0 )*/ \
718 /*CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_RCU_GPT_st_less, key_type, value_type, 1 )*/ \
719 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_HP_st_less_stat, key_type, value_type, 0 ) \
720 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_DHP_st_less_stat, key_type, value_type, 1 ) \
721 /*CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_RCU_GPI_st_less_stat, key_type, value_type, 0 )*/ \
722 /*CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_RCU_GPB_st_less_stat, key_type, value_type, 1 )*/ \
723 /*CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_RCU_GPT_st_less_stat, key_type, value_type, 0 )*/ \
724 CDSSTRESS_SplitListIterableSet_SHRCU( fixture, test_case, key_type, value_type )
726 #endif // #ifndef CDSUNIT_SET_TYPE_SPLIT_LIST_H