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_nogc.h>
34 #include "map/print_skiplist_stat.h"
38 void IntrusiveSkipListSet::skiplist_nogc_member_cmp()
40 typedef member_int_item< ci::skip_list::node< cds::gc::nogc> > item;
42 typedef ci::SkipListSet< cds::gc::nogc, item,
43 ci::skip_list::make_traits<
44 ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::nogc> > >
45 ,co::compare< cmp<item> >
46 ,co::item_counter< cds::atomicity::item_counter >
50 test_skiplist_nogc<set_type, misc::print_skiplist_stat<set_type::stat> >();
53 void IntrusiveSkipListSet::skiplist_nogc_member_less()
55 typedef member_int_item< ci::skip_list::node< cds::gc::nogc> > item;
57 typedef ci::SkipListSet< cds::gc::nogc, item,
58 ci::skip_list::make_traits<
59 ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::nogc> > >
60 ,co::less< less<item> >
61 ,co::item_counter< cds::atomicity::item_counter >
65 test_skiplist_nogc<set_type, misc::print_skiplist_stat<set_type::stat> >();
68 void IntrusiveSkipListSet::skiplist_nogc_member_cmpmix()
70 typedef member_int_item< ci::skip_list::node< cds::gc::nogc> > item;
72 typedef ci::SkipListSet< cds::gc::nogc, item,
73 ci::skip_list::make_traits<
74 ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::nogc> > >
75 ,co::less< less<item> >
76 ,co::item_counter< cds::atomicity::item_counter >
77 ,co::compare< cmp<item> >
81 test_skiplist_nogc<set_type, misc::print_skiplist_stat<set_type::stat> >();
84 void IntrusiveSkipListSet::skiplist_nogc_member_cmp_stat()
86 typedef member_int_item< ci::skip_list::node< cds::gc::nogc> > item;
88 typedef ci::SkipListSet< cds::gc::nogc, item,
89 ci::skip_list::make_traits<
90 ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::nogc> > >
91 ,co::compare< cmp<item> >
92 ,co::stat< ci::skip_list::stat<> >
93 ,co::item_counter< cds::atomicity::item_counter >
97 test_skiplist_nogc<set_type, misc::print_skiplist_stat<set_type::stat> >();
100 void IntrusiveSkipListSet::skiplist_nogc_member_less_stat()
102 typedef member_int_item< ci::skip_list::node< cds::gc::nogc> > item;
104 typedef ci::SkipListSet< cds::gc::nogc, item,
105 ci::skip_list::make_traits<
106 ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::nogc> > >
107 ,co::less< less<item> >
108 ,co::item_counter< cds::atomicity::item_counter >
109 ,co::stat< ci::skip_list::stat<> >
113 test_skiplist_nogc<set_type, misc::print_skiplist_stat<set_type::stat> >();
116 void IntrusiveSkipListSet::skiplist_nogc_member_cmpmix_stat()
118 typedef member_int_item< ci::skip_list::node< cds::gc::nogc> > item;
120 typedef ci::SkipListSet< cds::gc::nogc, item,
121 ci::skip_list::make_traits<
122 ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::nogc> > >
123 ,co::less< less<item> >
124 ,co::compare< cmp<item> >
125 ,co::stat< ci::skip_list::stat<> >
126 ,co::item_counter< cds::atomicity::item_counter >
130 test_skiplist_nogc<set_type, misc::print_skiplist_stat<set_type::stat> >();
133 void IntrusiveSkipListSet::skiplist_nogc_member_cmp_xorshift()
135 typedef member_int_item< ci::skip_list::node< cds::gc::nogc> > item;
137 typedef ci::SkipListSet< cds::gc::nogc, item,
138 ci::skip_list::make_traits<
139 ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::nogc> > >
140 ,co::compare< cmp<item> >
141 ,co::item_counter< cds::atomicity::item_counter >
142 ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
146 test_skiplist_nogc<set_type, misc::print_skiplist_stat<set_type::stat> >();
149 void IntrusiveSkipListSet::skiplist_nogc_member_less_xorshift()
151 typedef member_int_item< ci::skip_list::node< cds::gc::nogc> > item;
153 typedef ci::SkipListSet< cds::gc::nogc, item,
154 ci::skip_list::make_traits<
155 ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::nogc> > >
156 ,co::less< less<item> >
157 ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
158 ,co::item_counter< cds::atomicity::item_counter >
162 test_skiplist_nogc<set_type, misc::print_skiplist_stat<set_type::stat> >();
165 void IntrusiveSkipListSet::skiplist_nogc_member_cmpmix_xorshift()
167 typedef member_int_item< ci::skip_list::node< cds::gc::nogc> > item;
169 typedef ci::SkipListSet< cds::gc::nogc, item,
170 ci::skip_list::make_traits<
171 ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::nogc> > >
172 ,co::less< less<item> >
173 ,co::compare< cmp<item> >
174 ,co::item_counter< cds::atomicity::item_counter >
175 ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
179 test_skiplist_nogc<set_type, misc::print_skiplist_stat<set_type::stat> >();
182 void IntrusiveSkipListSet::skiplist_nogc_member_cmp_xorshift_stat()
184 typedef member_int_item< ci::skip_list::node< cds::gc::nogc> > item;
186 typedef ci::SkipListSet< cds::gc::nogc, item,
187 ci::skip_list::make_traits<
188 ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::nogc> > >
189 ,co::compare< cmp<item> >
190 ,co::item_counter< cds::atomicity::item_counter >
191 ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
192 ,co::stat< ci::skip_list::stat<> >
196 test_skiplist_nogc<set_type, misc::print_skiplist_stat<set_type::stat> >();
199 void IntrusiveSkipListSet::skiplist_nogc_member_less_xorshift_stat()
201 typedef member_int_item< ci::skip_list::node< cds::gc::nogc> > item;
203 typedef ci::SkipListSet< cds::gc::nogc, item,
204 ci::skip_list::make_traits<
205 ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::nogc> > >
206 ,co::less< less<item> >
207 ,co::item_counter< cds::atomicity::item_counter >
208 ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
209 ,co::stat< ci::skip_list::stat<> >
213 test_skiplist_nogc<set_type, misc::print_skiplist_stat<set_type::stat> >();
216 void IntrusiveSkipListSet::skiplist_nogc_member_cmpmix_xorshift_stat()
218 typedef member_int_item< ci::skip_list::node< cds::gc::nogc> > item;
220 typedef ci::SkipListSet< cds::gc::nogc, item,
221 ci::skip_list::make_traits<
222 ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::nogc> > >
223 ,co::less< less<item> >
224 ,co::item_counter< cds::atomicity::item_counter >
225 ,co::compare< cmp<item> >
226 ,ci::skip_list::random_level_generator< ci::skip_list::xorshift >
227 ,co::stat< ci::skip_list::stat<> >
231 test_skiplist_nogc<set_type, misc::print_skiplist_stat<set_type::stat> >();
236 void IntrusiveSkipListSet::skiplist_nogc_member_cmp_pascal()
238 typedef member_int_item< ci::skip_list::node< cds::gc::nogc> > item;
240 typedef ci::SkipListSet< cds::gc::nogc, item,
241 ci::skip_list::make_traits<
242 ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::nogc> > >
243 ,co::compare< cmp<item> >
244 ,co::item_counter< cds::atomicity::item_counter >
245 ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
249 test_skiplist_nogc<set_type, misc::print_skiplist_stat<set_type::stat> >();
252 void IntrusiveSkipListSet::skiplist_nogc_member_less_pascal()
254 typedef member_int_item< ci::skip_list::node< cds::gc::nogc> > item;
256 typedef ci::SkipListSet< cds::gc::nogc, item,
257 ci::skip_list::make_traits<
258 ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::nogc> > >
259 ,co::less< less<item> >
260 ,co::item_counter< cds::atomicity::item_counter >
261 ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
265 test_skiplist_nogc<set_type, misc::print_skiplist_stat<set_type::stat> >();
268 void IntrusiveSkipListSet::skiplist_nogc_member_cmpmix_pascal()
270 typedef member_int_item< ci::skip_list::node< cds::gc::nogc> > item;
272 typedef ci::SkipListSet< cds::gc::nogc, item,
273 ci::skip_list::make_traits<
274 ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::nogc> > >
275 ,co::less< less<item> >
276 ,co::compare< cmp<item> >
277 ,co::item_counter< cds::atomicity::item_counter >
278 ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
282 test_skiplist_nogc<set_type, misc::print_skiplist_stat<set_type::stat> >();
285 void IntrusiveSkipListSet::skiplist_nogc_member_cmp_pascal_stat()
287 typedef member_int_item< ci::skip_list::node< cds::gc::nogc> > item;
289 typedef ci::SkipListSet< cds::gc::nogc, item,
290 ci::skip_list::make_traits<
291 ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::nogc> > >
292 ,co::compare< cmp<item> >
293 ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
294 ,co::stat< ci::skip_list::stat<> >
295 ,co::item_counter< cds::atomicity::item_counter >
299 test_skiplist_nogc<set_type, misc::print_skiplist_stat<set_type::stat> >();
302 void IntrusiveSkipListSet::skiplist_nogc_member_less_pascal_stat()
304 typedef member_int_item< ci::skip_list::node< cds::gc::nogc> > item;
306 typedef ci::SkipListSet< cds::gc::nogc, item,
307 ci::skip_list::make_traits<
308 ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::nogc> > >
309 ,co::less< less<item> >
310 ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
311 ,co::stat< ci::skip_list::stat<> >
312 ,co::item_counter< cds::atomicity::item_counter >
316 test_skiplist_nogc<set_type, misc::print_skiplist_stat<set_type::stat> >();
319 void IntrusiveSkipListSet::skiplist_nogc_member_cmpmix_pascal_stat()
321 typedef member_int_item< ci::skip_list::node< cds::gc::nogc> > item;
323 typedef ci::SkipListSet< cds::gc::nogc, item,
324 ci::skip_list::make_traits<
325 ci::opt::hook< ci::skip_list::member_hook< offsetof(item, hMember), co::gc<cds::gc::nogc> > >
326 ,co::less< less<item> >
327 ,co::compare< cmp<item> >
328 ,ci::skip_list::random_level_generator< ci::skip_list::turbo_pascal >
329 ,co::stat< ci::skip_list::stat<> >
330 ,co::item_counter< cds::atomicity::item_counter >
334 test_skiplist_nogc<set_type, misc::print_skiplist_stat<set_type::stat> >();