3 #include "tree/hdr_intrusive_bintree.h"
4 #include <cds/intrusive/ellen_bintree_hp.h>
6 #include "tree/hdr_intrusive_ellen_bintree_pool_hp.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::HP> 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::HP > > > 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_hp_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::HP >> 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::HP, 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<tree_type, print_stat>();
51 void IntrusiveBinTreeHdrTest::EllenBinTree_hp_member_less_stat()
53 typedef ci::EllenBinTree< cds::gc::HP, key_type, member_value,
54 ci::ellen_bintree::make_traits<
56 ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
57 ,co::less< less< member_value > >
58 ,ci::opt::disposer< disposer< member_value > >
59 ,co::stat< ci::ellen_bintree::stat<> >
63 test<tree_type, print_stat>();
66 void IntrusiveBinTreeHdrTest::EllenBinTree_hp_member_cmp()
68 typedef ci::EllenBinTree< cds::gc::HP, key_type, member_value,
69 ci::ellen_bintree::make_traits<
71 ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
72 ,co::compare< compare< member_value > >
73 ,ci::opt::disposer< disposer< member_value > >
77 test<tree_type, print_stat>();
80 void IntrusiveBinTreeHdrTest::EllenBinTree_hp_member_cmpless()
82 typedef ci::EllenBinTree< cds::gc::HP, key_type, member_value,
83 ci::ellen_bintree::make_traits<
85 ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
86 ,co::compare< compare< member_value > >
87 ,co::less< less< member_value > >
88 ,ci::opt::disposer< disposer< member_value > >
92 test<tree_type, print_stat>();
95 void IntrusiveBinTreeHdrTest::EllenBinTree_hp_member_less_ic()
97 typedef ci::EllenBinTree< cds::gc::HP, key_type, member_value,
98 ci::ellen_bintree::make_traits<
100 ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
101 ,co::less< less< member_value > >
102 ,ci::opt::disposer< disposer< member_value > >
103 ,co::item_counter< cds::atomicity::item_counter >
107 test<tree_type, print_stat>();
110 void IntrusiveBinTreeHdrTest::EllenBinTree_hp_member_cmp_ic()
112 typedef ci::EllenBinTree< cds::gc::HP, key_type, member_value,
113 ci::ellen_bintree::make_traits<
115 ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
116 ,co::compare< compare< member_value > >
117 ,ci::opt::disposer< disposer< member_value > >
118 ,co::item_counter< cds::atomicity::item_counter >
122 test<tree_type, print_stat>();
125 void IntrusiveBinTreeHdrTest::EllenBinTree_hp_member_cmp_ic_stat()
127 typedef ci::EllenBinTree< cds::gc::HP, key_type, member_value,
128 ci::ellen_bintree::make_traits<
130 ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
131 ,co::compare< compare< member_value > >
132 ,ci::opt::disposer< disposer< member_value > >
133 ,co::item_counter< cds::atomicity::item_counter >
134 ,co::stat< ci::ellen_bintree::stat<> >
138 test<tree_type, print_stat>();
141 void IntrusiveBinTreeHdrTest::EllenBinTree_hp_member_less_pool()
143 typedef ci::EllenBinTree< cds::gc::HP, key_type, member_value,
144 ci::ellen_bintree::make_traits<
146 ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
147 ,co::less< less< member_value > >
148 ,ci::opt::disposer< disposer< member_value > >
149 ,co::node_allocator< cds::memory::pool_allocator< internal_node, ellen_bintree_hp::internal_node_pool_accessor > >
150 ,ci::ellen_bintree::update_desc_allocator< cds::memory::pool_allocator< update_desc, ellen_bintree_hp::update_desc_pool_accessor > >
154 test<tree_type, print_stat>();
157 void IntrusiveBinTreeHdrTest::EllenBinTree_hp_member_less_pool_ic_stat()
159 typedef ci::EllenBinTree< cds::gc::HP, key_type, member_value,
160 ci::ellen_bintree::make_traits<
162 ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
163 ,co::less< less< member_value > >
164 ,ci::opt::disposer< disposer< member_value > >
165 ,co::node_allocator< cds::memory::pool_allocator< internal_node, ellen_bintree_hp::internal_node_pool_accessor > >
166 ,ci::ellen_bintree::update_desc_allocator< cds::memory::pool_allocator< update_desc, ellen_bintree_hp::update_desc_pool_accessor > >
167 ,co::item_counter< cds::atomicity::item_counter >
168 ,co::stat< ci::ellen_bintree::stat<> >
172 test<tree_type, print_stat>();