3 #ifndef __INDICEMAGICO__
4 #define __INDICEMAGICO__
6 #define MAX_ELEMENTOS 500
19 std::string* m_nombres ;
27 m_nombres = (std::string*)calloc(sizeof(std::string), MAX_ELEMENTOS) ;
28 m_datos = (T*)calloc(sizeof(m_datos), MAX_ELEMENTOS) ;
32 std::cerr << "No se pudo allocar el arreglo CIndiceMagico::m_nombres.\n";
35 std::cerr << "No se pudo allocar el arreglo CIndiceMagico::m_datos.\n";
40 void add(const char* nombre, const T dato)
42 //Si ya existÃa, lo borro
47 m_nombres[m_cant] = nombre ;
48 m_datos[m_cant++] = dato ;
52 void add(CIndiceMagico<T>& indice)
54 for (unsigned i=0; i<indice.m_cant; i++)
55 add(indice.m_nombres[i].c_str(), indice.m_datos[i]) ;
59 bool exist(const char* nombre)
61 for (unsigned i=0; i<m_cant; i++)
62 if (m_nombres[i]==nombre)
68 //PRE: Existe un elemento con la clave <nombre>.
69 //POS: Retorna el elemento.
70 T& find(const char* nombre)
73 for (i=0; i<m_cant && m_nombres[i]!=nombre; i++) ;
78 void set_val(const std::string nombre, T valor)
80 for (unsigned i=0; i<m_cant; i++)
81 if (m_datos[i]!=valor)
91 void remove(const unsigned long index)
93 for (unsigned i=index+1u; i<m_cant; i++)
95 m_nombres[i-1] = m_nombres[i] ;
96 m_datos[i-1] = m_datos[i] ;
102 void remove(const char* nombre)
107 for (i=0; !exito && i<m_cant; i++)
108 exito = m_nombres[i]==nombre ;
114 T& operator [] (unsigned i) { return m_datos[i]; }
116 T& items (unsigned i) { return m_datos[i]; }
118 char* keys (unsigned i) const { return (char*)(m_nombres[i].c_str()); }
120 unsigned count() { return m_cant ; }