Changed LICENSE. Now referenced to web site and file on project root directory
[anna.git] / include / anna / core / tracing / TraceMethod.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_tracing_TraceMethod_hpp
10 #define anna_core_tracing_TraceMethod_hpp
11
12 #include <anna/core/tracing/Logger.hpp>
13
14 namespace anna {
15
16 /**
17   Trazas de funciones.
18
19   Graba una traza en el historico de operaciones por cada entrada y salida de un determinado
20   metodo.
21 */
22 class TraceMethod {
23 public:
24   /**
25     Constructor.
26     @param className Nombre de la clase desde la que se invoca.
27     @param functionName Nombre de la funcion desde la que se invoca a este constructor.
28     @param fromFile Nombre del fichero desde el que se invoca a este constructor. Normalmente
29     sera el indicado por la macro de compilacion __FILE__.
30     @param fromLine Numero de linea del fichero desde la que se invoca a este constructor.
31     Normalmente sera el indicado por la macro de compilacion __LINE__.
32
33     \warning Se pueden sustituir los dos ultimos valores por la macro ANNA_FILE_LOCATION.
34   */
35   TraceMethod(const char* className, const char* functionName, const char* fromFile, const int fromLine) :
36     a_level(Logger::Debug),
37     a_className(className),
38     a_functionName(functionName),
39     a_fromFile(fromFile),
40     a_ok(false) {
41     if((a_ok = Logger::isActive(a_level)) == true) {
42       std::string text(className);
43       text += "::";
44       text += functionName;
45       Logger::write(a_level, text, "begin", fromFile, fromLine);
46     }
47   }
48
49   /**
50     Constructor.
51     @param level Nivel usado en la traza del método
52     @param className Nombre de la clase desde la que se invoca.
53     @param functionName Nombre de la funcion desde la que se invoca a este constructor.
54     @param fromFile Nombre del fichero desde el que se invoca a este constructor. Normalmente
55     sera el indicado por la macro de compilacion __FILE__.
56     @param fromLine Numero de linea del fichero desde la que se invoca a este constructor.
57     Normalmente sera el indicado por la macro de compilacion __LINE__.
58
59     \warning Se pueden sustituir los dos ultimos valores por la macro ANNA_FILE_LOCATION.
60   */
61   TraceMethod(const Logger::Level level, const char* className, const char* functionName, const char* fromFile, const int fromLine) :
62     a_level(level),
63     a_className(className),
64     a_functionName(functionName),
65     a_fromFile(fromFile) {
66     if((a_ok = Logger::isActive(level)) == true) {
67       std::string text(className);
68       text += "::";
69       text += functionName;
70       Logger::write(level, text, "begin", fromFile, fromLine);
71     }
72   }
73
74   /**
75     Constructor.
76     @param methodName Nombre del método desde la que se invoca, debería incluir el nombre de la clase.
77     @param fromFile Nombre del fichero desde el que se invoca a este constructor. Normalmente
78     sera el indicado por la macro de compilacion __FILE__.
79     @param fromLine Numero de linea del fichero desde la que se invoca a este constructor.
80     Normalmente sera el indicado por la macro de compilacion __LINE__.
81
82     \warning Se pueden sustituir los dos ultimos valores por la macro ANNA_FILE_LOCATION.
83   */
84   TraceMethod(const char* methodName, const char* fromFile, const int fromLine) :
85     a_level(Logger::Debug),
86     a_className(methodName),
87     a_functionName(NULL),
88     a_fromFile(fromFile),
89     a_ok(false) {
90     if((a_ok = Logger::isActive(a_level)) == true)
91       Logger::write(a_level, methodName, "begin", fromFile, fromLine);
92   }
93
94   /**
95     Constructor.
96     @param level Nivel usado en la traza del método.
97     @param methodName Nombre del método desde la que se invoca, debería incluir el nombre de la clase.
98     @param fromFile Nombre del fichero desde el que se invoca a este constructor. Normalmente
99     sera el indicado por la macro de compilacion __FILE__.
100     @param fromLine Numero de linea del fichero desde la que se invoca a este constructor.
101     Normalmente sera el indicado por la macro de compilacion __LINE__.
102
103     \warning Se pueden sustituir los dos ultimos valores por la macro ANNA_FILE_LOCATION.
104   */
105   TraceMethod(const Logger::Level level, const char* methodName, const char* fromFile, const int fromLine) :
106     a_level(level),
107     a_className(methodName),
108     a_functionName(NULL),
109     a_fromFile(fromFile),
110     a_ok(false) {
111     if((a_ok = Logger::isActive(level)) == true)
112       Logger::write(level, methodName, "begin", fromFile, fromLine);
113   }
114
115   /**
116      Destructor.
117   */
118   ~TraceMethod() {
119     if(a_ok == true && Logger::isActive(a_level) == true) {
120       std::string text(a_className);
121
122       if(a_functionName != NULL) {
123         text += "::";
124         text += a_functionName;
125       }
126
127       Logger::write(a_level, text, "end", a_fromFile, 0);
128     }
129   }
130
131 private:
132   const Logger::Level a_level;
133   const char* a_className;
134   const char* a_functionName;
135   const char* a_fromFile;
136   bool a_ok;
137 };
138
139 } //namespace anna
140
141 #endif
142