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));
166 this->setByteLength(1);
188 if (
this==&other)
return *
this;
189 ::omnetpp::cPacket::operator=(other);
207 ::omnetpp::cPacket::parsimPack(b);
219 ::omnetpp::cPacket::parsimUnpack(b);
307 virtual bool doesSupport(omnetpp::cObject *obj)
const override;
309 virtual const char *
getProperty(
const char *propertyname)
const override;
311 virtual const char *
getFieldName(
int field)
const override;
312 virtual int findField(
const char *fieldName)
const override;
316 virtual const char *
getFieldProperty(
int field,
const char *propertyname)
const override;
320 virtual bool setFieldValueAsString(
void *
object,
int field,
int i,
const char *value)
const override;
346 static const char *names[] = {
"customize",
nullptr };
347 omnetpp::cClassDescriptor *basedesc = getBaseClassDescriptor();
348 const char **basenames = basedesc ? basedesc->getPropertyNames() :
nullptr;
356 if (!strcmp(propertyname,
"customize"))
return "true";
357 omnetpp::cClassDescriptor *basedesc = getBaseClassDescriptor();
358 return basedesc ? basedesc->getProperty(propertyname) :
nullptr;
363 omnetpp::cClassDescriptor *basedesc = getBaseClassDescriptor();
364 return basedesc ? 7+basedesc->getFieldCount() : 7;
369 omnetpp::cClassDescriptor *basedesc = getBaseClassDescriptor();
372 return basedesc->getFieldTypeFlags(field);
373 field -= basedesc->getFieldCount();
375 static unsigned int fieldTypeFlags[] = {
384 return (field>=0 && field<7) ? fieldTypeFlags[field] : 0;
389 omnetpp::cClassDescriptor *basedesc = getBaseClassDescriptor();
392 return basedesc->getFieldName(field);
393 field -= basedesc->getFieldCount();
395 static const char *fieldNames[] = {
404 return (field>=0 && field<7) ? fieldNames[field] :
nullptr;
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;
423 omnetpp::cClassDescriptor *basedesc = getBaseClassDescriptor();
426 return basedesc->getFieldTypeString(field);
427 field -= basedesc->getFieldCount();
429 static const char *fieldTypeStrings[] = {
438 return (field>=0 && field<7) ? fieldTypeStrings[field] :
nullptr;
443 omnetpp::cClassDescriptor *basedesc = getBaseClassDescriptor();
446 return basedesc->getFieldPropertyNames(field);
447 field -= basedesc->getFieldCount();
450 default:
return nullptr;
456 omnetpp::cClassDescriptor *basedesc = getBaseClassDescriptor();
459 return basedesc->getFieldProperty(field, propertyname);
460 field -= basedesc->getFieldCount();
463 default:
return nullptr;
469 omnetpp::cClassDescriptor *basedesc = getBaseClassDescriptor();
472 return basedesc->getFieldArraySize(
object, field);
473 field -= basedesc->getFieldCount();
483 omnetpp::cClassDescriptor *basedesc = getBaseClassDescriptor();
486 return basedesc->getFieldValueAsString(
object,field,i);
487 field -= basedesc->getFieldCount();
504 omnetpp::cClassDescriptor *basedesc = getBaseClassDescriptor();
507 return basedesc->setFieldValueAsString(
object,field,i,value);
508 field -= basedesc->getFieldCount();
513 case 1: pp->
setNoLength(string2bool(value));
return true;
518 case 6: pp->
setSduSeqNum(string2ulong(value));
return true;
519 default:
return false;
525 omnetpp::cClassDescriptor *basedesc = getBaseClassDescriptor();
528 return basedesc->getFieldStructName(field);
529 field -= basedesc->getFieldCount();
532 default:
return nullptr;
538 omnetpp::cClassDescriptor *basedesc = getBaseClassDescriptor();
541 return basedesc->getFieldStructValuePointer(
object, field, i);
542 field -= basedesc->getFieldCount();
546 default:
return nullptr;
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)
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)
void doParsimArrayUnpacking(omnetpp::cCommBuffer *b, T *t, int n)
virtual const char * getFieldTypeString(int field) const override
virtual bool setFieldValueAsString(void *object, int field, int i, const char *value) const override
const char ** propertynames
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
virtual void setCompleteSDU(bool completeSDU)
UserDataFieldDescriptor()
virtual bool getMidFragment() const
virtual bool getNoLength() const
virtual ~UserDataFieldDescriptor()
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)
virtual const char * getFieldName(int field) const override
virtual int getFieldArraySize(void *object, int field) const override