00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef __CSTRUCT_H
00020 #define __CSTRUCT_H
00021
00022 #include "cobject.h"
00023 #include "cenum.h"
00024 class sFieldWrapper;
00025
00026
00039 class SIM_API cStructDescriptor : public cObject
00040 {
00041 public:
00043 enum {
00044 FT_BASIC,
00045 FT_SPECIAL,
00046 FT_STRUCT,
00047 FT_BASIC_ARRAY,
00048 FT_SPECIAL_ARRAY,
00049 FT_STRUCT_ARRAY,
00050 FT_INVALID
00051 };
00052
00053 protected:
00054 void *p;
00055
00056 protected:
00057
00058 static void long2string(long l, char *buf, int bufsize);
00059 static void ulong2string(unsigned long l, char *buf, int bufsize);
00060 static long string2long(const char *s);
00061 static unsigned long string2ulong(const char *s);
00062 static void bool2string(bool b, char *buf, int bufsize);
00063 static bool string2bool(const char *s);
00064 static void double2string(double d, char *buf, int bufsize);
00065 static double string2double(const char *s);
00066 static void enum2string(long e, const char *enumname, char *buf, int bufsize);
00067 static long string2enum(const char *s, const char *enumname);
00068 static void oppstring2string(const opp_string& str, char *buf, int bufsize);
00069 static void string2oppstring(const char *s, opp_string& str);
00070
00071 public:
00074
00078 cStructDescriptor(void *_p=NULL) {p=_p;}
00079
00083 cStructDescriptor(const cStructDescriptor& cs) {setName(cs.name());operator=(cs);}
00084
00088 virtual ~cStructDescriptor();
00089
00093 cStructDescriptor& operator=(const cStructDescriptor&) {copyNotSupported();return *this;}
00095
00098
00099
00101
00104
00108 static bool hasDescriptor(const char *classname);
00109
00115 static cStructDescriptor *createDescriptorFor(cObject *obj);
00116
00122 static cStructDescriptor *createDescriptorFor(const char *classname, void *p);
00124
00127
00131 void setStruct(void *_p) {p=_p;}
00132
00136 void *getStruct() const {return p;}
00138
00141
00146 virtual int getFieldCount() = 0;
00147
00153 virtual const char *getFieldName(int field) = 0;
00154
00161 virtual int getFieldType(int field) = 0;
00162
00168 virtual const char *getFieldTypeString(int field) = 0;
00169
00177 virtual const char *getFieldEnumName(int field) = 0;
00178
00183 virtual int getArraySize(int field) = 0;
00184
00191 virtual bool getFieldAsString(int field, int i, char *buf, int bufsize) = 0;
00192
00199 virtual bool setFieldAsString(int field, int i, const char *value) = 0;
00200
00208 virtual sFieldWrapper *getFieldWrapper(int field, int i) = 0;
00209
00216 virtual const char *getFieldStructName(int field) = 0;
00217
00224 virtual void *getFieldStructPointer(int field, int i) = 0;
00226 };
00227
00228
00236 class SIM_API sFieldWrapper
00237 {
00238 public:
00244 sFieldWrapper() {}
00245
00249 virtual ~sFieldWrapper() {}
00250
00255 virtual const char *fieldType() = 0;
00256
00264 virtual void getAsString(char *buf, int bufsize) = 0;
00265
00273 virtual void setAsString(const char *value) = 0;
00274 };
00275
00276 #endif
00277