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