ANNA Suite  2020b
Multipurpose development suite for Telco applications
CompatCodec.hpp
Go to the documentation of this file.
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_comm_CompatCodec_hpp
10 #define anna_comm_CompatCodec_hpp
11 
12 #include <map>
13 
14 #include <anna/core/DataBlock.hpp>
17 
18 #include <anna/comm/Message.hpp>
19 #include <anna/comm/Variable.hpp>
20 
21 namespace anna {
22 
23 class DataBlock;
24 class Second;
25 class Millisecond;
26 class Microsecond;
27 
28 namespace comm {
29 
91 class CompatCodec : public Message {
92  struct SortById {
93  static short int value(const comm::Variable* variable) {
94  return variable->getId();
95  }
96  };
97 
98  class VariableContainer {
99  public:
100  typedef comm::Variable* type_pointer;
101 
102  typedef type_pointer* iterator;
103  typedef const type_pointer* const_iterator;
104 
105  VariableContainer();
106 
107  void clear() ;
108  void add(comm::Variable* variable) ;
109  comm::Variable* find(const int id) ;
110  const comm::Variable* find(const int id) const ;
111 
112  int size() const { return a_size; }
113 
114  iterator begin() { return a_variables; }
115  iterator end() { return a_variables + a_size; }
116 
117  const_iterator begin() const { return a_variables; }
118  const_iterator end() const { return a_variables + a_size; }
119 
120  static comm::Variable* data(iterator ii) { return *ii; }
121  static const comm::Variable* data(const_iterator ii) { return *ii; }
122 
123  private:
124  comm::Variable** a_variables;
125  int a_maxSize;
126  int a_size;
127  };
128 
129 public:
130 // typedef SortedVector <comm::Variable, SortById, short int> container;
131  typedef VariableContainer container;
134  typedef unsigned char Type;
135 
145  explicit CompatCodec(const Type type, const bool scramble = true);
146 
150  virtual ~CompatCodec();
151 
152  // Accesores
157  Type getType() const { return a_type; }
158 
159 // Metodos
172  const Variable* attach(const char* name, const short int id, std::string& value) noexcept(false);
173 
186  const Variable* attach(const char* name, const short int id, const char*& value) noexcept(false);
187 
200  const Variable* attach(const char* name, const short int id, int& value) noexcept(false);
201 
214  const Variable* attach(const char* name, const short int id, S64& value) noexcept(false);
215 
228  const Variable* attach(const char* name, const short int id, bool& value) noexcept(false);
229 
242  const Variable* attach(const char* name, const short int id, DataBlock& value) noexcept(false);
243 
256  const Variable* attach(const char* name, const short int id, float& value) noexcept(false);
257 
270  const Variable* attach(const char* name, const short int id, double& value) noexcept(false);
271 
272  const Variable* attach(const char* name, const short int id, Second& value) noexcept(false);
273  const Variable* attach(const char* name, const short int id, Millisecond& value) noexcept(false);
274  const Variable* attach(const char* name, const short int id, Microsecond& value) noexcept(false);
275 
282  const Variable* attach(const char* name, const short int id, comm::CompatCodec& value) noexcept(false);
283 
291  const Variable& find(const short int id) const noexcept(false);
292 
300  void setNull(const short int id, const bool isNull = true) noexcept(false);
301 
309  void setNull(const Variable* variable, const bool isNull = true) ;
310 
319  bool isNull(const short int id) const noexcept(false);
320 
325  iterator begin() { return a_variables.begin(); }
326 
331  const_iterator begin() const { return a_variables.begin(); }
332 
337  iterator end() { return a_variables.end(); }
338 
343  const_iterator end() const { return a_variables.end(); }
344 
349  int size() const { return a_variables.size(); }
350 
357  static Variable* variable(iterator ii) { return container::data(ii); }
358 
365  static const Variable* variable(const_iterator ii) { return container::data(ii); }
366 
371  virtual const DataBlock& code() noexcept(false);
372 
379  virtual void decode(const DataBlock& dataBlock) noexcept(false);
380 
389  static Type getType(const DataBlock& dataBlock) noexcept(false);
390 
391 protected:
393 
394 private:
395  const Type a_type;
396  container a_variables;
397  int a_nullCounter;
398 
399  static bool st_initScramble;
400 
401  CompatCodec(const CompatCodec&);
402  CompatCodec& operator = (const CompatCodec&);
403 
404  void normalDecode(const char* data, const int size, const int maxdata) noexcept(false);
405  bool optimizedDecode(const char* data, const int size) noexcept(false);
406 };
407 
408 }
409 }
410 
411 #endif
container::iterator iterator
Definition: CompatCodec.hpp:132
Definition: CompatCodec.hpp:91
Definition: Millisecond.hpp:24
Type getType() const
Definition: CompatCodec.hpp:157
bool isNull(const short int id) const noexcept(false)
bool a_scramble
Definition: CompatCodec.hpp:392
iterator end()
Definition: CompatCodec.hpp:337
CompatCodec(const Type type, const bool scramble=true)
const_iterator end() const
Definition: CompatCodec.hpp:343
Definition: Second.hpp:25
VariableContainer container
Definition: CompatCodec.hpp:131
short int getId() const
Definition: Variable.hpp:121
container::const_iterator const_iterator
Definition: CompatCodec.hpp:133
int64_t S64
Definition: defines.hpp:84
virtual const DataBlock & code() noexcept(false)
Definition: Variable.hpp:28
Definition: Message.hpp:26
const_iterator begin() const
Definition: CompatCodec.hpp:331
iterator begin()
Definition: CompatCodec.hpp:325
void clear() noexcept(false)
Definition: DataBlock.hpp:240
virtual void decode(const DataBlock &dataBlock) noexcept(false)
Definition: app.hpp:12
const Variable & find(const short int id) const noexcept(false)
int size() const
Definition: CompatCodec.hpp:349
static Variable * variable(iterator ii)
Definition: CompatCodec.hpp:357
unsigned char Type
Definition: CompatCodec.hpp:134
const Variable * attach(const char *name, const short int id, std::string &value) noexcept(false)
static const Variable * variable(const_iterator ii)
Definition: CompatCodec.hpp:365
Definition: DataBlock.hpp:24
Definition: Microsecond.hpp:22
void setNull(const short int id, const bool isNull=true) noexcept(false)