Remove dynamic exceptions
[anna.git] / include / anna / timex / Transaction.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_timex_Transaction_hpp
10 #define anna_timex_Transaction_hpp
11
12 #include <anna/core/functions.hpp>
13
14 #include <anna/timex/TimeEvent.hpp>
15 #include <anna/timex/Meter.hpp>
16
17 namespace anna {
18
19 namespace timex {
20
21 /**
22    Clase base para las transacciones. Se activa una unica vez y cuando transcurren los milisegundos
23    establecidos por TimeEvent::getTimeout se invoca al metodo #expire. La implementacion de este metodo
24    sera particular para cada uno de las transacciones.
25
26    Incorpora capacidades que facilitan evaluar la duración media de cada
27    transacción, que son usadas directamente desde anna::timex::Context, aunque podrían ser usadas
28    por cualquier otro código.
29
30    @see Clock
31    @see Timer
32    \see Context
33 */
34 class Transaction : public TimeEvent, public Meter {
35 public:
36   /**
37      Constructor.
38   */
39   Transaction() : a_context(NULL) {;}
40
41   /**
42      Contructor.
43      \param id Identificador de este evento.
44      \param timeout La duracion de este evento indicada en milisegundos.
45   */
46   Transaction(const Id id, const Millisecond & timeout) :
47     TimeEvent(id, timeout),
48     a_context(NULL)
49   {;}
50
51   /**
52      Contructor.
53      \param id Identificador de este evento.
54      \param timeout La duracion de este evento indicada en milisegundos.
55      \param context Contexto asociado a esta transaccion.
56   */
57   Transaction(const Id id, const Millisecond & timeout, void* context) :
58     TimeEvent(id, timeout),
59     a_context(context)
60   {;}
61
62   /**
63      Devuelve el contexto asociado a esta transaccion.
64      \return El contexto asociado a esta transaccion.
65   */
66   void* getContext() { return a_context; }
67
68   /**
69      Devuelve el contexto asociado a esta transaccion.
70      \return El contexto asociado a esta transaccion.
71   */
72   const void* getContext() const { return a_context; }
73
74   /**
75      Establece el contexto asociado a esta transaccion.
76      \param context Contexto asociado a esta transaccion.
77   */
78   void setContext(void* context) { a_context = context; }
79
80   /**
81      Devuelve una cadena con la informacion referente a este temporizador.
82      \return Una cadena con la informacion referenta a este temporizador.
83   */
84   virtual std::string asString() const
85   {
86     std::string msg("Transaction { ");
87     msg += TimeEvent::asString();
88     msg += " | Contexto: ";
89     msg += (a_context == NULL) ? "(null)" : functions::asHexString(anna_ptrnumber_cast(a_context));
90     return msg += " }";
91   }
92
93 private:
94   void* a_context;
95
96   Transaction(const Transaction&);
97 };
98
99 }
100 }
101
102 #endif
103
104