ANNA Suite  2020b
Multipurpose development suite for Telco applications
Public Member Functions | Protected Member Functions | List of all members
anna::DataBlock Class Reference

#include <DataBlock.hpp>

Inheritance diagram for anna::DataBlock:
Inheritance graph
[legend]

Public Member Functions

 DataBlock (const bool deepCopy=false)
 
 DataBlock (const char *buffer, const int size, const bool deepCopy=false) noexcept(false)
 
 DataBlock (const DataBlock &other) noexcept(false)
 
virtual ~DataBlock ()
 
int getMaxSize () const
 
int getSize () const
 
const char * getData () const
 
bool isEmpty () const
 
bool deepCopy () const
 
void setSize (const int size) noexcept(false)
 
DataBlockoperator+= (const char c) noexcept(false)
 
DataBlockoperator+= (const DataBlock &right) noexcept(false)
 
DataBlockoperator+= (const std::string &str) noexcept(false)
 
const char operator[] (const int pos) const noexcept(false)
 
char & operator[] (const int pos) noexcept(false)
 
void append (const char *data, const int len) noexcept(false)
 
void append (const DataBlock &other) noexcept(false)
 
void assign (const DataBlock &right) noexcept(false)
 
void assign (const char *buffer, const int size) noexcept(false)
 
DataBlockoperator= (const DataBlock &right) noexcept(false)
 
DataBlockoperator= (const char c) noexcept(false)
 
DataBlockoperator= (const std::string &str) noexcept(false)
 
void allocate (const int nbytes) noexcept(false)
 
void clear () noexcept(false)
 
void remove (const int pos, const int nbytes) noexcept(false)
 
void remove (const int nbytes) noexcept(false)
 
std::string asString (const int characterByLine=24) const
 

Protected Member Functions

void initialize (const char *buffer, const int size) noexcept(false)
 
void setBuffer (const char *buffer)
 
void setMaxSize (const int maxSize)
 

Detailed Description

Optimizacion de acceso a la memoria dinamica.

Incrementa el rendimiento al acceder y reservar de memoria dinamica mediante la reutilizacion controlada.

Para optimizar el acceso no se ha establecido ningun tipo de proteccion para ejecucion MT.

Constructor & Destructor Documentation

◆ DataBlock() [1/3]

anna::DataBlock::DataBlock ( const bool  deepCopy = false)
inlineexplicit

Constructor.

Parameters
deepCopyModo de copia de esta instancia. Si activamos el modo de copia profunda al asignar cualquier otro bloque de memoria a este, se reserva (si fuese necesario) la memoria para ubicar el buffer y despues realizara una copia byte a byte.
33  :
34  a_buffer(NULL),
35  a_size(0),
36  a_deepCopy(deepCopy),
37  a_maxSize(0) {}
bool deepCopy() const
Definition: DataBlock.hpp:100
Here is the call graph for this function:

◆ DataBlock() [2/3]

anna::DataBlock::DataBlock ( const char *  buffer,
const int  size,
const bool  deepCopy = false 
)
noexcept

Constructor.

Parameters
bufferBloque de memoria con el que inicializar el buffer de esta instancia.
sizeNumero de bytes del bloque de memoria recibido.
deepCopyModo de copia de esta instancia. Si activamos el modo de copia profunda al asignar cualquier otro bloque de memoria a este, se reserva la memoria para ubicar el buffer y despues realizara una copia byte a byte.

◆ DataBlock() [3/3]

anna::DataBlock::DataBlock ( const DataBlock other)
noexcept

Constructor copia. El modo de copia sera el mismo que el establecido por la instancia de la que copiar.

Parameters
otherBloque de memoria con el que instanciar esta instancia.

◆ ~DataBlock()

virtual anna::DataBlock::~DataBlock ( )
virtual

Destructor.

Member Function Documentation

◆ allocate()

void anna::DataBlock::allocate ( const int  nbytes)
noexcept

Reserva el numero de bytes indicado por el parametro recibido. Si la cantidad de memoria preasignada es mayor que la solicitada no se realiza ninguna llamada al sistema operativo.

Parameters
nbytesNumero de bytes a reservar.

◆ append() [1/2]

void anna::DataBlock::append ( const char *  data,
const int  len 
)
noexcept

Anade el bloque de memoria recibido. Para poder usar este operador el bloque de memoria destino debe tener activado el modo de copia profunda. Si la memoria reservada no es suficiente reservara automaticamente la cantidad de memoria necesaria.

Parameters
dataDireccion donde comienza el bloque de datos.
lenLongitud del bloque de datos.

◆ append() [2/2]

void anna::DataBlock::append ( const DataBlock other)
inlinenoexcept

Anade el bloque de memoria recibido. Para poder usar este operador el bloque de memoria destino debe tener activado el modo de copia profunda. Si la memoria reservada no es suficiente reservara automaticamente la cantidad de memoria necesaria.

Parameters
otherBloque de memoria a añadir.
184 { append(other.a_buffer, other.a_size); }
void append(const char *data, const int len) noexcept(false)
Here is the call graph for this function:

◆ assign() [1/2]

void anna::DataBlock::assign ( const DataBlock right)
inlinenoexcept

Copia el contenido del bloque recibido como parámetro.

Parameters
rightBloque de memoria del que copiar.
Returns
Una referencia a si mismo.
191 { *this = right; }
Here is the call graph for this function:

◆ assign() [2/2]

void anna::DataBlock::assign ( const char *  buffer,
const int  size 
)
noexcept

Copia o direcciona el contenido del bloque recibido como parámetro.

Parameters
bufferDirección de memoria a direcionar.
sizeTamaño de la memoria.
Returns
Una referencia a si mismo.

◆ asString()

std::string anna::DataBlock::asString ( const int  characterByLine = 24) const

Muestra el contenido de este buffer en forma de buffer hexadecimal vs bytes.

◆ clear()

void anna::DataBlock::clear ( )
inlinenoexcept

La reserva de memoria actual pasa a ser memoria pre-asignada, asi libera el bloque de memoria reservado hasta el momento, pero de forma que si posteriormente vuelve a ser necesario puede reutilizarlo sin tener que volver a realizar una llamada al sistema para obtener memoria dinamica.

240 { a_size = 0; }
Here is the call graph for this function:

◆ deepCopy()

bool anna::DataBlock::deepCopy ( ) const
inline

Devuelve informacion acerca de la configuracion de reserva de memoria de este bloque.

Returns
true si el bloque de memoria tiene activado el sistema de copia profunda o false en otro caso.
100 { return a_deepCopy; }
Here is the call graph for this function:

◆ getData()

const char* anna::DataBlock::getData ( ) const
inline

Éste metodo solo debe usarse en aplicaciones mono-thread o en situaciones en las que estemos seguros que esta bloque de datos no puede verse afectado por otro thread.

Returns
El contenido del bloque de memoria.
86 { return a_buffer; }

◆ getMaxSize()

int anna::DataBlock::getMaxSize ( ) const
inline

Éste metodo solo debe usarse en aplicaciones mono-thread o en situaciones en las que estemos seguros que esta bloque de datos no puede verse afectado por otro thread.

Returns
Tamaño de la memoria reservada por esta instancia.
70 { return a_maxSize; }

◆ getSize()

int anna::DataBlock::getSize ( ) const
inline

Éste metodo solo debe usarse en aplicaciones mono-thread o en situaciones en las que estemos seguros que esta bloque de datos no puede verse afectado por otro thread.

Returns
Tamaño del bloque de memoria contenido actualmente.
78 { return a_size; }

◆ initialize()

void anna::DataBlock::initialize ( const char *  buffer,
const int  size 
)
protectednoexcept

Inicializa el contenido de este bloque de datos. Si fue instancia con copia profunda copia el contenido del buffer, en otro caso solo se queda con el valor de la referencia de memoria a la que apunta.

Parameters
bufferBloque de memoria con el que inicializar el buffer de esta instancia.
sizeNumero de bytes del bloque de memoria recibido.

◆ isEmpty()

bool anna::DataBlock::isEmpty ( ) const
inline

Devuelve informacion acerca del estado de ocupacion de este bloque de memoria.

Returns
true si el bloque de memoria esta vacio o false en otro caso.
93 { return (a_size == 0) ? true : false; }

◆ operator+=() [1/3]

DataBlock& anna::DataBlock::operator+= ( const char  c)
inlinenoexcept

Anade el caracter recibido al bloque de memoria. Para poder usar este operador el bloque de memoria destino debe tener activado el modo de copia profunda. Si la memoria reservada no es suficiente reservara automaticamente la cantidad de memoria necesaria.

Parameters
cCaracter a añadir a este bloque de memoria.
Returns
Una referencia a si mismo.
118  {
119  append(&c, sizeof(c));
120  return *this;
121  }
void append(const char *data, const int len) noexcept(false)
Here is the call graph for this function:

◆ operator+=() [2/3]

DataBlock& anna::DataBlock::operator+= ( const DataBlock right)
inlinenoexcept

Anhade el bloque de memoria recibido. Para poder usar este operador el bloque de memoria destino debe tener activado el modo de copia profunda. Si la memoria reservada no es suficiente reservara automaticamente la cantidad de memoria necesaria.

Parameters
rightBloque de memoria a añadir a este bloque de memoria.
Returns
Una referencia a si mismo.
132  {
133  if(this != &right)
134  append(right.a_buffer, right.a_size);
135 
136  return *this;
137  }
void append(const char *data, const int len) noexcept(false)
Here is the call graph for this function:

◆ operator+=() [3/3]

DataBlock& anna::DataBlock::operator+= ( const std::string &  str)
inlinenoexcept

Anade la cadena recibida al bloque de memoria. Para poder usar este operador el bloque de memoria destino debe tener activado el modo de copia profunda. Si la memoria reservada no es suficiente reservara automaticamente la cantidad de memoria necesaria.

Parameters
strCadena a añadir a este bloque de memoria.
Returns
Una referencia a si mismo.
148  {
149  append(str.c_str(), str.length());
150  return *this;
151  }
void append(const char *data, const int len) noexcept(false)
Here is the call graph for this function:

◆ operator=() [1/3]

DataBlock& anna::DataBlock::operator= ( const DataBlock right)
noexcept

operador copia. El modo de copiar vendra definido por el modo copia con el que hayamos iniciado la instancia destino.

Parameters
rightBloque de memoria del que copiar.
Returns
Una referencia a si mismo.

◆ operator=() [2/3]

DataBlock& anna::DataBlock::operator= ( const char  c)
inlinenoexcept

Operador de inicializacion. El bloque destino debera tener activado el sistema de copia profunda.

Parameters
cCaracter con el que vamos a inicializar el contenido del bloque.
Returns
Una referencia a si mismo.
215 { clear(); (*this) += c; return *this; }
void clear() noexcept(false)
Definition: DataBlock.hpp:240
Here is the call graph for this function:

◆ operator=() [3/3]

DataBlock& anna::DataBlock::operator= ( const std::string &  str)
inlinenoexcept

Operador de inicializacion. El bloque destino debera tener activado el sistema de copia profunda.

Parameters
strCadena con el que vamos a inicializar el contenido del bloque.
Returns
Una referencia a si mismo.
223 { clear(); (*this) += str; return *this; }
void clear() noexcept(false)
Definition: DataBlock.hpp:240
Here is the call graph for this function:

◆ operator[]() [1/2]

const char anna::DataBlock::operator[] ( const int  pos) const
noexcept

Devuelve la posicion i-esima del bloque de datos.

Parameters
posPosicion a la que acceder.
Returns
La posicion i-esima del bloque de datos.

◆ operator[]() [2/2]

char& anna::DataBlock::operator[] ( const int  pos)
noexcept

Devuelve la posicion i-esima del bloque de datos.

Parameters
posPosicion a la que acceder.
Returns
La posicion i-esima del bloque de datos.

◆ remove() [1/2]

void anna::DataBlock::remove ( const int  pos,
const int  nbytes 
)
noexcept

Elimina del bloque de memoria unos determinados bytes.

Parameters
posPosicion del bloque donde empezar a eliminar.
nbytesNumero de bytes a descartar a partir de la posicion indicada.

◆ remove() [2/2]

void anna::DataBlock::remove ( const int  nbytes)
noexcept

Elimina del bloque de memoria los n primeros bytes.

Parameters
nbytesNumero de bytes a descartar a partir de la posicion indicada.

◆ setBuffer()

void anna::DataBlock::setBuffer ( const char *  buffer)
inlineprotected

Establece el espacio de memoria asociado a este bloque de datos.

Parameters
bufferNuevo buffer de datos asociado a este bloque.
Warning
El DataBlock delega la gestion de la memoria a la clase heredada.
277 { a_buffer = (char*) buffer; }

◆ setMaxSize()

void anna::DataBlock::setMaxSize ( const int  maxSize)
inlineprotected

Establece el numero de bytes que tiene reservados este bloque de datos.

Parameters
maxSizenumero de bytes que tiene reservados este bloque de datos.
Warning
El DataBlock delega la gestion de la memoria a la clase heredada.
284 { a_maxSize = maxSize; }

◆ setSize()

void anna::DataBlock::setSize ( const int  size)
noexcept

Establece el numero de bytes que tiene asociado a este bloque de datos.

Parameters
sizenumero de bytes que tiene asociado a este bloque de datos.
Warning
El DataBlock delega la gestion de la memoria a la clase heredada.

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