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>
49 #include <cds_test/stat_michael_list_out.h>
50 #include <cds_test/stat_lazy_list_out.h>
51 #include <cds_test/stat_iterable_list_out.h>
55 template <typename GC, typename T, typename Traits = cc::split_list::traits>
56 class SplitListSet : public cc::SplitListSet< GC, T, Traits >
58 typedef cc::SplitListSet< GC, T, Traits > base_class;
60 template <typename Config>
61 SplitListSet( Config const& cfg )
62 : base_class( cfg.s_nSetSize, cfg.s_nLoadFactor )
66 static CDS_CONSTEXPR bool const c_bExtractSupported = true;
67 static CDS_CONSTEXPR bool const c_bLoadFactorDepended = true;
68 static CDS_CONSTEXPR bool const c_bEraseExactKey = false;
71 struct tag_SplitListSet;
73 template <typename Key, typename Val>
74 struct set_type< tag_SplitListSet, Key, Val >: public set_type_base< Key, Val >
76 typedef set_type_base< Key, Val > base_class;
77 typedef typename base_class::key_val key_val;
78 typedef typename base_class::compare compare;
79 typedef typename base_class::less less;
80 typedef typename base_class::hash hash;
82 // ***************************************************************************
83 // SplitListSet based on MichaelList
85 struct traits_SplitList_Michael_dyn_cmp :
86 public cc::split_list::make_traits<
87 cc::split_list::ordered_list<cc::michael_list_tag>
89 ,cc::split_list::ordered_list_traits<
90 typename cc::michael_list::make_traits<
91 co::compare< compare >
96 typedef SplitListSet< cds::gc::HP, key_val, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_HP_dyn_cmp;
97 typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_DHP_dyn_cmp;
98 typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_RCU_GPI_dyn_cmp;
99 typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_RCU_GPB_dyn_cmp;
100 typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_RCU_GPT_dyn_cmp;
101 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
102 typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_RCU_SHB_dyn_cmp;
103 typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_RCU_SHT_dyn_cmp;
106 struct traits_SplitList_Michael_dyn_cmp_stat :
107 public cc::split_list::make_traits<
108 cc::split_list::ordered_list<cc::michael_list_tag>
110 ,co::stat< cc::split_list::stat<> >
111 ,cc::split_list::ordered_list_traits<
112 typename cc::michael_list::make_traits<
113 co::compare< compare >
114 ,co::stat< cc::michael_list::stat<>>
119 typedef SplitListSet< cds::gc::HP, key_val, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_HP_dyn_cmp_stat;
120 typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_DHP_dyn_cmp_stat;
121 typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_RCU_GPI_dyn_cmp_stat;
122 typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_RCU_GPB_dyn_cmp_stat;
123 typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_RCU_GPT_dyn_cmp_stat;
124 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
125 typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_RCU_SHB_dyn_cmp_stat;
126 typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_RCU_SHT_dyn_cmp_stat;
129 struct traits_SplitList_Michael_dyn_cmp_seqcst :
130 public cc::split_list::make_traits<
131 cc::split_list::ordered_list<cc::michael_list_tag>
133 ,co::memory_model< co::v::sequential_consistent >
134 ,cc::split_list::ordered_list_traits<
135 typename cc::michael_list::make_traits<
136 co::compare< compare >
137 ,co::memory_model< co::v::sequential_consistent >
142 typedef SplitListSet< cds::gc::HP, key_val, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_HP_dyn_cmp_seqcst;
143 typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_DHP_dyn_cmp_seqcst;
144 typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_RCU_GPI_dyn_cmp_seqcst;
145 typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_RCU_GPB_dyn_cmp_seqcst;
146 typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_RCU_GPT_dyn_cmp_seqcst;
147 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
148 typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_RCU_SHB_dyn_cmp_seqcst;
149 typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_RCU_SHT_dyn_cmp_seqcst;
152 struct traits_SplitList_Michael_st_cmp :
153 public cc::split_list::make_traits<
154 cc::split_list::ordered_list<cc::michael_list_tag>
155 ,cc::split_list::dynamic_bucket_table< false >
157 ,cc::split_list::ordered_list_traits<
158 typename cc::michael_list::make_traits<
159 co::compare< compare >
164 typedef SplitListSet< cds::gc::HP, key_val, traits_SplitList_Michael_st_cmp > SplitList_Michael_HP_st_cmp;
165 typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Michael_st_cmp > SplitList_Michael_DHP_st_cmp;
166 typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Michael_st_cmp > SplitList_Michael_RCU_GPI_st_cmp;
167 typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Michael_st_cmp > SplitList_Michael_RCU_GPB_st_cmp;
168 typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Michael_st_cmp > SplitList_Michael_RCU_GPT_st_cmp;
169 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
170 typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Michael_st_cmp > SplitList_Michael_RCU_SHB_st_cmp;
171 typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Michael_st_cmp > SplitList_Michael_RCU_SHT_st_cmp;
175 struct traits_SplitList_Michael_dyn_less :
176 public cc::split_list::make_traits<
177 cc::split_list::ordered_list<cc::michael_list_tag>
179 ,cc::split_list::ordered_list_traits<
180 typename cc::michael_list::make_traits<
186 typedef SplitListSet< cds::gc::HP, key_val, traits_SplitList_Michael_dyn_less > SplitList_Michael_HP_dyn_less;
187 typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Michael_dyn_less > SplitList_Michael_DHP_dyn_less;
188 typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Michael_dyn_less > SplitList_Michael_RCU_GPI_dyn_less;
189 typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Michael_dyn_less > SplitList_Michael_RCU_GPB_dyn_less;
190 typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Michael_dyn_less > SplitList_Michael_RCU_GPT_dyn_less;
191 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
192 typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Michael_dyn_less > SplitList_Michael_RCU_SHB_dyn_less;
193 typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Michael_dyn_less > SplitList_Michael_RCU_SHT_dyn_less;
196 struct traits_SplitList_Michael_st_less :
197 public cc::split_list::make_traits<
198 cc::split_list::ordered_list<cc::michael_list_tag>
199 ,cc::split_list::dynamic_bucket_table< false >
201 ,cc::split_list::ordered_list_traits<
202 typename cc::michael_list::make_traits<
208 typedef SplitListSet< cds::gc::HP, key_val, traits_SplitList_Michael_st_less > SplitList_Michael_HP_st_less;
209 typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Michael_st_less > SplitList_Michael_DHP_st_less;
210 typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Michael_st_less > SplitList_Michael_RCU_GPI_st_less;
211 typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Michael_st_less > SplitList_Michael_RCU_GPB_st_less;
212 typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Michael_st_less > SplitList_Michael_RCU_GPT_st_less;
213 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
214 typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Michael_st_less > SplitList_Michael_RCU_SHB_st_less;
215 typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Michael_st_less > SplitList_Michael_RCU_SHT_st_less;
218 struct traits_SplitList_Michael_st_less_stat :
219 public cc::split_list::make_traits<
220 cc::split_list::ordered_list<cc::michael_list_tag>
221 ,cc::split_list::dynamic_bucket_table< false >
223 ,co::stat< cc::split_list::stat<>>
224 ,cc::split_list::ordered_list_traits<
225 typename cc::michael_list::make_traits<
227 ,co::stat< cc::michael_list::stat<>>
232 typedef SplitListSet< cds::gc::HP, key_val, traits_SplitList_Michael_st_less_stat > SplitList_Michael_HP_st_less_stat;
233 typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Michael_st_less_stat > SplitList_Michael_DHP_st_less_stat;
234 typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Michael_st_less_stat > SplitList_Michael_RCU_GPI_st_less_stat;
235 typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Michael_st_less_stat > SplitList_Michael_RCU_GPB_st_less_stat;
236 typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Michael_st_less_stat > SplitList_Michael_RCU_GPT_st_less_stat;
237 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
238 typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Michael_st_less_stat > SplitList_Michael_RCU_SHB_st_less_stat;
239 typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Michael_st_less_stat > SplitList_Michael_RCU_SHT_st_less_stat;
242 // ***************************************************************************
243 // SplitListSet based on LazyList
245 struct traits_SplitList_Lazy_dyn_cmp :
246 public cc::split_list::make_traits<
247 cc::split_list::ordered_list<cc::lazy_list_tag>
249 ,cc::split_list::ordered_list_traits<
250 typename cc::lazy_list::make_traits<
251 co::compare< compare >
256 typedef SplitListSet< cds::gc::HP, key_val, traits_SplitList_Lazy_dyn_cmp > SplitList_Lazy_HP_dyn_cmp;
257 typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Lazy_dyn_cmp > SplitList_Lazy_DHP_dyn_cmp;
258 typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Lazy_dyn_cmp > SplitList_Lazy_RCU_GPI_dyn_cmp;
259 typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Lazy_dyn_cmp > SplitList_Lazy_RCU_GPB_dyn_cmp;
260 typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Lazy_dyn_cmp > SplitList_Lazy_RCU_GPT_dyn_cmp;
261 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
262 typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Lazy_dyn_cmp > SplitList_Lazy_RCU_SHB_dyn_cmp;
263 typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Lazy_dyn_cmp > SplitList_Lazy_RCU_SHT_dyn_cmp;
266 struct traits_SplitList_Lazy_dyn_cmp_stat : public traits_SplitList_Lazy_dyn_cmp
268 typedef cc::split_list::stat<> stat;
270 typedef SplitListSet< cds::gc::HP, key_val, traits_SplitList_Lazy_dyn_cmp_stat > SplitList_Lazy_HP_dyn_cmp_stat;
271 typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Lazy_dyn_cmp_stat > SplitList_Lazy_DHP_dyn_cmp_stat;
272 typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Lazy_dyn_cmp_stat > SplitList_Lazy_RCU_GPI_dyn_cmp_stat;
273 typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Lazy_dyn_cmp_stat > SplitList_Lazy_RCU_GPB_dyn_cmp_stat;
274 typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Lazy_dyn_cmp_stat > SplitList_Lazy_RCU_GPT_dyn_cmp_stat;
275 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
276 typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Lazy_dyn_cmp > SplitList_Lazy_RCU_SHB_dyn_cmp_stat;
277 typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Lazy_dyn_cmp > SplitList_Lazy_RCU_SHT_dyn_cmp_stat;
280 struct traits_SplitList_Lazy_dyn_cmp_seqcst :
281 public cc::split_list::make_traits<
282 cc::split_list::ordered_list<cc::lazy_list_tag>
284 ,co::memory_model< co::v::sequential_consistent >
285 ,cc::split_list::ordered_list_traits<
286 typename cc::lazy_list::make_traits<
287 co::compare< compare >
288 ,co::memory_model< co::v::sequential_consistent >
293 typedef SplitListSet< cds::gc::HP, key_val, traits_SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_HP_dyn_cmp_seqcst;
294 typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_DHP_dyn_cmp_seqcst;
295 typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_RCU_GPI_dyn_cmp_seqcst;
296 typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_RCU_GPB_dyn_cmp_seqcst;
297 typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_RCU_GPT_dyn_cmp_seqcst;
298 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
299 typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_RCU_SHB_dyn_cmp_seqcst;
300 typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_RCU_SHT_dyn_cmp_seqcst;
303 struct traits_SplitList_Lazy_st_cmp :
304 public cc::split_list::make_traits<
305 cc::split_list::ordered_list<cc::lazy_list_tag>
306 ,cc::split_list::dynamic_bucket_table< false >
308 ,cc::split_list::ordered_list_traits<
309 typename cc::lazy_list::make_traits<
310 co::compare< compare >
315 typedef SplitListSet< cds::gc::HP, key_val, traits_SplitList_Lazy_st_cmp > SplitList_Lazy_HP_st_cmp;
316 typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Lazy_st_cmp > SplitList_Lazy_DHP_st_cmp;
317 typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Lazy_st_cmp > SplitList_Lazy_RCU_GPI_st_cmp;
318 typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Lazy_st_cmp > SplitList_Lazy_RCU_GPB_st_cmp;
319 typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Lazy_st_cmp > SplitList_Lazy_RCU_GPT_st_cmp;
320 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
321 typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Lazy_st_cmp > SplitList_Lazy_RCU_SHB_st_cmp;
322 typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Lazy_st_cmp > SplitList_Lazy_RCU_SHT_st_cmp;
325 struct traits_SplitList_Lazy_dyn_less :
326 public cc::split_list::make_traits<
327 cc::split_list::ordered_list<cc::lazy_list_tag>
329 ,cc::split_list::ordered_list_traits<
330 typename cc::lazy_list::make_traits<
336 typedef SplitListSet< cds::gc::HP, key_val, traits_SplitList_Lazy_dyn_less > SplitList_Lazy_HP_dyn_less;
337 typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Lazy_dyn_less > SplitList_Lazy_DHP_dyn_less;
338 typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Lazy_dyn_less > SplitList_Lazy_RCU_GPI_dyn_less;
339 typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Lazy_dyn_less > SplitList_Lazy_RCU_GPB_dyn_less;
340 typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Lazy_dyn_less > SplitList_Lazy_RCU_GPT_dyn_less;
341 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
342 typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Lazy_dyn_less > SplitList_Lazy_RCU_SHB_dyn_less;
343 typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Lazy_dyn_less > SplitList_Lazy_RCU_SHT_dyn_less;
346 struct traits_SplitList_Lazy_st_less :
347 public cc::split_list::make_traits<
348 cc::split_list::ordered_list<cc::lazy_list_tag>
349 ,cc::split_list::dynamic_bucket_table< false >
351 ,cc::split_list::ordered_list_traits<
352 typename cc::lazy_list::make_traits<
358 typedef SplitListSet< cds::gc::HP, key_val, traits_SplitList_Lazy_st_less > SplitList_Lazy_HP_st_less;
359 typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Lazy_st_less > SplitList_Lazy_DHP_st_less;
360 typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Lazy_st_less > SplitList_Lazy_RCU_GPI_st_less;
361 typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Lazy_st_less > SplitList_Lazy_RCU_GPB_st_less;
362 typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Lazy_st_less > SplitList_Lazy_RCU_GPT_st_less;
363 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
364 typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Lazy_st_less > SplitList_Lazy_RCU_SHB_st_less;
365 typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Lazy_st_less > SplitList_Lazy_RCU_SHT_st_less;
368 struct traits_SplitList_Lazy_st_less_stat : public traits_SplitList_Lazy_st_less
370 typedef cc::split_list::stat<> stat;
372 typedef SplitListSet< cds::gc::HP, key_val, traits_SplitList_Lazy_st_less_stat > SplitList_Lazy_HP_st_less_stat;
373 typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Lazy_st_less_stat > SplitList_Lazy_DHP_st_less_stat;
374 typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Lazy_st_less_stat > SplitList_Lazy_RCU_GPI_st_less_stat;
375 typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Lazy_st_less_stat > SplitList_Lazy_RCU_GPB_st_less_stat;
376 typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Lazy_st_less_stat > SplitList_Lazy_RCU_GPT_st_less_stat;
377 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
378 typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Lazy_st_less_stat > SplitList_Lazy_RCU_SHB_st_less_stat;
379 typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Lazy_st_less_stat > SplitList_Lazy_RCU_SHT_st_less_stat;
382 // ***************************************************************************
383 // SplitListSet based on IterableList
385 struct traits_SplitList_Iterable_dyn_cmp :
386 public cc::split_list::make_traits<
387 cc::split_list::ordered_list<cc::iterable_list_tag>
389 ,cc::split_list::ordered_list_traits<
390 typename cc::iterable_list::make_traits<
391 co::compare< compare >
396 typedef SplitListSet< cds::gc::HP, key_val, traits_SplitList_Iterable_dyn_cmp > SplitList_Iterable_HP_dyn_cmp;
397 typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Iterable_dyn_cmp > SplitList_Iterable_DHP_dyn_cmp;
399 typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Iterable_dyn_cmp > SplitList_Iterable_RCU_GPI_dyn_cmp;
400 typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Iterable_dyn_cmp > SplitList_Iterable_RCU_GPB_dyn_cmp;
401 typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Iterable_dyn_cmp > SplitList_Iterable_RCU_GPT_dyn_cmp;
402 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
403 typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Iterable_dyn_cmp > SplitList_Iterable_RCU_SHB_dyn_cmp;
404 typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Iterable_dyn_cmp > SplitList_Iterable_RCU_SHT_dyn_cmp;
408 struct traits_SplitList_Iterable_dyn_cmp_stat:
409 public cc::split_list::make_traits<
410 cc::split_list::ordered_list<cc::iterable_list_tag>
412 ,co::stat< cc::split_list::stat<> >
413 ,cc::split_list::ordered_list_traits<
414 typename cc::iterable_list::make_traits<
415 co::compare< compare >
416 ,co::stat< cc::iterable_list::stat<>>
421 typedef SplitListSet< cds::gc::HP, key_val, traits_SplitList_Iterable_dyn_cmp_stat > SplitList_Iterable_HP_dyn_cmp_stat;
422 typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Iterable_dyn_cmp_stat > SplitList_Iterable_DHP_dyn_cmp_stat;
424 typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Iterable_dyn_cmp_stat > SplitList_Iterable_RCU_GPI_dyn_cmp_stat;
425 typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Iterable_dyn_cmp_stat > SplitList_Iterable_RCU_GPB_dyn_cmp_stat;
426 typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Iterable_dyn_cmp_stat > SplitList_Iterable_RCU_GPT_dyn_cmp_stat;
427 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
428 typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Iterable_dyn_cmp_stat > SplitList_Iterable_RCU_SHB_dyn_cmp_stat;
429 typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Iterable_dyn_cmp_stat > SplitList_Iterable_RCU_SHT_dyn_cmp_stat;
433 struct traits_SplitList_Iterable_dyn_cmp_seqcst :
434 public cc::split_list::make_traits<
435 cc::split_list::ordered_list<cc::iterable_list_tag>
437 ,co::memory_model< co::v::sequential_consistent >
438 ,cc::split_list::ordered_list_traits<
439 typename cc::iterable_list::make_traits<
440 co::compare< compare >
441 ,co::memory_model< co::v::sequential_consistent >
446 typedef SplitListSet< cds::gc::HP, key_val, traits_SplitList_Iterable_dyn_cmp_seqcst > SplitList_Iterable_HP_dyn_cmp_seqcst;
447 typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Iterable_dyn_cmp_seqcst > SplitList_Iterable_DHP_dyn_cmp_seqcst;
449 typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Iterable_dyn_cmp_seqcst > SplitList_Iterable_RCU_GPI_dyn_cmp_seqcst;
450 typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Iterable_dyn_cmp_seqcst > SplitList_Iterable_RCU_GPB_dyn_cmp_seqcst;
451 typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Iterable_dyn_cmp_seqcst > SplitList_Iterable_RCU_GPT_dyn_cmp_seqcst;
452 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
453 typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Iterable_dyn_cmp_seqcst > SplitList_Iterable_RCU_SHB_dyn_cmp_seqcst;
454 typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Iterable_dyn_cmp_seqcst > SplitList_Iterable_RCU_SHT_dyn_cmp_seqcst;
458 struct traits_SplitList_Iterable_st_cmp :
459 public cc::split_list::make_traits<
460 cc::split_list::ordered_list<cc::iterable_list_tag>
461 ,cc::split_list::dynamic_bucket_table< false >
463 ,cc::split_list::ordered_list_traits<
464 typename cc::iterable_list::make_traits<
465 co::compare< compare >
470 typedef SplitListSet< cds::gc::HP, key_val, traits_SplitList_Iterable_st_cmp > SplitList_Iterable_HP_st_cmp;
471 typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Iterable_st_cmp > SplitList_Iterable_DHP_st_cmp;
473 typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Iterable_st_cmp > SplitList_Iterable_RCU_GPI_st_cmp;
474 typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Iterable_st_cmp > SplitList_Iterable_RCU_GPB_st_cmp;
475 typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Iterable_st_cmp > SplitList_Iterable_RCU_GPT_st_cmp;
476 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
477 typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Iterable_st_cmp > SplitList_Iterable_RCU_SHB_st_cmp;
478 typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Iterable_st_cmp > SplitList_Iterable_RCU_SHT_st_cmp;
483 struct traits_SplitList_Iterable_dyn_less :
484 public cc::split_list::make_traits<
485 cc::split_list::ordered_list<cc::iterable_list_tag>
487 ,cc::split_list::ordered_list_traits<
488 typename cc::iterable_list::make_traits<
494 typedef SplitListSet< cds::gc::HP, key_val, traits_SplitList_Iterable_dyn_less > SplitList_Iterable_HP_dyn_less;
495 typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Iterable_dyn_less > SplitList_Iterable_DHP_dyn_less;
497 typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Iterable_dyn_less > SplitList_Iterable_RCU_GPI_dyn_less;
498 typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Iterable_dyn_less > SplitList_Iterable_RCU_GPB_dyn_less;
499 typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Iterable_dyn_less > SplitList_Iterable_RCU_GPT_dyn_less;
500 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
501 typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Iterable_dyn_less > SplitList_Iterable_RCU_SHB_dyn_less;
502 typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Iterable_dyn_less > SplitList_Iterable_RCU_SHT_dyn_less;
506 struct traits_SplitList_Iterable_st_less :
507 public cc::split_list::make_traits<
508 cc::split_list::ordered_list<cc::iterable_list_tag>
509 ,cc::split_list::dynamic_bucket_table< false >
511 ,cc::split_list::ordered_list_traits<
512 typename cc::iterable_list::make_traits<
518 typedef SplitListSet< cds::gc::HP, key_val, traits_SplitList_Iterable_st_less > SplitList_Iterable_HP_st_less;
519 typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Iterable_st_less > SplitList_Iterable_DHP_st_less;
521 typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Iterable_st_less > SplitList_Iterable_RCU_GPI_st_less;
522 typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Iterable_st_less > SplitList_Iterable_RCU_GPB_st_less;
523 typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Iterable_st_less > SplitList_Iterable_RCU_GPT_st_less;
524 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
525 typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Iterable_st_less > SplitList_Iterable_RCU_SHB_st_less;
526 typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Iterable_st_less > SplitList_Iterable_RCU_SHT_st_less;
530 struct traits_SplitList_Iterable_st_less_stat :
531 public cc::split_list::make_traits<
532 cc::split_list::ordered_list<cc::iterable_list_tag>
533 ,cc::split_list::dynamic_bucket_table< false >
535 ,co::stat< cc::split_list::stat<>>
536 ,cc::split_list::ordered_list_traits<
537 typename cc::iterable_list::make_traits<
539 ,co::stat< cc::iterable_list::stat<>>
544 typedef SplitListSet< cds::gc::HP, key_val, traits_SplitList_Iterable_st_less_stat > SplitList_Iterable_HP_st_less_stat;
545 typedef SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Iterable_st_less_stat > SplitList_Iterable_DHP_st_less_stat;
547 typedef SplitListSet< rcu_gpi, key_val, traits_SplitList_Iterable_st_less_stat > SplitList_Iterable_RCU_GPI_st_less_stat;
548 typedef SplitListSet< rcu_gpb, key_val, traits_SplitList_Iterable_st_less_stat > SplitList_Iterable_RCU_GPB_st_less_stat;
549 typedef SplitListSet< rcu_gpt, key_val, traits_SplitList_Iterable_st_less_stat > SplitList_Iterable_RCU_GPT_st_less_stat;
550 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
551 typedef SplitListSet< rcu_shb, key_val, traits_SplitList_Iterable_st_less_stat > SplitList_Iterable_RCU_SHB_st_less_stat;
552 typedef SplitListSet< rcu_sht, key_val, traits_SplitList_Iterable_st_less_stat > SplitList_Iterable_RCU_SHT_st_less_stat;
558 template <typename GC, typename T, typename Traits>
559 static inline void print_stat( cds_test::property_stream& o, SplitListSet<GC, T, Traits> const& s )
562 << s.list_statistics();
568 #define CDSSTRESS_SplitListSet_case( fixture, test_case, splitlist_set_type, key_type, value_type, level ) \
569 TEST_P( fixture, splitlist_set_type ) \
571 if ( !check_detail_level( level )) return; \
572 typedef set::set_type< tag_SplitListSet, key_type, value_type >::splitlist_set_type set_type; \
573 test_case<set_type>(); \
577 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
578 # define CDSSTRESS_SplitListSet_SHRCU( fixture, test_case, key_type, value_type ) \
579 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_SHB_dyn_cmp, key_type, value_type, 0 ) \
580 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_SHT_dyn_cmp, key_type, value_type, 1 ) \
581 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_SHB_dyn_cmp_stat, key_type, value_type, 1 ) \
582 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_SHT_dyn_cmp_stat, key_type, value_type, 0 ) \
583 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_SHB_dyn_cmp_seqcst, key_type, value_type, 2 ) \
584 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_SHT_dyn_cmp_seqcst, key_type, value_type, 2 ) \
585 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_SHB_st_cmp, key_type, value_type, 1 ) \
586 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_SHT_st_cmp, key_type, value_type, 0 ) \
587 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_SHB_dyn_less, key_type, value_type, 1 ) \
588 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_SHT_dyn_less, key_type, value_type, 0 ) \
589 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_SHB_st_less, key_type, value_type, 1 ) \
590 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_SHT_st_less, key_type, value_type, 0 ) \
591 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_SHB_st_less_stat, key_type, value_type, 0 ) \
592 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_SHT_st_less_stat, key_type, value_type, 1 ) \
593 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_SHB_dyn_cmp, key_type, value_type, 0 ) \
594 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_SHT_dyn_cmp, key_type, value_type, 1 ) \
595 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_SHB_dyn_cmp_stat, key_type, value_type, 1 ) \
596 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_SHT_dyn_cmp_stat, key_type, value_type, 0 ) \
597 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_SHB_st_cmp, key_type, value_type, 0 ) \
598 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_SHT_st_cmp, key_type, value_type, 1 ) \
599 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_SHB_dyn_less, key_type, value_type, 1 ) \
600 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_SHT_dyn_less, key_type, value_type, 0 ) \
601 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_SHB_st_less, key_type, value_type, 0 ) \
602 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_SHT_st_less, key_type, value_type, 1 ) \
603 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_SHB_st_less_stat, key_type, value_type, 1 ) \
604 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_SHT_st_less_stat, key_type, value_type, 0 ) \
606 # define CDSSTRESS_SplitListIterableSet_SHRCU( fixture, test_case, key_type, value_type )
608 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_RCU_SHB_dyn_cmp, key_type, value_type, 0 ) \
609 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_RCU_SHT_dyn_cmp, key_type, value_type, 1 ) \
610 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_RCU_SHB_dyn_cmp_stat, key_type, value_type, 1 ) \
611 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_RCU_SHT_dyn_cmp_stat, key_type, value_type, 0 ) \
612 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_RCU_SHB_dyn_cmp_seqcst, key_type, value_type, 2 ) \
613 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_RCU_SHT_dyn_cmp_seqcst, key_type, value_type, 2 ) \
614 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_RCU_SHB_st_cmp, key_type, value_type, 1 ) \
615 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_RCU_SHT_st_cmp, key_type, value_type, 0 ) \
616 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_RCU_SHB_dyn_less, key_type, value_type, 1 ) \
617 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_RCU_SHT_dyn_less, key_type, value_type, 0 ) \
618 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_RCU_SHB_st_less, key_type, value_type, 1 ) \
619 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_RCU_SHT_st_less, key_type, value_type, 0 ) \
620 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_RCU_SHB_st_less_stat, key_type, value_type, 0 ) \
621 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_RCU_SHT_st_less_stat, key_type, value_type, 1 ) \
624 # define CDSSTRESS_SplitListSet_SHRCU( fixture, test_case, key_type, value_type )
625 # define CDSSTRESS_SplitListIterableSet_SHRCU( fixture, test_case, key_type, value_type )
628 #define CDSSTRESS_SplitListSet( fixture, test_case, key_type, value_type ) \
629 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_HP_dyn_cmp, key_type, value_type, 0 ) \
630 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_DHP_dyn_cmp, key_type, value_type, 1 ) \
631 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_GPI_dyn_cmp, key_type, value_type, 0 ) \
632 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_GPB_dyn_cmp, key_type, value_type, 1 ) \
633 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_GPT_dyn_cmp, key_type, value_type, 0 ) \
634 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_HP_dyn_cmp_stat, key_type, value_type, 1 ) \
635 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_DHP_dyn_cmp_stat, key_type, value_type, 0 ) \
636 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_GPI_dyn_cmp_stat, key_type, value_type, 1 ) \
637 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_GPB_dyn_cmp_stat, key_type, value_type, 0 ) \
638 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_GPT_dyn_cmp_stat, key_type, value_type, 1 ) \
639 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_HP_dyn_cmp_seqcst, key_type, value_type, 2 ) \
640 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_DHP_dyn_cmp_seqcst, key_type, value_type, 2 ) \
641 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_GPI_dyn_cmp_seqcst, key_type, value_type, 2 ) \
642 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_GPB_dyn_cmp_seqcst, key_type, value_type, 2 ) \
643 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_GPT_dyn_cmp_seqcst, key_type, value_type, 2 ) \
644 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_HP_st_cmp, key_type, value_type, 1 ) \
645 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_DHP_st_cmp, key_type, value_type, 0 ) \
646 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_GPI_st_cmp, key_type, value_type, 1 ) \
647 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_GPB_st_cmp, key_type, value_type, 0 ) \
648 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_GPT_st_cmp, key_type, value_type, 1 ) \
649 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_HP_dyn_less, key_type, value_type, 0 ) \
650 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_DHP_dyn_less, key_type, value_type, 1 ) \
651 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_GPI_dyn_less, key_type, value_type, 0 ) \
652 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_GPB_dyn_less, key_type, value_type, 1 ) \
653 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_GPT_dyn_less, key_type, value_type, 0 ) \
654 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_HP_st_less, key_type, value_type, 1 ) \
655 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_DHP_st_less, key_type, value_type, 0 ) \
656 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_GPI_st_less, key_type, value_type, 1 ) \
657 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_GPB_st_less, key_type, value_type, 0 ) \
658 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_GPT_st_less, key_type, value_type, 1 ) \
659 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_HP_st_less_stat, key_type, value_type, 0 ) \
660 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_DHP_st_less_stat, key_type, value_type, 1 ) \
661 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_GPI_st_less_stat, key_type, value_type, 0 ) \
662 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_GPB_st_less_stat, key_type, value_type, 1 ) \
663 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Michael_RCU_GPT_st_less_stat, key_type, value_type, 0 ) \
664 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_HP_dyn_cmp, key_type, value_type, 0 ) \
665 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_DHP_dyn_cmp, key_type, value_type, 1 ) \
666 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_GPI_dyn_cmp, key_type, value_type, 0 ) \
667 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_GPB_dyn_cmp, key_type, value_type, 1 ) \
668 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_GPT_dyn_cmp, key_type, value_type, 0 ) \
669 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_HP_dyn_cmp_stat, key_type, value_type, 1 ) \
670 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_DHP_dyn_cmp_stat, key_type, value_type, 0 ) \
671 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_GPI_dyn_cmp_stat, key_type, value_type, 1 ) \
672 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_GPB_dyn_cmp_stat, key_type, value_type, 0 ) \
673 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_GPT_dyn_cmp_stat, key_type, value_type, 1 ) \
674 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_HP_st_cmp, key_type, value_type, 0 ) \
675 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_DHP_st_cmp, key_type, value_type, 1 ) \
676 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_GPI_st_cmp, key_type, value_type, 0 ) \
677 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_GPB_st_cmp, key_type, value_type, 1 ) \
678 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_GPT_st_cmp, key_type, value_type, 0 ) \
679 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_HP_dyn_less, key_type, value_type, 1 ) \
680 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_DHP_dyn_less, key_type, value_type, 0 ) \
681 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_GPI_dyn_less, key_type, value_type, 1 ) \
682 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_GPB_dyn_less, key_type, value_type, 0 ) \
683 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_GPT_dyn_less, key_type, value_type, 1 ) \
684 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_HP_st_less, key_type, value_type, 0 ) \
685 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_DHP_st_less, key_type, value_type, 1 ) \
686 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_GPI_st_less, key_type, value_type, 0 ) \
687 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_GPB_st_less, key_type, value_type, 1 ) \
688 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_GPT_st_less, key_type, value_type, 0 ) \
689 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_HP_st_less_stat, key_type, value_type, 1 ) \
690 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_DHP_st_less_stat, key_type, value_type, 0 ) \
691 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_GPI_st_less_stat, key_type, value_type, 1 ) \
692 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_GPB_st_less_stat, key_type, value_type, 0 ) \
693 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Lazy_RCU_GPT_st_less_stat, key_type, value_type, 1 ) \
694 CDSSTRESS_SplitListSet_SHRCU( fixture, test_case, key_type, value_type )
696 #define CDSSTRESS_SplitListIterableSet( fixture, test_case, key_type, value_type ) \
697 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_HP_dyn_cmp, key_type, value_type, 0 ) \
698 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_DHP_dyn_cmp, key_type, value_type, 1 ) \
699 /*CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_RCU_GPI_dyn_cmp, key_type, value_type, 0 )*/ \
700 /*CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_RCU_GPB_dyn_cmp, key_type, value_type, 1 )*/ \
701 /*CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_RCU_GPT_dyn_cmp, key_type, value_type, 0 )*/ \
702 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_HP_dyn_cmp_stat, key_type, value_type, 1 ) \
703 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_DHP_dyn_cmp_stat, key_type, value_type, 0 ) \
704 /*CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_RCU_GPI_dyn_cmp_stat, key_type, value_type, 1 )*/ \
705 /*CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_RCU_GPB_dyn_cmp_stat, key_type, value_type, 0 )*/ \
706 /*CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_RCU_GPT_dyn_cmp_stat, key_type, value_type, 1 )*/ \
707 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_HP_dyn_cmp_seqcst, key_type, value_type, 2 ) \
708 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_DHP_dyn_cmp_seqcst, key_type, value_type, 2 ) \
709 /*CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_RCU_GPI_dyn_cmp_seqcst, key_type, value_type, 2 )*/ \
710 /*CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_RCU_GPB_dyn_cmp_seqcst, key_type, value_type, 2 )*/ \
711 /*CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_RCU_GPT_dyn_cmp_seqcst, key_type, value_type, 2 )*/ \
712 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_HP_st_cmp, key_type, value_type, 1 ) \
713 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_DHP_st_cmp, key_type, value_type, 0 ) \
714 /*CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_RCU_GPI_st_cmp, key_type, value_type, 1 )*/ \
715 /*CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_RCU_GPB_st_cmp, key_type, value_type, 0 )*/ \
716 /*CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_RCU_GPT_st_cmp, key_type, value_type, 1 )*/ \
717 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_HP_dyn_less, key_type, value_type, 0 ) \
718 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_DHP_dyn_less, key_type, value_type, 1 ) \
719 /*CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_RCU_GPI_dyn_less, key_type, value_type, 0 )*/ \
720 /*CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_RCU_GPB_dyn_less, key_type, value_type, 1 )*/ \
721 /*CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_RCU_GPT_dyn_less, key_type, value_type, 0 )*/ \
722 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_HP_st_less, key_type, value_type, 1 ) \
723 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_DHP_st_less, key_type, value_type, 0 ) \
724 /*CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_RCU_GPI_st_less, key_type, value_type, 1 )*/ \
725 /*CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_RCU_GPB_st_less, key_type, value_type, 0 )*/ \
726 /*CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_RCU_GPT_st_less, key_type, value_type, 1 )*/ \
727 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_HP_st_less_stat, key_type, value_type, 0 ) \
728 CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_DHP_st_less_stat, key_type, value_type, 1 ) \
729 /*CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_RCU_GPI_st_less_stat, key_type, value_type, 0 )*/ \
730 /*CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_RCU_GPB_st_less_stat, key_type, value_type, 1 )*/ \
731 /*CDSSTRESS_SplitListSet_case( fixture, test_case, SplitList_Iterable_RCU_GPT_st_less_stat, key_type, value_type, 0 )*/ \
732 CDSSTRESS_SplitListIterableSet_SHRCU( fixture, test_case, key_type, value_type )
734 #endif // #ifndef CDSUNIT_SET_TYPE_SPLIT_LIST_H