2 This file is a part of libcds - Concurrent Data Structures library
4 (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
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 #include "set/hdr_intrusive_skiplist_set_rcu.h"
33 #include <cds/urcu/general_threaded.h>
34 #include <cds/intrusive/skip_list_rcu.h>
35 #include "map/print_skiplist_stat.h"
39 typedef cds::urcu::gc< cds::urcu::general_threaded<> > rcu_type;
42 void IntrusiveSkipListSetRCU::skiplist_rcu_gpt_base_cmp()
44 typedef base_int_item< ci::skip_list::node< rcu_type> > item;
46 typedef ci::SkipListSet< rcu_type, item,
47 ci::skip_list::make_traits<
48 ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
49 ,co::compare< cmp<item> >
50 ,ci::opt::disposer< faked_disposer >
51 ,co::item_counter< cds::atomicity::item_counter >
55 test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
58 void IntrusiveSkipListSetRCU::skiplist_rcu_gpt_base_less()
60 typedef base_int_item< ci::skip_list::node< rcu_type> > item;
62 typedef ci::SkipListSet< rcu_type, item,
63 ci::skip_list::make_traits<
64 ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
65 ,co::less< less<item> >
66 ,ci::opt::disposer< faked_disposer >
67 ,co::item_counter< cds::atomicity::item_counter >
71 test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
74 void IntrusiveSkipListSetRCU::skiplist_rcu_gpt_base_cmpmix()
76 typedef base_int_item< ci::skip_list::node< rcu_type> > item;
78 typedef ci::SkipListSet< rcu_type, item,
79 ci::skip_list::make_traits<
80 ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
81 ,co::less< less<item> >
82 ,ci::opt::disposer< faked_disposer >
83 ,co::item_counter< cds::atomicity::item_counter >
84 ,co::compare< cmp<item> >
88 test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
91 void IntrusiveSkipListSetRCU::skiplist_rcu_gpt_base_cmp_stat()
93 typedef base_int_item< ci::skip_list::node< rcu_type> > item;
95 typedef ci::SkipListSet< rcu_type, item,
96 ci::skip_list::make_traits<
97 ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
98 ,co::compare< cmp<item> >
99 ,ci::opt::disposer< faked_disposer >
100 ,co::stat< ci::skip_list::stat<> >
101 ,co::item_counter< cds::atomicity::item_counter >
105 test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
108 void IntrusiveSkipListSetRCU::skiplist_rcu_gpt_base_less_stat()
110 typedef base_int_item< ci::skip_list::node< rcu_type> > item;
112 typedef ci::SkipListSet< rcu_type, item,
113 ci::skip_list::make_traits<
114 ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
115 ,co::less< less<item> >
116 ,co::item_counter< cds::atomicity::item_counter >
117 ,ci::opt::disposer< faked_disposer >
118 ,co::stat< ci::skip_list::stat<> >
122 test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
125 void IntrusiveSkipListSetRCU::skiplist_rcu_gpt_base_cmpmix_stat()
127 typedef base_int_item< ci::skip_list::node< rcu_type> > item;
129 typedef ci::SkipListSet< rcu_type, item,
130 ci::skip_list::make_traits<
131 ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
132 ,co::less< less<item> >
133 ,ci::opt::disposer< faked_disposer >
134 ,co::compare< cmp<item> >
135 ,co::stat< ci::skip_list::stat<> >
136 ,co::item_counter< cds::atomicity::item_counter >
140 test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
143 void IntrusiveSkipListSetRCU::skiplist_rcu_gpt_base_cmp_xorshift()
145 typedef base_int_item< ci::skip_list::node< rcu_type> > item;
147 typedef ci::SkipListSet< rcu_type, item,
148 ci::skip_list::make_traits<
149 ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
150 ,co::compare< cmp<item> >
151 ,co::item_counter< cds::atomicity::item_counter >
152 ,ci::opt::disposer< faked_disposer >
153 ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
157 test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
160 void IntrusiveSkipListSetRCU::skiplist_rcu_gpt_base_less_xorshift()
162 typedef base_int_item< ci::skip_list::node< rcu_type> > item;
164 typedef ci::SkipListSet< rcu_type, item,
165 ci::skip_list::make_traits<
166 ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
167 ,co::less< less<item> >
168 ,ci::opt::disposer< faked_disposer >
169 ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
170 ,co::item_counter< cds::atomicity::item_counter >
174 test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
177 void IntrusiveSkipListSetRCU::skiplist_rcu_gpt_base_cmpmix_xorshift()
179 typedef base_int_item< ci::skip_list::node< rcu_type> > item;
181 typedef ci::SkipListSet< rcu_type, item,
182 ci::skip_list::make_traits<
183 ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
184 ,co::less< less<item> >
185 ,ci::opt::disposer< faked_disposer >
186 ,co::compare< cmp<item> >
187 ,co::item_counter< cds::atomicity::item_counter >
188 ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
192 test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
195 void IntrusiveSkipListSetRCU::skiplist_rcu_gpt_base_cmp_xorshift_stat()
197 typedef base_int_item< ci::skip_list::node< rcu_type> > item;
199 typedef ci::SkipListSet< rcu_type, item,
200 ci::skip_list::make_traits<
201 ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
202 ,co::compare< cmp<item> >
203 ,co::item_counter< cds::atomicity::item_counter >
204 ,ci::opt::disposer< faked_disposer >
205 ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
206 ,co::stat< ci::skip_list::stat<> >
210 test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
213 void IntrusiveSkipListSetRCU::skiplist_rcu_gpt_base_less_xorshift_stat()
215 typedef base_int_item< ci::skip_list::node< rcu_type> > item;
217 typedef ci::SkipListSet< rcu_type, item,
218 ci::skip_list::make_traits<
219 ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
220 ,co::less< less<item> >
221 ,ci::opt::disposer< faked_disposer >
222 ,co::item_counter< cds::atomicity::item_counter >
223 ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
224 ,co::stat< ci::skip_list::stat<> >
228 test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
231 void IntrusiveSkipListSetRCU::skiplist_rcu_gpt_base_cmpmix_xorshift_stat()
233 typedef base_int_item< ci::skip_list::node< rcu_type> > item;
235 typedef ci::SkipListSet< rcu_type, item,
236 ci::skip_list::make_traits<
237 ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
238 ,co::less< less<item> >
239 ,co::item_counter< cds::atomicity::item_counter >
240 ,ci::opt::disposer< faked_disposer >
241 ,co::compare< cmp<item> >
242 ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
243 ,co::stat< ci::skip_list::stat<> >
247 test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
252 void IntrusiveSkipListSetRCU::skiplist_rcu_gpt_base_cmp_pascal()
254 typedef base_int_item< ci::skip_list::node< rcu_type> > item;
256 typedef ci::SkipListSet< rcu_type, item,
257 ci::skip_list::make_traits<
258 ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
259 ,co::compare< cmp<item> >
260 ,co::item_counter< cds::atomicity::item_counter >
261 ,ci::opt::disposer< faked_disposer >
262 ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
266 test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
269 void IntrusiveSkipListSetRCU::skiplist_rcu_gpt_base_less_pascal()
271 typedef base_int_item< ci::skip_list::node< rcu_type> > item;
273 typedef ci::SkipListSet< rcu_type, item,
274 ci::skip_list::make_traits<
275 ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
276 ,co::less< less<item> >
277 ,co::item_counter< cds::atomicity::item_counter >
278 ,ci::opt::disposer< faked_disposer >
279 ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
283 test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
286 void IntrusiveSkipListSetRCU::skiplist_rcu_gpt_base_cmpmix_pascal()
288 typedef base_int_item< ci::skip_list::node< rcu_type> > item;
290 typedef ci::SkipListSet< rcu_type, item,
291 ci::skip_list::make_traits<
292 ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
293 ,co::less< less<item> >
294 ,ci::opt::disposer< faked_disposer >
295 ,co::compare< cmp<item> >
296 ,co::item_counter< cds::atomicity::item_counter >
297 ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
301 test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
304 void IntrusiveSkipListSetRCU::skiplist_rcu_gpt_base_cmp_pascal_stat()
306 typedef base_int_item< ci::skip_list::node< rcu_type> > item;
308 typedef ci::SkipListSet< rcu_type, item,
309 ci::skip_list::make_traits<
310 ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
311 ,co::compare< cmp<item> >
312 ,ci::opt::disposer< faked_disposer >
313 ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
314 ,co::stat< ci::skip_list::stat<> >
315 ,co::item_counter< cds::atomicity::item_counter >
319 test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
322 void IntrusiveSkipListSetRCU::skiplist_rcu_gpt_base_less_pascal_stat()
324 typedef base_int_item< ci::skip_list::node< rcu_type> > item;
326 typedef ci::SkipListSet< rcu_type, item,
327 ci::skip_list::make_traits<
328 ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
329 ,co::less< less<item> >
330 ,ci::opt::disposer< faked_disposer >
331 ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
332 ,co::stat< ci::skip_list::stat<> >
333 ,co::item_counter< cds::atomicity::item_counter >
337 test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
340 void IntrusiveSkipListSetRCU::skiplist_rcu_gpt_base_cmpmix_pascal_stat()
342 typedef base_int_item< ci::skip_list::node< rcu_type> > item;
344 typedef ci::SkipListSet< rcu_type, item,
345 ci::skip_list::make_traits<
346 ci::opt::hook< ci::skip_list::base_hook< co::gc<rcu_type> > >
347 ,co::less< less<item> >
348 ,ci::opt::disposer< faked_disposer >
349 ,co::compare< cmp<item> >
350 ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
351 ,co::stat< ci::skip_list::stat<> >
352 ,co::item_counter< cds::atomicity::item_counter >
356 test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();