3 #ifndef CDSHDRTEST_INTRUSIVE_ELLEN_BINTREE_POOL_RCU_H
4 #define CDSHDRTEST_INTRUSIVE_ELLEN_BINTREE_POOL_RCU_H
6 #include "tree/hdr_intrusive_bintree.h"
7 #include <cds/urcu/general_instant.h>
8 #include <cds/intrusive/ellen_bintree_rcu.h>
10 #include <cds/memory/vyukov_queue_pool.h>
11 #include <cds/memory/pool_allocator.h>
15 namespace ellen_bintree_rcu {
16 typedef cds::urcu::gc< cds::urcu::general_instant<> > rcu_type;
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;
25 // Internal node pool based on Vyukov's queue
26 struct internal_node_pool_traits : public cds::memory::vyukov_queue_pool_traits
28 typedef cds::opt::v::dynamic_buffer< cds::any_type > buffer;
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;
33 struct internal_node_pool_accessor {
34 typedef internal_node_pool_type::value_type value_type;
36 internal_node_pool_type& operator()() const
38 return s_InternalNodePool;
42 // Update descriptor pool based on Vyukov's queue
43 struct update_desc_pool_traits : public cds::memory::vyukov_queue_pool_traits
45 typedef cds::opt::v::static_buffer< cds::any_type, 16 > buffer;
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;
50 struct update_desc_pool_accessor {
51 typedef update_desc_pool_type::value_type value_type;
53 update_desc_pool_type& operator()() const
55 return s_UpdateDescPool;
59 } // namespace ellen_bintree_rcu
63 #endif // #ifndef CDSHDRTEST_INTRUSIVE_ELLEN_BINTREE_POOL_RCU_H