RINASim  October 2016
Documentation of framework for OMNeT++
UserDataField_m.cc
Go to the documentation of this file.
1 //
2 // Generated file, do not edit! Created by nedtool 5.0 from DIF/Delimiting/UserDataField.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 "UserDataField_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 
164 UserDataField_Base::UserDataField_Base(const char *name, int kind) : ::omnetpp::cPacket(name,kind)
165 {
166  this->setByteLength(1);
167 
168  this->sduSeqNumPresent = false;
169  this->noLength = true;
170  this->midFragment = false;
171  this->firstFragment = false;
172  this->lastFragment = false;
173  this->completeSDU = false;
174  this->sduSeqNum = 0;
175 }
176 
178 {
179  copy(other);
180 }
181 
183 {
184 }
185 
187 {
188  if (this==&other) return *this;
189  ::omnetpp::cPacket::operator=(other);
190  copy(other);
191  return *this;
192 }
193 
195 {
196  this->sduSeqNumPresent = other.sduSeqNumPresent;
197  this->noLength = other.noLength;
198  this->midFragment = other.midFragment;
199  this->firstFragment = other.firstFragment;
200  this->lastFragment = other.lastFragment;
201  this->completeSDU = other.completeSDU;
202  this->sduSeqNum = other.sduSeqNum;
203 }
204 
205 void UserDataField_Base::parsimPack(omnetpp::cCommBuffer *b) const
206 {
207  ::omnetpp::cPacket::parsimPack(b);
209  doParsimPacking(b,this->noLength);
210  doParsimPacking(b,this->midFragment);
212  doParsimPacking(b,this->lastFragment);
213  doParsimPacking(b,this->completeSDU);
214  doParsimPacking(b,this->sduSeqNum);
215 }
216 
217 void UserDataField_Base::parsimUnpack(omnetpp::cCommBuffer *b)
218 {
219  ::omnetpp::cPacket::parsimUnpack(b);
221  doParsimUnpacking(b,this->noLength);
226  doParsimUnpacking(b,this->sduSeqNum);
227 }
228 
230 {
231  return this->sduSeqNumPresent;
232 }
233 
234 void UserDataField_Base::setSduSeqNumPresent(bool sduSeqNumPresent)
235 {
236  this->sduSeqNumPresent = sduSeqNumPresent;
237 }
238 
240 {
241  return this->noLength;
242 }
243 
245 {
246  this->noLength = noLength;
247 }
248 
250 {
251  return this->midFragment;
252 }
253 
255 {
256  this->midFragment = midFragment;
257 }
258 
260 {
261  return this->firstFragment;
262 }
263 
264 void UserDataField_Base::setFirstFragment(bool firstFragment)
265 {
266  this->firstFragment = firstFragment;
267 }
268 
270 {
271  return this->lastFragment;
272 }
273 
274 void UserDataField_Base::setLastFragment(bool lastFragment)
275 {
276  this->lastFragment = lastFragment;
277 }
278 
280 {
281  return this->completeSDU;
282 }
283 
285 {
286  this->completeSDU = completeSDU;
287 }
288 
290 {
291  return this->sduSeqNum;
292 }
293 
294 void UserDataField_Base::setSduSeqNum(unsigned int sduSeqNum)
295 {
296  this->sduSeqNum = sduSeqNum;
297 }
298 
299 class UserDataFieldDescriptor : public omnetpp::cClassDescriptor
300 {
301  private:
302  mutable const char **propertynames;
303  public:
305  virtual ~UserDataFieldDescriptor();
306 
307  virtual bool doesSupport(omnetpp::cObject *obj) const override;
308  virtual const char **getPropertyNames() const override;
309  virtual const char *getProperty(const char *propertyname) const override;
310  virtual int getFieldCount() const override;
311  virtual const char *getFieldName(int field) const override;
312  virtual int findField(const char *fieldName) const override;
313  virtual unsigned int getFieldTypeFlags(int field) const override;
314  virtual const char *getFieldTypeString(int field) const override;
315  virtual const char **getFieldPropertyNames(int field) const override;
316  virtual const char *getFieldProperty(int field, const char *propertyname) const override;
317  virtual int getFieldArraySize(void *object, int field) const override;
318 
319  virtual std::string getFieldValueAsString(void *object, int field, int i) const override;
320  virtual bool setFieldValueAsString(void *object, int field, int i, const char *value) const override;
321 
322  virtual const char *getFieldStructName(int field) const override;
323  virtual void *getFieldStructValuePointer(void *object, int field, int i) const override;
324 };
325 
327 
328 UserDataFieldDescriptor::UserDataFieldDescriptor() : omnetpp::cClassDescriptor("UserDataField", "omnetpp::cPacket")
329 {
330  propertynames = nullptr;
331 }
332 
334 {
335  delete[] propertynames;
336 }
337 
338 bool UserDataFieldDescriptor::doesSupport(omnetpp::cObject *obj) const
339 {
340  return dynamic_cast<UserDataField_Base *>(obj)!=nullptr;
341 }
342 
344 {
345  if (!propertynames) {
346  static const char *names[] = { "customize", nullptr };
347  omnetpp::cClassDescriptor *basedesc = getBaseClassDescriptor();
348  const char **basenames = basedesc ? basedesc->getPropertyNames() : nullptr;
349  propertynames = mergeLists(basenames, names);
350  }
351  return propertynames;
352 }
353 
354 const char *UserDataFieldDescriptor::getProperty(const char *propertyname) const
355 {
356  if (!strcmp(propertyname,"customize")) return "true";
357  omnetpp::cClassDescriptor *basedesc = getBaseClassDescriptor();
358  return basedesc ? basedesc->getProperty(propertyname) : nullptr;
359 }
360 
362 {
363  omnetpp::cClassDescriptor *basedesc = getBaseClassDescriptor();
364  return basedesc ? 7+basedesc->getFieldCount() : 7;
365 }
366 
367 unsigned int UserDataFieldDescriptor::getFieldTypeFlags(int field) const
368 {
369  omnetpp::cClassDescriptor *basedesc = getBaseClassDescriptor();
370  if (basedesc) {
371  if (field < basedesc->getFieldCount())
372  return basedesc->getFieldTypeFlags(field);
373  field -= basedesc->getFieldCount();
374  }
375  static unsigned int fieldTypeFlags[] = {
376  FD_ISEDITABLE,
377  FD_ISEDITABLE,
378  FD_ISEDITABLE,
379  FD_ISEDITABLE,
380  FD_ISEDITABLE,
381  FD_ISEDITABLE,
382  FD_ISEDITABLE,
383  };
384  return (field>=0 && field<7) ? fieldTypeFlags[field] : 0;
385 }
386 
387 const char *UserDataFieldDescriptor::getFieldName(int field) const
388 {
389  omnetpp::cClassDescriptor *basedesc = getBaseClassDescriptor();
390  if (basedesc) {
391  if (field < basedesc->getFieldCount())
392  return basedesc->getFieldName(field);
393  field -= basedesc->getFieldCount();
394  }
395  static const char *fieldNames[] = {
396  "sduSeqNumPresent",
397  "noLength",
398  "midFragment",
399  "firstFragment",
400  "lastFragment",
401  "completeSDU",
402  "sduSeqNum",
403  };
404  return (field>=0 && field<7) ? fieldNames[field] : nullptr;
405 }
406 
407 int UserDataFieldDescriptor::findField(const char *fieldName) const
408 {
409  omnetpp::cClassDescriptor *basedesc = getBaseClassDescriptor();
410  int base = basedesc ? basedesc->getFieldCount() : 0;
411  if (fieldName[0]=='s' && strcmp(fieldName, "sduSeqNumPresent")==0) return base+0;
412  if (fieldName[0]=='n' && strcmp(fieldName, "noLength")==0) return base+1;
413  if (fieldName[0]=='m' && strcmp(fieldName, "midFragment")==0) return base+2;
414  if (fieldName[0]=='f' && strcmp(fieldName, "firstFragment")==0) return base+3;
415  if (fieldName[0]=='l' && strcmp(fieldName, "lastFragment")==0) return base+4;
416  if (fieldName[0]=='c' && strcmp(fieldName, "completeSDU")==0) return base+5;
417  if (fieldName[0]=='s' && strcmp(fieldName, "sduSeqNum")==0) return base+6;
418  return basedesc ? basedesc->findField(fieldName) : -1;
419 }
420 
422 {
423  omnetpp::cClassDescriptor *basedesc = getBaseClassDescriptor();
424  if (basedesc) {
425  if (field < basedesc->getFieldCount())
426  return basedesc->getFieldTypeString(field);
427  field -= basedesc->getFieldCount();
428  }
429  static const char *fieldTypeStrings[] = {
430  "bool",
431  "bool",
432  "bool",
433  "bool",
434  "bool",
435  "bool",
436  "unsigned int",
437  };
438  return (field>=0 && field<7) ? fieldTypeStrings[field] : nullptr;
439 }
440 
442 {
443  omnetpp::cClassDescriptor *basedesc = getBaseClassDescriptor();
444  if (basedesc) {
445  if (field < basedesc->getFieldCount())
446  return basedesc->getFieldPropertyNames(field);
447  field -= basedesc->getFieldCount();
448  }
449  switch (field) {
450  default: return nullptr;
451  }
452 }
453 
454 const char *UserDataFieldDescriptor::getFieldProperty(int field, const char *propertyname) const
455 {
456  omnetpp::cClassDescriptor *basedesc = getBaseClassDescriptor();
457  if (basedesc) {
458  if (field < basedesc->getFieldCount())
459  return basedesc->getFieldProperty(field, propertyname);
460  field -= basedesc->getFieldCount();
461  }
462  switch (field) {
463  default: return nullptr;
464  }
465 }
466 
467 int UserDataFieldDescriptor::getFieldArraySize(void *object, int field) const
468 {
469  omnetpp::cClassDescriptor *basedesc = getBaseClassDescriptor();
470  if (basedesc) {
471  if (field < basedesc->getFieldCount())
472  return basedesc->getFieldArraySize(object, field);
473  field -= basedesc->getFieldCount();
474  }
475  UserDataField_Base *pp = (UserDataField_Base *)object; (void)pp;
476  switch (field) {
477  default: return 0;
478  }
479 }
480 
481 std::string UserDataFieldDescriptor::getFieldValueAsString(void *object, int field, int i) const
482 {
483  omnetpp::cClassDescriptor *basedesc = getBaseClassDescriptor();
484  if (basedesc) {
485  if (field < basedesc->getFieldCount())
486  return basedesc->getFieldValueAsString(object,field,i);
487  field -= basedesc->getFieldCount();
488  }
489  UserDataField_Base *pp = (UserDataField_Base *)object; (void)pp;
490  switch (field) {
491  case 0: return bool2string(pp->getSduSeqNumPresent());
492  case 1: return bool2string(pp->getNoLength());
493  case 2: return bool2string(pp->getMidFragment());
494  case 3: return bool2string(pp->getFirstFragment());
495  case 4: return bool2string(pp->getLastFragment());
496  case 5: return bool2string(pp->getCompleteSDU());
497  case 6: return ulong2string(pp->getSduSeqNum());
498  default: return "";
499  }
500 }
501 
502 bool UserDataFieldDescriptor::setFieldValueAsString(void *object, int field, int i, const char *value) const
503 {
504  omnetpp::cClassDescriptor *basedesc = getBaseClassDescriptor();
505  if (basedesc) {
506  if (field < basedesc->getFieldCount())
507  return basedesc->setFieldValueAsString(object,field,i,value);
508  field -= basedesc->getFieldCount();
509  }
510  UserDataField_Base *pp = (UserDataField_Base *)object; (void)pp;
511  switch (field) {
512  case 0: pp->setSduSeqNumPresent(string2bool(value)); return true;
513  case 1: pp->setNoLength(string2bool(value)); return true;
514  case 2: pp->setMidFragment(string2bool(value)); return true;
515  case 3: pp->setFirstFragment(string2bool(value)); return true;
516  case 4: pp->setLastFragment(string2bool(value)); return true;
517  case 5: pp->setCompleteSDU(string2bool(value)); return true;
518  case 6: pp->setSduSeqNum(string2ulong(value)); return true;
519  default: return false;
520  }
521 }
522 
524 {
525  omnetpp::cClassDescriptor *basedesc = getBaseClassDescriptor();
526  if (basedesc) {
527  if (field < basedesc->getFieldCount())
528  return basedesc->getFieldStructName(field);
529  field -= basedesc->getFieldCount();
530  }
531  switch (field) {
532  default: return nullptr;
533  };
534 }
535 
536 void *UserDataFieldDescriptor::getFieldStructValuePointer(void *object, int field, int i) const
537 {
538  omnetpp::cClassDescriptor *basedesc = getBaseClassDescriptor();
539  if (basedesc) {
540  if (field < basedesc->getFieldCount())
541  return basedesc->getFieldStructValuePointer(object, field, i);
542  field -= basedesc->getFieldCount();
543  }
544  UserDataField_Base *pp = (UserDataField_Base *)object; (void)pp;
545  switch (field) {
546  default: return nullptr;
547  }
548 }
549 
550 
virtual unsigned int getSduSeqNum() const
virtual void setNoLength(bool noLength)
virtual const char * getProperty(const char *propertyname) const override
virtual std::string getFieldValueAsString(void *object, int field, int i) const override
virtual void setSduSeqNumPresent(bool sduSeqNumPresent)
virtual bool getFirstFragment() const
void copy(const UserDataField_Base &other)
UserDataField_Base & operator=(const UserDataField_Base &other)
virtual ~UserDataField_Base()
virtual bool doesSupport(omnetpp::cObject *obj) const override
virtual int getFieldCount() const override
virtual const char * getFieldProperty(int field, const char *propertyname) const override
Register_ClassDescriptor(UserDataFieldDescriptor)
void doParsimPacking(omnetpp::cCommBuffer *buffer, const std::vector< T, A > &v)
Definition: PDU_m.cc:22
virtual void setLastFragment(bool lastFragment)
virtual int findField(const char *fieldName) const override
virtual void setSduSeqNum(unsigned int sduSeqNum)
virtual const char ** getFieldPropertyNames(int field) const override
UserDataField_Base(const char *name=nullptr, int kind=0)
virtual void setFirstFragment(bool firstFragment)
void doParsimUnpacking(omnetpp::cCommBuffer *buffer, std::vector< T, A > &v)
Definition: PDU_m.cc:31
void doParsimArrayUnpacking(omnetpp::cCommBuffer *b, T *t, int n)
Definition: PDU_m.cc:114
virtual const char * getFieldTypeString(int field) const override
virtual bool setFieldValueAsString(void *object, int field, int i, const char *value) const override
unsigned int sduSeqNum
virtual const char * getFieldStructName(int field) const override
virtual bool getCompleteSDU() const
std::ostream & operator<<(std::ostream &out, const std::vector< T, A > &vec)
virtual bool getLastFragment() const
Definition: PDU_m.cc:15
virtual void setCompleteSDU(bool completeSDU)
virtual bool getMidFragment() const
virtual bool getNoLength() const
virtual void setMidFragment(bool midFragment)
virtual bool getSduSeqNumPresent() const
virtual void parsimUnpack(omnetpp::cCommBuffer *b)
virtual const char ** getPropertyNames() const override
virtual unsigned int getFieldTypeFlags(int field) const override
virtual void * getFieldStructValuePointer(void *object, int field, int i) const override
virtual void parsimPack(omnetpp::cCommBuffer *b) const
void doParsimArrayPacking(omnetpp::cCommBuffer *b, const T *t, int n)
Definition: PDU_m.cc:107
virtual const char * getFieldName(int field) const override
virtual int getFieldArraySize(void *object, int field) const override