RINASim  October 2016
Documentation of framework for OMNeT++
Data_m.cc
Go to the documentation of this file.
1 //
2 // Generated file, do not edit! Created by nedtool 5.0 from DIF/Delimiting/Data.msg.
3 //
4 
5 // Disable warnings about unused variables, empty switch stmts, etc:
6 #ifdef _MSC_VER
7 # pragma warning(disable:4101)
8 # pragma warning(disable:4065)
9 #endif
10 
11 #include <iostream>
12 #include <sstream>
13 #include "Data_m.h"
14 
15 namespace omnetpp {
16 
17 // Template pack/unpack rules. They are declared *after* a1l type-specific pack functions for multiple reasons.
18 // They are in the omnetpp namespace, to allow them to be found by argument-dependent lookup via the cCommBuffer argument
19 
20 // Packing/unpacking an std::vector
21 template<typename T, typename A>
22 void doParsimPacking(omnetpp::cCommBuffer *buffer, const std::vector<T,A>& v)
23 {
24  int n = v.size();
25  doParsimPacking(buffer, n);
26  for (int i = 0; i < n; i++)
27  doParsimPacking(buffer, v[i]);
28 }
29 
30 template<typename T, typename A>
31 void doParsimUnpacking(omnetpp::cCommBuffer *buffer, std::vector<T,A>& v)
32 {
33  int n;
34  doParsimUnpacking(buffer, n);
35  v.resize(n);
36  for (int i = 0; i < n; i++)
37  doParsimUnpacking(buffer, v[i]);
38 }
39 
40 // Packing/unpacking an std::list
41 template<typename T, typename A>
42 void doParsimPacking(omnetpp::cCommBuffer *buffer, const std::list<T,A>& l)
43 {
44  doParsimPacking(buffer, (int)l.size());
45  for (typename std::list<T,A>::const_iterator it = l.begin(); it != l.end(); ++it)
46  doParsimPacking(buffer, (T&)*it);
47 }
48 
49 template<typename T, typename A>
50 void doParsimUnpacking(omnetpp::cCommBuffer *buffer, std::list<T,A>& l)
51 {
52  int n;
53  doParsimUnpacking(buffer, n);
54  for (int i=0; i<n; i++) {
55  l.push_back(T());
56  doParsimUnpacking(buffer, l.back());
57  }
58 }
59 
60 // Packing/unpacking an std::set
61 template<typename T, typename Tr, typename A>
62 void doParsimPacking(omnetpp::cCommBuffer *buffer, const std::set<T,Tr,A>& s)
63 {
64  doParsimPacking(buffer, (int)s.size());
65  for (typename std::set<T,Tr,A>::const_iterator it = s.begin(); it != s.end(); ++it)
66  doParsimPacking(buffer, *it);
67 }
68 
69 template<typename T, typename Tr, typename A>
70 void doParsimUnpacking(omnetpp::cCommBuffer *buffer, std::set<T,Tr,A>& s)
71 {
72  int n;
73  doParsimUnpacking(buffer, n);
74  for (int i=0; i<n; i++) {
75  T x;
76  doParsimUnpacking(buffer, x);
77  s.insert(x);
78  }
79 }
80 
81 // Packing/unpacking an std::map
82 template<typename K, typename V, typename Tr, typename A>
83 void doParsimPacking(omnetpp::cCommBuffer *buffer, const std::map<K,V,Tr,A>& m)
84 {
85  doParsimPacking(buffer, (int)m.size());
86  for (typename std::map<K,V,Tr,A>::const_iterator it = m.begin(); it != m.end(); ++it) {
87  doParsimPacking(buffer, it->first);
88  doParsimPacking(buffer, it->second);
89  }
90 }
91 
92 template<typename K, typename V, typename Tr, typename A>
93 void doParsimUnpacking(omnetpp::cCommBuffer *buffer, std::map<K,V,Tr,A>& m)
94 {
95  int n;
96  doParsimUnpacking(buffer, n);
97  for (int i=0; i<n; i++) {
98  K k; V v;
99  doParsimUnpacking(buffer, k);
100  doParsimUnpacking(buffer, v);
101  m[k] = v;
102  }
103 }
104 
105 // Default pack/unpack function for arrays
106 template<typename T>
107 void doParsimArrayPacking(omnetpp::cCommBuffer *b, const T *t, int n)
108 {
109  for (int i = 0; i < n; i++)
110  doParsimPacking(b, t[i]);
111 }
112 
113 template<typename T>
114 void doParsimArrayUnpacking(omnetpp::cCommBuffer *b, T *t, int n)
115 {
116  for (int i = 0; i < n; i++)
117  doParsimUnpacking(b, t[i]);
118 }
119 
120 // Default rule to prevent compiler from choosing base class' doParsimPacking() function
121 template<typename T>
122 void doParsimPacking(omnetpp::cCommBuffer *, const T& t)
123 {
124  throw omnetpp::cRuntimeError("Parsim error: no doParsimPacking() function for type %s", omnetpp::opp_typename(typeid(t)));
125 }
126 
127 template<typename T>
128 void doParsimUnpacking(omnetpp::cCommBuffer *, T& t)
129 {
130  throw omnetpp::cRuntimeError("Parsim error: no doParsimUnpacking() function for type %s", omnetpp::opp_typename(typeid(t)));
131 }
132 
133 } // namespace omnetpp
134 
135 
136 // forward
137 template<typename T, typename A>
138 std::ostream& operator<<(std::ostream& out, const std::vector<T,A>& vec);
139 
140 // Template rule which fires if a struct or class doesn't have operator<<
141 template<typename T>
142 inline std::ostream& operator<<(std::ostream& out,const T&) {return out;}
143 
144 // operator<< for std::vector<T>
145 template<typename T, typename A>
146 inline std::ostream& operator<<(std::ostream& out, const std::vector<T,A>& vec)
147 {
148  out.put('{');
149  for(typename std::vector<T,A>::const_iterator it = vec.begin(); it != vec.end(); ++it)
150  {
151  if (it != vec.begin()) {
152  out.put(','); out.put(' ');
153  }
154  out << *it;
155  }
156  out.put('}');
157 
158  char buf[32];
159  sprintf(buf, " (size=%u)", (unsigned int)vec.size());
160  out.write(buf, strlen(buf));
161  return out;
162 }
163 
165  omnetpp::cEnum *e = omnetpp::cEnum::find("DataType");
166  if (!e) omnetpp::enums.getInstance()->add(e = new omnetpp::cEnum("DataType"));
167  e->insert(DATA_SDU_COMPLETE, "DATA_SDU_COMPLETE");
168  e->insert(DATA_FIRST_FRAG, "DATA_FIRST_FRAG");
169  e->insert(DATA_MIDDLE_FRAG, "DATA_MIDDLE_FRAG");
170  e->insert(DATA_LAST_FRAG, "DATA_LAST_FRAG");
171 );
172 
173 Data_Base::Data_Base(const char *name, int kind) : ::omnetpp::cPacket(name,kind)
174 {
175  this->dataType = DATA_SDU_COMPLETE;
176  this->encapMsgLength = 0;
177 }
178 
179 Data_Base::Data_Base(const Data_Base& other) : ::omnetpp::cPacket(other)
180 {
181  copy(other);
182 }
183 
185 {
186 }
187 
189 {
190  if (this==&other) return *this;
191  ::omnetpp::cPacket::operator=(other);
192  copy(other);
193  return *this;
194 }
195 
196 void Data_Base::copy(const Data_Base& other)
197 {
198  this->dataType = other.dataType;
199  this->encapMsgLength = other.encapMsgLength;
200 }
201 
202 void Data_Base::parsimPack(omnetpp::cCommBuffer *b) const
203 {
204  ::omnetpp::cPacket::parsimPack(b);
205  doParsimPacking(b,this->dataType);
207 }
208 
209 void Data_Base::parsimUnpack(omnetpp::cCommBuffer *b)
210 {
211  ::omnetpp::cPacket::parsimUnpack(b);
212  doParsimUnpacking(b,this->dataType);
214 }
215 
217 {
218  return this->dataType;
219 }
220 
221 void Data_Base::setDataType(int dataType)
222 {
223  this->dataType = dataType;
224 }
225 
227 {
228  return this->encapMsgLength;
229 }
230 
231 void Data_Base::setEncapMsgLength(int64_t encapMsgLength)
232 {
233  this->encapMsgLength = encapMsgLength;
234 }
235 
236 class DataDescriptor : public omnetpp::cClassDescriptor
237 {
238  private:
239  mutable const char **propertynames;
240  public:
241  DataDescriptor();
242  virtual ~DataDescriptor();
243 
244  virtual bool doesSupport(omnetpp::cObject *obj) const override;
245  virtual const char **getPropertyNames() const override;
246  virtual const char *getProperty(const char *propertyname) const override;
247  virtual int getFieldCount() const override;
248  virtual const char *getFieldName(int field) const override;
249  virtual int findField(const char *fieldName) const override;
250  virtual unsigned int getFieldTypeFlags(int field) const override;
251  virtual const char *getFieldTypeString(int field) const override;
252  virtual const char **getFieldPropertyNames(int field) const override;
253  virtual const char *getFieldProperty(int field, const char *propertyname) const override;
254  virtual int getFieldArraySize(void *object, int field) const override;
255 
256  virtual std::string getFieldValueAsString(void *object, int field, int i) const override;
257  virtual bool setFieldValueAsString(void *object, int field, int i, const char *value) const override;
258 
259  virtual const char *getFieldStructName(int field) const override;
260  virtual void *getFieldStructValuePointer(void *object, int field, int i) const override;
261 };
262 
264 
265 DataDescriptor::DataDescriptor() : omnetpp::cClassDescriptor("Data", "omnetpp::cPacket")
266 {
267  propertynames = nullptr;
268 }
269 
271 {
272  delete[] propertynames;
273 }
274 
275 bool DataDescriptor::doesSupport(omnetpp::cObject *obj) const
276 {
277  return dynamic_cast<Data_Base *>(obj)!=nullptr;
278 }
279 
281 {
282  if (!propertynames) {
283  static const char *names[] = { "customize", nullptr };
284  omnetpp::cClassDescriptor *basedesc = getBaseClassDescriptor();
285  const char **basenames = basedesc ? basedesc->getPropertyNames() : nullptr;
286  propertynames = mergeLists(basenames, names);
287  }
288  return propertynames;
289 }
290 
291 const char *DataDescriptor::getProperty(const char *propertyname) const
292 {
293  if (!strcmp(propertyname,"customize")) return "true";
294  omnetpp::cClassDescriptor *basedesc = getBaseClassDescriptor();
295  return basedesc ? basedesc->getProperty(propertyname) : nullptr;
296 }
297 
299 {
300  omnetpp::cClassDescriptor *basedesc = getBaseClassDescriptor();
301  return basedesc ? 2+basedesc->getFieldCount() : 2;
302 }
303 
304 unsigned int DataDescriptor::getFieldTypeFlags(int field) const
305 {
306  omnetpp::cClassDescriptor *basedesc = getBaseClassDescriptor();
307  if (basedesc) {
308  if (field < basedesc->getFieldCount())
309  return basedesc->getFieldTypeFlags(field);
310  field -= basedesc->getFieldCount();
311  }
312  static unsigned int fieldTypeFlags[] = {
313  FD_ISEDITABLE,
314  FD_ISEDITABLE,
315  };
316  return (field>=0 && field<2) ? fieldTypeFlags[field] : 0;
317 }
318 
319 const char *DataDescriptor::getFieldName(int field) const
320 {
321  omnetpp::cClassDescriptor *basedesc = getBaseClassDescriptor();
322  if (basedesc) {
323  if (field < basedesc->getFieldCount())
324  return basedesc->getFieldName(field);
325  field -= basedesc->getFieldCount();
326  }
327  static const char *fieldNames[] = {
328  "dataType",
329  "encapMsgLength",
330  };
331  return (field>=0 && field<2) ? fieldNames[field] : nullptr;
332 }
333 
334 int DataDescriptor::findField(const char *fieldName) const
335 {
336  omnetpp::cClassDescriptor *basedesc = getBaseClassDescriptor();
337  int base = basedesc ? basedesc->getFieldCount() : 0;
338  if (fieldName[0]=='d' && strcmp(fieldName, "dataType")==0) return base+0;
339  if (fieldName[0]=='e' && strcmp(fieldName, "encapMsgLength")==0) return base+1;
340  return basedesc ? basedesc->findField(fieldName) : -1;
341 }
342 
343 const char *DataDescriptor::getFieldTypeString(int field) const
344 {
345  omnetpp::cClassDescriptor *basedesc = getBaseClassDescriptor();
346  if (basedesc) {
347  if (field < basedesc->getFieldCount())
348  return basedesc->getFieldTypeString(field);
349  field -= basedesc->getFieldCount();
350  }
351  static const char *fieldTypeStrings[] = {
352  "int",
353  "int64",
354  };
355  return (field>=0 && field<2) ? fieldTypeStrings[field] : nullptr;
356 }
357 
358 const char **DataDescriptor::getFieldPropertyNames(int field) const
359 {
360  omnetpp::cClassDescriptor *basedesc = getBaseClassDescriptor();
361  if (basedesc) {
362  if (field < basedesc->getFieldCount())
363  return basedesc->getFieldPropertyNames(field);
364  field -= basedesc->getFieldCount();
365  }
366  switch (field) {
367  case 0: {
368  static const char *names[] = { "enum", nullptr };
369  return names;
370  }
371  default: return nullptr;
372  }
373 }
374 
375 const char *DataDescriptor::getFieldProperty(int field, const char *propertyname) const
376 {
377  omnetpp::cClassDescriptor *basedesc = getBaseClassDescriptor();
378  if (basedesc) {
379  if (field < basedesc->getFieldCount())
380  return basedesc->getFieldProperty(field, propertyname);
381  field -= basedesc->getFieldCount();
382  }
383  switch (field) {
384  case 0:
385  if (!strcmp(propertyname,"enum")) return "DataType";
386  return nullptr;
387  default: return nullptr;
388  }
389 }
390 
391 int DataDescriptor::getFieldArraySize(void *object, int field) const
392 {
393  omnetpp::cClassDescriptor *basedesc = getBaseClassDescriptor();
394  if (basedesc) {
395  if (field < basedesc->getFieldCount())
396  return basedesc->getFieldArraySize(object, field);
397  field -= basedesc->getFieldCount();
398  }
399  Data_Base *pp = (Data_Base *)object; (void)pp;
400  switch (field) {
401  default: return 0;
402  }
403 }
404 
405 std::string DataDescriptor::getFieldValueAsString(void *object, int field, int i) const
406 {
407  omnetpp::cClassDescriptor *basedesc = getBaseClassDescriptor();
408  if (basedesc) {
409  if (field < basedesc->getFieldCount())
410  return basedesc->getFieldValueAsString(object,field,i);
411  field -= basedesc->getFieldCount();
412  }
413  Data_Base *pp = (Data_Base *)object; (void)pp;
414  switch (field) {
415  case 0: return enum2string(pp->getDataType(), "DataType");
416  case 1: return int642string(pp->getEncapMsgLength());
417  default: return "";
418  }
419 }
420 
421 bool DataDescriptor::setFieldValueAsString(void *object, int field, int i, const char *value) const
422 {
423  omnetpp::cClassDescriptor *basedesc = getBaseClassDescriptor();
424  if (basedesc) {
425  if (field < basedesc->getFieldCount())
426  return basedesc->setFieldValueAsString(object,field,i,value);
427  field -= basedesc->getFieldCount();
428  }
429  Data_Base *pp = (Data_Base *)object; (void)pp;
430  switch (field) {
431  case 0: pp->setDataType((DataType)string2enum(value, "DataType")); return true;
432  case 1: pp->setEncapMsgLength(string2int64(value)); return true;
433  default: return false;
434  }
435 }
436 
437 const char *DataDescriptor::getFieldStructName(int field) const
438 {
439  omnetpp::cClassDescriptor *basedesc = getBaseClassDescriptor();
440  if (basedesc) {
441  if (field < basedesc->getFieldCount())
442  return basedesc->getFieldStructName(field);
443  field -= basedesc->getFieldCount();
444  }
445  switch (field) {
446  default: return nullptr;
447  };
448 }
449 
450 void *DataDescriptor::getFieldStructValuePointer(void *object, int field, int i) const
451 {
452  omnetpp::cClassDescriptor *basedesc = getBaseClassDescriptor();
453  if (basedesc) {
454  if (field < basedesc->getFieldCount())
455  return basedesc->getFieldStructValuePointer(object, field, i);
456  field -= basedesc->getFieldCount();
457  }
458  Data_Base *pp = (Data_Base *)object; (void)pp;
459  switch (field) {
460  default: return nullptr;
461  }
462 }
463 
464 
const char ** propertynames
Definition: Data_m.cc:239
virtual const char ** getPropertyNames() const override
Definition: Data_m.cc:280
Register_ClassDescriptor(DataDescriptor)
virtual void setEncapMsgLength(int64_t encapMsgLength)
Definition: Data_m.cc:231
DataType
Definition: Data_m.h:31
virtual unsigned int getFieldTypeFlags(int field) const override
Definition: Data_m.cc:304
Data_Base(const char *name=nullptr, int kind=0)
Definition: Data_m.cc:173
virtual int findField(const char *fieldName) const override
Definition: Data_m.cc:334
virtual void parsimPack(omnetpp::cCommBuffer *b) const
Definition: Data_m.cc:202
int dataType
Definition: Data_m.h:83
void doParsimPacking(omnetpp::cCommBuffer *buffer, const std::vector< T, A > &v)
Definition: PDU_m.cc:22
EXECUTE_ON_STARTUP(omnetpp::cEnum *e=omnetpp::cEnum::find("DataType");if(!e) omnetpp::enums.getInstance() ->add(e=new omnetpp::cEnum("DataType"));e->insert(DATA_SDU_COMPLETE,"DATA_SDU_COMPLETE");e->insert(DATA_FIRST_FRAG,"DATA_FIRST_FRAG");e->insert(DATA_MIDDLE_FRAG,"DATA_MIDDLE_FRAG");e->insert(DATA_LAST_FRAG,"DATA_LAST_FRAG");)
virtual int64_t getEncapMsgLength() const
Definition: Data_m.cc:226
int64_t encapMsgLength
Definition: Data_m.h:84
virtual bool doesSupport(omnetpp::cObject *obj) const override
Definition: Data_m.cc:275
virtual ~Data_Base()
Definition: Data_m.cc:184
virtual const char * getFieldProperty(int field, const char *propertyname) const override
Definition: Data_m.cc:375
virtual int getFieldArraySize(void *object, int field) const override
Definition: Data_m.cc:391
void doParsimUnpacking(omnetpp::cCommBuffer *buffer, std::vector< T, A > &v)
Definition: PDU_m.cc:31
virtual const char * getFieldTypeString(int field) const override
Definition: Data_m.cc:343
virtual void setDataType(int dataType)
Definition: Data_m.cc:221
void doParsimArrayUnpacking(omnetpp::cCommBuffer *b, T *t, int n)
Definition: PDU_m.cc:114
virtual const char * getFieldName(int field) const override
Definition: Data_m.cc:319
virtual std::string getFieldValueAsString(void *object, int field, int i) const override
Definition: Data_m.cc:405
virtual void parsimUnpack(omnetpp::cCommBuffer *b)
Definition: Data_m.cc:209
Data_Base & operator=(const Data_Base &other)
Definition: Data_m.cc:188
virtual ~DataDescriptor()
Definition: Data_m.cc:270
Definition: PDU_m.cc:15
std::ostream & operator<<(std::ostream &out, const std::vector< T, A > &vec)
Definition: Data_m.cc:146
virtual int getDataType() const
Definition: Data_m.cc:216
virtual const char ** getFieldPropertyNames(int field) const override
Definition: Data_m.cc:358
virtual bool setFieldValueAsString(void *object, int field, int i, const char *value) const override
Definition: Data_m.cc:421
virtual const char * getProperty(const char *propertyname) const override
Definition: Data_m.cc:291
void copy(const Data_Base &other)
Definition: Data_m.cc:196
virtual void * getFieldStructValuePointer(void *object, int field, int i) const override
Definition: Data_m.cc:450
virtual const char * getFieldStructName(int field) const override
Definition: Data_m.cc:437
void doParsimArrayPacking(omnetpp::cCommBuffer *b, const T *t, int n)
Definition: PDU_m.cc:107
virtual int getFieldCount() const override
Definition: Data_m.cc:298