2 This file is a part of libcds - Concurrent Data Structures library
4 (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2017
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_MAP_TYPE_SPLIT_LIST_H
32 #define CDSUNIT_MAP_TYPE_SPLIT_LIST_H
36 #include <cds/container/michael_kvlist_hp.h>
37 #include <cds/container/michael_kvlist_dhp.h>
38 #include <cds/container/michael_kvlist_rcu.h>
39 #include <cds/container/michael_kvlist_nogc.h>
41 #include <cds/container/lazy_kvlist_hp.h>
42 #include <cds/container/lazy_kvlist_dhp.h>
43 #include <cds/container/lazy_kvlist_rcu.h>
44 #include <cds/container/lazy_kvlist_nogc.h>
46 #include <cds/container/iterable_kvlist_hp.h>
47 #include <cds/container/iterable_kvlist_dhp.h>
49 #include <cds/container/split_list_map.h>
50 #include <cds/container/split_list_map_rcu.h>
51 #include <cds/container/split_list_map_nogc.h>
53 #include <cds_test/stat_splitlist_out.h>
54 #include <cds_test/stat_michael_list_out.h>
55 #include <cds_test/stat_lazy_list_out.h>
56 #include <cds_test/stat_iterable_list_out.h>
60 template <class GC, typename Key, typename T, typename Traits = cc::split_list::traits >
61 class SplitListMap : public cc::SplitListMap< GC, Key, T, Traits >
63 typedef cc::SplitListMap< GC, Key, T, Traits > base_class;
65 template <typename Config>
66 SplitListMap( Config const& cfg)
67 : base_class( cfg.s_nMapSize, cfg.s_nLoadFactor )
70 template <typename Iterator>
71 typename std::enable_if< std::is_same< Iterator, typename base_class::iterator>::value, Iterator>::type
74 return base_class::begin();
77 template <typename Iterator>
78 typename std::enable_if< std::is_same< Iterator, typename base_class::iterator>::value, Iterator>::type
81 return base_class::end();
85 static CDS_CONSTEXPR bool const c_bExtractSupported = true;
86 static CDS_CONSTEXPR bool const c_bLoadFactorDepended = true;
87 static CDS_CONSTEXPR bool const c_bEraseExactKey = false;
90 template <typename Key, typename T, typename Traits >
91 class SplitListMap< cds::gc::nogc, Key, T, Traits> : public cc::SplitListMap< cds::gc::nogc, Key, T, Traits >
93 typedef cc::SplitListMap< cds::gc::nogc, Key, T, Traits > base_class;
95 template <typename Config>
96 SplitListMap( Config const& cfg)
97 : base_class( cfg.s_nMapSize, cfg.s_nLoadFactor )
100 template <typename K>
101 bool insert( K const& key )
103 return base_class::insert( key ) != base_class::end();
106 template <typename K, typename V>
107 bool insert( K const& key, V const& val )
109 return base_class::insert( key, val ) != base_class::end();
112 template <typename K, typename Func>
113 bool insert_with( K const& key, Func func )
115 return base_class::insert_with( key, func ) != base_class::end();
118 template <typename K>
119 bool find( K const& key )
121 return base_class::find( key ) != base_class::end();
128 static CDS_CONSTEXPR bool const c_bExtractSupported = true;
129 static CDS_CONSTEXPR bool const c_bLoadFactorDepended = true;
132 struct tag_SplitListMap;
134 template <typename Key, typename Value>
135 struct map_type< tag_SplitListMap, Key, Value >: public map_type_base< Key, Value >
137 typedef map_type_base< Key, Value > base_class;
138 typedef typename base_class::key_compare compare;
139 typedef typename base_class::key_less less;
140 typedef typename base_class::equal_to equal_to;
141 typedef typename base_class::key_hash hash;
144 // ***************************************************************************
145 // SplitListMap based on MichaelList
146 struct traits_SplitList_Michael_dyn_cmp: public cc::split_list::make_traits<
147 cc::split_list::ordered_list<cc::michael_list_tag>
149 ,co::item_counter< cds::atomicity::cache_friendly_item_counter >
150 ,cc::split_list::ordered_list_traits<
151 typename cc::michael_list::make_traits<
152 co::compare< compare >
157 typedef SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_HP_dyn_cmp;
158 typedef SplitListMap< cds::gc::DHP, Key, Value, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_DHP_dyn_cmp;
159 typedef SplitListMap< cds::gc::nogc, Key, Value, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_NOGC_dyn_cmp;
160 typedef SplitListMap< rcu_gpi, Key, Value, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_RCU_GPI_dyn_cmp;
161 typedef SplitListMap< rcu_gpb, Key, Value, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_RCU_GPB_dyn_cmp;
162 typedef SplitListMap< rcu_gpt, Key, Value, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_RCU_GPT_dyn_cmp;
163 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
164 typedef SplitListMap< rcu_shb, Key, Value, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_RCU_SHB_dyn_cmp;
167 struct traits_SplitList_Michael_dyn_cmp_swar: public traits_SplitList_Michael_dyn_cmp
169 typedef cds::algo::bit_reversal::swar bit_reversal;
171 typedef SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Michael_dyn_cmp_swar > SplitList_Michael_HP_dyn_cmp_swar;
172 typedef SplitListMap< cds::gc::DHP, Key, Value, traits_SplitList_Michael_dyn_cmp_swar > SplitList_Michael_DHP_dyn_cmp_swar;
173 typedef SplitListMap< cds::gc::nogc, Key, Value, traits_SplitList_Michael_dyn_cmp_swar > SplitList_Michael_NOGC_dyn_cmp_swar;
174 typedef SplitListMap< rcu_gpi, Key, Value, traits_SplitList_Michael_dyn_cmp_swar > SplitList_Michael_RCU_GPI_dyn_cmp_swar;
175 typedef SplitListMap< rcu_gpb, Key, Value, traits_SplitList_Michael_dyn_cmp_swar > SplitList_Michael_RCU_GPB_dyn_cmp_swar;
176 typedef SplitListMap< rcu_gpt, Key, Value, traits_SplitList_Michael_dyn_cmp_swar > SplitList_Michael_RCU_GPT_dyn_cmp_swar;
177 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
178 typedef SplitListMap< rcu_shb, Key, Value, traits_SplitList_Michael_dyn_cmp_swar > SplitList_Michael_RCU_SHB_dyn_cmp_swar;
181 struct traits_SplitList_Michael_dyn_cmp_stat : public traits_SplitList_Michael_dyn_cmp
183 typedef cc::split_list::stat<> stat;
184 typedef typename cc::michael_list::make_traits<
185 co::compare< compare >
186 ,co::stat< cc::michael_list::stat<> >
187 >::type ordered_list_traits;
189 typedef SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_HP_dyn_cmp_stat;
190 typedef SplitListMap< cds::gc::DHP, Key, Value, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_DHP_dyn_cmp_stat;
191 typedef SplitListMap< cds::gc::nogc, Key, Value, traits_SplitList_Michael_dyn_cmp_stat> SplitList_Michael_NOGC_dyn_cmp_stat;
192 typedef SplitListMap< rcu_gpi, Key, Value, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_RCU_GPI_dyn_cmp_stat;
193 typedef SplitListMap< rcu_gpb, Key, Value, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_RCU_GPB_dyn_cmp_stat;
194 typedef SplitListMap< rcu_gpt, Key, Value, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_RCU_GPT_dyn_cmp_stat;
195 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
196 typedef SplitListMap< rcu_shb, Key, Value, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_RCU_SHB_dyn_cmp_stat;
199 struct traits_SplitList_Michael_dyn_cmp_seqcst: public cc::split_list::make_traits<
200 cc::split_list::ordered_list<cc::michael_list_tag>
202 , co::item_counter< cds::atomicity::cache_friendly_item_counter >
203 ,co::memory_model< co::v::sequential_consistent >
204 ,cc::split_list::ordered_list_traits<
205 typename cc::michael_list::make_traits<
206 co::compare< compare >
207 ,co::memory_model< co::v::sequential_consistent >
212 typedef SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_HP_dyn_cmp_seqcst;
213 typedef SplitListMap< cds::gc::DHP, Key, Value, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_DHP_dyn_cmp_seqcst;
214 typedef SplitListMap< cds::gc::nogc, Key, Value, traits_SplitList_Michael_dyn_cmp_seqcst> SplitList_Michael_NOGC_dyn_cmp_seqcst;
215 typedef SplitListMap< rcu_gpi, Key, Value, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_RCU_GPI_dyn_cmp_seqcst;
216 typedef SplitListMap< rcu_gpb, Key, Value, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_RCU_GPB_dyn_cmp_seqcst;
217 typedef SplitListMap< rcu_gpt, Key, Value, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_RCU_GPT_dyn_cmp_seqcst;
218 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
219 typedef SplitListMap< rcu_shb, Key, Value, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_RCU_SHB_dyn_cmp_seqcst;
222 struct traits_SplitList_Michael_st_cmp: public cc::split_list::make_traits<
223 cc::split_list::ordered_list<cc::michael_list_tag>
224 ,cc::split_list::dynamic_bucket_table< false >
226 , co::item_counter< cds::atomicity::cache_friendly_item_counter >
227 ,cc::split_list::ordered_list_traits<
228 typename cc::michael_list::make_traits<
229 co::compare< compare >
234 typedef SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Michael_st_cmp > SplitList_Michael_HP_st_cmp;
235 typedef SplitListMap< cds::gc::DHP, Key, Value, traits_SplitList_Michael_st_cmp > SplitList_Michael_DHP_st_cmp;
236 typedef SplitListMap< cds::gc::nogc, Key, Value, traits_SplitList_Michael_st_cmp> SplitList_Michael_NOGC_st_cmp;
237 typedef SplitListMap< rcu_gpi, Key, Value, traits_SplitList_Michael_st_cmp > SplitList_Michael_RCU_GPI_st_cmp;
238 typedef SplitListMap< rcu_gpb, Key, Value, traits_SplitList_Michael_st_cmp > SplitList_Michael_RCU_GPB_st_cmp;
239 typedef SplitListMap< rcu_gpt, Key, Value, traits_SplitList_Michael_st_cmp > SplitList_Michael_RCU_GPT_st_cmp;
240 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
241 typedef SplitListMap< rcu_shb, Key, Value, traits_SplitList_Michael_st_cmp > SplitList_Michael_RCU_SHB_st_cmp;
245 struct traits_SplitList_Michael_dyn_less: public cc::split_list::make_traits<
246 cc::split_list::ordered_list<cc::michael_list_tag>
248 , co::item_counter< cds::atomicity::cache_friendly_item_counter >
249 ,cc::split_list::ordered_list_traits<
250 typename cc::michael_list::make_traits<
256 typedef SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Michael_dyn_less > SplitList_Michael_HP_dyn_less;
257 typedef SplitListMap< cds::gc::DHP, Key, Value, traits_SplitList_Michael_dyn_less > SplitList_Michael_DHP_dyn_less;
258 typedef SplitListMap< cds::gc::nogc, Key, Value, traits_SplitList_Michael_dyn_less> SplitList_Michael_NOGC_dyn_less;
259 typedef SplitListMap< rcu_gpi, Key, Value, traits_SplitList_Michael_dyn_less > SplitList_Michael_RCU_GPI_dyn_less;
260 typedef SplitListMap< rcu_gpb, Key, Value, traits_SplitList_Michael_dyn_less > SplitList_Michael_RCU_GPB_dyn_less;
261 typedef SplitListMap< rcu_gpt, Key, Value, traits_SplitList_Michael_dyn_less > SplitList_Michael_RCU_GPT_dyn_less;
262 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
263 typedef SplitListMap< rcu_shb, Key, Value, traits_SplitList_Michael_dyn_less > SplitList_Michael_RCU_SHB_dyn_less;
267 struct traits_SplitList_Michael_st_less: public cc::split_list::make_traits<
268 cc::split_list::ordered_list<cc::michael_list_tag>
269 ,cc::split_list::dynamic_bucket_table< false >
271 , co::item_counter< cds::atomicity::cache_friendly_item_counter >
272 ,cc::split_list::ordered_list_traits<
273 typename cc::michael_list::make_traits<
279 typedef SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Michael_st_less > SplitList_Michael_HP_st_less;
280 typedef SplitListMap< cds::gc::DHP, Key, Value, traits_SplitList_Michael_st_less > SplitList_Michael_DHP_st_less;
281 typedef SplitListMap< cds::gc::nogc, Key, Value, traits_SplitList_Michael_st_less> SplitList_Michael_NOGC_st_less;
282 typedef SplitListMap< rcu_gpi, Key, Value, traits_SplitList_Michael_st_less > SplitList_Michael_RCU_GPI_st_less;
283 typedef SplitListMap< rcu_gpb, Key, Value, traits_SplitList_Michael_st_less > SplitList_Michael_RCU_GPB_st_less;
284 typedef SplitListMap< rcu_gpt, Key, Value, traits_SplitList_Michael_st_less > SplitList_Michael_RCU_GPT_st_less;
285 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
286 typedef SplitListMap< rcu_shb, Key, Value, traits_SplitList_Michael_st_less > SplitList_Michael_RCU_SHB_st_less;
289 struct traits_SplitList_Michael_st_less_stat : traits_SplitList_Michael_st_less
291 typedef cc::split_list::stat<> stat;
292 typedef typename cc::michael_list::make_traits<
294 , co::stat< cc::michael_list::stat<> >
295 >::type ordered_list_traits;
298 typedef SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Michael_st_less_stat > SplitList_Michael_HP_st_less_stat;
299 typedef SplitListMap< cds::gc::DHP, Key, Value, traits_SplitList_Michael_st_less_stat > SplitList_Michael_DHP_st_less_stat;
300 typedef SplitListMap< cds::gc::nogc, Key, Value, traits_SplitList_Michael_st_less_stat> SplitList_Michael_NOGC_st_less_stat;
301 typedef SplitListMap< rcu_gpi, Key, Value, traits_SplitList_Michael_st_less_stat > SplitList_Michael_RCU_GPI_st_less_stat;
302 typedef SplitListMap< rcu_gpb, Key, Value, traits_SplitList_Michael_st_less_stat > SplitList_Michael_RCU_GPB_st_less_stat;
303 typedef SplitListMap< rcu_gpt, Key, Value, traits_SplitList_Michael_st_less_stat > SplitList_Michael_RCU_GPT_st_less_stat;
304 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
305 typedef SplitListMap< rcu_shb, Key, Value, traits_SplitList_Michael_st_less_stat > SplitList_Michael_RCU_SHB_st_less_stat;
309 // ***************************************************************************
310 // SplitListMap based on LazyKVList
312 struct SplitList_Lazy_dyn_cmp :
313 public cc::split_list::make_traits<
314 cc::split_list::ordered_list<cc::lazy_list_tag>
316 , co::item_counter< cds::atomicity::cache_friendly_item_counter >
317 ,cc::split_list::ordered_list_traits<
318 typename cc::lazy_list::make_traits<
319 co::compare< compare >
324 typedef SplitListMap< cds::gc::HP, Key, Value, SplitList_Lazy_dyn_cmp > SplitList_Lazy_HP_dyn_cmp;
325 typedef SplitListMap< cds::gc::DHP, Key, Value, SplitList_Lazy_dyn_cmp > SplitList_Lazy_DHP_dyn_cmp;
326 typedef SplitListMap< cds::gc::nogc, Key, Value, SplitList_Lazy_dyn_cmp> SplitList_Lazy_NOGC_dyn_cmp;
327 typedef SplitListMap< rcu_gpi, Key, Value, SplitList_Lazy_dyn_cmp > SplitList_Lazy_RCU_GPI_dyn_cmp;
328 typedef SplitListMap< rcu_gpb, Key, Value, SplitList_Lazy_dyn_cmp > SplitList_Lazy_RCU_GPB_dyn_cmp;
329 typedef SplitListMap< rcu_gpt, Key, Value, SplitList_Lazy_dyn_cmp > SplitList_Lazy_RCU_GPT_dyn_cmp;
330 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
331 typedef SplitListMap< rcu_shb, Key, Value, SplitList_Lazy_dyn_cmp > SplitList_Lazy_RCU_SHB_dyn_cmp;
334 struct SplitList_Lazy_dyn_cmp_stat : public SplitList_Lazy_dyn_cmp
336 typedef cc::split_list::stat<> stat;
337 typedef typename cc::lazy_list::make_traits<
338 co::compare< compare >
339 , co::stat< cc::lazy_list::stat<>>
340 >::type ordered_list_traits;
342 typedef SplitListMap< cds::gc::HP, Key, Value, SplitList_Lazy_dyn_cmp_stat > SplitList_Lazy_HP_dyn_cmp_stat;
343 typedef SplitListMap< cds::gc::DHP, Key, Value, SplitList_Lazy_dyn_cmp_stat > SplitList_Lazy_DHP_dyn_cmp_stat;
344 typedef SplitListMap< cds::gc::nogc, Key, Value, SplitList_Lazy_dyn_cmp_stat> SplitList_Lazy_NOGC_dyn_cmp_stat;
345 typedef SplitListMap< rcu_gpi, Key, Value, SplitList_Lazy_dyn_cmp_stat > SplitList_Lazy_RCU_GPI_dyn_cmp_stat;
346 typedef SplitListMap< rcu_gpb, Key, Value, SplitList_Lazy_dyn_cmp_stat > SplitList_Lazy_RCU_GPB_dyn_cmp_stat;
347 typedef SplitListMap< rcu_gpt, Key, Value, SplitList_Lazy_dyn_cmp_stat > SplitList_Lazy_RCU_GPT_dyn_cmp_stat;
348 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
349 typedef SplitListMap< rcu_shb, Key, Value, SplitList_Lazy_dyn_cmp_stat > SplitList_Lazy_RCU_SHB_dyn_cmp_stat;
352 struct SplitList_Lazy_dyn_cmp_seqcst :
353 public cc::split_list::make_traits<
354 cc::split_list::ordered_list<cc::lazy_list_tag>
356 , co::item_counter< cds::atomicity::cache_friendly_item_counter >
357 ,co::memory_model< co::v::sequential_consistent >
358 ,cc::split_list::ordered_list_traits<
359 typename cc::lazy_list::make_traits<
360 co::compare< compare >
361 ,co::memory_model< co::v::sequential_consistent >
366 typedef SplitListMap< cds::gc::HP, Key, Value, SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_HP_dyn_cmp_seqcst;
367 typedef SplitListMap< cds::gc::DHP, Key, Value, SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_DHP_dyn_cmp_seqcst;
368 typedef SplitListMap< cds::gc::nogc, Key, Value, SplitList_Lazy_dyn_cmp_seqcst> SplitList_Lazy_NOGC_dyn_cmp_seqcst;
369 typedef SplitListMap< rcu_gpi, Key, Value, SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_RCU_GPI_dyn_cmp_seqcst;
370 typedef SplitListMap< rcu_gpb, Key, Value, SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_RCU_GPB_dyn_cmp_seqcst;
371 typedef SplitListMap< rcu_gpt, Key, Value, SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_RCU_GPT_dyn_cmp_seqcst;
372 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
373 typedef SplitListMap< rcu_shb, Key, Value, SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_RCU_SHB_dyn_cmp_seqcst;
376 struct SplitList_Lazy_st_cmp :
377 public cc::split_list::make_traits<
378 cc::split_list::ordered_list<cc::lazy_list_tag>
379 ,cc::split_list::dynamic_bucket_table< false >
381 , co::item_counter< cds::atomicity::cache_friendly_item_counter >
382 ,cc::split_list::ordered_list_traits<
383 typename cc::lazy_list::make_traits<
384 co::compare< compare >
389 typedef SplitListMap< cds::gc::HP, Key, Value, SplitList_Lazy_st_cmp > SplitList_Lazy_HP_st_cmp;
390 typedef SplitListMap< cds::gc::DHP, Key, Value, SplitList_Lazy_st_cmp > SplitList_Lazy_DHP_st_cmp;
391 typedef SplitListMap< cds::gc::nogc, Key, Value, SplitList_Lazy_st_cmp> SplitList_Lazy_NOGC_st_cmp;
392 typedef SplitListMap< rcu_gpi, Key, Value, SplitList_Lazy_st_cmp > SplitList_Lazy_RCU_GPI_st_cmp;
393 typedef SplitListMap< rcu_gpb, Key, Value, SplitList_Lazy_st_cmp > SplitList_Lazy_RCU_GPB_st_cmp;
394 typedef SplitListMap< rcu_gpt, Key, Value, SplitList_Lazy_st_cmp > SplitList_Lazy_RCU_GPT_st_cmp;
395 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
396 typedef SplitListMap< rcu_shb, Key, Value, SplitList_Lazy_st_cmp > SplitList_Lazy_RCU_SHB_st_cmp;
400 struct SplitList_Lazy_dyn_less :
401 public cc::split_list::make_traits<
402 cc::split_list::ordered_list<cc::lazy_list_tag>
404 , co::item_counter< cds::atomicity::cache_friendly_item_counter >
405 ,cc::split_list::ordered_list_traits<
406 typename cc::lazy_list::make_traits<
412 typedef SplitListMap< cds::gc::HP, Key, Value, SplitList_Lazy_dyn_less > SplitList_Lazy_HP_dyn_less;
413 typedef SplitListMap< cds::gc::DHP, Key, Value, SplitList_Lazy_dyn_less > SplitList_Lazy_DHP_dyn_less;
414 typedef SplitListMap< cds::gc::nogc, Key, Value, SplitList_Lazy_dyn_less> SplitList_Lazy_NOGC_dyn_less;
415 typedef SplitListMap< rcu_gpi, Key, Value, SplitList_Lazy_dyn_less > SplitList_Lazy_RCU_GPI_dyn_less;
416 typedef SplitListMap< rcu_gpb, Key, Value, SplitList_Lazy_dyn_less > SplitList_Lazy_RCU_GPB_dyn_less;
417 typedef SplitListMap< rcu_gpt, Key, Value, SplitList_Lazy_dyn_less > SplitList_Lazy_RCU_GPT_dyn_less;
418 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
419 typedef SplitListMap< rcu_shb, Key, Value, SplitList_Lazy_dyn_less > SplitList_Lazy_RCU_SHB_dyn_less;
422 struct SplitList_Lazy_st_less :
423 public cc::split_list::make_traits<
424 cc::split_list::ordered_list<cc::lazy_list_tag>
425 ,cc::split_list::dynamic_bucket_table< false >
427 , co::item_counter< cds::atomicity::cache_friendly_item_counter >
428 ,cc::split_list::ordered_list_traits<
429 typename cc::lazy_list::make_traits<
435 typedef SplitListMap< cds::gc::HP, Key, Value, SplitList_Lazy_st_less > SplitList_Lazy_HP_st_less;
436 typedef SplitListMap< cds::gc::DHP, Key, Value, SplitList_Lazy_st_less > SplitList_Lazy_DHP_st_less;
437 typedef SplitListMap< cds::gc::nogc, Key, Value, SplitList_Lazy_st_less> SplitList_Lazy_NOGC_st_less;
438 typedef SplitListMap< rcu_gpi, Key, Value, SplitList_Lazy_st_less > SplitList_Lazy_RCU_GPI_st_less;
439 typedef SplitListMap< rcu_gpb, Key, Value, SplitList_Lazy_st_less > SplitList_Lazy_RCU_GPB_st_less;
440 typedef SplitListMap< rcu_gpt, Key, Value, SplitList_Lazy_st_less > SplitList_Lazy_RCU_GPT_st_less;
441 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
442 typedef SplitListMap< rcu_shb, Key, Value, SplitList_Lazy_st_less > SplitList_Lazy_RCU_SHB_st_less;
445 struct SplitList_Lazy_st_less_stat : public SplitList_Lazy_st_less
447 typedef cc::split_list::stat<> stat;
448 typedef typename cc::lazy_list::make_traits<
450 , co::stat< cc::lazy_list::stat<>>
451 >::type ordered_list_traits;
453 typedef SplitListMap< cds::gc::HP, Key, Value, SplitList_Lazy_st_less_stat > SplitList_Lazy_HP_st_less_stat;
454 typedef SplitListMap< cds::gc::DHP, Key, Value, SplitList_Lazy_st_less_stat > SplitList_Lazy_DHP_st_less_stat;
455 typedef SplitListMap< cds::gc::nogc, Key, Value, SplitList_Lazy_st_less_stat> SplitList_Lazy_NOGC_st_less_stat;
456 typedef SplitListMap< rcu_gpi, Key, Value, SplitList_Lazy_st_less_stat > SplitList_Lazy_RCU_GPI_st_less_stat;
457 typedef SplitListMap< rcu_gpb, Key, Value, SplitList_Lazy_st_less_stat > SplitList_Lazy_RCU_GPB_st_less_stat;
458 typedef SplitListMap< rcu_gpt, Key, Value, SplitList_Lazy_st_less_stat > SplitList_Lazy_RCU_GPT_st_less_stat;
459 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
460 typedef SplitListMap< rcu_shb, Key, Value, SplitList_Lazy_st_less_stat > SplitList_Lazy_RCU_SHB_st_less_stat;
464 // ***************************************************************************
465 // SplitListMap based on IterableList
466 struct traits_SplitList_Iterable_dyn_cmp: public cc::split_list::make_traits<
467 cc::split_list::ordered_list<cc::iterable_list_tag>
469 , co::item_counter< cds::atomicity::cache_friendly_item_counter >
470 ,cc::split_list::ordered_list_traits<
471 typename cc::iterable_list::make_traits<
472 co::compare< compare >
477 typedef SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Iterable_dyn_cmp > SplitList_Iterable_HP_dyn_cmp;
478 typedef SplitListMap< cds::gc::DHP, Key, Value, traits_SplitList_Iterable_dyn_cmp > SplitList_Iterable_DHP_dyn_cmp;
480 struct traits_SplitList_Iterable_dyn_cmp_stat : public traits_SplitList_Iterable_dyn_cmp
482 typedef cc::split_list::stat<> stat;
483 typedef typename cc::iterable_list::make_traits<
484 co::compare< compare >
485 , co::stat< cc::iterable_list::stat<>>
486 >::type ordered_list_traits;
488 typedef SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Iterable_dyn_cmp_stat > SplitList_Iterable_HP_dyn_cmp_stat;
489 typedef SplitListMap< cds::gc::DHP, Key, Value, traits_SplitList_Iterable_dyn_cmp_stat > SplitList_Iterable_DHP_dyn_cmp_stat;
491 struct traits_SplitList_Iterable_dyn_cmp_seqcst: public cc::split_list::make_traits<
492 cc::split_list::ordered_list<cc::iterable_list_tag>
494 , co::item_counter< cds::atomicity::cache_friendly_item_counter >
495 ,co::memory_model< co::v::sequential_consistent >
496 ,cc::split_list::ordered_list_traits<
497 typename cc::iterable_list::make_traits<
498 co::compare< compare >
499 ,co::memory_model< co::v::sequential_consistent >
504 typedef SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Iterable_dyn_cmp_seqcst > SplitList_Iterable_HP_dyn_cmp_seqcst;
505 typedef SplitListMap< cds::gc::DHP, Key, Value, traits_SplitList_Iterable_dyn_cmp_seqcst > SplitList_Iterable_DHP_dyn_cmp_seqcst;
507 struct traits_SplitList_Iterable_st_cmp: 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 , co::item_counter< cds::atomicity::cache_friendly_item_counter >
512 ,cc::split_list::ordered_list_traits<
513 typename cc::iterable_list::make_traits<
514 co::compare< compare >
519 typedef SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Iterable_st_cmp > SplitList_Iterable_HP_st_cmp;
520 typedef SplitListMap< cds::gc::DHP, Key, Value, traits_SplitList_Iterable_st_cmp > SplitList_Iterable_DHP_st_cmp;
523 struct traits_SplitList_Iterable_dyn_less: public cc::split_list::make_traits<
524 cc::split_list::ordered_list<cc::iterable_list_tag>
526 , co::item_counter< cds::atomicity::cache_friendly_item_counter >
527 ,cc::split_list::ordered_list_traits<
528 typename cc::iterable_list::make_traits<
534 typedef SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Iterable_dyn_less > SplitList_Iterable_HP_dyn_less;
535 typedef SplitListMap< cds::gc::DHP, Key, Value, traits_SplitList_Iterable_dyn_less > SplitList_Iterable_DHP_dyn_less;
537 struct traits_SplitList_Iterable_st_less: public cc::split_list::make_traits<
538 cc::split_list::ordered_list<cc::iterable_list_tag>
539 ,cc::split_list::dynamic_bucket_table< false >
541 , co::item_counter< cds::atomicity::cache_friendly_item_counter >
542 ,cc::split_list::ordered_list_traits<
543 typename cc::iterable_list::make_traits<
549 typedef SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Iterable_st_less > SplitList_Iterable_HP_st_less;
550 typedef SplitListMap< cds::gc::DHP, Key, Value, traits_SplitList_Iterable_st_less > SplitList_Iterable_DHP_st_less;
552 struct traits_SplitList_Iterable_st_less_stat : traits_SplitList_Iterable_st_less
554 typedef cc::split_list::stat<> stat;
555 typedef typename cc::iterable_list::make_traits<
557 , co::stat< cc::iterable_list::stat<>>
558 >::type ordered_list_traits;
560 typedef SplitListMap< cds::gc::HP, Key, Value, traits_SplitList_Iterable_st_less_stat > SplitList_Iterable_HP_st_less_stat;
561 typedef SplitListMap< cds::gc::DHP, Key, Value, traits_SplitList_Iterable_st_less_stat > SplitList_Iterable_DHP_st_less_stat;
564 template <typename GC, typename K, typename T, typename Traits >
565 static inline void print_stat( cds_test::property_stream& o, SplitListMap< GC, K, T, Traits > const& m )
568 << cds_test::stat_prefix( "list_stat" )
569 << m.list_statistics()
570 << cds_test::stat_prefix( "" );
575 #define CDSSTRESS_SplitListMap_case( fixture, test_case, splitlist_map_type, key_type, value_type ) \
576 TEST_P( fixture, splitlist_map_type ) \
578 typedef map::map_type< tag_SplitListMap, key_type, value_type >::splitlist_map_type map_type; \
579 test_case<map_type>(); \
582 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
584 #if defined(CDS_STRESS_TEST_LEVEL) && CDS_STRESS_TEST_LEVEL > 1
585 # define CDSSTRESS_SplitListMap_SHRCU_2( fixture, test_case, key_type, value_type ) \
588 # define CDSSTRESS_SplitListMap_SHRCU_2( fixture, test_case, key_type, value_type )
591 #if defined(CDS_STRESS_TEST_LEVEL) && CDS_STRESS_TEST_LEVEL == 1
592 # define CDSSTRESS_SplitListMap_SHRCU_1( fixture, test_case, key_type, value_type ) \
593 CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_RCU_SHT_dyn_cmp, key_type, value_type ) \
594 CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_RCU_SHB_st_cmp, key_type, value_type ) \
595 CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_RCU_SHT_st_cmp, key_type, value_type ) \
596 CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_RCU_SHB_dyn_less, key_type, value_type ) \
597 CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_RCU_SHT_st_less, key_type, value_type ) \
598 CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_RCU_SHT_dyn_cmp, key_type, value_type ) \
599 CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_RCU_SHB_st_cmp, key_type, value_type ) \
600 CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_RCU_SHT_st_cmp, key_type, value_type ) \
601 CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_RCU_SHB_dyn_less, key_type, value_type ) \
602 CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_RCU_SHT_st_less, key_type, value_type ) \
605 # define CDSSTRESS_SplitListMap_SHRCU_1( fixture, test_case, key_type, value_type )
609 # define CDSSTRESS_SplitListMap_SHRCU( fixture, test_case, key_type, value_type ) \
610 CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_RCU_SHB_dyn_cmp, key_type, value_type ) \
611 CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_RCU_SHT_dyn_less, key_type, value_type ) \
612 CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_RCU_SHB_st_less, key_type, value_type ) \
613 CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_RCU_SHB_dyn_cmp, key_type, value_type ) \
614 CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_RCU_SHT_dyn_less, key_type, value_type ) \
615 CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_RCU_SHB_st_less, key_type, value_type ) \
616 CDSSTRESS_SplitListMap_SHRCU_1( fixture, test_case, key_type, value_type ) \
617 CDSSTRESS_SplitListMap_SHRCU_2( fixture, test_case, key_type, value_type ) \
620 # define CDSSTRESS_SplitListMap_SHRCU( fixture, test_case, key_type, value_type )
623 #if defined(CDS_STRESS_TEST_LEVEL) && CDS_STRESS_TEST_LEVEL > 1
624 # define CDSSTRESS_SplitListMap_HP_2( fixture, test_case, key_type, value_type ) \
626 # define CDSSTRESS_SplitListMap_RCU_2( fixture, test_case, key_type, value_type ) \
628 # define CDSSTRESS_SplitListMap_2( fixture, test_case, key_type, value_type ) \
629 CDSSTRESS_SplitListMap_HP_2( fixture, test_case, key_type, value_type ) \
630 CDSSTRESS_SplitListMap_RCU_2( fixture, test_case, key_type, value_type ) \
634 # define CDSSTRESS_SplitListMap_HP_2( fixture, test_case, key_type, value_type )
635 # define CDSSTRESS_SplitListMap_RCU_2( fixture, test_case, key_type, value_type )
636 # define CDSSTRESS_SplitListMap_2( fixture, test_case, key_type, value_type )
639 #if defined(CDS_STRESS_TEST_LEVEL) && CDS_STRESS_TEST_LEVEL == 1
640 # define CDSSTRESS_SplitListMap_HP_1( fixture, test_case, key_type, value_type ) \
641 CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_DHP_dyn_cmp, key_type, value_type ) \
642 CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_DHP_dyn_cmp_swar, key_type, value_type ) \
643 CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_HP_st_cmp, key_type, value_type ) \
644 CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_DHP_dyn_less, key_type, value_type ) \
645 CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_HP_st_less, key_type, value_type ) \
646 CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_DHP_dyn_cmp, key_type, value_type ) \
647 CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_HP_st_cmp, key_type, value_type ) \
648 CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_DHP_dyn_less, key_type, value_type ) \
649 CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_HP_st_less, key_type, value_type ) \
651 # define CDSSTRESS_SplitListMap_RCU_1( fixture, test_case, key_type, value_type ) \
652 CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_RCU_GPT_dyn_cmp, key_type, value_type ) \
653 CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_RCU_GPI_st_cmp, key_type, value_type ) \
654 CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_RCU_GPT_st_cmp, key_type, value_type ) \
655 CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_RCU_GPB_dyn_less, key_type, value_type ) \
656 CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_RCU_GPI_st_less, key_type, value_type ) \
657 CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_RCU_GPT_st_less, key_type, value_type ) \
658 CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_RCU_GPB_dyn_cmp, key_type, value_type ) \
659 CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_RCU_GPI_st_cmp, key_type, value_type ) \
660 CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_RCU_GPT_st_cmp, key_type, value_type ) \
661 CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_RCU_GPB_dyn_less, key_type, value_type ) \
662 CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_RCU_GPI_st_less, key_type, value_type ) \
663 CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_RCU_GPT_st_less, key_type, value_type ) \
664 CDSSTRESS_SplitListMap_SHRCU( fixture, test_case, key_type, value_type ) \
666 # define CDSSTRESS_SplitListMap_1( fixture, test_case, key_type, value_type ) \
667 CDSSTRESS_SplitListMap_HP_1( fixture, test_case, key_type, value_type ) \
668 CDSSTRESS_SplitListMap_RCU_1( fixture, test_case, key_type, value_type ) \
671 # define CDSSTRESS_SplitListMap_HP_1( fixture, test_case, key_type, value_type )
672 # define CDSSTRESS_SplitListMap_RCU_1( fixture, test_case, key_type, value_type )
673 # define CDSSTRESS_SplitListMap_1( fixture, test_case, key_type, value_type )
677 #define CDSSTRESS_SplitListMap_HP( fixture, test_case, key_type, value_type ) \
678 CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_HP_dyn_cmp, key_type, value_type ) \
679 CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_HP_dyn_cmp_swar, key_type, value_type ) \
680 CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_DHP_st_cmp, key_type, value_type ) \
681 CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_HP_dyn_less, key_type, value_type ) \
682 CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_DHP_st_less, key_type, value_type ) \
683 CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_HP_dyn_cmp, key_type, value_type ) \
684 CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_DHP_st_cmp, key_type, value_type ) \
685 CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_HP_dyn_less, key_type, value_type ) \
686 CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_DHP_st_less, key_type, value_type ) \
687 CDSSTRESS_SplitListMap_HP_1( fixture, test_case, key_type, value_type ) \
688 CDSSTRESS_SplitListMap_HP_2( fixture, test_case, key_type, value_type ) \
690 #define CDSSTRESS_SplitListMap_RCU( fixture, test_case, key_type, value_type ) \
691 CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_RCU_GPI_dyn_cmp, key_type, value_type ) \
692 CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_RCU_GPB_dyn_cmp, key_type, value_type ) \
693 CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_RCU_GPB_dyn_cmp_swar, key_type, value_type ) \
694 CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_RCU_GPB_st_cmp, key_type, value_type ) \
695 CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_RCU_GPI_dyn_less, key_type, value_type ) \
696 CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_RCU_GPT_dyn_less, key_type, value_type ) \
697 CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_RCU_GPB_st_less, key_type, value_type ) \
698 CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_RCU_GPI_dyn_cmp, key_type, value_type ) \
699 CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_RCU_GPT_dyn_cmp, key_type, value_type ) \
700 CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_RCU_GPB_st_cmp, key_type, value_type ) \
701 CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_RCU_GPI_dyn_less, key_type, value_type ) \
702 CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_RCU_GPT_dyn_less, key_type, value_type ) \
703 CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_RCU_GPB_st_less, key_type, value_type ) \
704 CDSSTRESS_SplitListMap_RCU_1( fixture, test_case, key_type, value_type ) \
705 CDSSTRESS_SplitListMap_RCU_2( fixture, test_case, key_type, value_type ) \
707 #define CDSSTRESS_SplitListMap( fixture, test_case, key_type, value_type ) \
708 CDSSTRESS_SplitListMap_HP( fixture, test_case, key_type, value_type ) \
709 CDSSTRESS_SplitListMap_RCU( fixture, test_case, key_type, value_type ) \
711 #if defined(CDS_STRESS_TEST_LEVEL) && CDS_STRESS_TEST_LEVEL > 0
712 # define CDSSTRESS_SplitListIterableMap_1( fixture, test_case, key_type, value_type ) \
713 CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Iterable_DHP_dyn_cmp, key_type, value_type ) \
714 CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Iterable_HP_st_cmp, key_type, value_type ) \
715 CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Iterable_DHP_dyn_less, key_type, value_type ) \
716 CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Iterable_HP_st_less, key_type, value_type ) \
719 # define CDSSTRESS_SplitListIterableMap_1( fixture, test_case, key_type, value_type )
723 #define CDSSTRESS_SplitListIterableMap( fixture, test_case, key_type, value_type ) \
724 CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Iterable_HP_dyn_cmp, key_type, value_type ) \
725 CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Iterable_DHP_st_cmp, key_type, value_type ) \
726 CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Iterable_HP_dyn_less, key_type, value_type ) \
727 CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Iterable_DHP_st_less, key_type, value_type ) \
728 CDSSTRESS_SplitListIterableMap_1( fixture, test_case, key_type, value_type ) \
731 #define CDSSTRESS_SplitListMap_nogc( fixture, test_case, key_type, value_type ) \
732 CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_NOGC_dyn_cmp, key_type, value_type ) \
733 CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_NOGC_st_cmp, key_type, value_type ) \
734 CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_NOGC_dyn_less, key_type, value_type ) \
735 CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Michael_NOGC_st_less, key_type, value_type ) \
736 CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_NOGC_dyn_cmp, key_type, value_type ) \
737 CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_NOGC_st_cmp, key_type, value_type ) \
738 CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_NOGC_dyn_less, key_type, value_type ) \
739 CDSSTRESS_SplitListMap_case( fixture, test_case, SplitList_Lazy_NOGC_st_less, key_type, value_type ) \
741 #endif // ifndef CDSUNIT_MAP_TYPE_SPLIT_LIST_H