3 #include "tree/hdr_intrusive_bintree.h"
4 #include <cds/urcu/general_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 namespace ci = cds::intrusive;
12 namespace co = cds::opt;
14 typedef cds::urcu::gc< cds::urcu::general_threaded<> > rcu_type;
16 typedef ci::ellen_bintree::node<rcu_type> leaf_node;
17 typedef IntrusiveBinTreeHdrTest::member_hook_value< leaf_node > member_value;
19 typedef ci::opt::hook< ci::ellen_bintree::member_hook< offsetof(member_value, hook), co::gc< rcu_type > > > member_hook;
22 template <typename Tree>
23 void operator()( Tree const& t)
25 std::cout << t.statistics();
29 typedef ci::ellen_bintree::internal_node< IntrusiveBinTreeHdrTest::key_type, leaf_node > internal_node;
30 typedef ci::ellen_bintree::update_desc< leaf_node, internal_node > update_desc;
33 void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_gpt_member_less()
35 typedef ci::EllenBinTree< rcu_type, key_type, member_value,
36 ci::ellen_bintree::make_traits<
38 ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
39 ,co::less< less< member_value > >
40 ,ci::opt::disposer< disposer< member_value > >
44 test_rcu<tree_type, print_stat>();
47 void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_gpt_member_less_stat()
49 typedef ci::EllenBinTree< rcu_type, key_type, member_value,
50 ci::ellen_bintree::make_traits<
52 ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
53 ,co::less< less< member_value > >
54 ,ci::opt::disposer< disposer< member_value > >
55 ,co::stat< ci::ellen_bintree::stat<> >
59 test_rcu<tree_type, print_stat>();
62 void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_gpt_member_cmp()
64 typedef ci::EllenBinTree< rcu_type, key_type, member_value,
65 ci::ellen_bintree::make_traits<
67 ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
68 ,co::compare< compare< member_value > >
69 ,ci::opt::disposer< disposer< member_value > >
73 test_rcu<tree_type, print_stat>();
76 void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_gpt_member_cmpless()
78 typedef ci::EllenBinTree< rcu_type, key_type, member_value,
79 ci::ellen_bintree::make_traits<
81 ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
82 ,co::compare< compare< member_value > >
83 ,co::less< less< member_value > >
84 ,ci::opt::disposer< disposer< member_value > >
88 test_rcu<tree_type, print_stat>();
91 void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_gpt_member_less_ic()
93 typedef ci::EllenBinTree< rcu_type, key_type, member_value,
94 ci::ellen_bintree::make_traits<
96 ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
97 ,co::less< less< member_value > >
98 ,ci::opt::disposer< disposer< member_value > >
99 ,co::item_counter< cds::atomicity::item_counter >
103 test_rcu<tree_type, print_stat>();
106 void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_gpt_member_cmp_ic()
108 typedef ci::EllenBinTree< rcu_type, key_type, member_value,
109 ci::ellen_bintree::make_traits<
111 ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
112 ,co::compare< compare< member_value > >
113 ,ci::opt::disposer< disposer< member_value > >
114 ,co::item_counter< cds::atomicity::item_counter >
118 test_rcu<tree_type, print_stat>();
121 void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_gpt_member_cmp_ic_stat()
123 typedef ci::EllenBinTree< rcu_type, key_type, member_value,
124 ci::ellen_bintree::make_traits<
126 ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
127 ,co::compare< compare< member_value > >
128 ,ci::opt::disposer< disposer< member_value > >
129 ,co::item_counter< cds::atomicity::item_counter >
130 ,co::stat< ci::ellen_bintree::stat<> >
134 test_rcu<tree_type, print_stat>();
137 void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_gpt_member_less_pool()
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::less< less< member_value > >
144 ,ci::opt::disposer< disposer< member_value > >
145 ,co::node_allocator< cds::memory::pool_allocator< internal_node, ellen_bintree_rcu::internal_node_pool_accessor > >
146 ,ci::ellen_bintree::update_desc_allocator< cds::memory::pool_allocator< update_desc, ellen_bintree_rcu::update_desc_pool_accessor > >
150 test_rcu<tree_type, print_stat>();
153 void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_gpt_member_less_pool_ic_stat()
155 typedef ci::EllenBinTree< rcu_type, key_type, member_value,
156 ci::ellen_bintree::make_traits<
158 ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
159 ,co::less< less< member_value > >
160 ,ci::opt::disposer< disposer< member_value > >
161 ,co::node_allocator< cds::memory::pool_allocator< internal_node, ellen_bintree_rcu::internal_node_pool_accessor > >
162 ,ci::ellen_bintree::update_desc_allocator< cds::memory::pool_allocator< update_desc, ellen_bintree_rcu::update_desc_pool_accessor > >
163 ,co::item_counter< cds::atomicity::item_counter >
164 ,co::stat< ci::ellen_bintree::stat<> >
168 test_rcu<tree_type, print_stat>();