3 #include "tree/hdr_intrusive_bintree.h"
4 #include <cds/urcu/signal_buffered.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_buffered<> > 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;
35 void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_shb_member_less()
37 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
38 typedef ci::EllenBinTree< rcu_type, key_type, member_value,
39 ci::ellen_bintree::make_traits<
41 ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
42 ,co::less< less< member_value > >
43 ,ci::opt::disposer< disposer< member_value > >
47 test_rcu<tree_type, print_stat>();
51 void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_shb_member_less_stat()
53 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
54 typedef ci::EllenBinTree< rcu_type, key_type, member_value,
55 ci::ellen_bintree::make_traits<
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<> >
64 test_rcu<tree_type, print_stat>();
68 void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_shb_member_cmp()
70 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
71 typedef ci::EllenBinTree< rcu_type, key_type, member_value,
72 ci::ellen_bintree::make_traits<
74 ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
75 ,co::compare< compare< member_value > >
76 ,ci::opt::disposer< disposer< member_value > >
80 test_rcu<tree_type, print_stat>();
84 void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_shb_member_cmpless()
86 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
87 typedef ci::EllenBinTree< rcu_type, key_type, member_value,
88 ci::ellen_bintree::make_traits<
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 > >
97 test_rcu<tree_type, print_stat>();
101 void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_shb_member_less_ic()
103 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
104 typedef ci::EllenBinTree< rcu_type, key_type, member_value,
105 ci::ellen_bintree::make_traits<
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 >
114 test_rcu<tree_type, print_stat>();
118 void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_shb_member_cmp_ic()
120 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
121 typedef ci::EllenBinTree< rcu_type, key_type, member_value,
122 ci::ellen_bintree::make_traits<
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 >
131 test_rcu<tree_type, print_stat>();
135 void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_shb_member_cmp_ic_stat()
137 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
138 typedef ci::EllenBinTree< rcu_type, key_type, member_value,
139 ci::ellen_bintree::make_traits<
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<> >
149 test_rcu<tree_type, print_stat>();
153 void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_shb_member_cmp_ic_stat_yield()
155 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
156 typedef ci::EllenBinTree< rcu_type, key_type, member_value,
157 ci::ellen_bintree::make_traits<
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 >
168 test_rcu<tree_type, print_stat>();
172 void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_shb_member_less_pool()
174 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
175 typedef ci::EllenBinTree< rcu_type, key_type, member_value,
176 ci::ellen_bintree::make_traits<
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 > >
186 test_rcu<tree_type, print_stat>();
190 void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_shb_member_less_pool_ic_stat()
192 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
193 typedef ci::EllenBinTree< rcu_type, key_type, member_value,
194 ci::ellen_bintree::make_traits<
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<> >
206 test_rcu<tree_type, print_stat>();