Remove dynamic exceptions
[anna.git] / include / anna / io / AbstractReader.hpp
1 // ANNA - Anna is Not Nothingness Anymore                                                         //
2 //                                                                                                //
3 // (c) Copyright 2005-2015 Eduardo Ramos Testillano & Francisco Ruiz Rayo                         //
4 //                                                                                                //
5 // See project site at http://redmine.teslayout.com/projects/anna-suite                           //
6 // See accompanying file LICENSE or copy at http://www.teslayout.com/projects/public/anna.LICENSE //
7
8
9 #ifndef anna_io_AbstractReader_hpp
10 #define anna_io_AbstractReader_hpp
11
12 #include <stdio.h>
13 #include <string>
14
15 #include <anna/core/RuntimeException.hpp>
16
17 namespace anna {
18
19 namespace io {
20
21 /**
22    Lector de ficheros de texto.
23 */
24 class AbstractReader {
25 public:
26   /**
27      Destructor.
28   */
29   virtual ~AbstractReader();
30
31   /**
32      Devuelve la estructura de bajo nivel con la que leemos el archivo.
33      \return La estructura de bajo nivel con la que leemos el archivo.
34   */
35   FILE* getFile() { return a_file; }
36
37   /**
38      Devuelve \em true si el fichero indicado en el constructor puede ser tratado
39      \em false en otro caso.
40      \return \em true si el fichero indicado en el constructor puede ser tratado
41      \em false en otro caso.
42   */
43   bool isok() const { return a_file != NULL; }
44
45   /**
46      Prepara esta instancia para trabajar con un nuevo archivo.
47      \param filename Nombre del archivo con el que trabajar.
48   */
49   void open(const std::string& filename) noexcept(false);
50
51   /**
52      Libera los recursos del fichero.
53   */
54   void close() ;
55
56 protected:
57   FILE* a_file;
58
59   /**
60      Constructor.
61      \param maxLength Longitud maxima de linea del fichero a tratar.
62      \warning Con esta clase solo podemos tratar archivos de texto. Si utilizamos este constructor
63      debemos invocar al método open antes de usar cualquier otro método de la clase.
64   */
65   AbstractReader();
66
67   /**
68      Constructor.
69      \param filename Ruta completa del fichero a leer.
70      \warning Con esta clase solo podemos tratar archivos de texto.
71   */
72   explicit AbstractReader(const char* filename);
73
74   /**
75      Constructor.
76      \param filename Ruta completa del fichero a leer.
77      \warning Con esta clase solo podemos tratar archivos de texto.
78   */
79   explicit AbstractReader(const std::string& filename);
80
81   /*
82    * Verifica que el fichero fué abierto correctamente.
83    * \warning Exclusivamente de uso interno.
84    */
85   void verify() noexcept(false);
86
87 private:
88   const std::string a_filename;
89   RuntimeException* a_ex;
90 };
91
92 }
93 }
94 #endif