1
This commit is contained in:
parent
966f7119e7
commit
d33036398d
51
a8/reflect.h
51
a8/reflect.h
@ -1,9 +1,21 @@
|
||||
#pragma once
|
||||
|
||||
#include <assert.h>
|
||||
#include <type_traits>
|
||||
|
||||
namespace a8
|
||||
{
|
||||
|
||||
namespace reflect
|
||||
{
|
||||
class Class;
|
||||
}
|
||||
|
||||
struct ReflectibleObject
|
||||
{
|
||||
a8::reflect::Class *metaclass = NULL;
|
||||
};
|
||||
|
||||
namespace reflect
|
||||
{
|
||||
|
||||
@ -13,10 +25,11 @@ namespace a8
|
||||
ET_UINT32 = 2,
|
||||
ET_INT64 = 3,
|
||||
ET_UINT64 = 4,
|
||||
ET_DOUBLE = 5,
|
||||
ET_STRING = 6,
|
||||
ET_CLASS = 7,
|
||||
ET_INTERFACE = 8,
|
||||
ET_FLOAT = 5,
|
||||
ET_DOUBLE = 6,
|
||||
ET_STRING = 7,
|
||||
ET_CLASS = 8,
|
||||
ET_INTERFACE = 9,
|
||||
};
|
||||
|
||||
enum FieldSubType
|
||||
@ -80,6 +93,26 @@ namespace a8
|
||||
return tag_;
|
||||
}
|
||||
|
||||
void SetSimpleField(
|
||||
int fieldidx,
|
||||
const char* fieldname,
|
||||
int type,
|
||||
int offset
|
||||
)
|
||||
{
|
||||
SetField(fieldidx,
|
||||
fieldname,
|
||||
type,
|
||||
a8::reflect::EST_SIMPLE,
|
||||
offset,
|
||||
nullptr,
|
||||
nullptr,
|
||||
nullptr,
|
||||
nullptr,
|
||||
nullptr,
|
||||
nullptr);
|
||||
}
|
||||
|
||||
void SetField(int fieldidx,
|
||||
const char* fieldname,
|
||||
int type,
|
||||
@ -197,7 +230,7 @@ namespace a8
|
||||
|
||||
#define BEGIN_MSG_CLASS(classname, fieldnum) \
|
||||
{ \
|
||||
a8::reflect::Class *metaclass = new a8::reflect::Class(#classname, fieldnum, classname::CLSID); \
|
||||
a8::reflect::Class *metaclass = new a8::reflect::Class(#classname, fieldnum, 0); \
|
||||
metaclass->create =&a8::reflect::_create<classname>; \
|
||||
metaclass->destroy =&a8::reflect::_destroy<classname>; \
|
||||
metaclass->copy =&a8::reflect::_copy<classname>; \
|
||||
@ -209,13 +242,13 @@ namespace a8
|
||||
|
||||
#define BEGIN_MFMSG_CLASS(classname, fieldnum) \
|
||||
{ \
|
||||
a8::reflect::Class *metaclass = new a8::reflect::Class(#classname, fieldnum, classname::CLSID); \
|
||||
a8::reflect::Class *metaclass = new a8::reflect::Class(#classname, fieldnum, 0); \
|
||||
metaclass->create =&a8::reflect::_create<classname>; \
|
||||
metaclass->destroy =&a8::reflect::_destroy<classname>; \
|
||||
metaclass->copy =&a8::reflect::_copy<classname>; \
|
||||
classname::__metaclass = metaclass; \
|
||||
assert(classname::CLSID < 1024); \
|
||||
s_mfclass_metaclasses[classname::CLSID] = metaclass; \
|
||||
/*classname::__metaclass = metaclass;*/ \
|
||||
/*assert(classname::CLSID < 1024);*/ \
|
||||
/*s_mfclass_metaclasses[0] = metaclass;*/ \
|
||||
classname p;
|
||||
|
||||
#define END_MFMSG_CLASS() \
|
||||
|
@ -40,4 +40,8 @@ namespace a8
|
||||
const int TIMER_DESTORY_EVENT = 3;
|
||||
const int TIMER_USER_EVENT = 66;
|
||||
|
||||
namespace reflect
|
||||
{
|
||||
class Class;
|
||||
}
|
||||
};
|
||||
|
Loading…
x
Reference in New Issue
Block a user