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_datos[i]!=valor)
97 void remove(const unsigned long index)
99 for (unsigned i=index+1u; i<m_cant; i++)
101 m_nombres[i-1] = m_nombres[i] ;
102 m_datos[i-1] = m_datos[i] ;
108 void remove(const char* nombre)
113 for (i=0; !exito && i<m_cant; i++)
114 exito = m_nombres[i]==nombre ;
120 T& operator [] (unsigned i) { return m_datos[i]; }
122 T& items (unsigned i) { return m_datos[i]; }
124 char* keys (unsigned i) const { return (char*)(m_nombres[i].c_str()); }
126 unsigned count() { return m_cant ; }