movable guarded_ptr: EllenBinTree
[libcds.git] / tests / test-hdr / tree / hdr_intrusive_ellen_bintree_dhp_member.cpp
1 //$$CDS-header$$
2
3 #include "tree/hdr_intrusive_bintree.h"
4 #include <cds/intrusive/ellen_bintree_dhp.h>
5
6 #include "tree/hdr_intrusive_ellen_bintree_pool_dhp.h"
7 #include "unit/print_ellenbintree_stat.h"
8
9 namespace tree {
10     namespace ci = cds::intrusive;
11     namespace co = cds::opt;
12     namespace {
13         typedef ci::ellen_bintree::node<cds::gc::DHP>                        leaf_node;
14         typedef IntrusiveBinTreeHdrTest::member_hook_value< leaf_node >     member_value;
15
16         typedef ci::opt::hook< ci::ellen_bintree::member_hook< offsetof(member_value, hook), co::gc< cds::gc::DHP > > > member_hook;
17
18         struct print_stat {
19             template <typename Tree>
20             void operator()( Tree const& t)
21             {
22                 std::cout << t.statistics();
23             }
24         };
25
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;
28     }
29
30     void IntrusiveBinTreeHdrTest::EllenBinTree_dhp_member_less()
31     {
32         struct tree_traits : public ci::ellen_bintree::traits
33         {
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;
38         };
39         typedef ci::EllenBinTree< cds::gc::DHP, key_type, member_value, tree_traits > tree_type;
40
41         test<tree_type, print_stat>();
42     }
43
44     void IntrusiveBinTreeHdrTest::EllenBinTree_dhp_member_less_stat()
45     {
46         typedef ci::EllenBinTree< cds::gc::DHP, key_type, member_value,
47             ci::ellen_bintree::make_traits<
48                 member_hook
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<> >
53             >::type
54         > tree_type;
55
56         test<tree_type, print_stat>();
57     }
58
59     void IntrusiveBinTreeHdrTest::EllenBinTree_dhp_member_cmp()
60     {
61         typedef ci::EllenBinTree< cds::gc::DHP, key_type, member_value,
62             ci::ellen_bintree::make_traits<
63                 member_hook
64                 ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
65                 ,co::compare< compare< member_value > >
66                 ,ci::opt::disposer< disposer< member_value > >
67             >::type
68         > tree_type;
69
70         test<tree_type, print_stat>();
71     }
72
73     void IntrusiveBinTreeHdrTest::EllenBinTree_dhp_member_cmpless()
74     {
75         typedef ci::EllenBinTree< cds::gc::DHP, key_type, member_value,
76             ci::ellen_bintree::make_traits<
77                 member_hook
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 > >
82             >::type
83         > tree_type;
84
85         test<tree_type, print_stat>();
86     }
87
88     void IntrusiveBinTreeHdrTest::EllenBinTree_dhp_member_less_ic()
89     {
90         typedef ci::EllenBinTree< cds::gc::DHP, key_type, member_value,
91             ci::ellen_bintree::make_traits<
92                 member_hook
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 >
97             >::type
98         > tree_type;
99
100         test<tree_type, print_stat>();
101     }
102
103     void IntrusiveBinTreeHdrTest::EllenBinTree_dhp_member_cmp_ic()
104     {
105         typedef ci::EllenBinTree< cds::gc::DHP, key_type, member_value,
106             ci::ellen_bintree::make_traits<
107                 member_hook
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 >
112             >::type
113         > tree_type;
114
115         test<tree_type, print_stat>();
116     }
117
118     void IntrusiveBinTreeHdrTest::EllenBinTree_dhp_member_cmp_ic_stat()
119     {
120         typedef ci::EllenBinTree< cds::gc::DHP, key_type, member_value,
121             ci::ellen_bintree::make_traits<
122                 member_hook
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<> >
128             >::type
129         > tree_type;
130
131         test<tree_type, print_stat>();
132     }
133
134     void IntrusiveBinTreeHdrTest::EllenBinTree_dhp_member_cmp_ic_stat_yield()
135     {
136         typedef ci::EllenBinTree< cds::gc::DHP, key_type, member_value,
137             ci::ellen_bintree::make_traits<
138                 member_hook
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 >
145             >::type
146         > tree_type;
147
148         test<tree_type, print_stat>();
149     }
150
151     void IntrusiveBinTreeHdrTest::EllenBinTree_dhp_member_less_pool()
152     {
153         typedef ci::EllenBinTree< cds::gc::DHP, key_type, member_value,
154             ci::ellen_bintree::make_traits<
155                 member_hook
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 > >
161             >::type
162         > tree_type;
163
164         test<tree_type, print_stat>();
165     }
166
167     void IntrusiveBinTreeHdrTest::EllenBinTree_dhp_member_less_pool_ic_stat()
168     {
169         typedef ci::EllenBinTree< cds::gc::DHP, key_type, member_value,
170             ci::ellen_bintree::make_traits<
171                 member_hook
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<> >
179             >::type
180         > tree_type;
181
182         test<tree_type, print_stat>();
183     }
184
185
186 } //namespace tree