00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00020 #ifndef FALCON_REFLECTION_FUNC_H
00021 #define FALCON_REFLECTION_FUNC_H
00022
00023 #include <falcon/setup.h>
00024
00025 namespace Falcon
00026 {
00027
00028 class CoreObject;
00029 class Item;
00030
00031 struct PropEntry;
00032
00036 typedef enum {
00037 e_reflectNone = 0,
00038 e_reflectBool,
00039 e_reflectByte,
00040 e_reflectChar,
00041 e_reflectShort,
00042 e_reflectUShort,
00043 e_reflectInt,
00044 e_reflectUInt,
00045 e_reflectLong,
00046 e_reflectULong,
00047 e_reflectLL,
00048 e_reflectULL,
00049 e_reflectFloat,
00050 e_reflectDouble,
00051 e_reflectFunc,
00052 e_reflectSetGet
00053 } t_reflection;
00054
00081 typedef void (*reflectionFunc)(CoreObject *instance, void *user_data, Item &property, const PropEntry& entry );
00082 typedef void reflectionFuncDecl(CoreObject *instance, void *user_data, Item &property, const PropEntry& entry );
00083
00084 }
00085
00101 #define FALCON_REFLECT_STRING_FROM( obj, accessor ) \
00102 if( ! property.isString() )\
00103 property = new CoreString( obj->accessor() );\
00104 else\
00105 property.asString()->bufferize( obj->accessor() );
00106
00115 #define FALCON_REFLECT_STRING_TO( obj, accessor ) \
00116 if ( ! property.isString() ) {\
00117 throw new ParamError( ErrorParam( e_inv_params ).extra( "S" ) );\
00118 }\
00119 obj->accessor( *property.asString() );\
00120
00121
00129 #define FALCON_REFLECT_INTEGER_FROM( obj, accessor ) \
00130 property = (int64) obj->accessor();\
00131
00132
00139 #define FALCON_REFLECT_INTEGER_TO( obj, accessor ) \
00140 if ( ! property.isOrdinal() ) {\
00141 throw new ParamError( ErrorParam( e_inv_params ).extra( "N" ) );\
00142 }\
00143 obj->accessor( (uint32) property.forceInteger() );\
00144
00145
00146 #endif
00147
00148