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.h"
33 #include <cds/intrusive/skip_list_dhp.h>
34 #include "map/print_skiplist_stat.h"
38 void IntrusiveSkipListSet::skiplist_dhp_base_cmp()
40 typedef base_int_item< ci::skip_list::node< cds::gc::DHP> > item;
42 typedef ci::SkipListSet< cds::gc::DHP, item,
43 ci::skip_list::make_traits<
44 ci::opt::hook< ci::skip_list::base_hook< co::gc<cds::gc::DHP> > >
45 ,co::compare< cmp<item> >
46 ,ci::opt::disposer< faked_disposer >
47 ,co::item_counter< cds::atomicity::item_counter >
51 test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
54 void IntrusiveSkipListSet::skiplist_dhp_base_less()
56 typedef base_int_item< ci::skip_list::node< cds::gc::DHP> > item;
58 typedef ci::SkipListSet< cds::gc::DHP, item,
59 ci::skip_list::make_traits<
60 ci::opt::hook< ci::skip_list::base_hook< co::gc<cds::gc::DHP> > >
61 ,co::less< less<item> >
62 ,ci::opt::disposer< faked_disposer >
63 ,co::item_counter< cds::atomicity::item_counter >
67 test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
70 void IntrusiveSkipListSet::skiplist_dhp_base_cmpmix()
72 typedef base_int_item< ci::skip_list::node< cds::gc::DHP> > item;
74 typedef ci::SkipListSet< cds::gc::DHP, item,
75 ci::skip_list::make_traits<
76 ci::opt::hook< ci::skip_list::base_hook< co::gc<cds::gc::DHP> > >
77 ,co::less< less<item> >
78 ,ci::opt::disposer< faked_disposer >
79 ,co::item_counter< cds::atomicity::item_counter >
80 ,co::compare< cmp<item> >
84 test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
87 void IntrusiveSkipListSet::skiplist_dhp_base_cmp_stat()
89 typedef base_int_item< ci::skip_list::node< cds::gc::DHP> > item;
91 typedef ci::SkipListSet< cds::gc::DHP, item,
92 ci::skip_list::make_traits<
93 ci::opt::hook< ci::skip_list::base_hook< co::gc<cds::gc::DHP> > >
94 ,co::compare< cmp<item> >
95 ,ci::opt::disposer< faked_disposer >
96 ,co::stat< ci::skip_list::stat<> >
97 ,co::item_counter< cds::atomicity::item_counter >
101 test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
104 void IntrusiveSkipListSet::skiplist_dhp_base_less_stat()
106 typedef base_int_item< ci::skip_list::node< cds::gc::DHP> > item;
108 typedef ci::SkipListSet< cds::gc::DHP, item,
109 ci::skip_list::make_traits<
110 ci::opt::hook< ci::skip_list::base_hook< co::gc<cds::gc::DHP> > >
111 ,co::less< less<item> >
112 ,co::item_counter< cds::atomicity::item_counter >
113 ,ci::opt::disposer< faked_disposer >
114 ,co::stat< ci::skip_list::stat<> >
118 test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
121 void IntrusiveSkipListSet::skiplist_dhp_base_cmpmix_stat()
123 typedef base_int_item< ci::skip_list::node< cds::gc::DHP> > item;
125 typedef ci::SkipListSet< cds::gc::DHP, item,
126 ci::skip_list::make_traits<
127 ci::opt::hook< ci::skip_list::base_hook< co::gc<cds::gc::DHP> > >
128 ,co::less< less<item> >
129 ,ci::opt::disposer< faked_disposer >
130 ,co::compare< cmp<item> >
131 ,co::stat< ci::skip_list::stat<> >
132 ,co::item_counter< cds::atomicity::item_counter >
136 test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
139 void IntrusiveSkipListSet::skiplist_dhp_base_cmp_xorshift()
141 typedef base_int_item< ci::skip_list::node< cds::gc::DHP> > item;
143 typedef ci::SkipListSet< cds::gc::DHP, item,
144 ci::skip_list::make_traits<
145 ci::opt::hook< ci::skip_list::base_hook< co::gc<cds::gc::DHP> > >
146 ,co::compare< cmp<item> >
147 ,co::item_counter< cds::atomicity::item_counter >
148 ,ci::opt::disposer< faked_disposer >
149 ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
153 test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
156 void IntrusiveSkipListSet::skiplist_dhp_base_less_xorshift()
158 typedef base_int_item< ci::skip_list::node< cds::gc::DHP> > item;
160 typedef ci::SkipListSet< cds::gc::DHP, item,
161 ci::skip_list::make_traits<
162 ci::opt::hook< ci::skip_list::base_hook< co::gc<cds::gc::DHP> > >
163 ,co::less< less<item> >
164 ,ci::opt::disposer< faked_disposer >
165 ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
166 ,co::item_counter< cds::atomicity::item_counter >
170 test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
173 void IntrusiveSkipListSet::skiplist_dhp_base_cmpmix_xorshift()
175 typedef base_int_item< ci::skip_list::node< cds::gc::DHP> > item;
177 typedef ci::SkipListSet< cds::gc::DHP, item,
178 ci::skip_list::make_traits<
179 ci::opt::hook< ci::skip_list::base_hook< co::gc<cds::gc::DHP> > >
180 ,co::less< less<item> >
181 ,ci::opt::disposer< faked_disposer >
182 ,co::compare< cmp<item> >
183 ,co::item_counter< cds::atomicity::item_counter >
184 ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
188 test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
191 void IntrusiveSkipListSet::skiplist_dhp_base_cmp_xorshift_stat()
193 typedef base_int_item< ci::skip_list::node< cds::gc::DHP> > item;
195 typedef ci::SkipListSet< cds::gc::DHP, item,
196 ci::skip_list::make_traits<
197 ci::opt::hook< ci::skip_list::base_hook< co::gc<cds::gc::DHP> > >
198 ,co::compare< cmp<item> >
199 ,co::item_counter< cds::atomicity::item_counter >
200 ,ci::opt::disposer< faked_disposer >
201 ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
202 ,co::stat< ci::skip_list::stat<> >
206 test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
209 void IntrusiveSkipListSet::skiplist_dhp_base_less_xorshift_stat()
211 typedef base_int_item< ci::skip_list::node< cds::gc::DHP> > item;
213 typedef ci::SkipListSet< cds::gc::DHP, item,
214 ci::skip_list::make_traits<
215 ci::opt::hook< ci::skip_list::base_hook< co::gc<cds::gc::DHP> > >
216 ,co::less< less<item> >
217 ,ci::opt::disposer< faked_disposer >
218 ,co::item_counter< cds::atomicity::item_counter >
219 ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
220 ,co::stat< ci::skip_list::stat<> >
224 test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
227 void IntrusiveSkipListSet::skiplist_dhp_base_cmpmix_xorshift_stat()
229 typedef base_int_item< ci::skip_list::node< cds::gc::DHP> > item;
231 typedef ci::SkipListSet< cds::gc::DHP, item,
232 ci::skip_list::make_traits<
233 ci::opt::hook< ci::skip_list::base_hook< co::gc<cds::gc::DHP> > >
234 ,co::less< less<item> >
235 ,co::item_counter< cds::atomicity::item_counter >
236 ,ci::opt::disposer< faked_disposer >
237 ,co::compare< cmp<item> >
238 ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
239 ,co::stat< ci::skip_list::stat<> >
243 test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
248 void IntrusiveSkipListSet::skiplist_dhp_base_cmp_pascal()
250 typedef base_int_item< ci::skip_list::node< cds::gc::DHP> > item;
252 typedef ci::SkipListSet< cds::gc::DHP, item,
253 ci::skip_list::make_traits<
254 ci::opt::hook< ci::skip_list::base_hook< co::gc<cds::gc::DHP> > >
255 ,co::compare< cmp<item> >
256 ,co::item_counter< cds::atomicity::item_counter >
257 ,ci::opt::disposer< faked_disposer >
258 ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
262 test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
265 void IntrusiveSkipListSet::skiplist_dhp_base_less_pascal()
267 typedef base_int_item< ci::skip_list::node< cds::gc::DHP> > item;
269 typedef ci::SkipListSet< cds::gc::DHP, item,
270 ci::skip_list::make_traits<
271 ci::opt::hook< ci::skip_list::base_hook< co::gc<cds::gc::DHP> > >
272 ,co::less< less<item> >
273 ,co::item_counter< cds::atomicity::item_counter >
274 ,ci::opt::disposer< faked_disposer >
275 ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
279 test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
282 void IntrusiveSkipListSet::skiplist_dhp_base_cmpmix_pascal()
284 typedef base_int_item< ci::skip_list::node< cds::gc::DHP> > item;
286 typedef ci::SkipListSet< cds::gc::DHP, item,
287 ci::skip_list::make_traits<
288 ci::opt::hook< ci::skip_list::base_hook< co::gc<cds::gc::DHP> > >
289 ,co::less< less<item> >
290 ,ci::opt::disposer< faked_disposer >
291 ,co::compare< cmp<item> >
292 ,co::item_counter< cds::atomicity::item_counter >
293 ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
297 test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
300 void IntrusiveSkipListSet::skiplist_dhp_base_cmp_pascal_stat()
302 typedef base_int_item< ci::skip_list::node< cds::gc::DHP> > item;
304 typedef ci::SkipListSet< cds::gc::DHP, item,
305 ci::skip_list::make_traits<
306 ci::opt::hook< ci::skip_list::base_hook< co::gc<cds::gc::DHP> > >
307 ,co::compare< cmp<item> >
308 ,ci::opt::disposer< faked_disposer >
309 ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
310 ,co::stat< ci::skip_list::stat<> >
311 ,co::item_counter< cds::atomicity::item_counter >
315 test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
318 void IntrusiveSkipListSet::skiplist_dhp_base_less_pascal_stat()
320 typedef base_int_item< ci::skip_list::node< cds::gc::DHP> > item;
322 typedef ci::SkipListSet< cds::gc::DHP, item,
323 ci::skip_list::make_traits<
324 ci::opt::hook< ci::skip_list::base_hook< co::gc<cds::gc::DHP> > >
325 ,co::less< less<item> >
326 ,ci::opt::disposer< faked_disposer >
327 ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
328 ,co::stat< ci::skip_list::stat<> >
329 ,co::item_counter< cds::atomicity::item_counter >
333 test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();
336 void IntrusiveSkipListSet::skiplist_dhp_base_cmpmix_pascal_stat()
338 typedef base_int_item< ci::skip_list::node< cds::gc::DHP> > item;
340 typedef ci::SkipListSet< cds::gc::DHP, item,
341 ci::skip_list::make_traits<
342 ci::opt::hook< ci::skip_list::base_hook< co::gc<cds::gc::DHP> > >
343 ,co::less< less<item> >
344 ,ci::opt::disposer< faked_disposer >
345 ,co::compare< cmp<item> >
346 ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
347 ,co::stat< ci::skip_list::stat<> >
348 ,co::item_counter< cds::atomicity::item_counter >
352 test_skiplist<set_type, misc::print_skiplist_stat<set_type::stat> >();