00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027 #ifndef INC_SML_CLASSMEMBER_H
00028 #define INC_SML_CLASSMEMBER_H
00029
00030 #ifndef INC_MI32_STDDEFNS_H
00031 #include <mi32/stddefns.h>
00032 #endif
00033
00034 #ifndef INC_SML_STYPE_H
00035 #include <sml/stype.h>
00036 #endif
00037
00038 namespace SML {
00039
00040 union ARG;
00041 class FLAG;
00042 class FUNC;
00043 class CLASS;
00044 class CONTEXT;
00045
00046 #ifdef RVCSYSDLL
00047 #define RVCSYSLIBEXPORT MI_DLLEXPORT
00048 #define RVCSYSLIBCLASSEXPORT MI_DLLCLASSEXPORT
00049 #else
00050 #define RVCSYSLIBEXPORT MI_DLLIMPORT
00051 #define RVCSYSLIBCLASSEXPORT MI_DLLCLASSIMPORT
00052 #endif
00053
00054 class CLASSMEMBER {
00055 public:
00056
00059 enum TYPE {
00060 TYPE_ByteBoolean = 1,
00061 TYPE_IntBoolean = 2,
00062 TYPE_INT8 = 3,
00063 TYPE_UINT8 = 4,
00064 TYPE_INT16 = 5,
00065 TYPE_UINT16 = 6,
00066 TYPE_INT32 = 7,
00067 TYPE_UINT32 = 8,
00068 TYPE_Float = 9,
00069 TYPE_Double = 10,
00070 TYPE_String = 11,
00071 TYPE_Unicode = 12,
00072 TYPE_Bool = 19,
00074 TYPE_MISTRING = 50,
00075 TYPE_Enum = 51
00076 };
00077
00078 const char *name;
00079 SMLSTYPE type;
00080 void (*ReadFunc)(CONTEXT *context, CLASSMEMBER *, void *obj, ARG *ret);
00081 void (*WriteFunc)(CONTEXT *context, CLASSMEMBER *, void *obj, ARG *data);
00082 FUNC *func;
00083 const char *ClassName;
00084 UINT32 offset;
00085 int subtype;
00086 int size;
00087 const char *ResourceType;
00088 const char *ResourceName;
00089 FLAG *smlflags;
00090 const char *description;
00091 CLASS *MemberClass;
00092 CLASS *ThisClass;
00093 };
00094
00095
00096
00097
00098
00099
00100
00148 RVCSYSLIBEXPORT void CLASSReadSimple (
00149 CONTEXT *,
00150 CLASSMEMBER *,
00151 void *,
00152 ARG *
00153 );
00154
00172 RVCSYSLIBEXPORT void CLASSWriteSimple (
00173 CONTEXT *,
00174 CLASSMEMBER *,
00175 void *,
00176 ARG *
00177 );
00178
00198 RVCSYSLIBEXPORT void CLASSReadOnly (
00199 CONTEXT *,
00200 CLASSMEMBER *,
00201 void *,
00202 ARG *
00203 );
00204
00208 void CLASSReadPassThrough (CONTEXT *, CLASSMEMBER *, void *vdata, ARG *ret);
00209
00222 RVCSYSLIBEXPORT void CLASSReadULONGFlag (
00223 CONTEXT *,
00224 CLASSMEMBER *,
00225 void *,
00226 ARG *
00227 );
00228
00233 RVCSYSLIBEXPORT void CLASSWriteULONGFlag (
00234 CONTEXT *,
00235 CLASSMEMBER *,
00236 void *,
00237 ARG *
00238 );
00239
00251 void CLASSWriteTableNum (CONTEXT *context, CLASSMEMBER *member, void *vdata, ARG *arg);
00252
00254
00255
00261
00303 #define SMLCLASSMEMBER_NUM_RO(smlname, Class, membername, subtype, desc) \
00304 { smlname, STYPE_Num, SMLCLASSReadSimple, NULL, NULL, NULL, offsetof(Class, membername), subtype, 0, NULL, NULL, NULL, desc}
00305
00306 #define SMLCLASSMEMBER_NUM_RW(smlname, Class, membername, subtype, desc) \
00307 { smlname, STYPE_Num, SMLCLASSReadSimple, SMLCLASSWriteSimple, NULL, NULL, offsetof(Class, membername), subtype, 0, NULL, NULL, NULL, desc}
00308
00310 #define SMLCLASSMEMBER_STR_PTR_RO(smlname, Class, membername, subtype, desc) \
00311 { smlname, STYPE_String, SMLCLASSReadSimple, NULL, NULL, NULL, offsetof(Class, membername), subtype, 0, NULL, NULL, NULL, desc}
00312
00313 #define SMLCLASSMEMBER_STR_PTR_RW(smlname, Class, membername, subtype, desc) \
00314 { smlname, STYPE_String, SMLCLASSReadSimple, SMLCLASSWriteSimple, NULL, NULL, offsetof(Class, membername), subtype, 0, NULL, NULL, NULL, desc}
00315
00317 #define SMLCLASSMEMBER_STR_FIXEDSIZE_RO(smlname, Class, membername, subtype, sizeOf, desc) \
00318 { smlname, STYPE_String, SMLCLASSReadSimple, NULL, NULL, NULL, offsetof(Class, membername), subtype, sizeOf, NULL, NULL, NULL, desc}
00319
00320 #define SMLCLASSMEMBER_STR_FIXEDSIZE_RW(smlname, Class, membername, subtype, sizeOf, desc) \
00321 { smlname, STYPE_String, SMLCLASSReadSimple, SMLCLASSWriteSimple, NULL, NULL, offsetof(Class, membername), subtype, sizeOf, NULL, NULL, NULL, desc}
00322
00324 #define SMLCLASSMEMBER_STRUCT_PTR_RO(smlname, Class, membername, classname, desc) \
00325 { smlname, STYPE_ClassRef, SMLCLASSReadSimple, NULL, NULL, classname, offsetof(Class::membername), 0, 0, NULL, NULL, NULL, desc}
00326
00327 #define SMLCLASSMEMBER_STRUCT_PTR_RW(smlname, Class, membername, classname, desc) \
00328 { smlname, STYPE_ClassRef, SMLCLASSReadSimple, SMLCLASSWriteSimple, NULL, classname, offsetof(Class::membername), 0, 0, NULL, NULL, NULL, desc}
00329
00331 #define SMLCLASSMEMBER_STRUCT_INLINE_RO(smlname, Class, membername, classname, desc) \
00332 { smlname, STYPE_ClassRef, SMLCLASSReadSimple, SMLCLASSReadOnly, NULL, classname, offsetof(Class, membername), 1, 0, NULL, NULL, NULL, desc}
00333
00334 #define SMLCLASSMEMBER_STRUCT_INLINE_RW(smlname, Class, membername, classname, desc) \
00335 { smlname, STYPE_ClassRef, SMLCLASSReadSimple, SMLCLASSWriteSimple, NULL, classname, offsetof(Class, membername), 1, 0, NULL, NULL, NULL, desc}
00336
00338 #define SMLCLASSMEMBER_UINT32FLAG_RO(smlname, Class, membername, flagval, invert, desc) \
00339 { smlname, STYPE_Num, SMLCLASSReadULONGFlag, NULL, NULL, classname, offsetof(Class, membername), flagval, invert, NULL, NULL, NULL, desc}
00340
00341 #define SMLCLASSMEMBER_UINT32FLAG_RW(smlname, Class, membername, flagval, invert, desc) \
00342 { smlname, STYPE_Num, SMLCLASSReadULONGFlag, SMLCLASSWriteULONGFlag, NULL, classname, offsetof(Class, membername), flagval, invert, NULL, NULL, NULL, desc}
00343
00345 #define SMLCLASSMEMBER_SMLFLAG_RO(smlname, Class, membername, subtype, smlflags, mask, desc) \
00346 { smlname, STYPE_String, SMLCLASSReadSimple, NULL, NULL, NULL, offsetof(Class, membername), subtype, size, NULL, NULL, smlflags, desc}
00347
00348 #define SMLCLASSMEMBER_SMLFLAG_RW(smlname, Class, membername, subtype, smlflags, mask, desc) \
00349 { smlname, STYPE_String, SMLCLASSReadSimple, SMLCLASSWriteSimple, NULL, NULL, offsetof(Class, membername), subtype, mask, NULL, NULL, smlflags, desc}
00350
00352 #define SMLCLASSMEMBER_ENUM_RO(smlname, Class, membername, subtype, enumname, mask, desc) \
00353 { smlname, STYPE_Enum, SMLCLASSReadSimple, NULL, NULL, NULL, offsetof(Class, membername), subtype, size, NULL, enumname, NULL, desc}
00354
00355 #define SMLCLASSMEMBER_ENUM_RW(smlname, Class, membername, subtype, enumname, mask, desc) \
00356 { smlname, STYPE_Enum, SMLCLASSReadSimple, SMLCLASSWriteSimple, NULL, NULL, offsetof(Class, membername), subtype, mask, NULL, enumname, NULL, desc}
00357
00360 #define SMLCLASSMETHOD(func) { #func, STYPE_Constant, NULL, NULL, &FUNC_##func }
00361
00362 }
00363
00364
00365 typedef SML::CLASSMEMBER SMLCLASSMEMBER;
00366
00367 #define SMLCLASSWriteTableNum SML::CLASSWriteTableNum
00368 #define SMLCLASSReadSimple SML::CLASSReadSimple
00369 #define SMLCLASSWriteSimple SML::CLASSWriteSimple
00370 #define SMLCLASSReadOnly SML::CLASSReadOnly
00371 #define SMLCLASSReadPassThrough SML::CLASSReadPassThrough
00372 #define SMLCLASSReadULONGFlag SML::CLASSReadULONGFlag
00373 #define SMLCLASSWriteULONGFlag SML::CLASSWriteULONGFlag
00374
00375
00376 #undef RVCSYSLIBEXPORT
00377 #undef RVCSYSLIBCLASSEXPORT
00378
00379 #endif // INC_SML_CLASSMEMBER_H
00380
00381