issue#11: cds: changed __CDS_ guard prefix to CDSLIB_ for all .h files
[libcds.git] / tests / test-hdr / tree / hdr_intrusive_ellen_bintree_pool_rcu.h
1 //$$CDS-header$$
2
3 #ifndef CDSTEST_HDR_INTRUSIVE_ELLEN_BINTREE_POOL_RCU_H
4 #define CDSTEST_HDR_INTRUSIVE_ELLEN_BINTREE_POOL_RCU_H
5
6 #include "tree/hdr_intrusive_bintree.h"
7 #include <cds/urcu/general_instant.h>
8 #include <cds/intrusive/ellen_bintree_rcu.h>
9
10 #include <cds/memory/vyukov_queue_pool.h>
11 #include <cds/memory/pool_allocator.h>
12
13 namespace tree {
14
15     namespace ellen_bintree_rcu {
16         typedef cds::urcu::gc< cds::urcu::general_instant<> > rcu_type;
17
18         typedef cds::intrusive::ellen_bintree::node_types<rcu_type, IntrusiveBinTreeHdrTest::key_type>   node_types;
19         typedef node_types::leaf_node_type                                  leaf_node;
20         typedef IntrusiveBinTreeHdrTest::base_hook_value< leaf_node >       base_value;
21         typedef node_types::internal_node_type                              internal_node;
22         typedef node_types::update_desc_type                                update_desc;
23
24
25         // Internal node pool based on Vyukov's queue
26         struct internal_node_pool_traits : public cds::memory::vyukov_queue_pool_traits
27         {
28             typedef cds::opt::v::dynamic_buffer< cds::any_type > buffer;
29         };
30         typedef cds::memory::lazy_vyukov_queue_pool< internal_node, internal_node_pool_traits > internal_node_pool_type;
31         extern internal_node_pool_type s_InternalNodePool;
32
33         struct internal_node_pool_accessor {
34             typedef internal_node_pool_type::value_type     value_type;
35
36             internal_node_pool_type& operator()() const
37             {
38                 return s_InternalNodePool;
39             }
40         };
41
42         // Update descriptor pool based on Vyukov's queue
43         struct update_desc_pool_traits : public cds::memory::vyukov_queue_pool_traits
44         {
45             typedef cds::opt::v::static_buffer< cds::any_type, 16 > buffer;
46         };
47         typedef cds::memory::vyukov_queue_pool< update_desc, update_desc_pool_traits > update_desc_pool_type;
48         extern update_desc_pool_type s_UpdateDescPool;
49
50         struct update_desc_pool_accessor {
51             typedef update_desc_pool_type::value_type     value_type;
52
53             update_desc_pool_type& operator()() const
54             {
55                 return s_UpdateDescPool;
56             }
57         };
58
59     } // namespace ellen_bintree_rcu
60
61 } // namespace tree
62
63 #endif // #ifndef CDSTEST_HDR_INTRUSIVE_ELLEN_BINTREE_POOL_RCU_H