]> git.llucax.com Git - z.facultad/75.68/celdas.git/blobdiff - trunk/src/indicemagico.h
Fix de bug que hacia morira con SIGSEGV al test de C++.
[z.facultad/75.68/celdas.git] / trunk / src / indicemagico.h
index f5a4ac22a6b02ad888f4a33f29b018e6fed3fd1b..7b284722fb8a1a436dbb96cb2ab2e106167d6230 100644 (file)
@@ -8,6 +8,7 @@
 
 
 #include <string>
+#include <map>
 #include <iostream>
 
 
@@ -22,21 +23,25 @@ public:
 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) ;
+               m_nombres = new std::string[MAX_ELEMENTOS];
+               m_datos = new T[MAX_ELEMENTOS];
 
 
                if (!m_nombres)
-                       cerr << "No se pudo allocar el arreglo CIndiceMagico::m_nombres." << endl ;
+                       std::cerr << "No se pudo allocar el arreglo CIndiceMagico::m_nombres.\n";
 
                if (!m_datos)
-                       cerr << "No se pudo allocar el arreglo CIndiceMagico::m_datos." << endl ;
+                       std::cerr << "No se pudo allocar el arreglo CIndiceMagico::m_datos.\n";
 
        }
 
+       ~CIndiceMagico()
+       {
+               delete m_nombres;
+               delete m_datos;
+       }
+
 public:
        void add(const char* nombre, const T dato)
        {
@@ -52,14 +57,14 @@ public:
 
        void add(CIndiceMagico<T>& indice)
        {
-               for (int i=0; i<indice.m_cant; i++)
-                       add(indice.m_nombres[i], indice.m_datos[i]) ;
+               for (unsigned i=0; i<indice.m_cant; i++)
+                       add(indice.m_nombres[i].c_str(), indice.m_datos[i]) ;
        }
 
 
        bool exist(const char* nombre)
        {
-               for (int i=0; i<m_cant; i++)
+               for (unsigned i=0; i<m_cant; i++)
                        if (m_nombres[i]==nombre)
                                return true ;
 
@@ -70,7 +75,7 @@ public:
        //POS: Retorna el elemento.
        T& find(const char* nombre)
        {
-               int i;
+               unsigned i;
                for (i=0; i<m_cant && m_nombres[i]!=nombre; i++) ;
                return m_datos[i] ;
        }
@@ -78,7 +83,7 @@ public:
 
        void set_val(const std::string nombre, T valor)
        {
-               for (int i=0; i<m_cant; i++)
+               for (unsigned i=0; i<m_cant; i++)
                        if (m_datos[i]!=valor)
                                m_datos[i] ;
        }
@@ -91,7 +96,7 @@ public:
 
        void remove(const unsigned long index)
        {
-               for (int i=index+1; i<m_cant; i++)
+               for (unsigned i=index+1u; i<m_cant; i++)
                {
                        m_nombres[i-1] = m_nombres[i] ; 
                        m_datos[i-1] = m_datos[i] ; 
@@ -103,7 +108,7 @@ public:
        void remove(const char* nombre)
        {
                bool exito = false ;
-               int i;
+               unsigned i;
 
                for (i=0; !exito && i<m_cant; i++)
                        exito = m_nombres[i]==nombre ;