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_LargeBinaryCodec_hpp
10 #define anna_comm_LargeBinaryCodec_hpp
14 #include <anna/core/DataBlock.hpp>
16 #include <anna/comm/Codec.hpp>
23 Codificador/Decodificador de objetos complejos.
25 A diferencia de EnhancedCodec que esta pensado para seriealizar objetos con estructuras
26 tipos de datos basicos, este codec esta pensado especialmente para serializar objetos o
27 listas de objetos tan complejas como sea preciso.
29 El mensaje estara formado por una serie indeterminada de bloques de datos binarios, lo que
30 nos permite serializar facilmente cualquier tipo de estructura de datos.
32 \warning Esta clase no establece proteccion ante accesos concurrentes
34 class LargeBinaryCodec : public Codec {
36 typedef std::vector <DataBlock*>::iterator iterator;
37 typedef std::vector <DataBlock*>::const_iterator const_iterator;
42 @param type Tipo por el que sera conocido este tipo de mensaje.
43 @param scramble Indica si el mensaje debe ser codificado de forma que no se pueda ver el contenido
44 del mismo con una simple herramienta de monitorizacin de mensajes de red. Por defecto esta
45 activo ya que la codificacin realizada es muy simple y rapida y el tiempo empleado es casi
48 LargeBinaryCodec(const Type type, const bool scramble = true) :
49 Codec(type, scramble),
51 attach("LargeBinaryBlock", a_dataBlock);
57 virtual ~LargeBinaryCodec() { reset(); clear(); }
60 Elimina el contenido del mensaje asociado a este objeto.
62 void clear() throw(RuntimeException) { a_dataBlock.clear(); }
65 Amplia el contenido del mensaje con el contenido del bloque de memoria recibido.
66 \param dataBlock Bloque de memoria con el que vamos a ampliar el mensaje.
67 \return La referencia a este objeto.
69 LargeBinaryCodec& operator += (const DataBlock& dataBlock) throw(RuntimeException);
72 Transfiene la informacin contenida en el bloque de memoria recibido hacia las variables asociadas a este mensaje interno.
73 \param dataBlock Bloque de memoria que contiene las variables codificadas.
74 Para acceder la lista de bloques que componen el mensaje recibido se deben utilizar los metodo begin y end.
76 virtual void decode(const DataBlock& dataBlock) throw(RuntimeException);
79 Devuelve el iterador que apunta al comienzo de la serializacin.
80 \return El iterador que apunta al comienzo de la serializacin.
81 \warning El valor de este metodo solo sera valido despues de invocar a decode.
83 const_iterator begin() const throw() { return a_blocks.begin(); }
86 Devuelve el iterador que apunta al final de la serializacin.
87 \return El iterador que apunta al final de la serializacin.
88 \warning El valor de este metodo solo sera valido despues de invocar a decode.
90 const_iterator end() const throw() { return a_blocks.end(); }
93 * Devuelve el número de bloques contenidos en el mensaje.
94 * \return el número de bloques contenidos en el mensaje.
96 int size() const throw() { return a_blocks.size(); }
99 Devuelve el puntero al objeto referenciado por el iterador recibido como parametro.
101 \return el puntero al objeto referenciado por el iterador recibido como parametro.
103 static const DataBlock* data(const_iterator ii) throw() { return *ii; }
106 Devuelve el puntero al objeto referenciado por el iterador recibido como parametro.
108 \return el puntero al objeto referenciado por el iterador recibido como parametro.
110 static DataBlock* data(iterator ii) throw() { return *ii; }
113 DataBlock a_dataBlock;
114 std::vector <DataBlock*> a_blocks;
116 void reset() throw();