ANNA Suite  2020b
Multipurpose development suite for Telco applications
Public Types | Public Member Functions | List of all members
anna::SafeRecycler< T, _Allocator > Class Template Reference

#include <SafeRecycler.hpp>

Inheritance diagram for anna::SafeRecycler< T, _Allocator >:
Inheritance graph
[legend]
Collaboration diagram for anna::SafeRecycler< T, _Allocator >:
Collaboration graph
[legend]

Public Types

typedef Recycler< T, _Allocator >::iterator iterator
 
typedef Recycler< T, _Allocator >::const_iterator const_iterator
 
- Public Types inherited from anna::Recycler< T, _Allocator >
typedef std::list< T * > container
 
typedef container::iterator iterator
 
typedef container::const_iterator const_iterator
 
typedef std::map< T *, iteratorrandom_container
 
typedef random_container::iterator random_iterator
 
typedef random_container::value_type random_item
 

Public Member Functions

 SafeRecycler (const bool randomAccess=false)
 
virtual ~SafeRecycler ()
 
T * create () noexcept(false)
 
iterator find (T *t) noexcept(false)
 
void release (T *t)
 
void release (iterator &ii)
 
void release (const T *t)
 
void clear ()
 
- Public Member Functions inherited from anna::Recycler< T, _Allocator >
 Recycler (const bool randomAccess=false)
 
virtual ~Recycler ()
 
int getSize () const
 
int size () const
 
T * create () noexcept(false)
 
iterator find (T *t) noexcept(false)
 
void release (T *t)
 
void release (iterator ii)
 
void release (const T *t)
 
void clear ()
 
iterator begin ()
 
const_iterator begin () const
 
iterator end ()
 
const_iterator end () const
 
- Public Member Functions inherited from anna::Mutex
 Mutex (const Mode::_v mode=Mode::Recursive)
 
virtual ~Mutex ()
 
virtual void lock () noexcept(false)
 
virtual void unlock ()
 
bool trylock () noexcept(false)
 
 operator const pthread_mutex_t * () const
 

Additional Inherited Members

- Static Public Member Functions inherited from anna::Recycler< T, _Allocator >
static T * data (iterator ii)
 
static const T * data (const_iterator ii)
 
- Protected Member Functions inherited from anna::Safe
 Safe ()
 

Detailed Description

template<typename T, typename _Allocator = Allocator <T>>
class anna::SafeRecycler< T, _Allocator >

Mantiene una lista de punteros que puede crecer dinamicamente, no obstante, siempre que sea posible intenta reusar punteros creados previamente.

Establece secciones critidas para acceder a los datos.

Parameters
TClase de la que mantener la lista de punteros pre-asignados.
AllocatorClase encargada de reservar la memoria para los objetos T en el momento en que sea necesaria una nueva instancia.

Member Typedef Documentation

◆ const_iterator

template<typename T, typename _Allocator = Allocator <T>>
typedef Recycler<T, _Allocator>::const_iterator anna::SafeRecycler< T, _Allocator >::const_iterator

◆ iterator

template<typename T, typename _Allocator = Allocator <T>>
typedef Recycler<T, _Allocator>::iterator anna::SafeRecycler< T, _Allocator >::iterator

Constructor & Destructor Documentation

◆ SafeRecycler()

template<typename T, typename _Allocator = Allocator <T>>
anna::SafeRecycler< T, _Allocator >::SafeRecycler ( const bool  randomAccess = false)
inline

Constructor.

Parameters
randomAccessIndicador que permite activar el uso de estructuras de datos adicionales Se ha comprobado que si necesitamos tratar en torno a un centenar de instancias es más eficiente no activar las estructuras para acceso directo, para más objetos resulta imprescinble.
48 : Recycler <T, _Allocator> (randomAccess) {;}

◆ ~SafeRecycler()

template<typename T, typename _Allocator = Allocator <T>>
virtual anna::SafeRecycler< T, _Allocator >::~SafeRecycler ( )
inlinevirtual

Destructor.

53 { ; }

Member Function Documentation

◆ clear()

template<typename T, typename _Allocator = Allocator <T>>
void anna::SafeRecycler< T, _Allocator >::clear ( )
inline

Marca como disponibles todos los objetos contenidos en memoria.

138  {
139  std::string name(typeid(*this).name());
140  name += "::clear";
141  Guard guard(this, name.c_str());
143  }
void clear()
Definition: Recycler.hpp:196

◆ create()

template<typename T, typename _Allocator = Allocator <T>>
T* anna::SafeRecycler< T, _Allocator >::create ( )
inlinenoexcept

Devuelve un puntero de tipo T. Solo crearia una nueva instancia de la clase T si al invocar a este metoodo no existe ninguna otra instancia que se pueda reutilizar, en cuyo caso haria una nueva reserva.

Cada una de las llamadas a este metodo debe tener su correspondiente llamada al metodo release cuando el puntero deje de ser util.

Returns
Un puntero a una instancia de tipo T.
65  {
66  std::string name(typeid(*this).name());
67  name += "::create";
68  Guard guard(this, name.c_str());
70  }
T * create() noexcept(false)
Definition: Recycler.hpp:88

◆ find()

template<typename T, typename _Allocator = Allocator <T>>
iterator anna::SafeRecycler< T, _Allocator >::find ( T *  t)
inlinenoexcept

Devuelve el iterador que apunta al objeto recibido como parametro.

Returns
el iterador que apunta al objeto recibido como parametro.
77  {
78  std::string name(typeid(*this).name());
79  name += "::find";
80  Guard guard(this, name.c_str());
82  }
iterator find(T *t) noexcept(false)
Definition: Recycler.hpp:114

◆ release() [1/3]

template<typename T, typename _Allocator = Allocator <T>>
void anna::SafeRecycler< T, _Allocator >::release ( T *  t)
inline

Libera el puntero recibido como parametro. No se libera fisicamente sino que se deja marcado como reusable.

Si el puntero pasado como parametro no ha sido obtenido mediante el metodo create los resultados no estan definidos.

Parameters
tInstancia de un puntero de tipo T obtenido a partir del metodo create.
94  {
95  if(t == NULL)
96  return;
97 
98  try {
99  std::string name(typeid(*this).name());
100  name += "::release (T*)";
101  Guard guard(this, name.c_str());
103  } catch(Exception& ex) {
104  ex.trace();
105  }
106  }
void release(T *t)
Definition: Recycler.hpp:144

◆ release() [2/3]

template<typename T, typename _Allocator = Allocator <T>>
void anna::SafeRecycler< T, _Allocator >::release ( iterator ii)
inline

Libera el puntero asociado al iterador recibido como parametro.

Parameters
iiInstancia a liberar.
112  {
113  try {
114  std::string name(typeid(*this).name());
115  name += "::release (iterator)";
116  Guard guard(this, name.c_str());
118  } catch(Exception& ex) {
119  ex.trace();
120  }
121  }
void release(T *t)
Definition: Recycler.hpp:144

◆ release() [3/3]

template<typename T, typename _Allocator = Allocator <T>>
void anna::SafeRecycler< T, _Allocator >::release ( const T *  t)
inline

Libera el puntero recibido como parametro. No se libera fisicamente sino que se deja marcado como reusable.

Si el puntero pasado como parametro no ha sido obtenido mediante el metodo create los resultados no estan definidos.

Parameters
tInstancia de un puntero de tipo T obtenido a partir del metodo create.
132 { release(const_cast <T*>(t)); }
void release(T *t)
Definition: SafeRecycler.hpp:93

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