Split up set2 unit test to reduce compiling time and memory
[libcds.git] / tests / unit / set2 / set_type_split_list.h
1 //$$CDS-header$$
2
3 #ifndef CDSUNIT_SET_TYPE_SPLIT_LIST_H
4 #define CDSUNIT_SET_TYPE_SPLIT_LIST_H
5
6 #include "set2/set_type.h"
7
8 #include <cds/container/michael_list_hp.h>
9 #include <cds/container/michael_list_dhp.h>
10 #include <cds/container/michael_list_rcu.h>
11 #include <cds/container/lazy_list_hp.h>
12 #include <cds/container/lazy_list_dhp.h>
13 #include <cds/container/lazy_list_rcu.h>
14
15 #include <cds/container/split_list_set.h>
16 #include <cds/container/split_list_set_rcu.h>
17
18 #include "print_split_list_stat.h"
19
20 namespace set2 {
21
22     template <typename Key, typename Val>
23     struct set_type< cc::split_list::implementation_tag, Key, Val >: public set_type_base< Key, Val >
24     {
25         typedef set_type_base< Key, Val > base_class;
26         using base_class::key_val;
27         using base_class::compare;
28         using base_class::less;
29         using base_class::hash;
30
31         // ***************************************************************************
32         // SplitListSet based on MichaelList
33
34         struct traits_SplitList_Michael_dyn_cmp :
35             public cc::split_list::make_traits<
36                 cc::split_list::ordered_list<cc::michael_list_tag>
37                 ,co::hash< hash >
38                 ,cc::split_list::ordered_list_traits<
39                     typename cc::michael_list::make_traits<
40                         co::compare< compare >
41                     >::type
42                 >
43             >::type
44         {};
45         typedef cc::SplitListSet< cds::gc::HP,  key_val, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_HP_dyn_cmp;
46         typedef cc::SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_DHP_dyn_cmp;
47         typedef cc::SplitListSet< rcu_gpi, key_val, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_RCU_GPI_dyn_cmp;
48         typedef cc::SplitListSet< rcu_gpb, key_val, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_RCU_GPB_dyn_cmp;
49         typedef cc::SplitListSet< rcu_gpt, key_val, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_RCU_GPT_dyn_cmp;
50 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
51         typedef cc::SplitListSet< rcu_shb, key_val, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_RCU_SHB_dyn_cmp;
52         typedef cc::SplitListSet< rcu_sht, key_val, traits_SplitList_Michael_dyn_cmp > SplitList_Michael_RCU_SHT_dyn_cmp;
53 #endif
54
55         struct traits_SplitList_Michael_dyn_cmp_stat :
56             public cc::split_list::make_traits<
57                 cc::split_list::ordered_list<cc::michael_list_tag>
58                 ,co::hash< hash >
59                 ,co::stat< cc::split_list::stat<> >
60                 ,cc::split_list::ordered_list_traits<
61                     typename cc::michael_list::make_traits<
62                         co::compare< compare >
63                     >::type
64                 >
65             >::type
66         {};
67         typedef cc::SplitListSet< cds::gc::HP, key_val, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_HP_dyn_cmp_stat;
68         typedef cc::SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_DHP_dyn_cmp_stat;
69         typedef cc::SplitListSet< rcu_gpi, key_val, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_RCU_GPI_dyn_cmp_stat;
70         typedef cc::SplitListSet< rcu_gpb, key_val, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_RCU_GPB_dyn_cmp_stat;
71         typedef cc::SplitListSet< rcu_gpt, key_val, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_RCU_GPT_dyn_cmp_stat;
72 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
73         typedef cc::SplitListSet< rcu_shb, key_val, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_RCU_SHB_dyn_cmp_stat;
74         typedef cc::SplitListSet< rcu_sht, key_val, traits_SplitList_Michael_dyn_cmp_stat > SplitList_Michael_RCU_SHT_dyn_cmp_stat;
75 #endif
76
77         struct traits_SplitList_Michael_dyn_cmp_seqcst :
78             public cc::split_list::make_traits<
79                 cc::split_list::ordered_list<cc::michael_list_tag>
80                 ,co::hash< hash >
81                 ,co::memory_model< co::v::sequential_consistent >
82                 ,cc::split_list::ordered_list_traits<
83                     typename cc::michael_list::make_traits<
84                         co::compare< compare >
85                         ,co::memory_model< co::v::sequential_consistent >
86                     >::type
87                 >
88             >::type
89         {};
90         typedef cc::SplitListSet< cds::gc::HP,  key_val, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_HP_dyn_cmp_seqcst;
91         typedef cc::SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_DHP_dyn_cmp_seqcst;
92         typedef cc::SplitListSet< rcu_gpi, key_val, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_RCU_GPI_dyn_cmp_seqcst;
93         typedef cc::SplitListSet< rcu_gpb, key_val, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_RCU_GPB_dyn_cmp_seqcst;
94         typedef cc::SplitListSet< rcu_gpt, key_val, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_RCU_GPT_dyn_cmp_seqcst;
95 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
96         typedef cc::SplitListSet< rcu_shb, key_val, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_RCU_SHB_dyn_cmp_seqcst;
97         typedef cc::SplitListSet< rcu_sht, key_val, traits_SplitList_Michael_dyn_cmp_seqcst > SplitList_Michael_RCU_SHT_dyn_cmp_seqcst;
98 #endif
99
100         struct traits_SplitList_Michael_st_cmp :
101             public cc::split_list::make_traits<
102                 cc::split_list::ordered_list<cc::michael_list_tag>
103                 ,cc::split_list::dynamic_bucket_table< false >
104                 ,co::hash< hash >
105                 ,cc::split_list::ordered_list_traits<
106                     typename cc::michael_list::make_traits<
107                         co::compare< compare >
108                     >::type
109                 >
110             >::type
111         {};
112         typedef cc::SplitListSet< cds::gc::HP,  key_val, traits_SplitList_Michael_st_cmp > SplitList_Michael_HP_st_cmp;
113         typedef cc::SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Michael_st_cmp > SplitList_Michael_DHP_st_cmp;
114         typedef cc::SplitListSet< rcu_gpi, key_val, traits_SplitList_Michael_st_cmp > SplitList_Michael_RCU_GPI_st_cmp;
115         typedef cc::SplitListSet< rcu_gpb, key_val, traits_SplitList_Michael_st_cmp > SplitList_Michael_RCU_GPB_st_cmp;
116         typedef cc::SplitListSet< rcu_gpt, key_val, traits_SplitList_Michael_st_cmp > SplitList_Michael_RCU_GPT_st_cmp;
117 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
118         typedef cc::SplitListSet< rcu_shb, key_val, traits_SplitList_Michael_st_cmp > SplitList_Michael_RCU_SHB_st_cmp;
119         typedef cc::SplitListSet< rcu_sht, key_val, traits_SplitList_Michael_st_cmp > SplitList_Michael_RCU_SHT_st_cmp;
120 #endif
121
122         struct traits_SplitList_Michael_st_cmp_seqcst :
123             public cc::split_list::make_traits<
124                 cc::split_list::ordered_list<cc::michael_list_tag>
125                 ,co::hash< hash >
126                 ,cc::split_list::dynamic_bucket_table< false >
127                 ,co::memory_model< co::v::sequential_consistent >
128                 ,cc::split_list::ordered_list_traits<
129                     typename cc::michael_list::make_traits<
130                         co::compare< compare >
131                         ,co::memory_model< co::v::sequential_consistent >
132                     >::type
133                 >
134             >::type
135         {};
136         typedef cc::SplitListSet< cds::gc::HP,  key_val, traits_SplitList_Michael_st_cmp_seqcst> SplitList_Michael_HP_st_cmp_seqcst;
137         typedef cc::SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Michael_st_cmp_seqcst> SplitList_Michael_DHP_st_cmp_seqcst;
138         typedef cc::SplitListSet< rcu_gpi, key_val, traits_SplitList_Michael_st_cmp_seqcst> SplitList_Michael_RCU_GPI_st_cmp_seqcst;
139         typedef cc::SplitListSet< rcu_gpb, key_val, traits_SplitList_Michael_st_cmp_seqcst> SplitList_Michael_RCU_GPB_st_cmp_seqcst;
140         typedef cc::SplitListSet< rcu_gpt, key_val, traits_SplitList_Michael_st_cmp_seqcst> SplitList_Michael_RCU_GPT_st_cmp_seqcst;
141 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
142         typedef cc::SplitListSet< rcu_shb, key_val, traits_SplitList_Michael_st_cmp_seqcst> SplitList_Michael_RCU_SHB_st_cmp_seqcst;
143         typedef cc::SplitListSet< rcu_sht, key_val, traits_SplitList_Michael_st_cmp_seqcst> SplitList_Michael_RCU_SHT_st_cmp_seqcst;
144 #endif
145
146         //HP + less
147         struct traits_SplitList_Michael_dyn_less :
148             public cc::split_list::make_traits<
149                 cc::split_list::ordered_list<cc::michael_list_tag>
150                 ,co::hash< hash >
151                 ,cc::split_list::ordered_list_traits<
152                     typename cc::michael_list::make_traits<
153                         co::less< less >
154                     >::type
155                 >
156             >::type
157         {};
158         typedef cc::SplitListSet< cds::gc::HP,  key_val, traits_SplitList_Michael_dyn_less > SplitList_Michael_HP_dyn_less;
159         typedef cc::SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Michael_dyn_less > SplitList_Michael_DHP_dyn_less;
160         typedef cc::SplitListSet< rcu_gpi, key_val, traits_SplitList_Michael_dyn_less > SplitList_Michael_RCU_GPI_dyn_less;
161         typedef cc::SplitListSet< rcu_gpb, key_val, traits_SplitList_Michael_dyn_less > SplitList_Michael_RCU_GPB_dyn_less;
162         typedef cc::SplitListSet< rcu_gpt, key_val, traits_SplitList_Michael_dyn_less > SplitList_Michael_RCU_GPT_dyn_less;
163 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
164         typedef cc::SplitListSet< rcu_shb, key_val, traits_SplitList_Michael_dyn_less > SplitList_Michael_RCU_SHB_dyn_less;
165         typedef cc::SplitListSet< rcu_sht, key_val, traits_SplitList_Michael_dyn_less > SplitList_Michael_RCU_SHT_dyn_less;
166 #endif
167
168         struct traits_SplitList_Michael_dyn_less_seqcst :
169             public cc::split_list::make_traits<
170                 cc::split_list::ordered_list<cc::michael_list_tag>
171                 ,co::hash< hash >
172                 ,co::memory_model< co::v::sequential_consistent >
173                 ,cc::split_list::ordered_list_traits<
174                     typename cc::michael_list::make_traits<
175                         co::less< less >
176                         ,co::memory_model< co::v::sequential_consistent >
177                     >::type
178                 >
179             >::type
180         {};
181         typedef cc::SplitListSet< cds::gc::HP, key_val,  traits_SplitList_Michael_dyn_less_seqcst > SplitList_Michael_HP_dyn_less_seqcst;
182         typedef cc::SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Michael_dyn_less_seqcst > SplitList_Michael_DHP_dyn_less_seqcst;
183         typedef cc::SplitListSet< rcu_gpi, key_val, traits_SplitList_Michael_dyn_less_seqcst > SplitList_Michael_RCU_GPI_dyn_less_seqcst;
184         typedef cc::SplitListSet< rcu_gpb, key_val, traits_SplitList_Michael_dyn_less_seqcst > SplitList_Michael_RCU_GPB_dyn_less_seqcst;
185         typedef cc::SplitListSet< rcu_gpt, key_val, traits_SplitList_Michael_dyn_less_seqcst > SplitList_Michael_RCU_GPT_dyn_less_seqcst;
186 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
187         typedef cc::SplitListSet< rcu_shb, key_val, traits_SplitList_Michael_dyn_less_seqcst > SplitList_Michael_RCU_SHB_dyn_less_seqcst;
188         typedef cc::SplitListSet< rcu_sht, key_val, traits_SplitList_Michael_dyn_less_seqcst > SplitList_Michael_RCU_SHT_dyn_less_seqcst;
189 #endif
190
191         struct traits_SplitList_Michael_st_less :
192             public cc::split_list::make_traits<
193                 cc::split_list::ordered_list<cc::michael_list_tag>
194                 ,cc::split_list::dynamic_bucket_table< false >
195                 ,co::hash< hash >
196                 ,cc::split_list::ordered_list_traits<
197                     typename cc::michael_list::make_traits<
198                         co::less< less >
199                     >::type
200                 >
201             >::type
202         {};
203         typedef cc::SplitListSet< cds::gc::HP,  key_val, traits_SplitList_Michael_st_less > SplitList_Michael_HP_st_less;
204         typedef cc::SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Michael_st_less > SplitList_Michael_DHP_st_less;
205         typedef cc::SplitListSet< rcu_gpi, key_val, traits_SplitList_Michael_st_less > SplitList_Michael_RCU_GPI_st_less;
206         typedef cc::SplitListSet< rcu_gpb, key_val, traits_SplitList_Michael_st_less > SplitList_Michael_RCU_GPB_st_less;
207         typedef cc::SplitListSet< rcu_gpt, key_val, traits_SplitList_Michael_st_less > SplitList_Michael_RCU_GPT_st_less;
208 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
209         typedef cc::SplitListSet< rcu_shb, key_val, traits_SplitList_Michael_st_less > SplitList_Michael_RCU_SHB_st_less;
210         typedef cc::SplitListSet< rcu_sht, key_val, traits_SplitList_Michael_st_less > SplitList_Michael_RCU_SHT_st_less;
211 #endif
212
213         struct traits_SplitList_Michael_st_less_stat :
214             public cc::split_list::make_traits<
215                 cc::split_list::ordered_list<cc::michael_list_tag>
216                 ,cc::split_list::dynamic_bucket_table< false >
217                 ,co::hash< hash >
218                 ,co::stat< cc::split_list::stat<>>
219                 ,cc::split_list::ordered_list_traits<
220                     typename cc::michael_list::make_traits<
221                         co::less< less >
222                     >::type
223                 >
224             >::type
225         {};
226         typedef cc::SplitListSet< cds::gc::HP,  key_val, traits_SplitList_Michael_st_less_stat > SplitList_Michael_HP_st_less_stat;
227         typedef cc::SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Michael_st_less_stat > SplitList_Michael_DHP_st_less_stat;
228         typedef cc::SplitListSet< rcu_gpi, key_val, traits_SplitList_Michael_st_less_stat > SplitList_Michael_RCU_GPI_st_less_stat;
229         typedef cc::SplitListSet< rcu_gpb, key_val, traits_SplitList_Michael_st_less_stat > SplitList_Michael_RCU_GPB_st_less_stat;
230         typedef cc::SplitListSet< rcu_gpt, key_val, traits_SplitList_Michael_st_less_stat > SplitList_Michael_RCU_GPT_st_less_stat;
231 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
232         typedef cc::SplitListSet< rcu_shb, key_val, traits_SplitList_Michael_st_less_stat > SplitList_Michael_RCU_SHB_st_less_stat;
233         typedef cc::SplitListSet< rcu_sht, key_val, traits_SplitList_Michael_st_less_stat > SplitList_Michael_RCU_SHT_st_less_stat;
234 #endif
235
236         struct traits_SplitList_Michael_st_less_seqcst :
237             public cc::split_list::make_traits<
238                 cc::split_list::ordered_list<cc::michael_list_tag>
239                 ,co::hash< hash >
240                 ,cc::split_list::dynamic_bucket_table< false >
241                 ,co::memory_model< co::v::sequential_consistent >
242                 ,cc::split_list::ordered_list_traits<
243                     typename cc::michael_list::make_traits<
244                         co::less< less >
245                         ,co::memory_model< co::v::sequential_consistent >
246                     >::type
247                 >
248             >::type
249         {};
250         typedef cc::SplitListSet< cds::gc::HP,  key_val, traits_SplitList_Michael_st_less_seqcst > SplitList_Michael_HP_st_less_seqcst;
251         typedef cc::SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Michael_st_less_seqcst > SplitList_Michael_DHP_st_less_seqcst;
252         typedef cc::SplitListSet< rcu_gpi, key_val, traits_SplitList_Michael_st_less_seqcst > SplitList_Michael_RCU_GPI_st_less_seqcst;
253         typedef cc::SplitListSet< rcu_gpb, key_val, traits_SplitList_Michael_st_less_seqcst > SplitList_Michael_RCU_GPB_st_less_seqcst;
254         typedef cc::SplitListSet< rcu_gpt, key_val, traits_SplitList_Michael_st_less_seqcst > SplitList_Michael_RCU_GPT_st_less_seqcst;
255 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
256         typedef cc::SplitListSet< rcu_shb, key_val, traits_SplitList_Michael_st_less_seqcst > SplitList_Michael_RCU_SHB_st_less_seqcst;
257         typedef cc::SplitListSet< rcu_sht, key_val, traits_SplitList_Michael_st_less_seqcst > SplitList_Michael_RCU_SHT_st_less_seqcst;
258 #endif
259
260         // ***************************************************************************
261         // SplitListSet based on LazyList
262
263         struct traits_SplitList_Lazy_dyn_cmp :
264             public cc::split_list::make_traits<
265                 cc::split_list::ordered_list<cc::lazy_list_tag>
266                 ,co::hash< hash >
267                 ,cc::split_list::ordered_list_traits<
268                     typename cc::lazy_list::make_traits<
269                         co::compare< compare >
270                     >::type
271                 >
272             >::type
273         {};
274         typedef cc::SplitListSet< cds::gc::HP, key_val, traits_SplitList_Lazy_dyn_cmp > SplitList_Lazy_HP_dyn_cmp;
275         typedef cc::SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Lazy_dyn_cmp > SplitList_Lazy_DHP_dyn_cmp;
276         typedef cc::SplitListSet< rcu_gpi, key_val, traits_SplitList_Lazy_dyn_cmp > SplitList_Lazy_RCU_GPI_dyn_cmp;
277         typedef cc::SplitListSet< rcu_gpb, key_val, traits_SplitList_Lazy_dyn_cmp > SplitList_Lazy_RCU_GPB_dyn_cmp;
278         typedef cc::SplitListSet< rcu_gpt, key_val, traits_SplitList_Lazy_dyn_cmp > SplitList_Lazy_RCU_GPT_dyn_cmp;
279 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
280         typedef cc::SplitListSet< rcu_shb, key_val, traits_SplitList_Lazy_dyn_cmp > SplitList_Lazy_RCU_SHB_dyn_cmp;
281         typedef cc::SplitListSet< rcu_sht, key_val, traits_SplitList_Lazy_dyn_cmp > SplitList_Lazy_RCU_SHT_dyn_cmp;
282 #endif
283
284         struct traits_SplitList_Lazy_dyn_cmp_stat : public traits_SplitList_Lazy_dyn_cmp
285         {
286             typedef cc::split_list::stat<> stat;
287         };
288         typedef cc::SplitListSet< cds::gc::HP, key_val, traits_SplitList_Lazy_dyn_cmp_stat > SplitList_Lazy_HP_dyn_cmp_stat;
289         typedef cc::SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Lazy_dyn_cmp_stat > SplitList_Lazy_DHP_dyn_cmp_stat;
290         typedef cc::SplitListSet< rcu_gpi, key_val, traits_SplitList_Lazy_dyn_cmp_stat > SplitList_Lazy_RCU_GPI_dyn_cmp_stat;
291         typedef cc::SplitListSet< rcu_gpb, key_val, traits_SplitList_Lazy_dyn_cmp_stat > SplitList_Lazy_RCU_GPB_dyn_cmp_stat;
292         typedef cc::SplitListSet< rcu_gpt, key_val, traits_SplitList_Lazy_dyn_cmp_stat > SplitList_Lazy_RCU_GPT_dyn_cmp_stat;
293 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
294         typedef cc::SplitListSet< rcu_shb, key_val, traits_SplitList_Lazy_dyn_cmp > SplitList_Lazy_RCU_SHB_dyn_cmp_stat;
295         typedef cc::SplitListSet< rcu_sht, key_val, traits_SplitList_Lazy_dyn_cmp > SplitList_Lazy_RCU_SHT_dyn_cmp_stat;
296 #endif
297
298         struct traits_SplitList_Lazy_dyn_cmp_seqcst :
299             public cc::split_list::make_traits<
300                 cc::split_list::ordered_list<cc::lazy_list_tag>
301                 ,co::hash< hash >
302                 ,co::memory_model< co::v::sequential_consistent >
303                 ,cc::split_list::ordered_list_traits<
304                     typename cc::lazy_list::make_traits<
305                         co::compare< compare >
306                         ,co::memory_model< co::v::sequential_consistent >
307                     >::type
308                 >
309             >::type
310         {};
311         typedef cc::SplitListSet< cds::gc::HP, key_val, traits_SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_HP_dyn_cmp_seqcst;
312         typedef cc::SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_DHP_dyn_cmp_seqcst;
313         typedef cc::SplitListSet< rcu_gpi, key_val, traits_SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_RCU_GPI_dyn_cmp_seqcst;
314         typedef cc::SplitListSet< rcu_gpb, key_val, traits_SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_RCU_GPB_dyn_cmp_seqcst;
315         typedef cc::SplitListSet< rcu_gpt, key_val, traits_SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_RCU_GPT_dyn_cmp_seqcst;
316 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
317         typedef cc::SplitListSet< rcu_shb, key_val, traits_SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_RCU_SHB_dyn_cmp_seqcst;
318         typedef cc::SplitListSet< rcu_sht, key_val, traits_SplitList_Lazy_dyn_cmp_seqcst > SplitList_Lazy_RCU_SHT_dyn_cmp_seqcst;
319 #endif
320
321         struct traits_SplitList_Lazy_st_cmp :
322             public cc::split_list::make_traits<
323                 cc::split_list::ordered_list<cc::lazy_list_tag>
324                 ,cc::split_list::dynamic_bucket_table< false >
325                 ,co::hash< hash >
326                 ,cc::split_list::ordered_list_traits<
327                     typename cc::lazy_list::make_traits<
328                         co::compare< compare >
329                     >::type
330                 >
331             >::type
332         {};
333         typedef cc::SplitListSet< cds::gc::HP, key_val, traits_SplitList_Lazy_st_cmp > SplitList_Lazy_HP_st_cmp;
334         typedef cc::SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Lazy_st_cmp > SplitList_Lazy_DHP_st_cmp;
335         typedef cc::SplitListSet< rcu_gpi, key_val, traits_SplitList_Lazy_st_cmp > SplitList_Lazy_RCU_GPI_st_cmp;
336         typedef cc::SplitListSet< rcu_gpb, key_val, traits_SplitList_Lazy_st_cmp > SplitList_Lazy_RCU_GPB_st_cmp;
337         typedef cc::SplitListSet< rcu_gpt, key_val, traits_SplitList_Lazy_st_cmp > SplitList_Lazy_RCU_GPT_st_cmp;
338 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
339         typedef cc::SplitListSet< rcu_shb, key_val, traits_SplitList_Lazy_st_cmp > SplitList_Lazy_RCU_SHB_st_cmp;
340         typedef cc::SplitListSet< rcu_sht, key_val, traits_SplitList_Lazy_st_cmp > SplitList_Lazy_RCU_SHT_st_cmp;
341 #endif
342
343         struct traits_SplitList_Lazy_st_cmp_seqcst :
344             public cc::split_list::make_traits<
345                 cc::split_list::ordered_list<cc::lazy_list_tag>
346                 ,co::hash< hash >
347                 ,cc::split_list::dynamic_bucket_table< false >
348                 ,co::memory_model< co::v::sequential_consistent >
349                 ,cc::split_list::ordered_list_traits<
350                     typename cc::lazy_list::make_traits<
351                         co::compare< compare >
352                         ,co::memory_model< co::v::sequential_consistent >
353                     >::type
354                 >
355             >::type
356         {};
357         typedef cc::SplitListSet< cds::gc::HP, key_val, traits_SplitList_Lazy_st_cmp_seqcst > SplitList_Lazy_HP_st_cmp_seqcst;
358         typedef cc::SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Lazy_st_cmp_seqcst > SplitList_Lazy_DHP_st_cmp_seqcst;
359         typedef cc::SplitListSet< rcu_gpi, key_val, traits_SplitList_Lazy_st_cmp_seqcst > SplitList_Lazy_RCU_GPI_st_cmp_seqcst;
360         typedef cc::SplitListSet< rcu_gpb, key_val, traits_SplitList_Lazy_st_cmp_seqcst > SplitList_Lazy_RCU_GPB_st_cmp_seqcst;
361         typedef cc::SplitListSet< rcu_gpt, key_val, traits_SplitList_Lazy_st_cmp_seqcst > SplitList_Lazy_RCU_GPT_st_cmp_seqcst;
362 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
363         typedef cc::SplitListSet< rcu_shb, key_val, traits_SplitList_Lazy_st_cmp_seqcst > SplitList_Lazy_RCU_SHB_st_cmp_seqcst;
364         typedef cc::SplitListSet< rcu_sht, key_val, traits_SplitList_Lazy_st_cmp_seqcst > SplitList_Lazy_RCU_SHT_st_cmp_seqcst;
365 #endif
366
367         struct traits_SplitList_Lazy_dyn_less :
368             public cc::split_list::make_traits<
369                 cc::split_list::ordered_list<cc::lazy_list_tag>
370                 ,co::hash< hash >
371                 ,cc::split_list::ordered_list_traits<
372                     typename cc::lazy_list::make_traits<
373                         co::less< less >
374                     >::type
375                 >
376             >::type
377         {};
378         typedef cc::SplitListSet< cds::gc::HP, key_val, traits_SplitList_Lazy_dyn_less > SplitList_Lazy_HP_dyn_less;
379         typedef cc::SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Lazy_dyn_less > SplitList_Lazy_DHP_dyn_less;
380         typedef cc::SplitListSet< rcu_gpi, key_val, traits_SplitList_Lazy_dyn_less > SplitList_Lazy_RCU_GPI_dyn_less;
381         typedef cc::SplitListSet< rcu_gpb, key_val, traits_SplitList_Lazy_dyn_less > SplitList_Lazy_RCU_GPB_dyn_less;
382         typedef cc::SplitListSet< rcu_gpt, key_val, traits_SplitList_Lazy_dyn_less > SplitList_Lazy_RCU_GPT_dyn_less;
383 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
384         typedef cc::SplitListSet< rcu_shb, key_val, traits_SplitList_Lazy_dyn_less > SplitList_Lazy_RCU_SHB_dyn_less;
385         typedef cc::SplitListSet< rcu_sht, key_val, traits_SplitList_Lazy_dyn_less > SplitList_Lazy_RCU_SHT_dyn_less;
386 #endif
387
388         struct traits_SplitList_Lazy_dyn_less_seqcst :
389             public cc::split_list::make_traits<
390                 cc::split_list::ordered_list<cc::lazy_list_tag>
391                 ,co::hash< hash >
392                 ,co::memory_model< co::v::sequential_consistent >
393                 ,cc::split_list::ordered_list_traits<
394                     typename cc::lazy_list::make_traits<
395                         co::less< less >
396                         ,co::memory_model< co::v::sequential_consistent >
397                     >::type
398                 >
399             >::type
400         {};
401         typedef cc::SplitListSet< cds::gc::HP, key_val, traits_SplitList_Lazy_dyn_less_seqcst > SplitList_Lazy_HP_dyn_less_seqcst;
402         typedef cc::SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Lazy_dyn_less_seqcst > SplitList_Lazy_DHP_dyn_less_seqcst;
403         typedef cc::SplitListSet< rcu_gpi, key_val, traits_SplitList_Lazy_dyn_less_seqcst > SplitList_Lazy_RCU_GPI_dyn_less_seqcst;
404         typedef cc::SplitListSet< rcu_gpb, key_val, traits_SplitList_Lazy_dyn_less_seqcst > SplitList_Lazy_RCU_GPB_dyn_less_seqcst;
405         typedef cc::SplitListSet< rcu_gpt, key_val, traits_SplitList_Lazy_dyn_less_seqcst > SplitList_Lazy_RCU_GPT_dyn_less_seqcst;
406 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
407         typedef cc::SplitListSet< rcu_shb, key_val, traits_SplitList_Lazy_dyn_less_seqcst > SplitList_Lazy_RCU_SHB_dyn_less_seqcst;
408         typedef cc::SplitListSet< rcu_sht, key_val, traits_SplitList_Lazy_dyn_less_seqcst > SplitList_Lazy_RCU_SHT_dyn_less_seqcst;
409 #endif
410
411         struct traits_SplitList_Lazy_st_less :
412             public cc::split_list::make_traits<
413                 cc::split_list::ordered_list<cc::lazy_list_tag>
414                 ,cc::split_list::dynamic_bucket_table< false >
415                 ,co::hash< hash >
416                 ,cc::split_list::ordered_list_traits<
417                     typename cc::lazy_list::make_traits<
418                         co::less< less >
419                     >::type
420                 >
421             >::type
422         {};
423         typedef cc::SplitListSet< cds::gc::HP, key_val, traits_SplitList_Lazy_st_less > SplitList_Lazy_HP_st_less;
424         typedef cc::SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Lazy_st_less > SplitList_Lazy_DHP_st_less;
425         typedef cc::SplitListSet< rcu_gpi, key_val, traits_SplitList_Lazy_st_less > SplitList_Lazy_RCU_GPI_st_less;
426         typedef cc::SplitListSet< rcu_gpb, key_val, traits_SplitList_Lazy_st_less > SplitList_Lazy_RCU_GPB_st_less;
427         typedef cc::SplitListSet< rcu_gpt, key_val, traits_SplitList_Lazy_st_less > SplitList_Lazy_RCU_GPT_st_less;
428 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
429         typedef cc::SplitListSet< rcu_shb, key_val, traits_SplitList_Lazy_st_less > SplitList_Lazy_RCU_SHB_st_less;
430         typedef cc::SplitListSet< rcu_sht, key_val, traits_SplitList_Lazy_st_less > SplitList_Lazy_RCU_SHT_st_less;
431 #endif
432
433         struct traits_SplitList_Lazy_st_less_seqcst :
434             public cc::split_list::make_traits<
435                 cc::split_list::ordered_list<cc::lazy_list_tag>
436                 ,co::hash< hash >
437                 ,cc::split_list::dynamic_bucket_table< false >
438                 ,co::memory_model< co::v::sequential_consistent >
439                 ,cc::split_list::ordered_list_traits<
440                     typename cc::lazy_list::make_traits<
441                         co::less< less >
442                         ,co::memory_model< co::v::sequential_consistent >
443                     >::type
444                 >
445             >::type
446         {};
447         typedef cc::SplitListSet< cds::gc::HP, key_val, traits_SplitList_Lazy_st_less_seqcst > SplitList_Lazy_HP_st_less_seqcst;
448         typedef cc::SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Lazy_st_less_seqcst > SplitList_Lazy_DHP_st_less_seqcst;
449         typedef cc::SplitListSet< rcu_gpi, key_val, traits_SplitList_Lazy_st_less_seqcst > SplitList_Lazy_RCU_GPI_st_less_seqcst;
450         typedef cc::SplitListSet< rcu_gpb, key_val, traits_SplitList_Lazy_st_less_seqcst > SplitList_Lazy_RCU_GPB_st_less_seqcst;
451         typedef cc::SplitListSet< rcu_gpt, key_val, traits_SplitList_Lazy_st_less_seqcst > SplitList_Lazy_RCU_GPT_st_less_seqcst;
452 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
453         typedef cc::SplitListSet< rcu_shb, key_val, traits_SplitList_Lazy_st_less_seqcst > SplitList_Lazy_RCU_SHB_st_less_seqcst;
454         typedef cc::SplitListSet< rcu_sht, key_val, traits_SplitList_Lazy_st_less_seqcst > SplitList_Lazy_RCU_SHT_st_less_seqcst;
455 #endif
456
457         struct traits_SplitList_Lazy_st_less_stat : public traits_SplitList_Lazy_st_less
458         {
459             typedef cc::split_list::stat<> stat;
460         };
461         typedef cc::SplitListSet< cds::gc::HP, key_val, traits_SplitList_Lazy_st_less_stat > SplitList_Lazy_HP_st_less_stat;
462         typedef cc::SplitListSet< cds::gc::DHP, key_val, traits_SplitList_Lazy_st_less_stat > SplitList_Lazy_DHP_st_less_stat;
463         typedef cc::SplitListSet< rcu_gpi, key_val, traits_SplitList_Lazy_st_less_stat > SplitList_Lazy_RCU_GPI_st_less_stat;
464         typedef cc::SplitListSet< rcu_gpb, key_val, traits_SplitList_Lazy_st_less_stat > SplitList_Lazy_RCU_GPB_st_less_stat;
465         typedef cc::SplitListSet< rcu_gpt, key_val, traits_SplitList_Lazy_st_less_stat > SplitList_Lazy_RCU_GPT_st_less_stat;
466 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
467         typedef cc::SplitListSet< rcu_shb, key_val, traits_SplitList_Lazy_st_less_stat > SplitList_Lazy_RCU_SHB_st_less_stat;
468         typedef cc::SplitListSet< rcu_sht, key_val, traits_SplitList_Lazy_st_less_stat > SplitList_Lazy_RCU_SHT_st_less_stat;
469 #endif
470     };
471
472     template <typename GC, typename T, typename Traits>
473     static inline void print_stat( cc::SplitListSet<GC, T, Traits> const& s )
474     {
475         CPPUNIT_MSG( s.statistics() );
476     }
477
478 } // namespace set2
479
480 #endif // #ifndef CDSUNIT_SET_TYPE_SPLIT_LIST_H