#include "EstructuraABC.hpp"



/// Visualiza el contenido del registro solicitado
int EstructuraABC::visualiza(int pos)
{
   if (pos >= 0 && pos < lista.size())
   {
      It = lista.begin();
      advance (It, pos);
      Registro *a = *It;
      a->visualizaRegistro();
      return 0; // OK
   }
   return 1; // Error
}

/// Visualiza todo el contenido de la lista
int EstructuraABC::visualizaTodos(void)
{
   for (It = lista.begin(); It != lista.end(); ++It)
   {
      Registro *a = *It;
      a->visualizaRegistro();
   }
   return 0; // Ok
}


/// Visualiza el registro de la lista solicitado
int EstructuraABC::borrar(int pos)
{
   if (pos >= 0 && pos < lista.size())
   {
      It = lista.begin();
      advance (It, pos);
      Registro *a = *It;
      delete a;
      It = lista.erase (It);
   }
   return 2; // Error 
}


/// Modifica el registro de la lista solicitado
int EstructuraABC::modificar(int pos)
{
   if (pos >= 0 && pos < lista.size())
   {
      It = lista.begin();
      advance (It, pos);
      Registro *a = *It;
      a->modificarRegistro();
      return 0; // Ok
   }
   return 3; // Error
}


/// Leer una lista de disco
int EstructuraABC::leer(const char *file)
{
   int n = 0;
   borrarTodo();
   FILE *pFile;
   pFile = fopen(file,"r");
   if(pFile != NULL)
   {
      while (!feof(pFile))
      {
         leerAdiciona(pFile);
         n++;
      }
      printf ("\nRegistros leidos: %d\n", n-1);
      fclose (pFile);
      return 0; // Ok
   }
   return 4; // Error
}

/// Grabar una lista en disco
int EstructuraABC::grabar(const char *file)
{
   int n = 1;
   FILE *pFile;
   pFile = fopen(file,"w");
   if(pFile != NULL)
   {
      for (It = lista.begin(); It != lista.end(); ++It)
      {
         Registro *a = *It;
         a->grabarRegistro(pFile);
         n++;
      }
      fclose (pFile);
      printf ("\nRegistros grabados: %d\n", n-1);
      return 0; // Ok
   }
   return 5; // Error
}