3 #include "set/hdr_intrusive_set.h"
4 #include <cds/urcu/general_buffered.h>
5 #include <cds/intrusive/lazy_list_rcu.h>
6 #include <cds/intrusive/split_list_rcu.h>
10 typedef cds::urcu::gc< cds::urcu::general_buffered<> > rcu_type;
13 void IntrusiveHashSetHdrTest::split_dyn_RCU_GPB_base_cmp_lazy()
15 typedef base_int_item< ci::split_list::node< ci::lazy_list::node<rcu_type> > > item;
16 typedef ci::LazyList< rcu_type
18 ,ci::lazy_list::make_traits<
19 ci::opt::hook< ci::lazy_list::base_hook< co::gc<rcu_type> > >
20 ,co::compare< cmp<item> >
21 ,ci::opt::disposer< faked_disposer >
25 typedef ci::SplitListSet< rcu_type, ord_list,
26 ci::split_list::make_traits<
28 ,ci::split_list::dynamic_bucket_table<true>
29 ,co::memory_model<co::v::relaxed_ordering>
32 static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
37 void IntrusiveHashSetHdrTest::split_dyn_RCU_GPB_base_less_lazy()
39 typedef base_int_item< ci::split_list::node< ci::lazy_list::node<rcu_type> > > item;
40 typedef ci::LazyList< rcu_type
42 ,ci::lazy_list::make_traits<
43 ci::opt::hook< ci::lazy_list::base_hook< co::gc<rcu_type> > >
44 ,co::less< less<item> >
45 ,ci::opt::disposer< faked_disposer >
49 typedef ci::SplitListSet< rcu_type, ord_list,
50 ci::split_list::make_traits<
52 ,co::memory_model<co::v::sequential_consistent>
55 static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
60 void IntrusiveHashSetHdrTest::split_dyn_RCU_GPB_base_cmpmix_lazy()
62 typedef base_int_item< ci::split_list::node<ci::lazy_list::node<rcu_type> > > item;
63 typedef ci::LazyList< rcu_type
65 ,ci::lazy_list::make_traits<
66 ci::opt::hook< ci::lazy_list::base_hook< co::gc<rcu_type> > >
67 ,co::less< less<item> >
68 ,co::compare< cmp<item> >
69 ,ci::opt::disposer< faked_disposer >
73 typedef ci::SplitListSet< rcu_type, ord_list,
74 ci::split_list::make_traits<
76 ,co::item_counter< simple_item_counter >
77 ,ci::split_list::dynamic_bucket_table<true>
80 static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
85 void IntrusiveHashSetHdrTest::split_dyn_RCU_GPB_base_cmpmix_stat_lazy()
87 typedef base_int_item< ci::split_list::node<ci::lazy_list::node<rcu_type> > > item;
88 struct list_traits : public ci::lazy_list::traits
90 typedef ci::lazy_list::base_hook< co::gc<rcu_type> > hook;
91 typedef IntrusiveHashSetHdrTest::less< item > less;
92 typedef cmp<item> compare;
93 typedef faked_disposer disposer;
95 typedef ci::LazyList< rcu_type, item, list_traits > ord_list;
97 struct set_traits : public ci::split_list::make_traits<ci::split_list::dynamic_bucket_table<true>>::type
99 typedef hash_int hash;
100 typedef simple_item_counter item_counter;
101 typedef ci::split_list::stat<> stat;
103 typedef ci::SplitListSet< rcu_type, ord_list, set_traits > set;
104 static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
109 void IntrusiveHashSetHdrTest::split_dyn_RCU_GPB_member_cmp_lazy()
111 typedef member_int_item< ci::split_list::node< ci::lazy_list::node<rcu_type> > > item;
112 typedef ci::LazyList< rcu_type
114 ,ci::lazy_list::make_traits<
115 ci::opt::hook< ci::lazy_list::member_hook<
116 offsetof( item, hMember ),
119 ,co::compare< cmp<item> >
120 ,ci::opt::disposer< faked_disposer >
124 typedef ci::SplitListSet< rcu_type, ord_list,
125 ci::split_list::make_traits<
127 ,co::memory_model<co::v::relaxed_ordering>
130 static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
135 void IntrusiveHashSetHdrTest::split_dyn_RCU_GPB_member_less_lazy()
137 typedef member_int_item< ci::split_list::node< ci::lazy_list::node<rcu_type> > > item;
138 typedef ci::LazyList< rcu_type
140 ,ci::lazy_list::make_traits<
141 ci::opt::hook< ci::lazy_list::member_hook<
142 offsetof( item, hMember ),
145 ,co::less< less<item> >
146 ,ci::opt::disposer< faked_disposer >
150 typedef ci::SplitListSet< rcu_type, ord_list,
151 ci::split_list::make_traits<
153 ,co::memory_model<co::v::sequential_consistent>
156 static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
161 void IntrusiveHashSetHdrTest::split_dyn_RCU_GPB_member_cmpmix_lazy()
163 typedef member_int_item< ci::split_list::node< ci::lazy_list::node<rcu_type> > > item;
164 typedef ci::LazyList< rcu_type
166 ,ci::lazy_list::make_traits<
167 ci::opt::hook< ci::lazy_list::member_hook<
168 offsetof( item, hMember ),
171 ,co::compare< cmp<item> >
172 ,co::less< less<item> >
173 ,ci::opt::disposer< faked_disposer >
177 typedef ci::SplitListSet< rcu_type, ord_list,
178 ci::split_list::make_traits<
180 ,co::item_counter< simple_item_counter >
183 static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
188 void IntrusiveHashSetHdrTest::split_dyn_RCU_GPB_member_cmpmix_stat_lazy()
190 typedef member_int_item< ci::split_list::node< ci::lazy_list::node<rcu_type> > > item;
192 public ci::lazy_list::make_traits<
193 ci::opt::hook< ci::lazy_list::member_hook<
194 offsetof( item, hMember ),
197 ,co::compare< cmp<item> >
198 ,co::less< less<item> >
199 ,ci::opt::disposer< faked_disposer >
202 typedef ci::LazyList< rcu_type, item, list_traits > ord_list;
205 public ci::split_list::make_traits<
207 ,co::item_counter< simple_item_counter >
208 ,co::stat< ci::split_list::stat<> >
211 typedef ci::SplitListSet< rcu_type, ord_list, set_traits > set;
212 static_assert( set::traits::dynamic_bucket_table, "Set has static bucket table" );
217 // Static bucket table
218 void IntrusiveHashSetHdrTest::split_st_RCU_GPB_base_cmp_lazy()
220 typedef base_int_item< ci::split_list::node< ci::lazy_list::node<rcu_type> > > item;
221 typedef ci::LazyList< rcu_type
223 ,ci::lazy_list::make_traits<
224 ci::opt::hook< ci::lazy_list::base_hook< co::gc<rcu_type> > >
225 ,co::compare< cmp<item> >
226 ,ci::opt::disposer< faked_disposer >
230 typedef ci::SplitListSet< rcu_type, ord_list,
231 ci::split_list::make_traits<
233 ,ci::split_list::dynamic_bucket_table<false>
234 ,co::memory_model<co::v::relaxed_ordering>
237 static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
242 void IntrusiveHashSetHdrTest::split_st_RCU_GPB_base_less_lazy()
244 typedef base_int_item< ci::split_list::node< ci::lazy_list::node<rcu_type> > > item;
245 typedef ci::LazyList< rcu_type
247 ,ci::lazy_list::make_traits<
248 ci::opt::hook< ci::lazy_list::base_hook< co::gc<rcu_type> > >
249 ,co::less< less<item> >
250 ,ci::opt::disposer< faked_disposer >
254 typedef ci::SplitListSet< rcu_type, ord_list,
255 ci::split_list::make_traits<
257 ,ci::split_list::dynamic_bucket_table<false>
258 ,co::memory_model<co::v::sequential_consistent>
261 static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
266 void IntrusiveHashSetHdrTest::split_st_RCU_GPB_base_cmpmix_lazy()
268 typedef base_int_item< ci::split_list::node<ci::lazy_list::node<rcu_type> > > item;
269 typedef ci::LazyList< rcu_type
271 ,ci::lazy_list::make_traits<
272 ci::opt::hook< ci::lazy_list::base_hook< co::gc<rcu_type> > >
273 ,co::less< less<item> >
274 ,co::compare< cmp<item> >
275 ,ci::opt::disposer< faked_disposer >
279 typedef ci::SplitListSet< rcu_type, ord_list,
280 ci::split_list::make_traits<
282 ,co::item_counter< simple_item_counter >
283 ,ci::split_list::dynamic_bucket_table<false>
286 static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
291 void IntrusiveHashSetHdrTest::split_st_RCU_GPB_base_cmpmix_stat_lazy()
293 typedef base_int_item< ci::split_list::node<ci::lazy_list::node<rcu_type> > > item;
294 typedef ci::LazyList< rcu_type
296 ,ci::lazy_list::make_traits<
297 ci::opt::hook< ci::lazy_list::base_hook< co::gc<rcu_type> > >
298 ,co::less< less<item> >
299 ,co::compare< cmp<item> >
300 ,ci::opt::disposer< faked_disposer >
304 typedef ci::SplitListSet< rcu_type, ord_list,
305 ci::split_list::make_traits<
307 ,co::item_counter< simple_item_counter >
308 ,ci::split_list::dynamic_bucket_table<false>
309 ,co::stat< ci::split_list::stat<>>
312 static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
317 void IntrusiveHashSetHdrTest::split_st_RCU_GPB_member_cmp_lazy()
319 typedef member_int_item< ci::split_list::node< ci::lazy_list::node<rcu_type> > > item;
320 typedef ci::LazyList< rcu_type
322 ,ci::lazy_list::make_traits<
323 ci::opt::hook< ci::lazy_list::member_hook<
324 offsetof( item, hMember ),
327 ,co::compare< cmp<item> >
328 ,ci::opt::disposer< faked_disposer >
332 typedef ci::SplitListSet< rcu_type, ord_list,
333 ci::split_list::make_traits<
335 ,ci::split_list::dynamic_bucket_table<false>
336 ,co::memory_model<co::v::relaxed_ordering>
339 static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
344 void IntrusiveHashSetHdrTest::split_st_RCU_GPB_member_less_lazy()
346 typedef member_int_item< ci::split_list::node< ci::lazy_list::node<rcu_type> > > item;
347 typedef ci::LazyList< rcu_type
349 ,ci::lazy_list::make_traits<
350 ci::opt::hook< ci::lazy_list::member_hook<
351 offsetof( item, hMember ),
354 ,co::less< less<item> >
355 ,ci::opt::disposer< faked_disposer >
359 typedef ci::SplitListSet< rcu_type, ord_list,
360 ci::split_list::make_traits<
361 ci::split_list::dynamic_bucket_table<false>
362 ,co::hash< hash_int >
363 ,co::memory_model<co::v::sequential_consistent>
366 static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
371 void IntrusiveHashSetHdrTest::split_st_RCU_GPB_member_cmpmix_lazy()
373 typedef member_int_item< ci::split_list::node< ci::lazy_list::node<rcu_type> > > item;
374 typedef ci::LazyList< rcu_type
376 ,ci::lazy_list::make_traits<
377 ci::opt::hook< ci::lazy_list::member_hook<
378 offsetof( item, hMember ),
381 ,co::compare< cmp<item> >
382 ,co::less< less<item> >
383 ,ci::opt::disposer< faked_disposer >
387 typedef ci::SplitListSet< rcu_type, ord_list,
388 ci::split_list::make_traits<
390 ,co::item_counter< simple_item_counter >
391 ,ci::split_list::dynamic_bucket_table<false>
394 static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );
399 void IntrusiveHashSetHdrTest::split_st_RCU_GPB_member_cmpmix_stat_lazy()
401 typedef member_int_item< ci::split_list::node< ci::lazy_list::node<rcu_type> > > item;
402 typedef ci::LazyList< rcu_type
404 ,ci::lazy_list::make_traits<
405 ci::opt::hook< ci::lazy_list::member_hook<
406 offsetof( item, hMember ),
409 ,co::compare< cmp<item> >
410 ,co::less< less<item> >
411 ,ci::opt::disposer< faked_disposer >
415 typedef ci::SplitListSet< rcu_type, ord_list,
416 ci::split_list::make_traits<
418 ,co::item_counter< simple_item_counter >
419 ,ci::split_list::dynamic_bucket_table<false>
420 ,co::stat< ci::split_list::stat<>>
423 static_assert( !set::traits::dynamic_bucket_table, "Set has dynamic bucket table" );