Aleph-w  1.5a.2
Biblioteca general de algoritmos y estructuras de datos
 Todo Clases Archivos Funciones Variables 'typedefs' Enumeraciones Amigas Grupos Páginas
tpl_nodePool.H
1 # ifndef TPL_NODEPOOL_H
2 # define TPL_NODEPOOL_H
3 
4 # include <tpl_arrayStack.H>
5 
18  template <class Node>
19 class Node_Pool
20 {
21 
22  FixedStack<Node*> node_pool;
23  const size_t n;
24 
25 public:
26 
27  Node_Pool(size_t __n = 100) : node_pool(__n), n(__n) { /* empty */ }
28 
30  Node * allocate()
31  {
32  return node_pool.is_empty() ? new Node : node_pool.pop();
33  }
34 
48  Node * allocate(const typename Node::key_type & key)
49  {
50  return new (allocate()) Node (key);
51  }
52 
53  Node * allocate(typename Node::key_type && key)
54  {
55  return new (allocate()) Node (std::move(key));
56  }
57 
76  void deallocate(Node * p)
77  {
78  if (node_pool.size() == n)
79  delete p;
80  else
81  node_pool.push(p);
82  }
83 
84  ~Node_Pool()
85  {
86  while (not node_pool.is_empty())
87  delete node_pool.pop();
88  }
89 };
90 
91 # endif // TPL_NODEPOOL_H
92 
bool is_empty() const
Retorna true si la pila está vacía.
Definition: tpl_arrayStack.H:413
Definition: tpl_nodePool.H:19
T pop()
Definition: tpl_arrayStack.H:353
T & push(const T &data)
Definition: tpl_arrayStack.H:312
const size_t & size() const
Retorna el número de elementos que contiene la pila.
Definition: tpl_arrayStack.H:419
void deallocate(Node *p)
Definition: tpl_nodePool.H:76
Node * allocate(const typename Node::key_type &key)
Definition: tpl_nodePool.H:48
Node * allocate()
Definition: tpl_nodePool.H:30

Leandro Rabindranath León