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 "list/hdr_intrusive_lazy.h"
32 #include <cds/intrusive/lazy_list_nogc.h>
36 typedef IntrusiveLazyListHeaderTest::base_int_item< cds::gc::nogc > base_item;
37 typedef IntrusiveLazyListHeaderTest::member_int_item< cds::gc::nogc > member_item;
39 struct cmp_traits : public ci::lazy_list::traits {
40 typedef ci::lazy_list::base_hook< co::gc<cds::gc::nogc> > hook;
41 typedef IntrusiveLazyListHeaderTest::cmp<base_item> compare;
42 typedef IntrusiveLazyListHeaderTest::faked_disposer disposer;
43 static const bool sort = false;
46 struct less_traits: public ci::lazy_list::traits {
47 typedef ci::lazy_list::base_hook< co::gc<cds::gc::nogc> > hook;
48 typedef IntrusiveLazyListHeaderTest::less<base_item> less;
49 typedef IntrusiveLazyListHeaderTest::faked_disposer disposer;
50 static const bool sort = false;
53 struct equal_to_traits: public ci::lazy_list::traits {
54 typedef ci::lazy_list::base_hook< co::gc<cds::gc::nogc> > hook;
55 typedef IntrusiveLazyListHeaderTest::equal_to<base_item> equal_to;
56 typedef IntrusiveLazyListHeaderTest::faked_disposer disposer;
57 static const bool sort = false;
60 typedef ci::lazy_list::make_traits<
61 ci::opt::hook< ci::lazy_list::base_hook< co::gc<cds::gc::nogc> > >
62 ,co::less< IntrusiveLazyListHeaderTest::less<base_item> >
63 ,co::compare< IntrusiveLazyListHeaderTest::cmp<base_item> >
64 ,ci::opt::disposer< IntrusiveLazyListHeaderTest::faked_disposer >
65 ,co::sort< false > >::type cmpmix_traits;
67 typedef ci::lazy_list::make_traits<
68 ci::opt::hook< ci::lazy_list::base_hook< co::gc<cds::gc::nogc> > >
69 ,co::compare< IntrusiveLazyListHeaderTest::cmp<base_item> >
70 ,co::equal_to< IntrusiveLazyListHeaderTest::equal_to<base_item> >
71 ,ci::opt::disposer< IntrusiveLazyListHeaderTest::faked_disposer >
72 ,co::sort< false > >::type equal_to_mix_traits;
74 typedef ci::lazy_list::make_traits<
75 ci::opt::hook< ci::lazy_list::base_hook< co::gc<cds::gc::nogc> > >
76 ,co::equal_to< IntrusiveLazyListHeaderTest::equal_to<base_item> >
77 ,ci::opt::disposer< IntrusiveLazyListHeaderTest::faked_disposer >
78 ,co::item_counter< cds::atomicity::item_counter >
79 ,co::sort< false > >::type ic_traits;
81 typedef ci::lazy_list::make_traits<
82 ci::opt::hook< ci::lazy_list::member_hook<
83 offsetof( member_item, hMember )
84 ,co::gc<cds::gc::nogc> > >
85 ,co::compare< IntrusiveLazyListHeaderTest::cmp<member_item> >
86 ,ci::opt::disposer< IntrusiveLazyListHeaderTest::faked_disposer >
87 ,co::sort< false > >::type member_cmp_traits;
89 typedef ci::lazy_list::make_traits<
90 ci::opt::hook< ci::lazy_list::member_hook<
91 offsetof( member_item, hMember )
92 ,co::gc<cds::gc::nogc> > >
93 ,co::less< IntrusiveLazyListHeaderTest::less<member_item> >
94 ,ci::opt::disposer< IntrusiveLazyListHeaderTest::faked_disposer >
95 ,co::sort< false > >::type member_less_traits;
97 typedef ci::lazy_list::make_traits<
98 ci::opt::hook< ci::lazy_list::member_hook<
99 offsetof( member_item, hMember )
100 ,co::gc<cds::gc::nogc> > >
101 ,co::equal_to< IntrusiveLazyListHeaderTest::equal_to<member_item> >
102 ,ci::opt::disposer< IntrusiveLazyListHeaderTest::faked_disposer >
103 ,co::sort< false > >::type member_equal_to_traits;
105 typedef ci::lazy_list::make_traits<
106 ci::opt::hook< ci::lazy_list::member_hook<
107 offsetof( member_item, hMember )
108 ,co::gc<cds::gc::nogc> > >
109 ,co::less< IntrusiveLazyListHeaderTest::less<member_item> >
110 ,co::compare< IntrusiveLazyListHeaderTest::cmp<member_item> >
111 ,ci::opt::disposer< IntrusiveLazyListHeaderTest::faked_disposer >
112 ,co::sort< false > >::type member_cmpmix_traits;
114 typedef ci::lazy_list::make_traits<
115 ci::opt::hook< ci::lazy_list::member_hook<
116 offsetof( member_item, hMember )
117 ,co::gc<cds::gc::nogc> > >
118 ,co::compare< IntrusiveLazyListHeaderTest::cmp<member_item> >
119 ,co::equal_to< IntrusiveLazyListHeaderTest::equal_to<member_item> >
120 ,ci::opt::disposer< IntrusiveLazyListHeaderTest::faked_disposer >
121 ,co::sort< false > >::type member_equal_to_mix_traits;
123 typedef ci::lazy_list::make_traits<
124 ci::opt::hook< ci::lazy_list::member_hook<
125 offsetof( member_item, hMember ),
126 co::gc<cds::gc::nogc> > >
127 ,co::equal_to< IntrusiveLazyListHeaderTest::equal_to<member_item> >
128 ,ci::opt::disposer< IntrusiveLazyListHeaderTest::faked_disposer >
129 ,co::item_counter< cds::atomicity::item_counter >
130 ,co::sort< false > >::type member_ic_traits;
133 void IntrusiveLazyListHeaderTest::nogc_base_cmp_unord()
135 typedef ci::LazyList< cds::gc::nogc, base_item, cmp_traits > list;
136 test_nogc_int_unordered<list>();
138 void IntrusiveLazyListHeaderTest::nogc_base_less_unord()
140 typedef ci::LazyList< cds::gc::nogc, base_item, less_traits > list;
141 test_nogc_int_unordered<list>();
143 void IntrusiveLazyListHeaderTest::nogc_base_equal_to_unord()
145 typedef ci::LazyList< cds::gc::nogc, base_item, equal_to_traits > list;
146 test_nogc_int_unordered<list>();
148 void IntrusiveLazyListHeaderTest::nogc_base_cmpmix_unord()
150 typedef ci::LazyList< cds::gc::nogc, base_item, cmpmix_traits > list;
151 test_nogc_int_unordered<list>();
153 void IntrusiveLazyListHeaderTest::nogc_base_equal_to_mix_unord()
155 typedef ci::LazyList< cds::gc::nogc, base_item, equal_to_mix_traits > list;
156 test_nogc_int_unordered<list>();
158 void IntrusiveLazyListHeaderTest::nogc_base_ic_unord()
160 typedef ci::LazyList< cds::gc::nogc, base_item, ic_traits > list;
161 test_nogc_int_unordered<list>();
163 void IntrusiveLazyListHeaderTest::nogc_member_cmp_unord()
165 typedef ci::LazyList< cds::gc::nogc, member_item, member_cmp_traits > list;
166 test_nogc_int_unordered<list>();
168 void IntrusiveLazyListHeaderTest::nogc_member_less_unord()
170 typedef ci::LazyList< cds::gc::nogc, member_item, member_less_traits > list;
171 test_nogc_int_unordered<list>();
173 void IntrusiveLazyListHeaderTest::nogc_member_equal_to_unord()
175 typedef ci::LazyList< cds::gc::nogc, member_item, member_equal_to_traits > list;
176 test_nogc_int_unordered<list>();
178 void IntrusiveLazyListHeaderTest::nogc_member_cmpmix_unord()
180 typedef ci::LazyList< cds::gc::nogc, member_item, member_cmpmix_traits > list;
181 test_nogc_int_unordered<list>();
183 void IntrusiveLazyListHeaderTest::nogc_member_equal_to_mix_unord()
185 typedef ci::LazyList< cds::gc::nogc, member_item, member_equal_to_mix_traits > list;
186 test_nogc_int_unordered<list>();
188 void IntrusiveLazyListHeaderTest::nogc_member_ic_unord()
190 typedef ci::LazyList< cds::gc::nogc, member_item, member_ic_traits > list;
191 test_nogc_int_unordered<list>();
194 } // namespace ordlist