Usage of stdint.h types
[anna.git] / include / anna / core / oam / Counter.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_oam_Counter_hpp
10 #define anna_core_oam_Counter_hpp
11
12 #include <anna/core/util/defines.hpp>
13
14 namespace anna {
15
16 namespace oam {
17
18 class CounterScope;
19
20 /**
21    Contador.
22
23    Permite un sistema rapido para registrar situaciones ocurridas en las aplicaciones.
24 */
25 class Counter {
26 public:
27   typedef unsigned int type_t;
28
29   /**
30      Devuelve el nombre logico del contador, que coincidira con el indicado a la hora
31      de crear el contador mediante el metodo CounterScope::create.
32      \return El nombre logico del contador.
33   */
34   const std::string& getName() const throw() { return a_name; }
35
36   /**
37      Devuelve la referencia logica de este contador. Sera el numero resultante de combinar
38      el numero de ambito en el que esta registrado y el numero de contador dentro de este
39      ambito.
40      \return La referencia logica de este contador.
41   */
42   int getReference() const throw();
43
44   /**
45    * Devuelve el valor actual de este contador. Este valor se podrĂ¡ a cero cada vez que los contadores
46    * se graben.
47    * \return El valor actual de este contador.
48    */
49   type_t getValue() const throw() { return a_value; }
50
51   /**
52    * Devuelve el valor acumulado de este contador.
53    * \return El valor acumulado de este contador.
54    */
55   U64 getAccumulatedValue() const throw() { return a_accValue; }
56
57   /**
58      Operador de conversion.
59      \return El valor asociado a este contador.
60   */
61   operator type_t () const throw() { return a_value; }
62
63   /**
64      Inicializa el valor de este contador.
65   */
66   void reset() throw() { a_value = 0; }
67
68   /**
69      Inicializa el valor acumulado de este contador.
70      \return Devuelve 'true' si fue reseteado, 'false' si ya lo estaba
71   */
72   bool resetAcc() throw() { bool result = (a_accValue != 0); a_accValue = 0; return result; }
73
74
75   /**
76      Devuelve una cadena con la informacion relevante de este objeto.
77      \return Una cadena con la informacion relevante de este objeto.
78   */
79   std::string asString() const throw();
80
81 private:
82   CounterScope& a_scope;
83   const int a_id;
84   std::string a_name;
85   type_t a_value;
86   U64 a_accValue;
87
88   Counter(CounterScope& scope, const int id, const char* name);
89   Counter(const Counter&);
90
91   void debug() const throw();
92
93   friend class CounterScope;
94 };
95
96 }
97 }
98
99 #endif
100