3 #include "tree/hdr_intrusive_bintree.h"
4 #include <cds/urcu/signal_threaded.h>
5 #include <cds/intrusive/ellen_bintree_rcu.h>
7 #include "tree/hdr_intrusive_ellen_bintree_pool_rcu.h"
8 #include "unit/print_ellenbintree_stat.h"
11 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
12 namespace ci = cds::intrusive;
13 namespace co = cds::opt;
15 typedef cds::urcu::gc< cds::urcu::signal_threaded<> > rcu_type;
17 typedef ci::ellen_bintree::node<rcu_type> leaf_node;
18 typedef IntrusiveBinTreeHdrTest::member_hook_value< leaf_node > member_value;
20 typedef ci::opt::hook< ci::ellen_bintree::member_hook< offsetof(member_value, hook), co::gc< rcu_type > > > member_hook;
23 template <typename Tree>
24 void operator()( Tree const& t)
26 std::cout << t.statistics();
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;
36 void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_sht_member_less()
38 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
39 typedef ci::EllenBinTree< rcu_type, key_type, member_value,
40 ci::ellen_bintree::make_traits<
42 ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
43 ,co::less< less< member_value > >
44 ,ci::opt::disposer< disposer< member_value > >
48 test_rcu<tree_type, print_stat>();
52 void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_sht_member_less_stat()
54 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
55 typedef ci::EllenBinTree< rcu_type, key_type, member_value,
56 ci::ellen_bintree::make_traits<
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<> >
65 test_rcu<tree_type, print_stat>();
69 void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_sht_member_cmp()
71 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
72 typedef ci::EllenBinTree< rcu_type, key_type, member_value,
73 ci::ellen_bintree::make_traits<
75 ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
76 ,co::compare< compare< member_value > >
77 ,ci::opt::disposer< disposer< member_value > >
81 test_rcu<tree_type, print_stat>();
85 void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_sht_member_cmpless()
87 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
88 typedef ci::EllenBinTree< rcu_type, key_type, member_value,
89 ci::ellen_bintree::make_traits<
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 > >
98 test_rcu<tree_type, print_stat>();
102 void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_sht_member_less_ic()
104 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
105 typedef ci::EllenBinTree< rcu_type, key_type, member_value,
106 ci::ellen_bintree::make_traits<
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 >
115 test_rcu<tree_type, print_stat>();
119 void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_sht_member_cmp_ic()
121 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
122 typedef ci::EllenBinTree< rcu_type, key_type, member_value,
123 ci::ellen_bintree::make_traits<
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 >
132 test_rcu<tree_type, print_stat>();
136 void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_sht_member_cmp_ic_stat()
138 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
139 typedef ci::EllenBinTree< rcu_type, key_type, member_value,
140 ci::ellen_bintree::make_traits<
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<> >
150 test_rcu<tree_type, print_stat>();
154 void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_sht_member_cmp_ic_stat_yield()
156 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
157 typedef ci::EllenBinTree< rcu_type, key_type, member_value,
158 ci::ellen_bintree::make_traits<
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 >
169 test_rcu<tree_type, print_stat>();
173 void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_sht_member_less_pool()
175 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
176 typedef ci::EllenBinTree< rcu_type, key_type, member_value,
177 ci::ellen_bintree::make_traits<
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 > >
187 test_rcu<tree_type, print_stat>();
191 void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_sht_member_less_pool_ic_stat()
193 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
194 typedef ci::EllenBinTree< rcu_type, key_type, member_value,
195 ci::ellen_bintree::make_traits<
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<> >
207 test_rcu<tree_type, print_stat>();