ANNA Suite  2020b
Multipurpose development suite for Telco applications
Classes | Public Types | Public Member Functions | Static Public Member Functions | Static Public Attributes | Protected Member Functions | Static Protected Member Functions | Friends | List of all members
anna::dbos::StorageArea Class Reference

#include <StorageArea.hpp>

Inheritance diagram for anna::dbos::StorageArea:
Inheritance graph
[legend]
Collaboration diagram for anna::dbos::StorageArea:
Collaboration graph
[legend]

Classes

struct  AccessMode
 
struct  Flag
 
struct  StandardSize
 

Public Types

typedef std::vector< Block * > Blocks
 
typedef std::map< Index, Instance * >::iterator iterator
 
typedef std::map< Index, Instance * >::const_iterator const_iterator
 

Public Member Functions

virtual ~StorageArea ()
 
int getErrorCode () const
 
const std::string & getName () const
 
Objectinstance (dbms::Connection &connection, Loader &loader) noexcept(false)
 
Objectinstance (dbms::Connection *connection, Loader &loader) noexcept(false)
 
Objectinstance (dbms::Connection &connection, CrossedLoader &crossedLoader, Loader &loader) noexcept(false)
 
Objectinstance (dbms::Connection *connection, CrossedLoader &crossedLoader, Loader &loader) noexcept(false)
 
Objectinstance (Loader &loader) noexcept(false)
 
Objectcreate (dbms::Connection &connection, Creator &creator) noexcept(false)
 
Objectcreate (dbms::Connection *connection, Creator &creator) noexcept(false)
 
Objectcreate (Creator &creator) noexcept(false)
 
Objectfind (Loader &loader) noexcept(false)
 
Objectduplicate (const Object *object) noexcept(false)
 
bool isLoaded (const Loader &loader) noexcept(false)
 
void apply (dbms::Connection &connection, Recorder &recorder) noexcept(false)
 
void apply (dbms::Connection &connection, Eraser &eraser) noexcept(false)
 
void release (Object **object) noexcept(false)
 
void erase (Object **object) noexcept(false)
 
void dirty (Object *object) noexcept(false)
 
void setSizeof (const Size _sizeof)
 
Size getMaxSizeOf () const
 
Size getSizeOf () const
 
iterator begin ()
 
const_iterator begin () const
 
iterator end ()
 
const_iterator end () const
 
std::string asString () const
 
xml::NodeasXML (xml::Node *parent) 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
 

Static Public Member Functions

static Objectdata (iterator ii)
 
static const Objectdata (const_iterator ii)
 

Static Public Attributes

static const int NoExceptionWhenNotFound = -1
 

Protected Member Functions

void clear () noexcept(false)
 
- Protected Member Functions inherited from anna::Safe
 Safe ()
 

Static Protected Member Functions

static std::string asMemorySize (const Size size)
 

Friends

class Holes
 
struct Instance
 
class Block
 
class Repository
 

Detailed Description

Area de almacenamiento de los objetos obtenidos a partir de los datos guardados en un medio fisico, que normalmente seria una base de datos.

La creacion de cualquier área de almacenamiento debe hacerse mediante el método anna::dbos::Repository::createStorageArea.

Warning
Exclusivamente para uso interno de anna.dbos

Member Typedef Documentation

◆ Blocks

typedef std::vector<Block*> anna::dbos::StorageArea::Blocks

Estructura para mantener los bloques de objetos

◆ const_iterator

Definicion para recorrer los objetos del área de almacenamiento

◆ iterator

Definicion para recorrer los objetos del área de almacenamiento

Constructor & Destructor Documentation

◆ ~StorageArea()

virtual anna::dbos::StorageArea::~StorageArea ( )
virtual

Destructor.

Member Function Documentation

◆ apply() [1/2]

void anna::dbos::StorageArea::apply ( dbms::Connection connection,
Recorder recorder 
)
noexcept

Transfiere la informacion del objeto recibido como parámetro al medio fisico usando el Recorder recibido como parámetro.

Parameters
connectionConexion usada si fuera necesario acceder al medio fisico.
recorderGrabador usado para transferir los datos al medio fisico.

◆ apply() [2/2]

void anna::dbos::StorageArea::apply ( dbms::Connection connection,
Eraser eraser 
)
noexcept

Elimina la informacion del objeto recibido como parámetro del medio fisico usando el Eraser recibido como parámetro.

Parameters
connectionConexion usada si fuera necesario acceder al medio fisico.
eraserObjecto usado para eliminar los datos al medio fisico.
Warning
Si la cuenta de utilizacion del objeto es 1 se liberaría en otro caso se devolvería una excepción.

◆ asMemorySize()

static std::string anna::dbos::StorageArea::asMemorySize ( const Size  size)
staticprotected

Devuelve un literal con el entero recibido tratado como una cantidad en bytes.

Returns
un literal con el entero recibido tratado como un cantidad en bytes

◆ asString()

std::string anna::dbos::StorageArea::asString ( ) const

Devuelve una cadena con la informacion referente a este área de almacenamiento.

Returns
Una cadena con la informacion referente a este área de almacenamiento.

◆ asXML()

xml::Node* anna::dbos::StorageArea::asXML ( xml::Node parent) const

Devuelve un documento XML con la informacion referente a esta instancia.

Parameters
parentNodo XML del que dependende la informacion.
Returns
un documento XML con la informacion referente a esta instancia.

◆ begin() [1/2]

iterator anna::dbos::StorageArea::begin ( )
inline

Devuelve un iterator al primero de los objetos contenido en el área del almacenamiento.

Returns
Un iterator al primero de los objetos contenido en el área del almacenamiento.
459 { return a_directory.begin(); }

◆ begin() [2/2]

const_iterator anna::dbos::StorageArea::begin ( ) const
inline

Devuelve un iterator al primero de los objetos contenido en el área del almacenamiento.

Returns
Un iterator al primero de los objetos contenido en el área del almacenamiento.
465 { return a_directory.begin(); }

◆ clear()

void anna::dbos::StorageArea::clear ( )
protectednoexcept

Descarga del área de almacenamiento todos los objetos que estuviera cargados. Este método se invoca desde anna::dbos::Repository::clear

◆ create() [1/3]

Object* anna::dbos::StorageArea::create ( dbms::Connection connection,
Creator creator 
)
inlinenoexcept

Crea un objeto en el área de almacenamiento un y lo prepara para ser transferido al medio fisico si fuera necesario.

Este cargador deberia tener todos los datos necesarios para localizar la informacion del objeto que debe cargar. Por ejemplo, en caso de tener que obtener el objeto a partir de los datos contenidos en una tabla de una base de datos deberia conocer la clave primaria del objeto a cargar, o alguna otra combinacion de columnas que lo identifiquen univocamente.

Parameters
connectionConexion usada si fuera necesario acceder al medio fisico.
creatorCreador encargado de generar el objeto en el área de almacenamiento.
Returns
La nueva instancia que cumple el patron establecido por el creador.
Warning
  • Cada llamada a este método deberia tener su correspondiente liberacion invocando a release cuando dejemos de usar la instancia.
  • No puede usarse en las áreas de almacenamiento definidas como AccessMode::ReadOnly.
295  {
296  return create(&connection, creator);
297  }
Object * create(dbms::Connection &connection, Creator &creator) noexcept(false)
Definition: StorageArea.hpp:295

◆ create() [2/3]

Object* anna::dbos::StorageArea::create ( dbms::Connection connection,
Creator creator 
)
noexcept

Crea un objeto en el área de almacenamiento un y lo prepara para ser transferido al medio fisico si fuera necesario.

Este cargador deberia tener todos los datos necesarios para localizar la informacion del objeto que debe cargar. Por ejemplo, en caso de tener que obtener el objeto a partir de los datos contenidos en una tabla de una base de datos deberia conocer la clave primaria del objeto a cargar, o alguna otra combinacion de columnas que lo identifiquen univocamente.

Parameters
connectionConexion usada si fuera necesario acceder al medio fisico.
creatorCreador encargado de generar el objeto en el área de almacenamiento.
Returns
La nueva instancia que cumple el patron establecido por el creador.
Warning
  • Cada llamada a este método deberia tener su correspondiente liberacion invocando a release cuando dejemos de usar la instancia.
  • No puede usarse en las áreas de almacenamiento definidas como AccessMode::ReadOnly.

◆ create() [3/3]

Object* anna::dbos::StorageArea::create ( Creator creator)
inlinenoexcept

Crea un objeto en el área de almacenamiento y lo prepara para ser transferido al medio fisico si fuera necesario.

Este cargador deberia tener todos los datos necesarios para localizar la informacion del objeto que debe cargar.

Parameters
creatorCreador encargado de generar el objeto en el área de almacenamiento.
Returns
La nueva instancia que cumple el patron establecido por el creador.
Warning
  • Cada llamada a este método deberia tener su correspondiente liberacion invocando a release cuando dejemos de usar la instancia.
  • No puede usarse en las áreas de almacenamiento definidas como AccessMode::ReadOnly.
334 { return create(NULL, creator); }
Object * create(dbms::Connection &connection, Creator &creator) noexcept(false)
Definition: StorageArea.hpp:295
Here is the call graph for this function:

◆ data() [1/2]

static Object* anna::dbos::StorageArea::data ( iterator  ii)
inlinestatic

Devuelve el puntero sobre el que esta posicionado el iterador recibido como parámetro.

Returns
El puntero sobre el que esta posicionado el iterador recibido como parámetro.
483 { return ii->second->object; }

◆ data() [2/2]

static const Object* anna::dbos::StorageArea::data ( const_iterator  ii)
inlinestatic

Devuelve el puntero sobre el que esta posicionado el iterador recibido como parámetro.

Returns
El puntero sobre el que esta posicionado el iterador recibido como parámetro.
489 { return ii->second->object; }

◆ dirty()

void anna::dbos::StorageArea::dirty ( Object object)
noexcept

Marca el objeto recibido como pendiente de recarga de datos.

Parameters
objectInstancia que vamos a marcar como pendiente de recarga.
Warning
  • Si el objeto recibido como parámetro no fue reservado mediate instance no tiene ningun efecto.
  • La instancia a marcar solo deberia tener una unica instancia en uso.

◆ duplicate()

Object* anna::dbos::StorageArea::duplicate ( const Object object)
noexcept

Devuelve de una copia del objeto recibido como parámetro e incrementa la cuenta de utilizacion asociada a la instancia.

Parameters
objectInstancia obtenida mediate el método instance.
Returns
Una copia del objeto recibido como parámetro. Si el parámetro recibido es NULL devolveria NULL.
Warning
Cada llamada a este método deberia tener su correspondiente liberacion invocando a release cuando dejemos de usar la instancia.

◆ end() [1/2]

iterator anna::dbos::StorageArea::end ( )
inline

Devuelve un iterator al fin de los objetos contenidos en el área del almacenamiento.

Returns
Un iterator al fin de los objetos contenidos en el área del almacenamiento.
471 { return a_directory.end(); }

◆ end() [2/2]

const_iterator anna::dbos::StorageArea::end ( ) const
inline

Devuelve un iterator al fin de los objetos contenidos en el área del almacenamiento.

Returns
Un iterator al fin de los objetos contenidos en el área del almacenamiento.
477 { return a_directory.end(); }

◆ erase()

void anna::dbos::StorageArea::erase ( Object **  object)
noexcept

Elimina toda la informacion referente al objeto recibido como parámetro, siempre y cuando solo tenga un unica referencia activa. Descarga el objeto de la memoria de almacenamiento,

Parameters
objectInstancia que vamos a descargar de la memoria de almacenamiento.
Warning
  • Si el objeto recibido como parámetro no fue reservado mediate instance no tiene ningun efecto.
  • La instancia a liberar solo puede tener 1 en su cuenta de utilizacion.

◆ find()

Object* anna::dbos::StorageArea::find ( Loader loader)
noexcept

Devuelve la informacion de un objeto cargado desde el medio fisico.

Este cargador deberia tener todos los datos necesarios para localizar la informacion del objeto que debe buscar. Por ejemplo, en caso de tener que obtener el objeto a partir de los datos contenidos en una tabla de una base de datos deberia conocer la clave primaria del objeto a cargar, o alguna otra combinacion de columnas que lo identifiquen univocamente.

Parameters
loaderCargador de clase encargado de localizar la informacion referente al objeto buscado.
Returns
Una instancia que cumple el patron establecido por el cargador. Puede ser NULL si el objeto no fue cargado en el área de almacenamiento.
Warning
Cada llamada a este método deberia tener su correspondiente liberacion invocando a release cuando dejemos de usar la instancia.

◆ getErrorCode()

int anna::dbos::StorageArea::getErrorCode ( ) const
inline

Devuelve el código de error asociado a la excepción cuando no se encuentra un registro buscado.

Returns
el código de error asociado a la excepción cuando no se encuentra un registro buscado.
148 { return a_errorCode; }

◆ getMaxSizeOf()

Size anna::dbos::StorageArea::getMaxSizeOf ( ) const
inline

Devuelve el numero maximo de bytes teorico que puede llegar a reservar este área de almacenamiento.

Returns
el numero maximo de bytes teorico que puede llegar a reservar este área de almacenamiento.
447 { return a_maxSize * a_sizeof; }

◆ getName()

const std::string& anna::dbos::StorageArea::getName ( ) const
inline
154 { return a_name; }

◆ getSizeOf()

Size anna::dbos::StorageArea::getSizeOf ( ) const
inline

Devuelve el numero de bytes teorico que puede llegar a reservar este área de almacenamiento.

Returns
el numero de bytes teorico que puede llegar a reservar este área de almacenamiento.
453 { return a_directory.size() * a_sizeof; }

◆ instance() [1/5]

Object* anna::dbos::StorageArea::instance ( dbms::Connection connection,
Loader loader 
)
inlinenoexcept

Carga la informacion de un objeto contenida en un medio fisico y la interpreta para adecuarla a una clase C++.

Este cargador deberia tener todos los datos necesarios para localizar la informacion del objeto que debe cargar. Por ejemplo, en caso de tener que obtener el objeto a partir de los datos contenidos en una tabla de una base de datos deberia conocer la clave primaria del objeto a cargar, o alguna otra combinacion de columnas que lo identifiquen univocamente.

Parameters
connectionConexion usada si fuera necesario extraer los datos del medio fisico.
loaderCargador de clase encargado de localizar y obtener la informacion referente al objeto que deseamos cargar en memoria.
Returns
Una instancia que cumple el patron establecido por el cargador. Puede ser NULL en caso de que al inicializar esta clase errorCode se halla indicado un NoExceptionWhenNotFound en otro caso si no encuentra el objeto que cumpla el patron devolveria una excepcion de ejecucion.
Warning
Cada llamada a este método deberia tener su correspondiente liberacion invocando a release cuando dejemos de usar la instancia.
176  {
177  return instance(&connection, loader);
178  }
Object * instance(dbms::Connection &connection, Loader &loader) noexcept(false)
Definition: StorageArea.hpp:176

◆ instance() [2/5]

Object* anna::dbos::StorageArea::instance ( dbms::Connection connection,
Loader loader 
)
noexcept

Carga la informacion de un objeto contenida en un medio fisico y la interpreta para adecuarla a una clase C++.

Este cargador deberia tener todos los datos necesarios para localizar la informacion del objeto que debe cargar. Por ejemplo, en caso de tener que obtener el objeto a partir de los datos contenidos en una tabla de una base de datos deberia conocer la clave primaria del objeto a cargar, o alguna otra combinacion de columnas que lo identifiquen univocamente.

Parameters
connectionConexion usada si fuera necesario extraer los datos del medio fisico.
loaderCargador de clase encargado de localizar y obtener la informacion referente al objeto que deseamos cargar en memoria.
Returns
Una instancia que cumple el patron establecido por el cargador. Puede ser NULL en caso de que al inicializar esta clase errorCode se halla indicado un NoExceptionWhenNotFound en otro caso si no encuentra el objeto que cumpla el patron devolveria una excepcion de ejecucion.
Warning
Cada llamada a este método deberia tener su correspondiente liberacion invocando a release cuando dejemos de usar la instancia.

◆ instance() [3/5]

Object* anna::dbos::StorageArea::instance ( dbms::Connection connection,
CrossedLoader crossedLoader,
Loader loader 
)
inlinenoexcept

Carga la informacion de un objeto contenida en un medio fisico y la interpreta para adecuarla a una clase C++.

Este cargador deberia tener todos los datos necesarios para localizar la informacion del objeto que debe cargar. Por ejemplo, en caso de tener que obtener el objeto a partir de los datos contenidos en una tabla de una base de datos deberia conocer la clave primaria del objeto a cargar, o alguna otra combinacion de columnas que lo identifiquen univocamente.

Parameters
connectionConexion usada si fuera necesario extraer los datos del medio fisico.
crossedLoaderCargador encargado de encontrar la clave principal a aplicar con el #Loader recibido como parámetro en base a una clave alternativa contenida en el mismo.
loaderCargador de clase encargado de localizar y obtener la informacion referente al objeto que deseamos cargar en memoria.
Returns
Una instancia que cumple el patron establecido por el cargador. Puede ser NULL en caso de que al inicializar esta clase errorCode se halla indicado un NoExceptionWhenNotFound en otro caso si no encuentra el objeto que cumpla el patron devolveria una excepcion de ejecucion.
Warning
Cada llamada a este método deberia tener su correspondiente liberacion invocando a release cuando dejemos de usar la instancia.
225  {
226  return instance(&connection, crossedLoader, loader);
227  }
Object * instance(dbms::Connection &connection, Loader &loader) noexcept(false)
Definition: StorageArea.hpp:176

◆ instance() [4/5]

Object* anna::dbos::StorageArea::instance ( dbms::Connection connection,
CrossedLoader crossedLoader,
Loader loader 
)
noexcept

Carga la informacion de un objeto contenida en un medio fisico y la interpreta para adecuarla a una clase C++.

Este cargador deberia tener todos los datos necesarios para localizar la informacion del objeto que debe cargar. Por ejemplo, en caso de tener que obtener el objeto a partir de los datos contenidos en una tabla de una base de datos deberia conocer la clave primaria del objeto a cargar, o alguna otra combinacion de columnas que lo identifiquen univocamente.

Parameters
connectionConexion usada si fuera necesario extraer los datos del medio fisico.
crossedLoaderCargador encargado de encontrar la clave principal a aplicar con el #Loader recibido como parámetro en base a una clave alternativa contenida en el mismo.
loaderCargador de clase encargado de localizar y obtener la informacion referente al objeto que deseamos cargar en memoria.
Returns
Una instancia que cumple el patron establecido por el cargador. Puede ser NULL en caso de que al inicializar esta clase errorCode se halla indicado un NoExceptionWhenNotFound en otro caso si no encuentra el objeto que cumpla el patron devolveria una excepcion de ejecucion.
Warning
Cada llamada a este método deberia tener su correspondiente liberacion invocando a release cuando dejemos de usar la instancia.

◆ instance() [5/5]

Object* anna::dbos::StorageArea::instance ( Loader loader)
inlinenoexcept

Carga la informacion de un objeto contenida en un medio fisico y la interpreta para adecuarla a una clase C++.

Este cargador deberia tener todos los datos necesarios para localizar la informacion del objeto que debe cargar.

Parameters
loaderCargador de clase encargado de localizar y obtener la informacion referente al objeto que deseamos cargar en memoria.
Returns
Una instancia que cumple el patron establecido por el cargador. Puede ser NULL en caso de que al inicializar esta clase errorCode se halla indicado un NoExceptionWhenNotFound en otro caso si no encuentra el objeto que cumpla el patron devolveria una excepcion de ejecucion.
Warning
Cada llamada a este método deberia tener su correspondiente liberacion invocando a release cuando dejemos de usar la instancia.
Para usar este método se requiere haber re-escrito el método virtual Loader::load para que no intente obtener los datos desde la base de datos.
273  {
274  return instance(NULL, loader);
275  }
Object * instance(dbms::Connection &connection, Loader &loader) noexcept(false)
Definition: StorageArea.hpp:176

◆ isLoaded()

bool anna::dbos::StorageArea::isLoaded ( const Loader loader)
noexcept

Permite conocer si un determinado objeto esta alojado en el área de almacenamiento. No cambia la cuenta de utilizacion de los objetos ni provoca cambios en las estadisticas de aciertos.

Parameters
loaderCargador de clase encargado de localizar la informacion referente al objeto buscado.
Returns
true Si el objeto identificado por el Loader esta en el área de almacenamiento o false en otro caso.

◆ release()

void anna::dbos::StorageArea::release ( Object **  object)
noexcept

Habilita la reutilizacion del espacio de memoria ocupado por un objeto instanciado mediate instance.

Este método no saca al objeto de la memoria de almacenamiento, sino que marca su espacio de memoria como subceptible de ser reutilizado. De esta forma, si el número de objetos cargados en memoria se acerca al tamaño maximo indicado en la inicializacin, cuando halla que cargar un nuevo registro se reusaria el espacio libre en vez de seguir aumentando el tamaño de la memoria de almacenamiento.

Parameters
objectInstancia del objeto que vamos a liberar.
Warning
Si el objeto recibido como parámetro no fue reservado mediate instance no tiene ningun efecto.

◆ setSizeof()

void anna::dbos::StorageArea::setSizeof ( const Size  _sizeof)
inline

Establece el tamanho de las instancias de los objetos contenidos en este área de almacenamiento.

Parameters
_sizeofNumero de bytes ocupado por cada una de las instancias.
441 { a_sizeof = _sizeof + sizeof(Instance); }
friend struct Instance
Definition: StorageArea.hpp:550

Friends And Related Function Documentation

◆ Block

friend class Block
friend

◆ Holes

friend class Holes
friend

◆ Instance

friend struct Instance
friend

◆ Repository

friend class Repository
friend

Member Data Documentation

◆ NoExceptionWhenNotFound

const int anna::dbos::StorageArea::NoExceptionWhenNotFound = -1
static

Valor que hay que indicar al crear el área de almacenamiento (ver anna::dbos::Repository::createStorageArea) para que el método instance no devuelva excepcion de ejecucion en caso de no encontrar el registro buscado.


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