00001
00002
00003
00004
00005
00006 #ifdef _MSC_VER
00007 # pragma warning(disable:4101)
00008 # pragma warning(disable:4065)
00009 #endif
00010
00011 #include <iostream>
00012 #include <sstream>
00013 #include "./AribaOmnetMessage_m.h"
00014
00015
00016 template<typename T>
00017 std::ostream& operator<<(std::ostream& out,const T&) {return out;}
00018
00019
00020 template<typename T>
00021 void doPacking(cCommBuffer *, T& t) {
00022 throw new cRuntimeError("Parsim error: no doPacking() function for type %s or its base class (check .msg and _m.cc/h files!)",opp_typename(typeid(t)));
00023 }
00024 template<typename T>
00025 void doUnpacking(cCommBuffer *, T& t) {
00026 throw new cRuntimeError("Parsim error: no doUnpacking() function for type %s or its base class (check .msg and _m.cc/h files!)",opp_typename(typeid(t)));
00027 }
00028
00029
00030 template<typename T>
00031 void doPacking(cCommBuffer *b, T *t, int n) {
00032 for (int i=0; i<n; i++)
00033 doPacking(b,t[i]);
00034 }
00035 template<typename T>
00036 void doUnpacking(cCommBuffer *b, T *t, int n) {
00037 for (int i=0; i<n; i++)
00038 doUnpacking(b,t[i]);
00039 }
00040 inline void doPacking(cCommBuffer *, cPolymorphic&) {}
00041 inline void doUnpacking(cCommBuffer *, cPolymorphic&) {}
00042
00043 #define DOPACKING(T,R) \
00044 inline void doPacking(cCommBuffer *b, T R a) {b->pack(a);} \
00045 inline void doPacking(cCommBuffer *b, T *a, int n) {b->pack(a,n);} \
00046 inline void doUnpacking(cCommBuffer *b, T& a) {b->unpack(a);} \
00047 inline void doUnpacking(cCommBuffer *b, T *a, int n) {b->unpack(a,n);}
00048 #define _
00049 DOPACKING(char,_)
00050 DOPACKING(unsigned char,_)
00051 DOPACKING(bool,_)
00052 DOPACKING(short,_)
00053 DOPACKING(unsigned short,_)
00054 DOPACKING(int,_)
00055 DOPACKING(unsigned int,_)
00056 DOPACKING(long,_)
00057 DOPACKING(unsigned long,_)
00058 DOPACKING(float,_)
00059 DOPACKING(double,_)
00060 DOPACKING(long double,_)
00061 DOPACKING(char *,_)
00062 DOPACKING(const char *,_)
00063 DOPACKING(opp_string,&)
00064
00065 #undef _
00066 #undef DOPACKING
00067
00068
00069 Register_Class(AribaOmnetMessage);
00070
00071 AribaOmnetMessage::AribaOmnetMessage(const char *name, int kind) : cMessage(name,kind)
00072 {
00073 unsigned int i;
00074 this->port_var = 0;
00075 data_arraysize = 0;
00076 this->data_var = 0;
00077 }
00078
00079 AribaOmnetMessage::AribaOmnetMessage(const AribaOmnetMessage& other) : cMessage()
00080 {
00081 unsigned int i;
00082 setName(other.name());
00083 data_arraysize = 0;
00084 this->data_var = 0;
00085 operator=(other);
00086 }
00087
00088 AribaOmnetMessage::~AribaOmnetMessage()
00089 {
00090 unsigned int i;
00091 delete [] data_var;
00092 }
00093
00094 AribaOmnetMessage& AribaOmnetMessage::operator=(const AribaOmnetMessage& other)
00095 {
00096 if (this==&other) return *this;
00097 unsigned int i;
00098 cMessage::operator=(other);
00099 this->port_var = other.port_var;
00100 delete [] this->data_var;
00101 this->data_var = (other.data_arraysize==0) ? NULL : new unsigned char[other.data_arraysize];
00102 data_arraysize = other.data_arraysize;
00103 for (i=0; i<data_arraysize; i++)
00104 this->data_var[i] = other.data_var[i];
00105 return *this;
00106 }
00107
00108 void AribaOmnetMessage::netPack(cCommBuffer *b)
00109 {
00110 cMessage::netPack(b);
00111 doPacking(b,this->port_var);
00112 b->pack(data_arraysize);
00113 doPacking(b,this->data_var,data_arraysize);
00114 }
00115
00116 void AribaOmnetMessage::netUnpack(cCommBuffer *b)
00117 {
00118 cMessage::netUnpack(b);
00119 doUnpacking(b,this->port_var);
00120 delete [] this->data_var;
00121 b->unpack(data_arraysize);
00122 if (data_arraysize==0) {
00123 this->data_var = 0;
00124 } else {
00125 this->data_var = new unsigned char[data_arraysize];
00126 doUnpacking(b,this->data_var,data_arraysize);
00127 }
00128 }
00129
00130 unsigned int AribaOmnetMessage::getPort() const
00131 {
00132 return port_var;
00133 }
00134
00135 void AribaOmnetMessage::setPort(unsigned int port_var)
00136 {
00137 this->port_var = port_var;
00138 }
00139
00140 void AribaOmnetMessage::setDataArraySize(unsigned int size)
00141 {
00142 unsigned char *data_var2 = (size==0) ? NULL : new unsigned char[size];
00143 unsigned int sz = data_arraysize < size ? data_arraysize : size;
00144 unsigned int i;
00145 for (i=0; i<sz; i++)
00146 data_var2[i] = this->data_var[i];
00147 for (i=sz; i<size; i++)
00148 data_var2[i] = 0;
00149 data_arraysize = size;
00150 delete [] this->data_var;
00151 this->data_var = data_var2;
00152 }
00153
00154 unsigned int AribaOmnetMessage::getDataArraySize() const
00155 {
00156 return data_arraysize;
00157 }
00158
00159 unsigned char AribaOmnetMessage::getData(unsigned int k) const
00160 {
00161 if (k>=data_arraysize) throw new cRuntimeError("Array of size %d indexed by %d", data_arraysize, k);
00162 return data_var[k];
00163 }
00164
00165 void AribaOmnetMessage::setData(unsigned int k, unsigned char data_var)
00166 {
00167 if (k>=data_arraysize) throw new cRuntimeError("Array of size %d indexed by %d", data_arraysize, k);
00168 this->data_var[k]=data_var;
00169 }
00170
00171 class AribaOmnetMessageDescriptor : public cClassDescriptor
00172 {
00173 public:
00174 AribaOmnetMessageDescriptor();
00175 virtual ~AribaOmnetMessageDescriptor();
00176
00177 virtual bool doesSupport(cPolymorphic *obj);
00178 virtual const char *getProperty(const char *propertyname);
00179 virtual int getFieldCount(void *object);
00180 virtual const char *getFieldName(void *object, int field);
00181 virtual unsigned int getFieldTypeFlags(void *object, int field);
00182 virtual const char *getFieldTypeString(void *object, int field);
00183 virtual const char *getFieldProperty(void *object, int field, const char *propertyname);
00184 virtual int getArraySize(void *object, int field);
00185
00186 virtual bool getFieldAsString(void *object, int field, int i, char *resultbuf, int bufsize);
00187 virtual bool setFieldAsString(void *object, int field, int i, const char *value);
00188
00189 virtual const char *getFieldStructName(void *object, int field);
00190 virtual void *getFieldStructPointer(void *object, int field, int i);
00191 };
00192
00193 Register_ClassDescriptor(AribaOmnetMessageDescriptor);
00194
00195 AribaOmnetMessageDescriptor::AribaOmnetMessageDescriptor() : cClassDescriptor("AribaOmnetMessage", "cMessage")
00196 {
00197 }
00198
00199 AribaOmnetMessageDescriptor::~AribaOmnetMessageDescriptor()
00200 {
00201 }
00202
00203 bool AribaOmnetMessageDescriptor::doesSupport(cPolymorphic *obj)
00204 {
00205 return dynamic_cast<AribaOmnetMessage *>(obj)!=NULL;
00206 }
00207
00208 const char *AribaOmnetMessageDescriptor::getProperty(const char *propertyname)
00209 {
00210 cClassDescriptor *basedesc = getBaseClassDescriptor();
00211 return basedesc ? basedesc->getProperty(propertyname) : NULL;
00212 }
00213
00214 int AribaOmnetMessageDescriptor::getFieldCount(void *object)
00215 {
00216 cClassDescriptor *basedesc = getBaseClassDescriptor();
00217 return basedesc ? 2+basedesc->getFieldCount(object) : 2;
00218 }
00219
00220 unsigned int AribaOmnetMessageDescriptor::getFieldTypeFlags(void *object, int field)
00221 {
00222 cClassDescriptor *basedesc = getBaseClassDescriptor();
00223 if (basedesc) {
00224 if (field < basedesc->getFieldCount(object))
00225 return basedesc->getFieldTypeFlags(object, field);
00226 field -= basedesc->getFieldCount(object);
00227 }
00228 switch (field) {
00229 case 0: return FD_ISEDITABLE;
00230 case 1: return FD_ISARRAY | FD_ISEDITABLE;
00231 default: return 0;
00232 }
00233 }
00234
00235 const char *AribaOmnetMessageDescriptor::getFieldName(void *object, int field)
00236 {
00237 cClassDescriptor *basedesc = getBaseClassDescriptor();
00238 if (basedesc) {
00239 if (field < basedesc->getFieldCount(object))
00240 return basedesc->getFieldName(object, field);
00241 field -= basedesc->getFieldCount(object);
00242 }
00243 switch (field) {
00244 case 0: return "port";
00245 case 1: return "data";
00246 default: return NULL;
00247 }
00248 }
00249
00250 const char *AribaOmnetMessageDescriptor::getFieldTypeString(void *object, int field)
00251 {
00252 cClassDescriptor *basedesc = getBaseClassDescriptor();
00253 if (basedesc) {
00254 if (field < basedesc->getFieldCount(object))
00255 return basedesc->getFieldTypeString(object, field);
00256 field -= basedesc->getFieldCount(object);
00257 }
00258 switch (field) {
00259 case 0: return "unsigned int";
00260 case 1: return "unsigned char";
00261 default: return NULL;
00262 }
00263 }
00264
00265 const char *AribaOmnetMessageDescriptor::getFieldProperty(void *object, int field, const char *propertyname)
00266 {
00267 cClassDescriptor *basedesc = getBaseClassDescriptor();
00268 if (basedesc) {
00269 if (field < basedesc->getFieldCount(object))
00270 return basedesc->getFieldProperty(object, field, propertyname);
00271 field -= basedesc->getFieldCount(object);
00272 }
00273 switch (field) {
00274 default: return NULL;
00275 }
00276 }
00277
00278 int AribaOmnetMessageDescriptor::getArraySize(void *object, int field)
00279 {
00280 cClassDescriptor *basedesc = getBaseClassDescriptor();
00281 if (basedesc) {
00282 if (field < basedesc->getFieldCount(object))
00283 return basedesc->getArraySize(object, field);
00284 field -= basedesc->getFieldCount(object);
00285 }
00286 AribaOmnetMessage *pp _MAYBEUNUSED = (AribaOmnetMessage *)object;
00287 switch (field) {
00288 case 1: return pp->getDataArraySize();
00289 default: return 0;
00290 }
00291 }
00292
00293 bool AribaOmnetMessageDescriptor::getFieldAsString(void *object, int field, int i, char *resultbuf, int bufsize)
00294 {
00295 cClassDescriptor *basedesc = getBaseClassDescriptor();
00296 if (basedesc) {
00297 if (field < basedesc->getFieldCount(object))
00298 return basedesc->getFieldAsString(object,field,i,resultbuf,bufsize);
00299 field -= basedesc->getFieldCount(object);
00300 }
00301 AribaOmnetMessage *pp _MAYBEUNUSED = (AribaOmnetMessage *)object;
00302 switch (field) {
00303 case 0: long2string(pp->getPort(),resultbuf,bufsize); return true;
00304 case 1: long2string(pp->getData(i),resultbuf,bufsize); return true;
00305 default: return false;
00306 }
00307 }
00308
00309 bool AribaOmnetMessageDescriptor::setFieldAsString(void *object, int field, int i, const char *value)
00310 {
00311 cClassDescriptor *basedesc = getBaseClassDescriptor();
00312 if (basedesc) {
00313 if (field < basedesc->getFieldCount(object))
00314 return basedesc->setFieldAsString(object,field,i,value);
00315 field -= basedesc->getFieldCount(object);
00316 }
00317 AribaOmnetMessage *pp _MAYBEUNUSED = (AribaOmnetMessage *)object;
00318 switch (field) {
00319 case 0: pp->setPort(string2long(value)); return true;
00320 case 1: pp->setData(i,string2long(value)); return true;
00321 default: return false;
00322 }
00323 }
00324
00325 const char *AribaOmnetMessageDescriptor::getFieldStructName(void *object, int field)
00326 {
00327 cClassDescriptor *basedesc = getBaseClassDescriptor();
00328 if (basedesc) {
00329 if (field < basedesc->getFieldCount(object))
00330 return basedesc->getFieldStructName(object, field);
00331 field -= basedesc->getFieldCount(object);
00332 }
00333 switch (field) {
00334 default: return NULL;
00335 }
00336 }
00337
00338 void *AribaOmnetMessageDescriptor::getFieldStructPointer(void *object, int field, int i)
00339 {
00340 cClassDescriptor *basedesc = getBaseClassDescriptor();
00341 if (basedesc) {
00342 if (field < basedesc->getFieldCount(object))
00343 return basedesc->getFieldStructPointer(object, field, i);
00344 field -= basedesc->getFieldCount(object);
00345 }
00346 AribaOmnetMessage *pp _MAYBEUNUSED = (AribaOmnetMessage *)object;
00347 switch (field) {
00348 default: return NULL;
00349 }
00350 }
00351