3 #include "tree/hdr_intrusive_bintree.h"
4 #include <cds/intrusive/ellen_bintree_dhp.h>
6 #include "tree/hdr_intrusive_ellen_bintree_pool_dhp.h"
7 #include "unit/print_ellenbintree_stat.h"
10 namespace ci = cds::intrusive;
11 namespace co = cds::opt;
13 typedef ci::ellen_bintree::node<cds::gc::DHP> leaf_node;
14 typedef IntrusiveBinTreeHdrTest::member_hook_value< leaf_node > member_value;
16 typedef ci::opt::hook< ci::ellen_bintree::member_hook< offsetof(member_value, hook), co::gc< cds::gc::DHP > > > member_hook;
19 template <typename Tree>
20 void operator()( Tree const& t)
22 std::cout << t.statistics();
26 typedef ci::ellen_bintree::internal_node< IntrusiveBinTreeHdrTest::key_type, leaf_node > internal_node;
27 typedef ci::ellen_bintree::update_desc< leaf_node, internal_node > update_desc;
30 void IntrusiveBinTreeHdrTest::EllenBinTree_dhp_member_less()
32 struct tree_traits : public ci::ellen_bintree::traits
34 typedef ci::ellen_bintree::member_hook< offsetof( member_value, hook ), co::gc< cds::gc::DHP >> hook;
35 typedef IntrusiveBinTreeHdrTest::key_extractor< member_value > key_extractor;
36 typedef IntrusiveBinTreeHdrTest::less< member_value > less;
37 typedef IntrusiveBinTreeHdrTest::disposer< member_value > disposer;
39 typedef ci::EllenBinTree< cds::gc::DHP, key_type, member_value, tree_traits > tree_type;
41 test<tree_type, print_stat>();
44 void IntrusiveBinTreeHdrTest::EllenBinTree_dhp_member_less_stat()
46 typedef ci::EllenBinTree< cds::gc::DHP, key_type, member_value,
47 ci::ellen_bintree::make_traits<
49 ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
50 ,co::less< less< member_value > >
51 ,ci::opt::disposer< disposer< member_value > >
52 ,co::stat< ci::ellen_bintree::stat<> >
56 test<tree_type, print_stat>();
59 void IntrusiveBinTreeHdrTest::EllenBinTree_dhp_member_cmp()
61 typedef ci::EllenBinTree< cds::gc::DHP, key_type, member_value,
62 ci::ellen_bintree::make_traits<
64 ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
65 ,co::compare< compare< member_value > >
66 ,ci::opt::disposer< disposer< member_value > >
70 test<tree_type, print_stat>();
73 void IntrusiveBinTreeHdrTest::EllenBinTree_dhp_member_cmpless()
75 typedef ci::EllenBinTree< cds::gc::DHP, key_type, member_value,
76 ci::ellen_bintree::make_traits<
78 ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
79 ,co::compare< compare< member_value > >
80 ,co::less< less< member_value > >
81 ,ci::opt::disposer< disposer< member_value > >
85 test<tree_type, print_stat>();
88 void IntrusiveBinTreeHdrTest::EllenBinTree_dhp_member_less_ic()
90 typedef ci::EllenBinTree< cds::gc::DHP, key_type, member_value,
91 ci::ellen_bintree::make_traits<
93 ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
94 ,co::less< less< member_value > >
95 ,ci::opt::disposer< disposer< member_value > >
96 ,co::item_counter< cds::atomicity::item_counter >
100 test<tree_type, print_stat>();
103 void IntrusiveBinTreeHdrTest::EllenBinTree_dhp_member_cmp_ic()
105 typedef ci::EllenBinTree< cds::gc::DHP, key_type, member_value,
106 ci::ellen_bintree::make_traits<
108 ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
109 ,co::compare< compare< member_value > >
110 ,ci::opt::disposer< disposer< member_value > >
111 ,co::item_counter< cds::atomicity::item_counter >
115 test<tree_type, print_stat>();
118 void IntrusiveBinTreeHdrTest::EllenBinTree_dhp_member_cmp_ic_stat()
120 typedef ci::EllenBinTree< cds::gc::DHP, key_type, member_value,
121 ci::ellen_bintree::make_traits<
123 ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
124 ,co::compare< compare< member_value > >
125 ,ci::opt::disposer< disposer< member_value > >
126 ,co::item_counter< cds::atomicity::item_counter >
127 ,co::stat< ci::ellen_bintree::stat<> >
131 test<tree_type, print_stat>();
134 void IntrusiveBinTreeHdrTest::EllenBinTree_dhp_member_cmp_ic_stat_yield()
136 typedef ci::EllenBinTree< cds::gc::DHP, key_type, member_value,
137 ci::ellen_bintree::make_traits<
139 ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
140 ,co::compare< compare< member_value > >
141 ,ci::opt::disposer< disposer< member_value > >
142 ,co::item_counter< cds::atomicity::item_counter >
143 ,co::stat< ci::ellen_bintree::stat<> >
144 ,co::back_off< cds::backoff::yield >
148 test<tree_type, print_stat>();
151 void IntrusiveBinTreeHdrTest::EllenBinTree_dhp_member_less_pool()
153 typedef ci::EllenBinTree< cds::gc::DHP, key_type, member_value,
154 ci::ellen_bintree::make_traits<
156 ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
157 ,co::less< less< member_value > >
158 ,ci::opt::disposer< disposer< member_value > >
159 ,co::node_allocator< cds::memory::pool_allocator< internal_node, ellen_bintree_dhp::internal_node_pool_accessor > >
160 ,ci::ellen_bintree::update_desc_allocator< cds::memory::pool_allocator< update_desc, ellen_bintree_dhp::update_desc_pool_accessor > >
164 test<tree_type, print_stat>();
167 void IntrusiveBinTreeHdrTest::EllenBinTree_dhp_member_less_pool_ic_stat()
169 typedef ci::EllenBinTree< cds::gc::DHP, key_type, member_value,
170 ci::ellen_bintree::make_traits<
172 ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
173 ,co::less< less< member_value > >
174 ,ci::opt::disposer< disposer< member_value > >
175 ,co::node_allocator< cds::memory::pool_allocator< internal_node, ellen_bintree_dhp::internal_node_pool_accessor > >
176 ,ci::ellen_bintree::update_desc_allocator< cds::memory::pool_allocator< update_desc, ellen_bintree_dhp::update_desc_pool_accessor > >
177 ,co::item_counter< cds::atomicity::item_counter >
178 ,co::stat< ci::ellen_bintree::stat<> >
182 test<tree_type, print_stat>();