3 #include "set/hdr_intrusive_set.h"
4 #include <cds/urcu/general_instant.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_instant<> > rcu_type;
13 void IntrusiveHashSetHdrTest::split_dyn_RCU_GPI_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::options::dynamic_bucket_table, "Set has static bucket table" );
37 void IntrusiveHashSetHdrTest::split_dyn_RCU_GPI_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::options::dynamic_bucket_table, "Set has static bucket table" );
60 void IntrusiveHashSetHdrTest::split_dyn_RCU_GPI_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::options::dynamic_bucket_table, "Set has static bucket table" );
85 void IntrusiveHashSetHdrTest::split_dyn_RCU_GPI_member_cmp_lazy()
87 typedef member_int_item< ci::split_list::node< ci::lazy_list::node<rcu_type> > > item;
88 typedef ci::LazyList< rcu_type
90 ,ci::lazy_list::make_traits<
91 ci::opt::hook< ci::lazy_list::member_hook<
92 offsetof( item, hMember ),
95 ,co::compare< cmp<item> >
96 ,ci::opt::disposer< faked_disposer >
100 typedef ci::SplitListSet< rcu_type, ord_list,
101 ci::split_list::make_traits<
103 ,co::memory_model<co::v::relaxed_ordering>
106 static_assert( set::options::dynamic_bucket_table, "Set has static bucket table" );
111 void IntrusiveHashSetHdrTest::split_dyn_RCU_GPI_member_less_lazy()
113 typedef member_int_item< ci::split_list::node< ci::lazy_list::node<rcu_type> > > item;
114 typedef ci::LazyList< rcu_type
116 ,ci::lazy_list::make_traits<
117 ci::opt::hook< ci::lazy_list::member_hook<
118 offsetof( item, hMember ),
121 ,co::less< less<item> >
122 ,ci::opt::disposer< faked_disposer >
126 typedef ci::SplitListSet< rcu_type, ord_list,
127 ci::split_list::make_traits<
129 ,co::memory_model<co::v::sequential_consistent>
132 static_assert( set::options::dynamic_bucket_table, "Set has static bucket table" );
137 void IntrusiveHashSetHdrTest::split_dyn_RCU_GPI_member_cmpmix_lazy()
139 typedef member_int_item< ci::split_list::node< ci::lazy_list::node<rcu_type> > > item;
140 typedef ci::LazyList< rcu_type
142 ,ci::lazy_list::make_traits<
143 ci::opt::hook< ci::lazy_list::member_hook<
144 offsetof( item, hMember ),
147 ,co::compare< cmp<item> >
148 ,co::less< less<item> >
149 ,ci::opt::disposer< faked_disposer >
153 typedef ci::SplitListSet< rcu_type, ord_list,
154 ci::split_list::make_traits<
156 ,co::item_counter< simple_item_counter >
159 static_assert( set::options::dynamic_bucket_table, "Set has static bucket table" );
165 // Static bucket table
166 void IntrusiveHashSetHdrTest::split_st_RCU_GPI_base_cmp_lazy()
168 typedef base_int_item< ci::split_list::node< ci::lazy_list::node<rcu_type> > > item;
169 typedef ci::LazyList< rcu_type
171 ,ci::lazy_list::make_traits<
172 ci::opt::hook< ci::lazy_list::base_hook< co::gc<rcu_type> > >
173 ,co::compare< cmp<item> >
174 ,ci::opt::disposer< faked_disposer >
178 typedef ci::SplitListSet< rcu_type, ord_list,
179 ci::split_list::make_traits<
181 ,ci::split_list::dynamic_bucket_table<false>
182 ,co::memory_model<co::v::relaxed_ordering>
185 static_assert( !set::options::dynamic_bucket_table, "Set has dynamic bucket table" );
190 void IntrusiveHashSetHdrTest::split_st_RCU_GPI_base_less_lazy()
192 typedef base_int_item< ci::split_list::node< ci::lazy_list::node<rcu_type> > > item;
193 typedef ci::LazyList< rcu_type
195 ,ci::lazy_list::make_traits<
196 ci::opt::hook< ci::lazy_list::base_hook< co::gc<rcu_type> > >
197 ,co::less< less<item> >
198 ,ci::opt::disposer< faked_disposer >
202 typedef ci::SplitListSet< rcu_type, ord_list,
203 ci::split_list::make_traits<
205 ,ci::split_list::dynamic_bucket_table<false>
206 ,co::memory_model<co::v::sequential_consistent>
209 static_assert( !set::options::dynamic_bucket_table, "Set has dynamic bucket table" );
214 void IntrusiveHashSetHdrTest::split_st_RCU_GPI_base_cmpmix_lazy()
216 typedef base_int_item< ci::split_list::node<ci::lazy_list::node<rcu_type> > > item;
217 typedef ci::LazyList< rcu_type
219 ,ci::lazy_list::make_traits<
220 ci::opt::hook< ci::lazy_list::base_hook< co::gc<rcu_type> > >
221 ,co::less< less<item> >
222 ,co::compare< cmp<item> >
223 ,ci::opt::disposer< faked_disposer >
227 typedef ci::SplitListSet< rcu_type, ord_list,
228 ci::split_list::make_traits<
230 ,co::item_counter< simple_item_counter >
231 ,ci::split_list::dynamic_bucket_table<false>
234 static_assert( !set::options::dynamic_bucket_table, "Set has dynamic bucket table" );
239 void IntrusiveHashSetHdrTest::split_st_RCU_GPI_member_cmp_lazy()
241 typedef member_int_item< ci::split_list::node< ci::lazy_list::node<rcu_type> > > item;
242 typedef ci::LazyList< rcu_type
244 ,ci::lazy_list::make_traits<
245 ci::opt::hook< ci::lazy_list::member_hook<
246 offsetof( item, hMember ),
249 ,co::compare< cmp<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::relaxed_ordering>
261 static_assert( !set::options::dynamic_bucket_table, "Set has dynamic bucket table" );
266 void IntrusiveHashSetHdrTest::split_st_RCU_GPI_member_less_lazy()
268 typedef member_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::member_hook<
273 offsetof( item, hMember ),
276 ,co::less< less<item> >
277 ,ci::opt::disposer< faked_disposer >
281 typedef ci::SplitListSet< rcu_type, ord_list,
282 ci::split_list::make_traits<
283 ci::split_list::dynamic_bucket_table<false>
284 ,co::hash< hash_int >
285 ,co::memory_model<co::v::sequential_consistent>
288 static_assert( !set::options::dynamic_bucket_table, "Set has dynamic bucket table" );
293 void IntrusiveHashSetHdrTest::split_st_RCU_GPI_member_cmpmix_lazy()
295 typedef member_int_item< ci::split_list::node< ci::lazy_list::node<rcu_type> > > item;
296 typedef ci::LazyList< rcu_type
298 ,ci::lazy_list::make_traits<
299 ci::opt::hook< ci::lazy_list::member_hook<
300 offsetof( item, hMember ),
303 ,co::compare< cmp<item> >
304 ,co::less< less<item> >
305 ,ci::opt::disposer< faked_disposer >
309 typedef ci::SplitListSet< rcu_type, ord_list,
310 ci::split_list::make_traits<
312 ,co::item_counter< simple_item_counter >
313 ,ci::split_list::dynamic_bucket_table<false>
316 static_assert( !set::options::dynamic_bucket_table, "Set has dynamic bucket table" );