ANNA Suite  2020b
Multipurpose development suite for Telco applications
Public Types | Public Member Functions | Static Public Member Functions | List of all members
anna::LRUMap< K, V > Class Template Reference

#include <LRUMap.hpp>

Public Types

typedef container::iterator iterator
 
typedef container::const_iterator const_iterator
 

Public Member Functions

 LRUMap (const char *name, const int maxSize)
 
 ~LRUMap ()
 
bool isEmpty () const
 
int size () const
 
V * find (const K &key)
 
void add (const K &key, const V &v)
 
void clear ()
 
iterator begin ()
 
const_iterator begin () const
 
iterator end ()
 
const_iterator end () const
 
std::string asString () const
 

Static Public Member Functions

static K key (iterator &ii)
 
static V & value (iterator &ii)
 
static Millisecondmillisecond (iterator &ii)
 
static K key (const_iterator &ii)
 
static const V & value (const_iterator &ii)
 
static Millisecond millisecond (const_iterator &ii)
 

Detailed Description

template<typename K, typename V>
class anna::LRUMap< K, V >

Patrón que permite mantener una lista de N elementos de pares (Clave, Valor).

Es capaz de realizar una búsqueda indexada de la clave para obtener el valor, pero además es capaz de mantener estable el número de elementos contenidos en ésta clase.

Si se alcanza el número máximo de elementos indicados en el constructor, si se requiere incluir un nuevo objeto, primero liberará el objeto que lleve más tiempo si ser usado.

Parameters
Kclase que actuará como clave del mapa. Requiere el contructor de copia, y los operadores de comparación == y <.
Vclase que actuará como dato asociado a la clave. Requiere el constructor copia y el operador copia.

Member Typedef Documentation

◆ const_iterator

template<typename K , typename V >
typedef container::const_iterator anna::LRUMap< K, V >::const_iterator

◆ iterator

template<typename K , typename V >
typedef container::iterator anna::LRUMap< K, V >::iterator

Constructor & Destructor Documentation

◆ LRUMap()

template<typename K , typename V >
anna::LRUMap< K, V >::LRUMap ( const char *  name,
const int  maxSize 
)
inline

Constructor.

Parameters
nameNombre logico de esta instancia.
measureUnidad de medida. Solo se usa a efecto de salida de datos.
45 : a_name(name), a_maxSize(maxSize) { ;}

◆ ~LRUMap()

template<typename K , typename V >
anna::LRUMap< K, V >::~LRUMap ( )
inline

Destructor.

50 { clear(); }
void clear()
Definition: LRUMap.hpp:131
Here is the call graph for this function:

Member Function Documentation

◆ add()

template<typename K , typename V >
void anna::LRUMap< K, V >::add ( const K &  key,
const V &  v 
)
inline

Establece el valor de pareja (K,V). Si no existe se crea y si existe se sobre escribe el valor asociado a V, y se actualiza su tiempo de acceso.

Parameters
keyClave de la pareja (K,V).
vValor asociado a la clave.
92  {
93  iterator ii = a_container.find(key);
94 
95  // Sobreescribe el valor asociado a K y actualiza su tiempo de acceso.
96  if(ii != end()) {
97  value(ii) = v;
99  return;
100  }
101 
102  // Si no se ha alcanzado el máximo, sólo hay que insertar el nuevo (K,V)
103  if(size() < a_maxSize) {
104  timed_value tvalue(v, functions::millisecond());
105  a_container.insert(value_type(key, tvalue));
106  return;
107  }
108 
109  // Se ha alcanzado el máximo, hay que buscar el que haga más tiempo que no se
110  // accede => el que tenga el menor 'Time' asociado.
111  iterator minii = begin();
112  Millisecond minTime = millisecond(minii);
113 
114  for(iterator ii = begin(), maxii = end(); ii != maxii; ii ++) {
115  if(millisecond(ii) < minTime)
116  minTime = millisecond(minii = ii);
117  }
118 
119  /*
120  * El map no permite sobre-escribir la clave => por eso tenemos que borrar el nodo
121  * más antiguo y crear otro nuevo.
122  */
123  a_container.erase(minii);
124  timed_value tvalue(v, functions::millisecond());
125  a_container.insert(value_type(key, tvalue));
126  }
container::iterator iterator
Definition: LRUMap.hpp:37
iterator begin()
Definition: LRUMap.hpp:138
static Millisecond millisecond()
Definition: functions.hpp:379
int size() const
Definition: LRUMap.hpp:62
static Millisecond & millisecond(iterator &ii)
Definition: LRUMap.hpp:185
static K key(iterator &ii)
Definition: LRUMap.hpp:167
static V & value(iterator &ii)
Definition: LRUMap.hpp:175
iterator end()
Definition: LRUMap.hpp:152
Here is the call graph for this function:

◆ asString()

template<typename K , typename V >
std::string anna::LRUMap< K, V >::asString ( void  ) const
inline

Devuelve una cadena con la informacion referente a esta clase.

Returns
Una cadena con la informacion referente a esta clase.
224  {
225  std::string msg("LRUMap { Name: ");
226  msg += a_name;
227  msg += functions::asText(" | N: ", a_maxSize);
228  msg += functions::asText(" | n: ", size());
229  return msg += " }";
230  }
static std::string asText(const char *comment, const int number)
Definition: functions.hpp:153
int size() const
Definition: LRUMap.hpp:62
Here is the call graph for this function:

◆ begin() [1/2]

template<typename K , typename V >
iterator anna::LRUMap< K, V >::begin ( )
inline

Devuelve un iterator al primer elemento del contenedor, teniendo que la ordenación de los pares (K,V) se hará en base a K.

Returns
El primer elemento del contenedor.
138 { return a_container.begin(); }

◆ begin() [2/2]

template<typename K , typename V >
const_iterator anna::LRUMap< K, V >::begin ( ) const
inline

Devuelve un iterator al primer elemento del contenedor, teniendo que la ordenación de los pares (K,V) se hará en base a K.

Returns
El primer elemento del contenedor.
145 { return a_container.begin(); }

◆ clear()

template<typename K , typename V >
void anna::LRUMap< K, V >::clear ( )
inline

Vacía este contenedor.

131 { a_container.clear(); }

◆ end() [1/2]

template<typename K , typename V >
iterator anna::LRUMap< K, V >::end ( )
inline

Devuelve un iterator al final del contenedor, teniendo que la ordenación de los pares (K,V) se hará en base a K.

Returns
El primer elemento del contenedor.
152 { return a_container.end(); }

◆ end() [2/2]

template<typename K , typename V >
const_iterator anna::LRUMap< K, V >::end ( ) const
inline

Devuelve un iterator al final del contenedor, teniendo que la ordenación de los pares (K,V) se hará en base a K.

Returns
El primer elemento del contenedor.
159 { return a_container.end(); }

◆ find()

template<typename K , typename V >
V* anna::LRUMap< K, V >::find ( const K &  key)
inline

Devuelve el puntero al valor asociado a la clave recibida como parámetro. Puede ser NULL si la pareja (K,V) no está registrada en el contenedor.

Parameters
keyClave de la que obtener el valor asociado.
Returns
El puntero al valor asociado a la clave recibida como parámetro.
72  {
73  iterator ii = a_container.find(key);
74 
75  if(ii == end())
76  return NULL;
77 
78  /*
79  * Recupera el valor asociado a la clave K y actualiza el momento de acceso.
80  */
82  return &value(ii);
83  }
container::iterator iterator
Definition: LRUMap.hpp:37
static Millisecond millisecond()
Definition: functions.hpp:379
static Millisecond & millisecond(iterator &ii)
Definition: LRUMap.hpp:185
static K key(iterator &ii)
Definition: LRUMap.hpp:167
static V & value(iterator &ii)
Definition: LRUMap.hpp:175
iterator end()
Definition: LRUMap.hpp:152
Here is the call graph for this function:

◆ isEmpty()

template<typename K , typename V >
bool anna::LRUMap< K, V >::isEmpty ( ) const
inline

Devuelve el indicador de validez de esta media.

Returns
true Si la media no tiene ningun valor o false en caso contrario.
56 { return a_container.size() == 0; }

◆ key() [1/2]

template<typename K , typename V >
static K anna::LRUMap< K, V >::key ( iterator ii)
inlinestatic

Devuelve la clave asociada al iterador recibido como parámetro.

Parameters
iiIterador que debe estar comprendido entre [begin (), end).
Returns
la clave asociada al iterador recibido como parámetro.
Warning
Los acceso mediante iterador no actualiza el tiempo de acceso a la pareja (K,V).
167 { return ii->first; }

◆ key() [2/2]

template<typename K , typename V >
static K anna::LRUMap< K, V >::key ( const_iterator ii)
inlinestatic

Devuelve la clave asociada al iterador recibido como parámetro.

Parameters
iiIterador que debe estar comprendido entre [begin (), end).
Returns
la clave asociada al iterador recibido como parámetro.
Warning
Los acceso mediante iterador no actualiza el tiempo de acceso a la pareja (K,V).
196 { return ii->first; }

◆ millisecond() [1/2]

template<typename K , typename V >
static Millisecond& anna::LRUMap< K, V >::millisecond ( iterator ii)
inlinestatic

Devuelve el tiempo de acceso asociado al iterador recibido como parámetro.

Parameters
iiIterador que debe estar comprendido entre [begin (), end).
Returns
el tiempo de acceso asociado al iterador recibido como parámetro.
185  {
186  timed_value* v = &ii->second;
187  return v->second;
188  }

◆ millisecond() [2/2]

template<typename K , typename V >
static Millisecond anna::LRUMap< K, V >::millisecond ( const_iterator ii)
inlinestatic

Devuelve el tiempo de acceso asociado al iterador recibido como parámetro.

Parameters
iiIterador que debe estar comprendido entre [begin (), end).
Returns
el tiempo de acceso asociado al iterador recibido como parámetro.
214  {
215  const timed_value* v = &ii->second;
216  return v->second;
217  }

◆ size()

template<typename K , typename V >
int anna::LRUMap< K, V >::size ( ) const
inline

Devuelve el número de elementos contenidos en este contenedor.

Returns
el número de elementos contenidos en este contenedor.
62 { return a_container.size(); }

◆ value() [1/2]

template<typename K , typename V >
static V& anna::LRUMap< K, V >::value ( iterator ii)
inlinestatic

Devuelve el valor asociado al iterador recibido como parámetro.

Parameters
iiIterador que debe estar comprendido entre [begin (), end).
Returns
el valor asociado al iterador recibido como parámetro.
Warning
Los acceso mediante iterador no actualiza el tiempo de acceso a la pareja (K,V).
175  {
176  timed_value* v = &ii->second;
177  return v->first;
178  }

◆ value() [2/2]

template<typename K , typename V >
static const V& anna::LRUMap< K, V >::value ( const_iterator ii)
inlinestatic

Devuelve el valor asociado al iterador recibido como parámetro.

Parameters
iiIterador que debe estar comprendido entre [begin (), end).
Returns
el valor asociado al iterador recibido como parámetro.
Warning
Los acceso mediante iterador no actualiza el tiempo de acceso a la pareja (K,V).
204  {
205  const timed_value* v = &ii->second;
206  return v->first;
207  }

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