issue#11: cds: changed __CDS_ guard prefix to CDSLIB_ for all .h files
[libcds.git] / tests / test-hdr / tree / hdr_intrusive_ellen_bintree_rcu_sht_member.cpp
1 //$$CDS-header$$
2
3 #include "tree/hdr_intrusive_bintree.h"
4 #include <cds/urcu/signal_threaded.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_threaded<> > 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
36     void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_sht_member_less()
37     {
38 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
39         typedef ci::EllenBinTree< rcu_type, 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_rcu<tree_type, print_stat>();
49 #endif
50     }
51
52     void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_sht_member_less_stat()
53     {
54 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
55         typedef ci::EllenBinTree< rcu_type, key_type, member_value,
56             ci::ellen_bintree::make_traits<
57                 member_hook
58                 ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
59                 ,co::less< less< member_value > >
60                 ,ci::opt::disposer< disposer< member_value > >
61                 ,co::stat< ci::ellen_bintree::stat<> >
62             >::type
63         > tree_type;
64
65         test_rcu<tree_type, print_stat>();
66 #endif
67     }
68
69     void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_sht_member_cmp()
70     {
71 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
72         typedef ci::EllenBinTree< rcu_type, key_type, member_value,
73             ci::ellen_bintree::make_traits<
74                 member_hook
75                 ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
76                 ,co::compare< compare< member_value > >
77                 ,ci::opt::disposer< disposer< member_value > >
78             >::type
79         > tree_type;
80
81         test_rcu<tree_type, print_stat>();
82 #endif
83     }
84
85     void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_sht_member_cmpless()
86     {
87 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
88         typedef ci::EllenBinTree< rcu_type, key_type, member_value,
89             ci::ellen_bintree::make_traits<
90                 member_hook
91                 ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
92                 ,co::compare< compare< member_value > >
93                 ,co::less< less< member_value > >
94                 ,ci::opt::disposer< disposer< member_value > >
95             >::type
96         > tree_type;
97
98         test_rcu<tree_type, print_stat>();
99 #endif
100     }
101
102     void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_sht_member_less_ic()
103     {
104 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
105         typedef ci::EllenBinTree< rcu_type, key_type, member_value,
106             ci::ellen_bintree::make_traits<
107                 member_hook
108                 ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
109                 ,co::less< less< member_value > >
110                 ,ci::opt::disposer< disposer< member_value > >
111                 ,co::item_counter< cds::atomicity::item_counter >
112             >::type
113         > tree_type;
114
115         test_rcu<tree_type, print_stat>();
116 #endif
117     }
118
119     void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_sht_member_cmp_ic()
120     {
121 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
122         typedef ci::EllenBinTree< rcu_type, key_type, member_value,
123             ci::ellen_bintree::make_traits<
124                 member_hook
125                 ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
126                 ,co::compare< compare< member_value > >
127                 ,ci::opt::disposer< disposer< member_value > >
128                 ,co::item_counter< cds::atomicity::item_counter >
129             >::type
130         > tree_type;
131
132         test_rcu<tree_type, print_stat>();
133 #endif
134     }
135
136     void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_sht_member_cmp_ic_stat()
137     {
138 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
139         typedef ci::EllenBinTree< rcu_type, key_type, member_value,
140             ci::ellen_bintree::make_traits<
141                 member_hook
142                 ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
143                 ,co::compare< compare< member_value > >
144                 ,ci::opt::disposer< disposer< member_value > >
145                 ,co::item_counter< cds::atomicity::item_counter >
146                 ,co::stat< ci::ellen_bintree::stat<> >
147             >::type
148         > tree_type;
149
150         test_rcu<tree_type, print_stat>();
151 #endif
152     }
153
154     void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_sht_member_cmp_ic_stat_yield()
155     {
156 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
157         typedef ci::EllenBinTree< rcu_type, key_type, member_value,
158             ci::ellen_bintree::make_traits<
159                 member_hook
160                 ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
161                 ,co::compare< compare< member_value > >
162                 ,ci::opt::disposer< disposer< member_value > >
163                 ,co::item_counter< cds::atomicity::item_counter >
164                 ,co::stat< ci::ellen_bintree::stat<> >
165                 ,co::back_off< cds::backoff::yield >
166             >::type
167         > tree_type;
168
169         test_rcu<tree_type, print_stat>();
170 #endif
171     }
172
173     void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_sht_member_less_pool()
174     {
175 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
176         typedef ci::EllenBinTree< rcu_type, 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_rcu::internal_node_pool_accessor > >
183                 ,ci::ellen_bintree::update_desc_allocator< cds::memory::pool_allocator< update_desc, ellen_bintree_rcu::update_desc_pool_accessor > >
184             >::type
185         > tree_type;
186
187         test_rcu<tree_type, print_stat>();
188 #endif
189     }
190
191     void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_sht_member_less_pool_ic_stat()
192     {
193 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
194         typedef ci::EllenBinTree< rcu_type, key_type, member_value,
195             ci::ellen_bintree::make_traits<
196                 member_hook
197                 ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
198                 ,co::less< less< member_value > >
199                 ,ci::opt::disposer< disposer< member_value > >
200                 ,co::node_allocator< cds::memory::pool_allocator< internal_node, ellen_bintree_rcu::internal_node_pool_accessor > >
201                 ,ci::ellen_bintree::update_desc_allocator< cds::memory::pool_allocator< update_desc, ellen_bintree_rcu::update_desc_pool_accessor > >
202                 ,co::item_counter< cds::atomicity::item_counter >
203                 ,co::stat< ci::ellen_bintree::stat<> >
204             >::type
205         > tree_type;
206
207         test_rcu<tree_type, print_stat>();
208 #endif
209     }
210
211 } //namespace tree