3 #ifndef __INDICEMAGICO__
4 #define __INDICEMAGICO__
6 #define MAX_ELEMENTOS 500
18 std::string* m_nombres ;
28 m_nombres = (std::string*)calloc(sizeof(std::string), MAX_ELEMENTOS) ;
29 m_datos = (T*)calloc(sizeof(m_datos), MAX_ELEMENTOS) ;
33 cerr << "No se pudo allocar el arreglo CIndiceMagico::m_nombres." << endl ;
36 cerr << "No se pudo allocar el arreglo CIndiceMagico::m_datos." << endl ;
41 void add(const char* nombre, const T dato)
43 //Si ya existía, lo borro
48 m_nombres[m_cant] = nombre ;
49 m_datos[m_cant++] = dato ;
53 void add(CIndiceMagico<T>& indice)
55 for (int i=0; i<indice.m_cant; i++)
56 add(indice.m_nombres[i], indice.m_datos[i]) ;
60 bool exist(const char* nombre)
62 for (int i=0; i<m_cant; i++)
63 if (m_nombres[i]==nombre)
69 //PRE: Existe un elemento con la clave <nombre>.
70 //POS: Retorna el elemento.
71 T& find(const char* nombre)
74 for (i=0; i<m_cant && m_nombres[i]!=nombre; i++) ;
79 void set_val(const std::string nombre, T valor)
81 for (int i=0; i<m_cant; i++)
82 if (m_datos[i]!=valor)
92 void remove(const unsigned long index)
94 for (int i=index+1; i<m_cant; i++)
96 m_nombres[i-1] = m_nombres[i] ;
97 m_datos[i-1] = m_datos[i] ;
103 void remove(const char* nombre)
108 for (i=0; !exito && i<m_cant; i++)
109 exito = m_nombres[i]==nombre ;
115 T& operator [] (unsigned i) { return m_datos[i]; }
117 T& items (unsigned i) { return m_datos[i]; }
119 char* keys (unsigned i) const { return (char*)(m_nombres[i].c_str()); }
121 unsigned count() { return m_cant ; }