1 // ANNA - Anna is Not Nothingness Anymore //
3 // (c) Copyright 2005-2015 Eduardo Ramos Testillano & Francisco Ruiz Rayo //
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 //
9 #ifndef anna_comm_Variable_hpp
10 #define anna_comm_Variable_hpp
12 #include <anna/core/util/Variable.hpp>
13 #include <anna/core/DataBlock.hpp>
15 #include <anna/comm/functions.hpp>
24 Clase para guardar la informacion asociada a un anna::comm::Codec.
26 \warning Esta clase no establece proteccion ante accesos concurrentes
28 class Variable : public anna::Variable {
31 Constructor para inicializar una instancia de tipo cadena.
32 \param id Identificador logico de esta variable
33 @param name Nombre logico que recibe este variable.
34 @param value Referencia a la variable que estamos recubriendo con esta instancia.
36 Variable(const short int id, const char* name, std::string& value) :
37 anna::Variable(name, value),
38 a_id(id), a_precode(true) {;}
41 * Constructor para inicializar una instancia de type ENTERO.
43 \param id Identificador logico de esta variable
44 * @param name Nombre logico que recibe este variable.
45 * @param value Referencia a la variable que estamos recubriendo con esta instancia.
47 Variable(const short int id, const char* name, int& value) :
48 anna::Variable(name, value),
49 a_id(id), a_precode(true) {;}
52 * Constructor para inicializar una instancia de type ENTERO_LARGO.
54 \param id Identificador logico de esta variable
55 * @param name Nombre logico que recibe este variable.
56 * @param value Referencia a la variable que estamos recubriendo con esta instancia.
58 Variable(const short int id, const char* name, S64& value) :
59 anna::Variable(name, value),
60 a_id(id), a_precode(true) {;}
63 * Constructor para inicializar una instancia de type BOOLEAN.
65 \param id Identificador logico de esta variable
66 * @param name Nombre logico que recibe este variable.
67 * @param value Referencia a la variable que estamos recubriendo con esta instancia.
69 Variable(const short int id, const char* name, bool& value) :
70 anna::Variable(name, value),
71 a_id(id), a_precode(true) {;}
74 * Constructor para inicializar una instancia de type BLOQUE_MEMORIA.
76 \param id Identificador logico de esta variable
77 * @param name Nombre logico que recibe este variable.
78 * @param value Referencia a la variable que estamos recubriendo con esta instancia.
80 Variable(const short int id, const char* name, DataBlock& value) :
81 anna::Variable(name, value),
82 a_id(id), a_precode(true) {;}
85 * Constructor para inicializar una instancia de tipo float.
87 \param id Identificador logico de esta variable
88 * @param name Nombre logico que recibe este variable.
89 * @param value Referencia a la variable que estamos recubriendo con esta instancia.
91 Variable(const short int id, const char* name, float& value) :
92 anna::Variable(name, value),
93 a_id(id), a_precode(true) {;}
96 * Constructor para inicializar una instancia de tipo float.
98 \param id Identificador logico de esta variable
99 * @param name Nombre logico que recibe este variable.
100 * @param value Referencia a la variable que estamos recubriendo con esta instancia.
102 Variable(const short int id, const char* name, double& value) :
103 anna::Variable(name, value),
104 a_id(id), a_precode(true) {;}
107 * Constructor para inicializar una instancia de tipo float.
109 \param id Identificador logico de esta variable
110 * @param name Nombre logico que recibe este variable.
111 * @param value Referencia a la variable que estamos recubriendo con esta instancia.
113 Variable(const short int id, const char* name, comm::CompatCodec& value) :
114 anna::Variable(name, (void*) &value),
115 a_id(id), a_precode(true) {;}
118 Devuelve el identificador logico de esta variable.
119 \return el identificador logico de esta variable.
121 short int getId() const throw() { return a_id; }
124 const short int a_id;
127 const DataBlock& codec() const throw(RuntimeException) {
128 return (a_precode.isEmpty() == false) ? a_precode : precodec();
130 const DataBlock& precodec() const throw(RuntimeException) {
131 char aux [sizeof(short int)];
132 const_cast <comm::Variable*>(this)->a_precode.append(comm::functions::codeShort(aux, a_id), sizeof(short int));
133 const_cast <comm::Variable*>(this)->a_precode += (char) getType();
137 friend class CompatCodec;