首页 > 代码库 > boost库使用:仿SGI-STL实现的一个树节点内存allocator

boost库使用:仿SGI-STL实现的一个树节点内存allocator

 1 //////////////////////////////////////////////////////////////////////////
 2 //code by hzs
 3 //email: huangzhesi@gmail.com
 4 //Last modified: 2014-5-18 21:05
 5 //////////////////////////////////////////////////////////////////////////
 6 
 7 #ifndef _TREE_NODE_ALLOC_H
 8 #define _TREE_NODE_ALLOC_H
 9 
10 #include <boost/pool/pool_alloc.hpp>
11 
12 //树节点内存管理:仿SGI-STL-(rb-tree)
13 
14 //arg1: 树节点的值
15 //arg2: 树节点
16 template<typename Value, typename tree_node>
17 class TreeNodeAlloc {
18 public:
19     typedef Value value_type;
20     typedef tree_node* link_type;
21 
22     typedef boost::fast_pool_allocator<tree_node> Tree_Node_Alloc;    //使用boost::fast_pool_allocator
23     Tree_Node_Alloc tree_node_alloc_;
24 
25     link_type get_node() { return Tree_Node_Alloc::allocate(); }    //分配内存空间
26     void put_node(link_type p) { Tree_Node_Alloc::deallocate(p); }    //回收内存空间
27 
28     link_type create_node(const value_type& x) {
29         link_type tmp = get_node();
30         tree_node_alloc_.construct(tmp, tree_node());    //构造(若tree_node中均为POD则无需此步)
31         tmp->value_field = x;    //给值域赋值
32 
33         return tmp;
34     }
35 
36     void destroy_node(link_type p) {
37         tree_node_alloc_.destroy(p);    //析构(无构造则无析构)
38         put_node(p);
39     }
40 };
41 
42 #endif