7 # pragma warning(disable:4101)
8 # pragma warning(disable:4065)
21 template<
typename T,
typename A>
22 void doParsimPacking(omnetpp::cCommBuffer *buffer,
const std::vector<T,A>& v)
26 for (
int i = 0; i < n; i++)
30 template<
typename T,
typename A>
36 for (
int i = 0; i < n; i++)
41 template<
typename T,
typename A>
42 void doParsimPacking(omnetpp::cCommBuffer *buffer,
const std::list<T,A>& l)
45 for (
typename std::list<T,A>::const_iterator it = l.begin(); it != l.end(); ++it)
49 template<
typename T,
typename A>
54 for (
int i=0; i<n; i++) {
61 template<
typename T,
typename Tr,
typename A>
62 void doParsimPacking(omnetpp::cCommBuffer *buffer,
const std::set<T,Tr,A>& s)
65 for (
typename std::set<T,Tr,A>::const_iterator it = s.begin(); it != s.end(); ++it)
69 template<
typename T,
typename Tr,
typename A>
74 for (
int i=0; i<n; i++) {
82 template<
typename K,
typename V,
typename Tr,
typename A>
83 void doParsimPacking(omnetpp::cCommBuffer *buffer,
const std::map<K,V,Tr,A>& m)
86 for (
typename std::map<K,V,Tr,A>::const_iterator it = m.begin(); it != m.end(); ++it) {
92 template<
typename K,
typename V,
typename Tr,
typename A>
97 for (
int i=0; i<n; i++) {
109 for (
int i = 0; i < n; i++)
116 for (
int i = 0; i < n; i++)
124 throw omnetpp::cRuntimeError(
"Parsim error: no doParsimPacking() function for type %s", omnetpp::opp_typename(
typeid(t)));
130 throw omnetpp::cRuntimeError(
"Parsim error: no doParsimUnpacking() function for type %s", omnetpp::opp_typename(
typeid(t)));
137 template<
typename T,
typename A>
138 std::ostream& operator<<(std::ostream& out, const std::vector<T,A>& vec);
142 inline std::ostream&
operator<<(std::ostream& out,
const T&) {
return out;}
145 template<
typename T,
typename A>
146 inline std::ostream& operator<<(std::ostream& out, const std::vector<T,A>& vec)
149 for(
typename std::vector<T,A>::const_iterator it = vec.begin(); it != vec.end(); ++it)
151 if (it != vec.begin()) {
152 out.put(
','); out.put(
' ');
159 sprintf(buf,
" (size=%u)", (
unsigned int)vec.size());
160 out.write(buf, strlen(buf));
165 omnetpp::cEnum *e = omnetpp::cEnum::find(
"FragmentType");
166 if (!e) omnetpp::enums.getInstance()->add(e =
new omnetpp::cEnum(
"FragmentType"));
174 this->setSchedulingPriority(-1);
175 this->setByteLength(10);
197 if (
this==&other)
return *
this;
198 ::Data::operator=(other);
316 virtual bool doesSupport(omnetpp::cObject *obj)
const override;
318 virtual const char *
getProperty(
const char *propertyname)
const override;
320 virtual const char *
getFieldName(
int field)
const override;
321 virtual int findField(
const char *fieldName)
const override;
325 virtual const char *
getFieldProperty(
int field,
const char *propertyname)
const override;
329 virtual bool setFieldValueAsString(
void *
object,
int field,
int i,
const char *value)
const override;
349 return dynamic_cast<SDU_Base *
>(obj)!=
nullptr;
355 static const char *names[] = {
"customize",
nullptr };
356 omnetpp::cClassDescriptor *basedesc = getBaseClassDescriptor();
357 const char **basenames = basedesc ? basedesc->getPropertyNames() :
nullptr;
365 if (!strcmp(propertyname,
"customize"))
return "true";
366 omnetpp::cClassDescriptor *basedesc = getBaseClassDescriptor();
367 return basedesc ? basedesc->getProperty(propertyname) :
nullptr;
372 omnetpp::cClassDescriptor *basedesc = getBaseClassDescriptor();
373 return basedesc ? 7+basedesc->getFieldCount() : 7;
378 omnetpp::cClassDescriptor *basedesc = getBaseClassDescriptor();
381 return basedesc->getFieldTypeFlags(field);
382 field -= basedesc->getFieldCount();
384 static unsigned int fieldTypeFlags[] = {
393 return (field>=0 && field<7) ? fieldTypeFlags[field] : 0;
398 omnetpp::cClassDescriptor *basedesc = getBaseClassDescriptor();
401 return basedesc->getFieldName(field);
402 field -= basedesc->getFieldCount();
404 static const char *fieldNames[] = {
413 return (field>=0 && field<7) ? fieldNames[field] :
nullptr;
418 omnetpp::cClassDescriptor *basedesc = getBaseClassDescriptor();
419 int base = basedesc ? basedesc->getFieldCount() : 0;
420 if (fieldName[0]==
's' && strcmp(fieldName,
"size")==0)
return base+0;
421 if (fieldName[0]==
'o' && strcmp(fieldName,
"offset")==0)
return base+1;
422 if (fieldName[0]==
'f' && strcmp(fieldName,
"fSize")==0)
return base+2;
423 if (fieldName[0]==
'f' && strcmp(fieldName,
"fOffset")==0)
return base+3;
424 if (fieldName[0]==
's' && strcmp(fieldName,
"seqNum")==0)
return base+4;
425 if (fieldName[0]==
'f' && strcmp(fieldName,
"fSeqNum")==0)
return base+5;
426 if (fieldName[0]==
'f' && strcmp(fieldName,
"fragType")==0)
return base+6;
427 return basedesc ? basedesc->findField(fieldName) : -1;
432 omnetpp::cClassDescriptor *basedesc = getBaseClassDescriptor();
435 return basedesc->getFieldTypeString(field);
436 field -= basedesc->getFieldCount();
438 static const char *fieldTypeStrings[] = {
447 return (field>=0 && field<7) ? fieldTypeStrings[field] :
nullptr;
452 omnetpp::cClassDescriptor *basedesc = getBaseClassDescriptor();
455 return basedesc->getFieldPropertyNames(field);
456 field -= basedesc->getFieldCount();
460 static const char *names[] = {
"enum",
nullptr };
463 default:
return nullptr;
469 omnetpp::cClassDescriptor *basedesc = getBaseClassDescriptor();
472 return basedesc->getFieldProperty(field, propertyname);
473 field -= basedesc->getFieldCount();
477 if (!strcmp(propertyname,
"enum"))
return "FragmentType";
479 default:
return nullptr;
485 omnetpp::cClassDescriptor *basedesc = getBaseClassDescriptor();
488 return basedesc->getFieldArraySize(
object, field);
489 field -= basedesc->getFieldCount();
499 omnetpp::cClassDescriptor *basedesc = getBaseClassDescriptor();
502 return basedesc->getFieldValueAsString(
object,field,i);
503 field -= basedesc->getFieldCount();
507 case 0:
return ulong2string(pp->
getSize());
508 case 1:
return ulong2string(pp->
getOffset());
509 case 2:
return ulong2string(pp->
getFSize());
510 case 3:
return ulong2string(pp->
getFOffset());
511 case 4:
return ulong2string(pp->
getSeqNum());
512 case 5:
return ulong2string(pp->
getFSeqNum());
513 case 6:
return enum2string(pp->
getFragType(),
"FragmentType");
520 omnetpp::cClassDescriptor *basedesc = getBaseClassDescriptor();
523 return basedesc->setFieldValueAsString(
object,field,i,value);
524 field -= basedesc->getFieldCount();
528 case 0: pp->
setSize(string2ulong(value));
return true;
529 case 1: pp->
setOffset(string2ulong(value));
return true;
530 case 2: pp->
setFSize(string2ulong(value));
return true;
531 case 3: pp->
setFOffset(string2ulong(value));
return true;
532 case 4: pp->
setSeqNum(string2ulong(value));
return true;
533 case 5: pp->
setFSeqNum(string2ulong(value));
return true;
535 default:
return false;
541 omnetpp::cClassDescriptor *basedesc = getBaseClassDescriptor();
544 return basedesc->getFieldStructName(field);
545 field -= basedesc->getFieldCount();
548 default:
return nullptr;
554 omnetpp::cClassDescriptor *basedesc = getBaseClassDescriptor();
557 return basedesc->getFieldStructValuePointer(
object, field, i);
558 field -= basedesc->getFieldCount();
562 default:
return nullptr;
virtual void setSize(unsigned int size)
virtual unsigned int getFSeqNum() const
virtual const char ** getPropertyNames() const override
virtual int getFieldArraySize(void *object, int field) const override
std::ostream & operator<<(std::ostream &out, const std::vector< T, A > &vec)
const char ** propertynames
virtual std::string getFieldValueAsString(void *object, int field, int i) const override
virtual void setSeqNum(unsigned int seqNum)
virtual void parsimPack(omnetpp::cCommBuffer *b) const
virtual unsigned int getSeqNum() const
virtual unsigned int getSize() const
virtual const char * getFieldTypeString(int field) const override
virtual void * getFieldStructValuePointer(void *object, int field, int i) const override
virtual const char * getFieldName(int field) const override
EXECUTE_ON_STARTUP(omnetpp::cEnum *e=omnetpp::cEnum::find("FragmentType");if(!e) omnetpp::enums.getInstance() ->add(e=new omnetpp::cEnum("FragmentType"));e->insert(SDU_FRAG_FIRST,"SDU_FRAG_FIRST");e->insert(SDU_FRAG_MIDDLE,"SDU_FRAG_MIDDLE");e->insert(SDU_FRAG_LAST,"SDU_FRAG_LAST");)
virtual const char * getProperty(const char *propertyname) const override
void doParsimPacking(omnetpp::cCommBuffer *buffer, const std::vector< T, A > &v)
virtual unsigned int getFSize() const
SDU_Base & operator=(const SDU_Base &other)
void copy(const SDU_Base &other)
Register_ClassDescriptor(SDUDescriptor)
virtual unsigned int getFieldTypeFlags(int field) const override
virtual bool doesSupport(omnetpp::cObject *obj) const override
virtual void setOffset(unsigned int offset)
void doParsimUnpacking(omnetpp::cCommBuffer *buffer, std::vector< T, A > &v)
void doParsimArrayUnpacking(omnetpp::cCommBuffer *b, T *t, int n)
SDU_Base(const char *name=nullptr, int kind=0)
virtual void parsimUnpack(omnetpp::cCommBuffer *b)
virtual const char * getFieldProperty(int field, const char *propertyname) const override
virtual bool setFieldValueAsString(void *object, int field, int i, const char *value) const override
virtual unsigned int getFOffset() const
virtual void setFOffset(unsigned int fOffset)
virtual void setFSize(unsigned int fSize)
virtual void parsimPack(omnetpp::cCommBuffer *b) const
virtual const char ** getFieldPropertyNames(int field) const override
virtual int getFieldCount() const override
virtual int findField(const char *fieldName) const override
virtual void setFragType(int fragType)
virtual void setFSeqNum(unsigned int fSeqNum)
virtual void parsimUnpack(omnetpp::cCommBuffer *b)
virtual unsigned int getOffset() const
virtual const char * getFieldStructName(int field) const override
void doParsimArrayPacking(omnetpp::cCommBuffer *b, const T *t, int n)
virtual int getFragType() const