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