7 # pragma warning(disable:4101)
8 # pragma warning(disable:4065)
21 template<
typename T,
typename A>
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>
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>
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>
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(
"PDUType");
166 if (!e) omnetpp::enums.getInstance()->add(e =
new omnetpp::cEnum(
"PDUType"));
183 omnetpp::cEnum *e = omnetpp::cEnum::find(
"PDUTypeBits");
184 if (!e) omnetpp::enums.getInstance()->add(e =
new omnetpp::cEnum(
"PDUTypeBits"));
192 omnetpp::cEnum *e = omnetpp::cEnum::find(
"FLAGS");
193 if (!e) omnetpp::enums.getInstance()->add(e =
new omnetpp::cEnum(
"FLAGS"));
198 this->setByteLength(10);
199 this->setSchedulingPriority(-1);
220 if (
this==&other)
return *
this;
221 ::omnetpp::cPacket::operator=(other);
244 ::omnetpp::cPacket::parsimPack(b);
261 ::omnetpp::cPacket::parsimUnpack(b);
404 virtual bool doesSupport(omnetpp::cObject *obj)
const override;
406 virtual const char *
getProperty(
const char *propertyname)
const override;
408 virtual const char *
getFieldName(
int field)
const override;
409 virtual int findField(
const char *fieldName)
const override;
413 virtual const char *
getFieldProperty(
int field,
const char *propertyname)
const override;
417 virtual bool setFieldValueAsString(
void *
object,
int field,
int i,
const char *value)
const override;
437 return dynamic_cast<PDU_Base *
>(obj)!=
nullptr;
443 static const char *names[] = {
"customize",
nullptr };
444 omnetpp::cClassDescriptor *basedesc = getBaseClassDescriptor();
445 const char **basenames = basedesc ? basedesc->getPropertyNames() :
nullptr;
453 if (!strcmp(propertyname,
"customize"))
return "true";
454 omnetpp::cClassDescriptor *basedesc = getBaseClassDescriptor();
455 return basedesc ? basedesc->getProperty(propertyname) :
nullptr;
460 omnetpp::cClassDescriptor *basedesc = getBaseClassDescriptor();
461 return basedesc ? 12+basedesc->getFieldCount() : 12;
466 omnetpp::cClassDescriptor *basedesc = getBaseClassDescriptor();
469 return basedesc->getFieldTypeFlags(field);
470 field -= basedesc->getFieldCount();
472 static unsigned int fieldTypeFlags[] = {
486 return (field>=0 && field<12) ? fieldTypeFlags[field] : 0;
491 omnetpp::cClassDescriptor *basedesc = getBaseClassDescriptor();
494 return basedesc->getFieldName(field);
495 field -= basedesc->getFieldCount();
497 static const char *fieldNames[] = {
511 return (field>=0 && field<12) ? fieldNames[field] :
nullptr;
516 omnetpp::cClassDescriptor *basedesc = getBaseClassDescriptor();
517 int base = basedesc ? basedesc->getFieldCount() : 0;
518 if (fieldName[0]==
'd' && strcmp(fieldName,
"displayString")==0)
return base+0;
519 if (fieldName[0]==
'v' && strcmp(fieldName,
"version")==0)
return base+1;
520 if (fieldName[0]==
's' && strcmp(fieldName,
"srcAddr")==0)
return base+2;
521 if (fieldName[0]==
'd' && strcmp(fieldName,
"dstAddr")==0)
return base+3;
522 if (fieldName[0]==
's' && strcmp(fieldName,
"srcApn")==0)
return base+4;
523 if (fieldName[0]==
'd' && strcmp(fieldName,
"dstApn")==0)
return base+5;
524 if (fieldName[0]==
'c' && strcmp(fieldName,
"connId")==0)
return base+6;
525 if (fieldName[0]==
't' && strcmp(fieldName,
"type")==0)
return base+7;
526 if (fieldName[0]==
'f' && strcmp(fieldName,
"flags")==0)
return base+8;
527 if (fieldName[0]==
'p' && strcmp(fieldName,
"pduLen")==0)
return base+9;
528 if (fieldName[0]==
's' && strcmp(fieldName,
"seqNum")==0)
return base+10;
529 if (fieldName[0]==
'h' && strcmp(fieldName,
"hopCount")==0)
return base+11;
530 return basedesc ? basedesc->findField(fieldName) : -1;
535 omnetpp::cClassDescriptor *basedesc = getBaseClassDescriptor();
538 return basedesc->getFieldTypeString(field);
539 field -= basedesc->getFieldCount();
541 static const char *fieldTypeStrings[] = {
555 return (field>=0 && field<12) ? fieldTypeStrings[field] :
nullptr;
560 omnetpp::cClassDescriptor *basedesc = getBaseClassDescriptor();
563 return basedesc->getFieldPropertyNames(field);
564 field -= basedesc->getFieldCount();
568 static const char *names[] = {
"enum",
nullptr };
571 default:
return nullptr;
577 omnetpp::cClassDescriptor *basedesc = getBaseClassDescriptor();
580 return basedesc->getFieldProperty(field, propertyname);
581 field -= basedesc->getFieldCount();
585 if (!strcmp(propertyname,
"enum"))
return "PDUType";
587 default:
return nullptr;
593 omnetpp::cClassDescriptor *basedesc = getBaseClassDescriptor();
596 return basedesc->getFieldArraySize(
object, field);
597 field -= basedesc->getFieldCount();
607 omnetpp::cClassDescriptor *basedesc = getBaseClassDescriptor();
610 return basedesc->getFieldValueAsString(
object,field,i);
611 field -= basedesc->getFieldCount();
616 case 1:
return ulong2string(pp->
getVersion());
617 case 2: {std::stringstream out; out << pp->
getSrcAddr();
return out.str();}
618 case 3: {std::stringstream out; out << pp->
getDstAddr();
return out.str();}
619 case 4: {std::stringstream out; out << pp->
getSrcApn();
return out.str();}
620 case 5: {std::stringstream out; out << pp->
getDstApn();
return out.str();}
621 case 6: {std::stringstream out; out << pp->
getConnId();
return out.str();}
622 case 7:
return enum2string(pp->
getType(),
"PDUType");
623 case 8:
return long2string(pp->
getFlags());
624 case 9:
return ulong2string(pp->
getPduLen());
625 case 10:
return ulong2string(pp->
getSeqNum());
633 omnetpp::cClassDescriptor *basedesc = getBaseClassDescriptor();
636 return basedesc->setFieldValueAsString(
object,field,i,value);
637 field -= basedesc->getFieldCount();
642 case 1: pp->
setVersion(string2ulong(value));
return true;
643 case 7: pp->
setType((
PDUType)string2enum(value,
"PDUType"));
return true;
644 case 8: pp->
setFlags(string2long(value));
return true;
645 case 9: pp->
setPduLen(string2ulong(value));
return true;
646 case 10: pp->
setSeqNum(string2ulong(value));
return true;
647 case 11: pp->
setHopCount(string2ulong(value));
return true;
648 default:
return false;
654 omnetpp::cClassDescriptor *basedesc = getBaseClassDescriptor();
657 return basedesc->getFieldStructName(field);
658 field -= basedesc->getFieldCount();
661 case 2:
return omnetpp::opp_typename(
typeid(
Address));
662 case 3:
return omnetpp::opp_typename(
typeid(
Address));
663 case 4:
return omnetpp::opp_typename(
typeid(
APN));
664 case 5:
return omnetpp::opp_typename(
typeid(
APN));
665 case 6:
return omnetpp::opp_typename(
typeid(
ConnectionId));
666 default:
return nullptr;
672 omnetpp::cClassDescriptor *basedesc = getBaseClassDescriptor();
675 return basedesc->getFieldStructValuePointer(
object, field, i);
676 field -= basedesc->getFieldCount();
680 case 2:
return (
void *)(&pp->
getSrcAddr());
break;
681 case 3:
return (
void *)(&pp->
getDstAddr());
break;
682 case 4:
return (
void *)(&pp->
getSrcApn());
break;
683 case 5:
return (
void *)(&pp->
getDstApn());
break;
684 case 6:
return (
void *)(&pp->
getConnId());
break;
685 default:
return nullptr;
const char ** propertynames
virtual const char * getDisplayString() const
virtual void setPduLen(unsigned int pduLen)
virtual bool setFieldValueAsString(void *object, int field, int i, const char *value) const override
virtual APN & getSrcApn()
void doParsimUnpacking(omnetpp::cCommBuffer *, T &t)
Application Process Name class.
void copy(const PDU_Base &other)
virtual int findField(const char *fieldName) const override
Register_ClassDescriptor(PDUDescriptor)
virtual unsigned int getFieldTypeFlags(int field) const override
PDU_Base(const char *name=nullptr, int kind=0)
virtual void setDstApn(const APN &dstApn)
virtual void setHopCount(unsigned int hopCount)
Connection identifier as defined in specifications.
void doParsimPacking(omnetpp::cCommBuffer *buffer, const std::vector< T, A > &v)
virtual void setSrcAddr(const Address &srcAddr)
virtual void setType(int type)
virtual ConnectionId & getConnId()
virtual void setDstAddr(const Address &dstAddr)
virtual bool doesSupport(omnetpp::cObject *obj) const override
virtual const char * getFieldName(int field) const override
virtual int getFieldCount() const override
virtual const char * getProperty(const char *propertyname) const override
virtual void setFlags(int flags)
virtual APN & getDstApn()
virtual void parsimPack(omnetpp::cCommBuffer *b) const
virtual void setVersion(unsigned int version)
virtual unsigned int getVersion() const
void doParsimUnpacking(omnetpp::cCommBuffer *buffer, std::vector< T, A > &v)
PDU_Base & operator=(const PDU_Base &other)
void doParsimArrayUnpacking(omnetpp::cCommBuffer *b, T *t, int n)
virtual unsigned int getPduLen() const
virtual const char ** getPropertyNames() const override
virtual void * getFieldStructValuePointer(void *object, int field, int i) const override
virtual unsigned int getSeqNum() const
virtual Address & getDstAddr()
void doParsimPacking(omnetpp::cCommBuffer *, const T &t)
virtual Address & getSrcAddr()
virtual void setSeqNum(unsigned int seqNum)
EXECUTE_ON_STARTUP(omnetpp::cEnum *e=omnetpp::cEnum::find("PDUType");if(!e) omnetpp::enums.getInstance() ->add(e=new omnetpp::cEnum("PDUType"));e->insert(MANAGEMENT_PDU,"MANAGEMENT_PDU");e->insert(DATA_TRANSFER_PDU,"DATA_TRANSFER_PDU");e->insert(CONTROL_ACK_PDU,"CONTROL_ACK_PDU");e->insert(ACK_ONLY_PDU,"ACK_ONLY_PDU");e->insert(NACK_ONLY_PDU,"NACK_ONLY_PDU");e->insert(FLOW_ONLY_PDU,"FLOW_ONLY_PDU");e->insert(ACK_FLOW_PDU,"ACK_FLOW_PDU");e->insert(NACK_FLOW_PDU,"NACK_FLOW_PDU");e->insert(SELECT_ACK_PDU,"SELECT_ACK_PDU");e->insert(SELECT_NACK_PDU,"SELECT_NACK_PDU");e->insert(SELECT_ACK_FLOW_PDU,"SELECT_ACK_FLOW_PDU");e->insert(SELECT_NACK_FLOW_PDU,"SELECT_NACK_FLOW_PDU");e->insert(RENDEZVOUS_PDU,"RENDEZVOUS_PDU");)
virtual void setDisplayString(const char *displayString)
virtual const char * getFieldTypeString(int field) const override
virtual void setSrcApn(const APN &srcApn)
virtual const char * getFieldStructName(int field) const override
virtual int getType() const
::omnetpp::opp_string displayString
virtual const char ** getFieldPropertyNames(int field) const override
virtual std::string getFieldValueAsString(void *object, int field, int i) const override
virtual void parsimUnpack(omnetpp::cCommBuffer *b)
virtual int getFlags() const
virtual unsigned int getHopCount() const
virtual int getFieldArraySize(void *object, int field) const override
virtual const char * getFieldProperty(int field, const char *propertyname) const override
virtual void setConnId(const ConnectionId &connId)
Address class holds IPC Process identification.
std::ostream & operator<<(std::ostream &out, const std::vector< T, A > &vec)
void doParsimArrayPacking(omnetpp::cCommBuffer *b, const T *t, int n)