issue#11: cds: changed __CDS_ guard prefix to CDSLIB_ for all .h files
[libcds.git] / tests / test-hdr / tree / hdr_intrusive_ellen_bintree_hp_member.cpp
1 //$$CDS-header$$
2
3 #include "tree/hdr_intrusive_bintree.h"
4 #include <cds/intrusive/ellen_bintree_hp.h>
5
6 #include "tree/hdr_intrusive_ellen_bintree_pool_hp.h"
7 #include "unit/print_ellenbintree_stat.h"
8
9 namespace tree {
10     namespace ci = cds::intrusive;
11     namespace co = cds::opt;
12     namespace {
13         typedef ci::ellen_bintree::node<cds::gc::HP>                        leaf_node;
14         typedef IntrusiveBinTreeHdrTest::member_hook_value< leaf_node >     member_value;
15
16         typedef ci::opt::hook< ci::ellen_bintree::member_hook< offsetof(member_value, hook), co::gc< cds::gc::HP > > > member_hook;
17
18         struct print_stat {
19             template <typename Tree>
20             void operator()( Tree const& t)
21             {
22                 std::cout << t.statistics();
23             }
24         };
25
26         typedef ci::ellen_bintree::internal_node< IntrusiveBinTreeHdrTest::key_type, leaf_node > internal_node;
27         typedef ci::ellen_bintree::update_desc< leaf_node, internal_node >   update_desc;
28     }
29
30     void IntrusiveBinTreeHdrTest::EllenBinTree_hp_member_less()
31     {
32         struct tree_traits : public ci::ellen_bintree::traits
33         {
34             typedef ci::ellen_bintree::member_hook< offsetof( member_value, hook ), co::gc< cds::gc::HP >> hook;
35             typedef IntrusiveBinTreeHdrTest::key_extractor< member_value > key_extractor;
36             typedef IntrusiveBinTreeHdrTest::less< member_value > less;
37             typedef IntrusiveBinTreeHdrTest::disposer< member_value > disposer;
38         };
39         typedef ci::EllenBinTree< cds::gc::HP, key_type, member_value,
40             ci::ellen_bintree::make_traits<
41                 member_hook
42                 ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
43                 ,co::less< less< member_value > >
44                 ,ci::opt::disposer< disposer< member_value > >
45             >::type
46         > tree_type;
47
48         test<tree_type, print_stat>();
49     }
50
51     void IntrusiveBinTreeHdrTest::EllenBinTree_hp_member_less_stat()
52     {
53         typedef ci::EllenBinTree< cds::gc::HP, key_type, member_value,
54             ci::ellen_bintree::make_traits<
55                 member_hook
56                 ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
57                 ,co::less< less< member_value > >
58                 ,ci::opt::disposer< disposer< member_value > >
59                 ,co::stat< ci::ellen_bintree::stat<> >
60             >::type
61         > tree_type;
62
63         test<tree_type, print_stat>();
64     }
65
66     void IntrusiveBinTreeHdrTest::EllenBinTree_hp_member_cmp()
67     {
68         typedef ci::EllenBinTree< cds::gc::HP, key_type, member_value,
69             ci::ellen_bintree::make_traits<
70                 member_hook
71                 ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
72                 ,co::compare< compare< member_value > >
73                 ,ci::opt::disposer< disposer< member_value > >
74             >::type
75         > tree_type;
76
77         test<tree_type, print_stat>();
78     }
79
80     void IntrusiveBinTreeHdrTest::EllenBinTree_hp_member_cmpless()
81     {
82         typedef ci::EllenBinTree< cds::gc::HP, key_type, member_value,
83             ci::ellen_bintree::make_traits<
84                 member_hook
85                 ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
86                 ,co::compare< compare< member_value > >
87                 ,co::less< less< member_value > >
88                 ,ci::opt::disposer< disposer< member_value > >
89             >::type
90         > tree_type;
91
92         test<tree_type, print_stat>();
93     }
94
95     void IntrusiveBinTreeHdrTest::EllenBinTree_hp_member_less_ic()
96     {
97         typedef ci::EllenBinTree< cds::gc::HP, key_type, member_value,
98             ci::ellen_bintree::make_traits<
99                 member_hook
100                 ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
101                 ,co::less< less< member_value > >
102                 ,ci::opt::disposer< disposer< member_value > >
103                 ,co::item_counter< cds::atomicity::item_counter >
104             >::type
105         > tree_type;
106
107         test<tree_type, print_stat>();
108     }
109
110     void IntrusiveBinTreeHdrTest::EllenBinTree_hp_member_cmp_ic()
111     {
112         typedef ci::EllenBinTree< cds::gc::HP, key_type, member_value,
113             ci::ellen_bintree::make_traits<
114                 member_hook
115                 ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
116                 ,co::compare< compare< member_value > >
117                 ,ci::opt::disposer< disposer< member_value > >
118                 ,co::item_counter< cds::atomicity::item_counter >
119             >::type
120         > tree_type;
121
122         test<tree_type, print_stat>();
123     }
124
125     void IntrusiveBinTreeHdrTest::EllenBinTree_hp_member_cmp_ic_stat()
126     {
127         typedef ci::EllenBinTree< cds::gc::HP, key_type, member_value,
128             ci::ellen_bintree::make_traits<
129                 member_hook
130                 ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
131                 ,co::compare< compare< member_value > >
132                 ,ci::opt::disposer< disposer< member_value > >
133                 ,co::item_counter< cds::atomicity::item_counter >
134                 ,co::stat< ci::ellen_bintree::stat<> >
135             >::type
136         > tree_type;
137
138         test<tree_type, print_stat>();
139     }
140
141     void IntrusiveBinTreeHdrTest::EllenBinTree_hp_member_cmp_ic_stat_yield()
142     {
143         typedef ci::EllenBinTree< cds::gc::HP, key_type, member_value,
144             ci::ellen_bintree::make_traits<
145                 member_hook
146                 ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
147                 ,co::compare< compare< member_value > >
148                 ,ci::opt::disposer< disposer< member_value > >
149                 ,co::item_counter< cds::atomicity::item_counter >
150                 ,co::stat< ci::ellen_bintree::stat<> >
151                 , co::back_off< cds::backoff::yield >
152             >::type
153         > tree_type;
154
155         test<tree_type, print_stat>();
156     }
157
158     void IntrusiveBinTreeHdrTest::EllenBinTree_hp_member_less_pool()
159     {
160         typedef ci::EllenBinTree< cds::gc::HP, key_type, member_value,
161             ci::ellen_bintree::make_traits<
162                 member_hook
163                 ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
164                 ,co::less< less< member_value > >
165                 ,ci::opt::disposer< disposer< member_value > >
166                 ,co::node_allocator< cds::memory::pool_allocator< internal_node, ellen_bintree_hp::internal_node_pool_accessor > >
167                 ,ci::ellen_bintree::update_desc_allocator< cds::memory::pool_allocator< update_desc, ellen_bintree_hp::update_desc_pool_accessor > >
168             >::type
169         > tree_type;
170
171         test<tree_type, print_stat>();
172     }
173
174     void IntrusiveBinTreeHdrTest::EllenBinTree_hp_member_less_pool_ic_stat()
175     {
176         typedef ci::EllenBinTree< cds::gc::HP, key_type, member_value,
177             ci::ellen_bintree::make_traits<
178                 member_hook
179                 ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
180                 ,co::less< less< member_value > >
181                 ,ci::opt::disposer< disposer< member_value > >
182                 ,co::node_allocator< cds::memory::pool_allocator< internal_node, ellen_bintree_hp::internal_node_pool_accessor > >
183                 ,ci::ellen_bintree::update_desc_allocator< cds::memory::pool_allocator< update_desc, ellen_bintree_hp::update_desc_pool_accessor > >
184                 ,co::item_counter< cds::atomicity::item_counter >
185                 ,co::stat< ci::ellen_bintree::stat<> >
186             >::type
187         > tree_type;
188
189         test<tree_type, print_stat>();
190     }
191
192
193 } //namespace tree