#include <string>
+#include <map>
#include <iostream>
public:
CIndiceMagico()
{
- using std::cerr;
- using std::endl;
m_cant = 0 ;
- m_nombres = (std::string*)calloc(sizeof(std::string), MAX_ELEMENTOS) ;
- m_datos = (T*)calloc(sizeof(m_datos), MAX_ELEMENTOS) ;
+ m_nombres = new std::string[MAX_ELEMENTOS];
+ m_datos = new T[MAX_ELEMENTOS];
if (!m_nombres)
- cerr << "No se pudo allocar el arreglo CIndiceMagico::m_nombres." << endl ;
+ std::cerr << "No se pudo allocar el arreglo CIndiceMagico::m_nombres.\n";
if (!m_datos)
- cerr << "No se pudo allocar el arreglo CIndiceMagico::m_datos." << endl ;
+ std::cerr << "No se pudo allocar el arreglo CIndiceMagico::m_datos.\n";
}
+ ~CIndiceMagico()
+ {
+ delete m_nombres;
+ delete m_datos;
+ }
+
public:
void add(const char* nombre, const T dato)
{
void add(CIndiceMagico<T>& indice)
{
- for (int i=0; i<indice.m_cant; i++)
- add(indice.m_nombres[i], indice.m_datos[i]) ;
+ for (unsigned i=0; i<indice.m_cant; i++)
+ add(indice.m_nombres[i].c_str(), indice.m_datos[i]) ;
}
bool exist(const char* nombre)
{
- for (int i=0; i<m_cant; i++)
+ for (unsigned i=0; i<m_cant; i++)
if (m_nombres[i]==nombre)
return true ;
//POS: Retorna el elemento.
T& find(const char* nombre)
{
- int i;
+ unsigned i;
for (i=0; i<m_cant && m_nombres[i]!=nombre; i++) ;
return m_datos[i] ;
}
- void set_val(const std::string nombre, T valor)
+ void set_val(const std::string& nombre, T valor)
{
- for (int i=0; i<m_cant; i++)
- if (m_datos[i]!=valor)
- m_datos[i] ;
+ for (unsigned i=0; i<m_cant; i++)
+ if (m_nombres[i] == nombre)
+ {
+ m_datos[i] = valor;
+ return;
+ }
+ add(nombre.c_str(), valor);
}
void remove(const unsigned long index)
{
- for (int i=index+1; i<m_cant; i++)
+ for (unsigned i=index+1u; i<m_cant; i++)
{
m_nombres[i-1] = m_nombres[i] ;
m_datos[i-1] = m_datos[i] ;
void remove(const char* nombre)
{
bool exito = false ;
- int i;
+ unsigned i;
for (i=0; !exito && i<m_cant; i++)
exito = m_nombres[i]==nombre ;