Remove dynamic exceptions
[anna.git] / include / anna / core / mt / Safe.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_mt_Safe_hpp
10 #define anna_core_mt_Safe_hpp
11
12 #include <anna/core/RuntimeException.hpp>
13
14 namespace anna {
15
16 class Guard;
17
18 /**
19    Clase de la que pueden heredar todas las clases seguras que vayan a usar las guardas (ver Guard).
20
21    @see Guard
22 */
23 class Safe {
24 public:
25   /**
26     Marca el inicio del acceso seguro a este objeto.
27     \warning Cada invocacion a este metodo debe tener su correspondiente llamada al metodo #unlock.
28     Es muy aconsejable delegar las llamadas a estos metodos en una instancia Guard.
29   */
30   virtual void lock() noexcept(false) = 0;
31
32   /**
33     Indica el final del acceso seguro iniciado al invocar #lock.
34     \warning Indica el final del acceso seguro iniciado al invocar #lock.
35     Es muy aconsejable delegar las llamadas a estos metodos en una instancia Guard.
36   */
37   virtual void unlock()  = 0;
38
39 protected:
40   /**
41      Constructor.
42      \param mode Modo de actuacion de esta instancia en modo ST cuando montamos una
43      seccion critca sobre este objeto. En modo MT siempre sera Mode::Normal, es decir
44      abre una seccion critica sobre este objeto, que bloqueara a cualquier otro thread
45      que intente acceder a el.
46   */
47   Safe() {}
48 };
49
50 }
51
52 #endif