3 #include "set/hdr_intrusive_set.h"
4 #include <cds/urcu/general_buffered.h>
5 #include <cds/intrusive/michael_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()
15 typedef base_int_item< ci::split_list::node< ci::michael_list::node<rcu_type> > > item;
16 typedef ci::MichaelList < rcu_type
18 , ci::michael_list::make_traits <
19 ci::opt::hook< ci::michael_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()
39 typedef base_int_item< ci::split_list::node< ci::michael_list::node<rcu_type> > > item;
40 typedef ci::MichaelList < rcu_type
42 , ci::michael_list::make_traits <
43 ci::opt::hook< ci::michael_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()
62 typedef base_int_item< ci::split_list::node<ci::michael_list::node<rcu_type> > > item;
63 typedef ci::MichaelList < rcu_type
65 , ci::michael_list::make_traits <
66 ci::opt::hook< ci::michael_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()
87 typedef base_int_item< ci::split_list::node<ci::michael_list::node<rcu_type> > > item;
88 struct list_traits : public ci::michael_list::traits
90 typedef ci::michael_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::MichaelList< 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;
105 static_assert(set::traits::dynamic_bucket_table, "Set has static bucket table");
110 void IntrusiveHashSetHdrTest::split_dyn_RCU_GPB_member_cmp()
112 typedef member_int_item< ci::split_list::node< ci::michael_list::node<rcu_type> > > item;
113 typedef ci::MichaelList < rcu_type
115 , ci::michael_list::make_traits <
116 ci::opt::hook< ci::michael_list::member_hook <
117 offsetof( item, hMember ),
120 , co::compare< cmp<item> >
121 , ci::opt::disposer < faked_disposer >
125 typedef ci::SplitListSet < rcu_type, ord_list,
126 ci::split_list::make_traits <
127 co::hash < hash_int >
130 static_assert(set::traits::dynamic_bucket_table, "Set has static bucket table");
135 void IntrusiveHashSetHdrTest::split_dyn_RCU_GPB_member_less()
137 typedef member_int_item< ci::split_list::node< ci::michael_list::node<rcu_type> > > item;
138 typedef ci::MichaelList < rcu_type
140 , ci::michael_list::make_traits <
141 ci::opt::hook< ci::michael_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::relaxed_ordering >
156 static_assert(set::traits::dynamic_bucket_table, "Set has static bucket table");
161 void IntrusiveHashSetHdrTest::split_dyn_RCU_GPB_member_cmpmix()
163 typedef member_int_item< ci::split_list::node< ci::michael_list::node<rcu_type> > > item;
164 typedef ci::MichaelList < rcu_type
166 , ci::michael_list::make_traits <
167 ci::opt::hook< ci::michael_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 >
181 , co::memory_model < co::v::sequential_consistent >
184 static_assert(set::traits::dynamic_bucket_table, "Set has static bucket table");
189 void IntrusiveHashSetHdrTest::split_dyn_RCU_GPB_member_cmpmix_stat()
191 typedef member_int_item< ci::split_list::node< ci::michael_list::node<rcu_type> > > item;
193 public ci::michael_list::make_traits <
194 ci::opt::hook< ci::michael_list::member_hook <
195 offsetof( item, hMember ),
198 , co::compare< cmp<item> >
199 , co::less< less<item> >
200 , ci::opt::disposer < faked_disposer >
203 typedef ci::MichaelList< rcu_type, item, list_traits > ord_list;
206 public ci::split_list::make_traits <
208 , co::item_counter< simple_item_counter >
209 , co::memory_model<co::v::sequential_consistent>
210 , co::stat < ci::split_list::stat<> >
213 typedef ci::SplitListSet< rcu_type, ord_list, set_traits > set;
214 static_assert(set::traits::dynamic_bucket_table, "Set has static bucket table");
219 // Static bucket table
220 void IntrusiveHashSetHdrTest::split_st_RCU_GPB_base_cmp()
222 typedef base_int_item< ci::split_list::node< ci::michael_list::node<rcu_type> > > item;
223 typedef ci::MichaelList < rcu_type
225 , ci::michael_list::make_traits <
226 ci::opt::hook< ci::michael_list::base_hook< co::gc<rcu_type> > >
227 , co::compare< cmp<item> >
228 , ci::opt::disposer < faked_disposer >
232 typedef ci::SplitListSet < rcu_type, ord_list,
233 ci::split_list::make_traits <
235 , ci::split_list::dynamic_bucket_table<false>
236 , co::memory_model < co::v::relaxed_ordering >
239 static_assert(!set::traits::dynamic_bucket_table, "Set has dynamic bucket table");
244 void IntrusiveHashSetHdrTest::split_st_RCU_GPB_base_less()
246 typedef base_int_item< ci::split_list::node< ci::michael_list::node<rcu_type> > > item;
247 typedef ci::MichaelList < rcu_type
249 , ci::michael_list::make_traits <
250 ci::opt::hook< ci::michael_list::base_hook< co::gc<rcu_type> > >
251 , co::less< less<item> >
252 , ci::opt::disposer < faked_disposer >
256 typedef ci::SplitListSet < rcu_type, ord_list,
257 ci::split_list::make_traits <
259 , ci::split_list::dynamic_bucket_table<false>
260 , co::memory_model < co::v::sequential_consistent >
263 static_assert(!set::traits::dynamic_bucket_table, "Set has dynamic bucket table");
268 void IntrusiveHashSetHdrTest::split_st_RCU_GPB_base_cmpmix()
270 typedef base_int_item< ci::split_list::node<ci::michael_list::node<rcu_type> > > item;
271 typedef ci::MichaelList < rcu_type
273 , ci::michael_list::make_traits <
274 ci::opt::hook< ci::michael_list::base_hook< co::gc<rcu_type> > >
275 , co::less< less<item> >
276 , co::compare< cmp<item> >
277 , ci::opt::disposer < faked_disposer >
281 typedef ci::SplitListSet < rcu_type, ord_list,
282 ci::split_list::make_traits <
284 , co::item_counter< simple_item_counter >
285 , ci::split_list::dynamic_bucket_table < false >
288 static_assert(!set::traits::dynamic_bucket_table, "Set has dynamic bucket table");
293 void IntrusiveHashSetHdrTest::split_st_RCU_GPB_base_cmpmix_stat()
295 typedef base_int_item< ci::split_list::node<ci::michael_list::node<rcu_type> > > item;
296 typedef ci::MichaelList < rcu_type
298 , ci::michael_list::make_traits <
299 ci::opt::hook< ci::michael_list::base_hook< co::gc<rcu_type> > >
300 , co::less< less<item> >
301 , co::compare< cmp<item> >
302 , ci::opt::disposer < faked_disposer >
306 typedef ci::SplitListSet < rcu_type, ord_list,
307 ci::split_list::make_traits <
309 , co::item_counter< simple_item_counter >
310 , ci::split_list::dynamic_bucket_table<false>
311 , co::stat < ci::split_list::stat<> >
314 static_assert(!set::traits::dynamic_bucket_table, "Set has dynamic bucket table");
319 void IntrusiveHashSetHdrTest::split_st_RCU_GPB_member_cmp()
321 typedef member_int_item< ci::split_list::node< ci::michael_list::node<rcu_type> > > item;
322 typedef ci::MichaelList < rcu_type
324 , ci::michael_list::make_traits <
325 ci::opt::hook< ci::michael_list::member_hook <
326 offsetof( item, hMember ),
329 , co::compare< cmp<item> >
330 , ci::opt::disposer < faked_disposer >
334 typedef ci::SplitListSet < rcu_type, ord_list,
335 ci::split_list::make_traits <
337 , ci::split_list::dynamic_bucket_table<false>
338 , co::memory_model < co::v::relaxed_ordering >
341 static_assert(!set::traits::dynamic_bucket_table, "Set has dynamic bucket table");
346 void IntrusiveHashSetHdrTest::split_st_RCU_GPB_member_less()
348 typedef member_int_item< ci::split_list::node< ci::michael_list::node<rcu_type> > > item;
349 typedef ci::MichaelList < rcu_type
351 , ci::michael_list::make_traits <
352 ci::opt::hook< ci::michael_list::member_hook <
353 offsetof( item, hMember ),
356 , co::less< less<item> >
357 , ci::opt::disposer < faked_disposer >
361 typedef ci::SplitListSet < rcu_type, ord_list,
362 ci::split_list::make_traits <
363 ci::split_list::dynamic_bucket_table<false>
364 , co::hash< hash_int >
365 , co::memory_model < co::v::sequential_consistent >
368 static_assert(!set::traits::dynamic_bucket_table, "Set has dynamic bucket table");
373 void IntrusiveHashSetHdrTest::split_st_RCU_GPB_member_cmpmix()
375 typedef member_int_item< ci::split_list::node< ci::michael_list::node<rcu_type> > > item;
376 typedef ci::MichaelList < rcu_type
378 , ci::michael_list::make_traits <
379 ci::opt::hook< ci::michael_list::member_hook <
380 offsetof( item, hMember ),
383 , co::compare< cmp<item> >
384 , co::less< less<item> >
385 , ci::opt::disposer < faked_disposer >
389 typedef ci::SplitListSet < rcu_type, ord_list,
390 ci::split_list::make_traits <
392 , co::item_counter< simple_item_counter >
393 , ci::split_list::dynamic_bucket_table < false >
396 static_assert(!set::traits::dynamic_bucket_table, "Set has dynamic bucket table");
401 void IntrusiveHashSetHdrTest::split_st_RCU_GPB_member_cmpmix_stat()
403 typedef member_int_item< ci::split_list::node< ci::michael_list::node<rcu_type> > > item;
404 typedef ci::MichaelList < rcu_type
406 , ci::michael_list::make_traits <
407 ci::opt::hook< ci::michael_list::member_hook <
408 offsetof( item, hMember ),
411 , co::compare< cmp<item> >
412 , co::less< less<item> >
413 , ci::opt::disposer < faked_disposer >
417 typedef ci::SplitListSet < rcu_type, ord_list,
418 ci::split_list::make_traits <
420 , co::item_counter< simple_item_counter >
421 , ci::split_list::dynamic_bucket_table<false>
422 , co::stat < ci::split_list::stat<> >
425 static_assert(!set::traits::dynamic_bucket_table, "Set has dynamic bucket table");