Aleph-w 3.0
A C++ Library for Data Structures and Algorithms
Loading...
Searching...
No Matches
Node_Pool< Node > Class Template Reference

Conjunto de nodos a reusarse. More...

#include <tpl_nodePool.H>

Collaboration diagram for Node_Pool< Node >:
[legend]

Public Member Functions

 Node_Pool (size_t __n=100) noexcept
 
Nodeallocate ()
 
Nodeallocate (const typename Node::key_type &key)
 Aparta memoria para un nodo y le asigna un valor de clave de tipo Key.
 
Nodeallocate (typename Node::key_type &&key)
 
void deallocate (Node *p) noexcept
 Libera el nodo p.
 
 ~Node_Pool ()
 

Private Attributes

FixedStack< Node * > node_pool
 
const size_t n
 

Detailed Description

template<class Node>
class Node_Pool< Node >

Conjunto de nodos a reusarse.

La clase Node_Pool se destina como un buffer de nodos de algún tipo de dato (listas, árboles, etc) disponibles para rápido uso evitando llamadas a los operadores new y delete.

La clase maneja un parámetro n que representa la máxima cantidad de nodos de reserva.

 @author Leandro Rabindranath León
 @ingroup Utilities

Definition at line 57 of file tpl_nodePool.H.

Constructor & Destructor Documentation

◆ Node_Pool()

template<class Node >
Node_Pool< Node >::Node_Pool ( size_t  __n = 100)
inlinenoexcept

Definition at line 65 of file tpl_nodePool.H.

◆ ~Node_Pool()

Member Function Documentation

◆ allocate() [1/3]

template<class Node >
Node_Pool< Node >::allocate ( )
inline

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

Definition at line 68 of file tpl_nodePool.H.

References Aleph::FixedStack< T >::is_empty(), Node_Pool< Node >::node_pool, and Aleph::FixedStack< T >::pop().

Referenced by Node_Pool< Node >::allocate(), and Node_Pool< Node >::allocate().

◆ allocate() [2/3]

template<class Node >
Node * Node_Pool< Node >::allocate ( const typename Node::key_type &  key)
inline

Aparta memoria para un nodo y le asigna un valor de clave de tipo Key.

allocate_node() revisa si hay un nodo ya previamente apartado entre los n posibles. Si tal es el caso, entonces se escoge un nodo entre los existentes del conjunto. De lo contrario, se reserva memoria para un nuevo nodo mediante new. En ambos casos la clave key es asignada al resultado que dé get_key() invocada sobre el nodo.

Parameters
[in]keyclave a asignar al nodo.
Exceptions
bad_allocsi no hay suficiente memoria.

Definition at line 86 of file tpl_nodePool.H.

References Node_Pool< Node >::allocate().

◆ allocate() [3/3]

template<class Node >
Node * Node_Pool< Node >::allocate ( typename Node::key_type &&  key)
inline

Definition at line 91 of file tpl_nodePool.H.

References Node_Pool< Node >::allocate().

◆ deallocate()

template<class Node >
void Node_Pool< Node >::deallocate ( Node p)
inlinenoexcept

Libera el nodo p.

deallocate_node(p) entrega el nodo p para eventual posterior reutilización.

Cada vez que se libera un nodo por este método, se guarda en un conjunto para posterior reutilización de hasta un mácimo de n nodos. Si el conjunto no está lleno, entonces el nodo puede ser reutilizado. De lo contrario, si el conjunto está lleno, entonces el nodo es liberado mediante delete.

Note
Tenga muy en cuenta que en caso de que el nodo se guarde para uso posterior no se llama al destructor. Por tanto, es muy importante que p refiera a un nodo recién apartado.
Parameters
[in]pel nodo a liberar.

Definition at line 114 of file tpl_nodePool.H.

References Node_Pool< Node >::n, Node_Pool< Node >::node_pool, Aleph::FixedStack< T >::push(), and Aleph::FixedStack< T >::size().

Member Data Documentation

◆ n

template<class Node >
const size_t Node_Pool< Node >::n
private

Definition at line 61 of file tpl_nodePool.H.

Referenced by Node_Pool< Node >::deallocate().

◆ node_pool

template<class Node >
FixedStack<Node*> Node_Pool< Node >::node_pool
private

The documentation for this class was generated from the following file: