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::base_hook_value< leaf_node > base_value;
21 template <typename Tree>
22 void operator()( Tree const& t)
24 std::cout << t.statistics();
28 typedef ci::ellen_bintree::internal_node< IntrusiveBinTreeHdrTest::key_type, leaf_node > internal_node;
29 typedef ci::ellen_bintree::update_desc< leaf_node, internal_node > update_desc;
33 void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_sht_base_less()
35 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
36 typedef ci::EllenBinTree< rcu_type, key_type, base_value,
37 ci::ellen_bintree::make_traits<
38 ci::opt::hook< ci::ellen_bintree::base_hook< co::gc< rcu_type > > >
39 ,ci::ellen_bintree::key_extractor< key_extractor< base_value > >
40 ,co::less< less< base_value > >
41 ,ci::opt::disposer< disposer< base_value > >
45 test_rcu<tree_type, print_stat>();
49 void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_sht_base_less_stat()
51 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
52 typedef ci::EllenBinTree< rcu_type, key_type, base_value,
53 ci::ellen_bintree::make_traits<
54 ci::opt::hook< ci::ellen_bintree::base_hook< co::gc< rcu_type > > >
55 ,ci::ellen_bintree::key_extractor< key_extractor< base_value > >
56 ,co::less< less< base_value > >
57 ,ci::opt::disposer< disposer< base_value > >
58 ,co::stat< ci::ellen_bintree::stat<> >
62 test_rcu<tree_type, print_stat>();
66 void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_sht_base_cmp()
68 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
69 typedef ci::EllenBinTree< rcu_type, key_type, base_value,
70 ci::ellen_bintree::make_traits<
71 ci::opt::hook< ci::ellen_bintree::base_hook< co::gc< rcu_type > > >
72 ,ci::ellen_bintree::key_extractor< key_extractor< base_value > >
73 ,co::compare< compare< base_value > >
74 ,ci::opt::disposer< disposer< base_value > >
78 test_rcu<tree_type, print_stat>();
82 void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_sht_base_cmpless()
84 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
85 typedef ci::EllenBinTree< rcu_type, key_type, base_value,
86 ci::ellen_bintree::make_traits<
87 ci::opt::hook< ci::ellen_bintree::base_hook< co::gc< rcu_type > > >
88 ,ci::ellen_bintree::key_extractor< key_extractor< base_value > >
89 ,co::compare< compare< base_value > >
90 ,co::less< less< base_value > >
91 ,ci::opt::disposer< disposer< base_value > >
95 test_rcu<tree_type, print_stat>();
99 void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_sht_base_less_ic()
101 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
102 typedef ci::EllenBinTree< rcu_type, key_type, base_value,
103 ci::ellen_bintree::make_traits<
104 ci::opt::hook< ci::ellen_bintree::base_hook< co::gc< rcu_type > > >
105 ,ci::ellen_bintree::key_extractor< key_extractor< base_value > >
106 ,co::less< less< base_value > >
107 ,ci::opt::disposer< disposer< base_value > >
108 ,co::item_counter< cds::atomicity::item_counter >
112 test_rcu<tree_type, print_stat>();
116 void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_sht_base_cmp_ic()
118 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
119 typedef ci::EllenBinTree< rcu_type, key_type, base_value,
120 ci::ellen_bintree::make_traits<
121 ci::opt::hook< ci::ellen_bintree::base_hook< co::gc< rcu_type > > >
122 ,ci::ellen_bintree::key_extractor< key_extractor< base_value > >
123 ,co::compare< compare< base_value > >
124 ,ci::opt::disposer< disposer< base_value > >
125 ,co::item_counter< cds::atomicity::item_counter >
129 test_rcu<tree_type, print_stat>();
133 void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_sht_base_cmp_ic_stat()
135 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
136 typedef ci::EllenBinTree< rcu_type, key_type, base_value,
137 ci::ellen_bintree::make_traits<
138 ci::opt::hook< ci::ellen_bintree::base_hook< co::gc< rcu_type > > >
139 ,ci::ellen_bintree::key_extractor< key_extractor< base_value > >
140 ,co::compare< compare< base_value > >
141 ,ci::opt::disposer< disposer< base_value > >
142 ,co::item_counter< cds::atomicity::item_counter >
143 ,co::stat< ci::ellen_bintree::stat<> >
147 test_rcu<tree_type, print_stat>();
151 void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_sht_base_less_pool()
153 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
154 typedef ci::EllenBinTree< rcu_type, key_type, base_value,
155 ci::ellen_bintree::make_traits<
156 ci::opt::hook< ci::ellen_bintree::base_hook< co::gc< rcu_type > > >
157 ,ci::ellen_bintree::key_extractor< key_extractor< base_value > >
158 ,co::less< less< base_value > >
159 ,ci::opt::disposer< disposer< base_value > >
160 ,co::node_allocator< cds::memory::pool_allocator< internal_node, ellen_bintree_rcu::internal_node_pool_accessor > >
161 ,ci::ellen_bintree::update_desc_allocator< cds::memory::pool_allocator< update_desc, ellen_bintree_rcu::update_desc_pool_accessor > >
165 test_rcu<tree_type, print_stat>();
169 void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_sht_base_less_pool_ic_stat()
171 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
172 typedef ci::EllenBinTree< rcu_type, key_type, base_value,
173 ci::ellen_bintree::make_traits<
174 ci::opt::hook< ci::ellen_bintree::base_hook< co::gc< rcu_type > > >
175 ,ci::ellen_bintree::key_extractor< key_extractor< base_value > >
176 ,co::less< less< base_value > >
177 ,ci::opt::disposer< disposer< base_value > >
178 ,co::node_allocator< cds::memory::pool_allocator< internal_node, ellen_bintree_rcu::internal_node_pool_accessor > >
179 ,ci::ellen_bintree::update_desc_allocator< cds::memory::pool_allocator< update_desc, ellen_bintree_rcu::update_desc_pool_accessor > >
180 ,co::item_counter< cds::atomicity::item_counter >
181 ,co::stat< ci::ellen_bintree::stat<> >
185 test_rcu<tree_type, print_stat>();