X-Git-Url: https://git.llucax.com/z.facultad/75.68/celdas.git/blobdiff_plain/44029734cc5263d0548dc78ce9d71c43719d1ea7..22822a747c21df2f9d99acd8dd2f3f3a9ea54a9a:/trunk/src/indicemagico.h?ds=sidebyside diff --git a/trunk/src/indicemagico.h b/trunk/src/indicemagico.h index f5a4ac2..9ad336e 100644 --- a/trunk/src/indicemagico.h +++ b/trunk/src/indicemagico.h @@ -8,58 +8,48 @@ #include -#include +#include +#include +#include // FIXME template class CIndiceMagico { public: - std::string* m_nombres ; - T* m_datos ; - unsigned m_cant ; + std::vector< std::string > m_nombres ; + std::vector< T > m_datos ; + typedef typename std::vector< T >::iterator iterator; 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) ; + iterator begin() { return m_datos.begin(); } - if (!m_nombres) - cerr << "No se pudo allocar el arreglo CIndiceMagico::m_nombres." << endl ; + iterator end() { return m_datos.end(); } - if (!m_datos) - cerr << "No se pudo allocar el arreglo CIndiceMagico::m_datos." << endl ; - - } - -public: - void add(const char* nombre, const T dato) + void add(const std::string& nombre, const T& dato) { //Si ya existía, lo borro if (exist(nombre)) remove(nombre) ; - - m_nombres[m_cant] = nombre ; - m_datos[m_cant++] = dato ; + m_nombres.push_back(nombre); + m_datos.push_back(dato); } void add(CIndiceMagico& indice) { - for (int i=0; i. //POS: Retorna el elemento. - T& find(const char* nombre) + T& find(const std::string& nombre) { - int i; - for (i=0; i +inline +std::ostream& operator<< (std::ostream& os, CIndiceMagico& im) +{ + unsigned c = im.count(); +#ifdef LOG + if (c-- == 0) return os << ""; + for (unsigned i = 0; i < c; ++i) + os << im[i] << ","; + os << im[c]; + return os; +#else // ! LOG + if (c == 0) return os << "\t\tvacío\n"; + for (unsigned i = 0; i < c; ++i) + os << "\t\t" << im.keys(i) << ":\t" << im[i] << "\n"; + return os; +#endif // LOG +} + +template < typename T > +inline +std::ostream& operator<< (std::ostream& os, CIndiceMagico& im) +{ + unsigned c = im.count(); +#ifdef LOG + if (c-- == 0) return os << ""; + for (unsigned i = 0; i < c; ++i) + os << *im[i] << ","; + os << *im[c]; + return os; +#else // ! LOG + if (c == 0) return os << "\t\tvacío\n"; + for (unsigned i = 0; i < c; ++i) + os << "\t\t" << im.keys(i) << ":\t" << *im[i] << "\n"; + return os; +#endif // LOG +} #endif