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

#include <MultiMap.hpp>

Inheritance diagram for anna::MultiMap< T, SortBy, TKey >:
Inheritance graph
[legend]
Collaboration diagram for anna::MultiMap< T, SortBy, TKey >:
Collaboration graph
[legend]

Public Types

typedef std::vector< T * > container
 
typedef container::iterator iterator
 
typedef container::const_iterator const_iterator
 
typedef container::value_type value_type
 

Public Member Functions

 MultiMap ()
 
 MultiMap (const MultiMap &other)
 
virtual ~MultiMap ()
 
bool add (T *_vv) noexcept(false)
 
bool contains (const T *_vv) const
 
void clearAndDestroy ()
 
T * erase (const T *_vv) noexcept(false)
 
iterator erase_iterator (iterator ii)
 
T * find (const TKey &key)
 
iterator find_iterator (const TKey &key)
 
const T * find (const TKey &key) const
 

Static Public Member Functions

static T * data (iterator ii)
 
static const T * data (const_iterator ii)
 

Detailed Description

template<typename T, typename SortBy, typename TKey = int>
class anna::MultiMap< T, SortBy, TKey >

Patron para ordenar instancias de objetos en base de una clave. El uso de este patrón está aconsejado cuando tenemos que gestionar cientos o miles de objetos. La eficiencia de los borrado y las inserciones es O(log N).

Parameters
TClase del patron.
SortByClase que ofrece el valor por el que ordenar. Debe implementar un metodo constante con la signatura: TKey value (const T*)
TKeyTipo de clave usado para calcular la ordenacion. Debe implementar los operadores '=', '<' y '==' y el contructor copia.

Member Typedef Documentation

◆ const_iterator

template<typename T, typename SortBy, typename TKey = int>
typedef container::const_iterator anna::MultiMap< T, SortBy, TKey >::const_iterator

◆ container

template<typename T, typename SortBy, typename TKey = int>
typedef std::vector<T*> anna::MultiMap< T, SortBy, TKey >::container

◆ iterator

template<typename T, typename SortBy, typename TKey = int>
typedef container::iterator anna::MultiMap< T, SortBy, TKey >::iterator

◆ value_type

template<typename T, typename SortBy, typename TKey = int>
typedef container::value_type anna::MultiMap< T, SortBy, TKey >::value_type

Constructor & Destructor Documentation

◆ MultiMap() [1/2]

template<typename T, typename SortBy, typename TKey = int>
anna::MultiMap< T, SortBy, TKey >::MultiMap ( )
inline

Constructor.

56 {;}

◆ MultiMap() [2/2]

template<typename T, typename SortBy, typename TKey = int>
anna::MultiMap< T, SortBy, TKey >::MultiMap ( const MultiMap< T, SortBy, TKey > &  other)
inlineexplicit

Constructor copia.

Parameters
otherInstancia de la que copiar.
62 : container(other) {}
std::vector< T * > container
Definition: MultiMap.hpp:48

◆ ~MultiMap()

template<typename T, typename SortBy, typename TKey = int>
virtual anna::MultiMap< T, SortBy, TKey >::~MultiMap ( )
inlinevirtual

Destructor.

67 { this->clear(); }

Member Function Documentation

◆ add()

template<typename T, typename SortBy, typename TKey = int>
bool anna::MultiMap< T, SortBy, TKey >::add ( T *  _vv)
inlinenoexcept

Incorpora la instancia recibida como parametro en la lista ordenada de objetos.

Parameters
_vvInstancia a guardar en el map. Si es NULL la operacion no tendra ningun efecto.
Returns
true si ha registrado la nueva instancia o false en otro caso.
75  {
76  if(_vv == NULL)
77  return false;
78 
79  iterator maxii = this->end();
80  iterator ii = std::upper_bound(this->begin(), maxii, _vv, a_lessT);
81 
82  if(ii == maxii)
83  this->push_back(_vv);
84  else
85  this->insert(ii, _vv);
86 
87  return true;
88  }
container::iterator iterator
Definition: MultiMap.hpp:49

◆ clearAndDestroy()

template<typename T, typename SortBy, typename TKey = int>
void anna::MultiMap< T, SortBy, TKey >::clearAndDestroy ( )
inline

Borra las entradas contenidas en el vector ordenado y libera la memoria asociada a las mismas.

102  {
103  for(iterator ii = this->begin(), maxii = this->end(); ii != maxii; ii ++)
104  delete data(ii);
105 
106  this->clear();
107  }
static T * data(iterator ii)
Definition: MultiMap.hpp:181
container::iterator iterator
Definition: MultiMap.hpp:49

◆ contains()

template<typename T, typename SortBy, typename TKey = int>
bool anna::MultiMap< T, SortBy, TKey >::contains ( const T *  _vv) const
inline

Devolvera true si la instancia recibida como parametro esta contenido en el map o en otro caso. Si la instancia recibida es NULL siempre devolvera false.

Parameters
_vvInstancia a comprobar.
Returns
true si la instancia recibida como parametro esta contenido en el map o en otro caso.
97 { return (_vv == NULL) ? false : (find(SortBy::value(_vv)) != NULL); }
T * find(const TKey &key)
Definition: MultiMap.hpp:147

◆ data() [1/2]

template<typename T, typename SortBy, typename TKey = int>
static T* anna::MultiMap< T, SortBy, TKey >::data ( iterator  ii)
inlinestatic

Devuelve el objeto referenciado por el iterador.

Returns
El objeto referenciado por el iterador.
181 { return *ii; }

◆ data() [2/2]

template<typename T, typename SortBy, typename TKey = int>
static const T* anna::MultiMap< T, SortBy, TKey >::data ( const_iterator  ii)
inlinestatic

Devuelve el objeto referenciado por el iterador.

Returns
El objeto referenciado por el iterador.
187 { return *ii; }

◆ erase()

template<typename T, typename SortBy, typename TKey = int>
T* anna::MultiMap< T, SortBy, TKey >::erase ( const T *  _vv)
inlinenoexcept

Elimina la instancia recibida como parametro de la lista ordenada de objetos, pero no se libera su memoria.

Parameters
_vvInstancia a guardar en el map. Si es NULL la operacion no tendra ningun efecto.
Returns
La instancia correspondiente a la entrada borrada o NULL si no se encontró ninguna entrada válida.
115  {
116  if(_vv == NULL)
117  return NULL;
118 
119  iterator maxii = this->end();
120  iterator ii = std::lower_bound(this->begin(), this->end(), _vv, a_lessT);
121 
122  if(ii == maxii)
123  return NULL;
124 
125  T* dd = data(ii);
126 
127  if(!(SortBy::value(_vv) == SortBy::value(dd)))
128  return NULL;
129 
130  container::erase(ii);
131  return dd;
132  }
static T * data(iterator ii)
Definition: MultiMap.hpp:181
container::iterator iterator
Definition: MultiMap.hpp:49

◆ erase_iterator()

template<typename T, typename SortBy, typename TKey = int>
iterator anna::MultiMap< T, SortBy, TKey >::erase_iterator ( iterator  ii)
inline

Borra la entrada asociada al iterador recibido. El iterador recibido deja de ser válido.

Parameters
iiPosición a borrar
Returns
La nueva posición a la que debería pasar el iterador una vez borrada la entrada.
140 { return container::erase(ii); }

◆ find() [1/2]

template<typename T, typename SortBy, typename TKey = int>
T* anna::MultiMap< T, SortBy, TKey >::find ( const TKey &  key)
inline

Devuelve la instancia asociada a la clave recibida como parametro o NULL si no existe.

Parameters
keyClave a buscar en el map.
Returns
la instancia asociada a la clave recibida como parametro o NULL si no existe.
148  {
149  iterator maxii = this->end();
150  iterator ii = lower_bound(this->begin(), maxii, key, a_lessKey);
151 
152  if(ii == maxii)
153  return NULL;
154 
155  T* pos = data(ii);
156  return (SortBy::value(pos) == key) ? pos : NULL;
157  }
static T * data(iterator ii)
Definition: MultiMap.hpp:181
container::iterator iterator
Definition: MultiMap.hpp:49

◆ find() [2/2]

template<typename T, typename SortBy, typename TKey = int>
const T* anna::MultiMap< T, SortBy, TKey >::find ( const TKey &  key) const
inline

Devuelve la instancia asociada a la clave recibida como parametro o NULL si no existe.

Parameters
keyClave a buscar en el map.
Returns
la instancia asociada a la clave recibida como parametro o NULL si no existe.
173  {
174  return const_cast <MultiMap <T, SortBy, TKey>*>(this)->find(key);
175  }
T * find(const TKey &key)
Definition: MultiMap.hpp:147

◆ find_iterator()

template<typename T, typename SortBy, typename TKey = int>
iterator anna::MultiMap< T, SortBy, TKey >::find_iterator ( const TKey &  key)
inline

Devuelve el iterador a la instancia asociada a la clave recibida.

Returns
el iterador a la instancia asociada a la clave recibida.
164  {
165  return lower_bound(this->begin(), this->end(), key, a_lessKey);
166  }

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