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