Remove dynamic exceptions
[anna.git] / include / anna / core / Exception.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_core_Exception_hpp
10 #define anna_core_Exception_hpp
11
12 #include <string>
13 #include <exception>
14
15 namespace anna {
16
17 /**
18    Excepcion generica usada en las aplicaciones functions.
19 */
20 class Exception : public std::exception {
21 public:
22   /**
23    * Normaliza las acciones que puede tomar un método a la hora de configurar
24    * el tratamiento de errores/excepciones.
25    */
26   struct Mode { enum _v { Ignore, Throw, Trace }; };
27
28   /**
29      Constructor.
30      @param text Texto explicativo de la excepcion.
31      @param fromFile Fichero en el que se provoco la situacion de error.
32      @param fromLine Linea del fichero en la que se detecto el error.
33   */
34   Exception(const char* text, const char* fromFile, const int fromLine);
35
36   /**
37      Constructor copia.
38
39      @param other Instancia de la una excepcion a partir de la que vamos a obtener los datos.
40   */
41   Exception(const Exception& other);
42
43   /**
44      Destructor.
45   */
46   virtual ~Exception() {;}
47
48   // Accesores
49   /**
50      @return Devuelve el texto explicativo asociado a esta excepcion.
51   */
52   const std::string& getText() const { return m_text;}
53
54   /**
55      @return El nombre del fichero donde se genero la excepcion. Coincidira con el indicado
56      en el constructor.
57   */
58   const char* getFromFile() const { return m_fromFile.c_str(); }
59
60   /**
61      @return La linea del fichero donde se genero la excepcion. Coincidira con la indicada
62      en el constructor.
63   */
64   int getFromLine() const { return m_fromLine; }
65
66   /**
67      Establecer un codigo de error asociado a esta excepcion.
68
69      @param errorCode Valor a establecer. El significado de este error dependera de la
70      interpretacion particular que queramos darle en nuestra aplicacion.
71   */
72   void setErrorCode(const int errorCode) { m_errorCode = errorCode; }
73
74   /**
75      @return El codigo de error asociado a esta excepcion.
76   */
77   int getErrorCode() const { return m_errorCode; }
78
79   // Operadores
80   /**
81      Operador copia.
82
83      @param right Instancia de la excepcion de la que vamos a obtener los datos.
84
85      @return Referencia a esta instancia.
86    */
87   Exception& operator = (const Exception& right) ;
88
89   // Metodos
90   /**
91      Devuelve una cadena conteniendo toda la informacion referente a la excepcion
92      en un formato que sea facil de interpretar.
93
94      @return Instancia de la cadena conteniendo la informacion de la excepcion.
95   */
96   std::string asString() const ;
97
98   /**
99      Devuelve una cadena conteniendo toda la informacion referente a la excepcion
100      en un formato que sea facil de interpretar.
101
102      Sobreescribe el metodo de la clase base.
103
104      @return Puntero a la cadena conteniendo la informacion de la excepcion.
105   */
106   const char* what() const noexcept { return asString().c_str(); }     // JASC, 23/9/2003 antes dAata() ( no tenia el trailing null )
107
108   /**
109      Saca una traza de error en el fichero de log con el texto asociado a este excepcion.
110
111      @see asString
112      @see Logger#write
113   */
114   void trace() const ;
115
116 protected:
117   Exception(const char* text, const char* name, const char* fromFile, const int fromLine);
118
119   /**
120      Establece el texto asociado a esta excepcion.
121
122      @param text Nuevo texto asociado a esta excepcion.
123   */
124   void setText(const char* text) { m_text = text; }
125
126   /**
127      Establece el texto asociado a esta excepcion.
128
129      @param text Nuevo texto asociado a esta excepcion.
130   */
131   void setText(const std::string& text) { m_text = text; }
132
133 private:
134   std::string m_text;
135   std::string m_name;
136   std::string m_fromFile;
137   int m_fromLine;
138   int m_errorCode;
139 };
140
141 } //namespace anna
142
143 #endif