Move libcds 1.6.0 from SVN
[libcds.git] / tests / test-hdr / tree / hdr_intrusive_ellen_bintree_rcu_shb.cpp
1 //$$CDS-header$$
2
3 #include "tree/hdr_intrusive_bintree.h"
4 #include <cds/urcu/signal_buffered.h>
5 #include <cds/intrusive/ellen_bintree_rcu.h>
6
7 #include "tree/hdr_intrusive_ellen_bintree_pool_rcu.h"
8 #include "unit/print_ellenbintree_stat.h"
9
10 namespace tree {
11 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
12     namespace ci = cds::intrusive;
13     namespace co = cds::opt;
14     namespace {
15         typedef cds::urcu::gc< cds::urcu::signal_buffered<> > rcu_type;
16
17         typedef ci::ellen_bintree::node<rcu_type>                           leaf_node;
18         typedef IntrusiveBinTreeHdrTest::base_hook_value< leaf_node >       base_value;
19
20         struct print_stat {
21             template <typename Tree>
22             void operator()( Tree const& t)
23             {
24                 std::cout << t.statistics();
25             }
26         };
27
28         typedef ci::ellen_bintree::internal_node< IntrusiveBinTreeHdrTest::key_type, leaf_node > internal_node;
29         typedef ci::ellen_bintree::update_desc< leaf_node, internal_node >   update_desc;
30     }
31 #endif
32
33     void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_shb_base_less()
34     {
35 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
36         typedef ci::EllenBinTree< rcu_type, key_type, base_value,
37             ci::ellen_bintree::make_traits<
38                 ci::opt::hook< ci::ellen_bintree::base_hook< co::gc< rcu_type > > >
39                 ,ci::ellen_bintree::key_extractor< key_extractor< base_value > >
40                 ,co::less< less< base_value > >
41                 ,ci::opt::disposer< disposer< base_value > >
42             >::type
43         > tree_type;
44
45         test_rcu<tree_type, print_stat>();
46 #endif
47     }
48
49     void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_shb_base_less_stat()
50     {
51 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
52         typedef ci::EllenBinTree< rcu_type, key_type, base_value,
53             ci::ellen_bintree::make_traits<
54                 ci::opt::hook< ci::ellen_bintree::base_hook< co::gc< rcu_type > > >
55                 ,ci::ellen_bintree::key_extractor< key_extractor< base_value > >
56                 ,co::less< less< base_value > >
57                 ,ci::opt::disposer< disposer< base_value > >
58                 ,co::stat< ci::ellen_bintree::stat<> >
59             >::type
60         > tree_type;
61
62         test_rcu<tree_type, print_stat>();
63 #endif
64     }
65
66     void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_shb_base_cmp()
67     {
68 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
69         typedef ci::EllenBinTree< rcu_type, key_type, base_value,
70             ci::ellen_bintree::make_traits<
71                 ci::opt::hook< ci::ellen_bintree::base_hook< co::gc< rcu_type > > >
72                 ,ci::ellen_bintree::key_extractor< key_extractor< base_value > >
73                 ,co::compare< compare< base_value > >
74                 ,ci::opt::disposer< disposer< base_value > >
75             >::type
76         > tree_type;
77
78         test_rcu<tree_type, print_stat>();
79 #endif
80     }
81
82     void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_shb_base_cmpless()
83     {
84 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
85         typedef ci::EllenBinTree< rcu_type, key_type, base_value,
86             ci::ellen_bintree::make_traits<
87                 ci::opt::hook< ci::ellen_bintree::base_hook< co::gc< rcu_type > > >
88                 ,ci::ellen_bintree::key_extractor< key_extractor< base_value > >
89                 ,co::compare< compare< base_value > >
90                 ,co::less< less< base_value > >
91                 ,ci::opt::disposer< disposer< base_value > >
92             >::type
93         > tree_type;
94
95         test_rcu<tree_type, print_stat>();
96 #endif
97     }
98
99     void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_shb_base_less_ic()
100     {
101 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
102         typedef ci::EllenBinTree< rcu_type, key_type, base_value,
103             ci::ellen_bintree::make_traits<
104                 ci::opt::hook< ci::ellen_bintree::base_hook< co::gc< rcu_type > > >
105                 ,ci::ellen_bintree::key_extractor< key_extractor< base_value > >
106                 ,co::less< less< base_value > >
107                 ,ci::opt::disposer< disposer< base_value > >
108                 ,co::item_counter< cds::atomicity::item_counter >
109             >::type
110         > tree_type;
111
112         test_rcu<tree_type, print_stat>();
113 #endif
114     }
115
116     void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_shb_base_cmp_ic()
117     {
118 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
119         typedef ci::EllenBinTree< rcu_type, key_type, base_value,
120             ci::ellen_bintree::make_traits<
121                 ci::opt::hook< ci::ellen_bintree::base_hook< co::gc< rcu_type > > >
122                 ,ci::ellen_bintree::key_extractor< key_extractor< base_value > >
123                 ,co::compare< compare< base_value > >
124                 ,ci::opt::disposer< disposer< base_value > >
125                 ,co::item_counter< cds::atomicity::item_counter >
126             >::type
127         > tree_type;
128
129         test_rcu<tree_type, print_stat>();
130 #endif
131     }
132
133     void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_shb_base_cmp_ic_stat()
134     {
135 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
136         typedef ci::EllenBinTree< rcu_type, key_type, base_value,
137             ci::ellen_bintree::make_traits<
138                 ci::opt::hook< ci::ellen_bintree::base_hook< co::gc< rcu_type > > >
139                 ,ci::ellen_bintree::key_extractor< key_extractor< base_value > >
140                 ,co::compare< compare< base_value > >
141                 ,ci::opt::disposer< disposer< base_value > >
142                 ,co::item_counter< cds::atomicity::item_counter >
143                 ,co::stat< ci::ellen_bintree::stat<> >
144             >::type
145         > tree_type;
146
147         test_rcu<tree_type, print_stat>();
148 #endif
149     }
150
151     void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_shb_base_less_pool()
152     {
153 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
154         typedef ci::EllenBinTree< rcu_type, key_type, base_value,
155             ci::ellen_bintree::make_traits<
156                 ci::opt::hook< ci::ellen_bintree::base_hook< co::gc< rcu_type > > >
157                 ,ci::ellen_bintree::key_extractor< key_extractor< base_value > >
158                 ,co::less< less< base_value > >
159                 ,ci::opt::disposer< disposer< base_value > >
160                 ,co::node_allocator< cds::memory::pool_allocator< internal_node, ellen_bintree_rcu::internal_node_pool_accessor > >
161                 ,ci::ellen_bintree::update_desc_allocator< cds::memory::pool_allocator< update_desc, ellen_bintree_rcu::update_desc_pool_accessor > >
162             >::type
163         > tree_type;
164
165         test_rcu<tree_type, print_stat>();
166 #endif
167     }
168
169     void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_shb_base_less_pool_ic_stat()
170     {
171 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
172         typedef ci::EllenBinTree< rcu_type, key_type, base_value,
173             ci::ellen_bintree::make_traits<
174                 ci::opt::hook< ci::ellen_bintree::base_hook< co::gc< rcu_type > > >
175                 ,ci::ellen_bintree::key_extractor< key_extractor< base_value > >
176                 ,co::less< less< base_value > >
177                 ,ci::opt::disposer< disposer< base_value > >
178                 ,co::node_allocator< cds::memory::pool_allocator< internal_node, ellen_bintree_rcu::internal_node_pool_accessor > >
179                 ,ci::ellen_bintree::update_desc_allocator< cds::memory::pool_allocator< update_desc, ellen_bintree_rcu::update_desc_pool_accessor > >
180                 ,co::item_counter< cds::atomicity::item_counter >
181                 ,co::stat< ci::ellen_bintree::stat<> >
182             >::type
183         > tree_type;
184
185         test_rcu<tree_type, print_stat>();
186 #endif
187     }
188
189
190 } //namespace tree