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

#include <AutoSet.hpp>

Public Member Functions

 AutoSet (Set< T > *t)
 
 AutoSet ()
 
 ~AutoSet ()
 
Set< T > * operator-> () const
 
Set< T > * operator= (Set< T > *t)
 
 operator Set< T > * () const
 

Detailed Description

template<typename T>
class anna::dbos::AutoSet< T >

Facilita el uso de los punteros a objectos obtenidos a partir de los datos guardados en un medio fisico.

La idea de esta clase es que el constructor y el destructor de esta clase cooperan para reservar y/o liberar correctamente la instancia de T asociada a esta instancia.

Parameters
TClase que vamos a gestionar.

En el siguiente ejemplo podemos ver la forma habitual de trabajar con un objeto persistente tiene el incoveniente de que tenemos que tener en cuenta cada una de las situaciones en las que la referencia obtenida mediante el metodo instantiate debe ser liberada.

Server::Set <Server>* servers (NULL);
ServerLoader serverLoader; // ServerLoader hereda de anna::dbos::Loader.
Server* server;
try {
serverLoader.setKey (..........); // Establece los parametros de busqueda
servers = Server::instantiate (serverLoader);
if (servers->size () == 0) {
....
.... Si fuera necesario trataria la condicion de no encontrar ningun registro
....
}
Server::iterator ii, maxii;
for (ii = servers->begin (), maxii = servers->end (); ii != maxii; ii ++) {
server = *ii;
.... Trataria cada uno de los Server encontrados ....
}
Server::release (servers);
}
catch (Exception& ex) {
Server::release (servers);
...
... Si fuera necesario trataria la condificion de error.
}

Como podemos ver a continuacion el siguiente metodo es mucho mas sencillo y aporta la gran ventaja de que el sistema trabaja por nosotros para liberar correctamente los recursos.

AutoSet <Server> servers;
ServerLoader serverLoader; // ServerLoader hereda de anna::dbos::Loader.
Server* server;
try {
serverLoader.setKey (..........); // Establece los parametros de busqueda
servers = Server::instantiate (serverLoader);
if (servers->size () == 0) {
....
.... Si fuera necesario trataria la condicion de no encontrar ningun registro
....
}
Server::iterator ii, maxii;
for (ii = servers->begin (), maxii = servers->end (); ii != maxii; ii ++) {
server = *ii;
.... Trataria cada uno de los Server encontrados ....
}
}
catch (Exception& ex) {
...
... Si fuera necesario trataria la condificion de error.
}

Constructor & Destructor Documentation

◆ AutoSet() [1/2]

template<typename T >
anna::dbos::AutoSet< T >::AutoSet ( Set< T > *  t)
inlineexplicit

Constructor.

Parameters
tInstancia del objeto asociado a esta instancia.
Warning
La instancia deberia haber sido obtenida mediate la invocacion a T::instantiate de la clase persistente.
106 : a_t(t) {;}

◆ AutoSet() [2/2]

template<typename T >
anna::dbos::AutoSet< T >::AutoSet ( )
inline

Constructor.

111 : a_t(NULL) {;}

◆ ~AutoSet()

template<typename T >
anna::dbos::AutoSet< T >::~AutoSet ( )
inline

Destructor. Invoca al metodo T::release

116 { if(a_t != NULL) T::release(a_t); }

Member Function Documentation

◆ operator Set< T > *()

template<typename T >
anna::dbos::AutoSet< T >::operator Set< T > * ( ) const
inline

Operador de conversion.

Returns
La instancia de la clase T asociada a esta instancia.
144 { return a_t; }

◆ operator->()

template<typename T >
Set<T>* anna::dbos::AutoSet< T >::operator-> ( ) const
inline

Operador -> Permite invocar a metodos de la clase T.

Returns
La instancia de la clase T asociada a esta instancia.
123 { return a_t; }

◆ operator=()

template<typename T >
Set<T>* anna::dbos::AutoSet< T >::operator= ( Set< T > *  t)
inline

Operador copia.

Returns
La instancia de la clase T asociada a esta instancia.
130  {
131  if(a_t == t)
132  return t;
133 
134  if(a_t != NULL)
135  T::release(a_t);
136 
137  return a_t = t;
138  }

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