e0ac4f7f28f0887f06a93936d7352fac9bf1a2dd
[libcds.git] / tests / test-hdr / tree / hdr_intrusive_ellen_bintree_ptb_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_ptb.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::PTB>                        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::PTB > > > 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_ptb_member_less()
31     {
32         typedef ci::EllenBinTree< cds::gc::PTB, key_type, member_value,
33             ci::ellen_bintree::make_traits<
34                 member_hook
35                 ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
36                 ,co::less< less< member_value > >
37                 ,ci::opt::disposer< disposer< member_value > >
38             >::type
39         > tree_type;
40
41         test<tree_type, print_stat>();
42     }
43
44     void IntrusiveBinTreeHdrTest::EllenBinTree_ptb_member_less_stat()
45     {
46         typedef ci::EllenBinTree< cds::gc::PTB, 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_ptb_member_cmp()
60     {
61         typedef ci::EllenBinTree< cds::gc::PTB, 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_ptb_member_cmpless()
74     {
75         typedef ci::EllenBinTree< cds::gc::PTB, 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_ptb_member_less_ic()
89     {
90         typedef ci::EllenBinTree< cds::gc::PTB, 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_ptb_member_cmp_ic()
104     {
105         typedef ci::EllenBinTree< cds::gc::PTB, 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_ptb_member_cmp_ic_stat()
119     {
120         typedef ci::EllenBinTree< cds::gc::PTB, 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_ptb_member_less_pool()
135     {
136         typedef ci::EllenBinTree< cds::gc::PTB, 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::less< less< member_value > >
141                 ,ci::opt::disposer< disposer< member_value > >
142                 ,co::node_allocator< cds::memory::pool_allocator< internal_node, ellen_bintree_ptb::internal_node_pool_accessor > >
143                 ,ci::ellen_bintree::update_desc_allocator< cds::memory::pool_allocator< update_desc, ellen_bintree_ptb::update_desc_pool_accessor > >
144             >::type
145         > tree_type;
146
147         test<tree_type, print_stat>();
148     }
149
150     void IntrusiveBinTreeHdrTest::EllenBinTree_ptb_member_less_pool_ic_stat()
151     {
152         typedef ci::EllenBinTree< cds::gc::PTB, key_type, member_value,
153             ci::ellen_bintree::make_traits<
154                 member_hook
155                 ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
156                 ,co::less< less< member_value > >
157                 ,ci::opt::disposer< disposer< member_value > >
158                 ,co::node_allocator< cds::memory::pool_allocator< internal_node, ellen_bintree_ptb::internal_node_pool_accessor > >
159                 ,ci::ellen_bintree::update_desc_allocator< cds::memory::pool_allocator< update_desc, ellen_bintree_ptb::update_desc_pool_accessor > >
160                 ,co::item_counter< cds::atomicity::item_counter >
161                 ,co::stat< ci::ellen_bintree::stat<> >
162             >::type
163         > tree_type;
164
165         test<tree_type, print_stat>();
166     }
167
168
169 } //namespace tree