3 #ifndef __INDICEMAGICO__
4 #define __INDICEMAGICO__
6 #define MAX_ELEMENTOS 500
19 std::string* m_nombres ;
27 m_nombres = new std::string[MAX_ELEMENTOS];
28 m_datos = new T[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";
46 void add(const char* nombre, const T dato)
48 //Si ya existía, lo borro
53 m_nombres[m_cant] = nombre ;
54 m_datos[m_cant++] = dato ;
58 void add(CIndiceMagico<T>& indice)
60 for (unsigned i=0; i<indice.m_cant; i++)
61 add(indice.m_nombres[i].c_str(), indice.m_datos[i]) ;
65 bool exist(const char* nombre)
67 for (unsigned i=0; i<m_cant; i++)
68 if (m_nombres[i]==nombre)
74 //PRE: Existe un elemento con la clave <nombre>.
75 //POS: Retorna el elemento.
76 T& find(const char* nombre)
79 for (i=0; i<m_cant && m_nombres[i]!=nombre; i++) ;
84 void set_val(const std::string& nombre, T valor)
86 for (unsigned i=0; i<m_cant; i++)
87 if (m_nombres[i] == nombre)
92 add(nombre.c_str(), valor);
101 void remove(const unsigned long index)
103 for (unsigned i=index+1u; i<m_cant; i++)
105 m_nombres[i-1] = m_nombres[i] ;
106 m_datos[i-1] = m_datos[i] ;
112 void remove(const char* nombre)
117 for (i=0; !exito && i<m_cant; i++)
118 exito = m_nombres[i]==nombre ;
124 T& operator [] (unsigned i) { return m_datos[i]; }
126 T& items (unsigned i) { return m_datos[i]; }
128 char* keys (unsigned i) const { return (char*)(m_nombres[i].c_str()); }
130 unsigned count() { return m_cant ; }