git-svn-id: svn://db.shs.com.ru/pip@839 12ceb7fc-bf1f-11e4-8940-5bc7170c53b5
This commit is contained in:
@@ -203,13 +203,11 @@
|
||||
virtual const char * className() const {return #name;} \
|
||||
virtual const uint classNameID() const {static uint ret = __string_id(PIStringAscii(#name)); return ret;} \
|
||||
private: \
|
||||
virtual int ptrOffset() const {name * o = (name*)100; return int(llong((PIObject*)o) - llong(o));}
|
||||
|
||||
#define PIOBJECT_PARENT(name) \
|
||||
class __##name##_ParentInitializer__ { \
|
||||
virtual int ptrOffset() const {name * o = (name*)100; return int(llong((PIObject*)o) - llong(o));} \
|
||||
class __BaseInitializer__ { \
|
||||
public: \
|
||||
__##name##_ParentInitializer__() { \
|
||||
uint pid = name::__classNameIDS(); \
|
||||
__BaseInitializer__() { \
|
||||
uint pid = PIObject::__classNameIDS(); \
|
||||
if (pid == 0) return; \
|
||||
uint id = __classNameIDS(); \
|
||||
PIMutexLocker ml(__meta_mutex()); \
|
||||
@@ -220,11 +218,30 @@
|
||||
__MetaData & eh(__meta_data()[id]); \
|
||||
eh.eh_set << ehp.eh_set; \
|
||||
eh.eh_func << ehp.eh_func; \
|
||||
eh.addScope(__classNameS()); \
|
||||
} \
|
||||
}; \
|
||||
__BaseInitializer__ __base_init__;
|
||||
|
||||
#define PIOBJECT_PARENT(name) \
|
||||
class __ParentInitializer__ { \
|
||||
public: \
|
||||
__ParentInitializer__() { \
|
||||
uint pid = name::__classNameIDS(); \
|
||||
if (pid == 0) return; \
|
||||
uint id = __classNameIDS(); \
|
||||
PIMutexLocker ml(__meta_mutex()); \
|
||||
__meta_data()[pid]; \
|
||||
__MetaData & eh(__meta_data()[id]); \
|
||||
if (eh.scope_id.contains(pid)) return; \
|
||||
__MetaData & ehp(__meta_data()[pid]); \
|
||||
eh.eh_set << ehp.eh_set; \
|
||||
eh.eh_func << ehp.eh_func; \
|
||||
eh.scope_list = ehp.scope_list; \
|
||||
eh.addScope(__classNameS()); \
|
||||
} \
|
||||
}; \
|
||||
__##name##_ParentInitializer__ __##name##_parent_init__; \
|
||||
__ParentInitializer__ __parent_init__; \
|
||||
public: \
|
||||
virtual const char * parentClassName() const {return #name;} \
|
||||
typedef name __Parent__; \
|
||||
@@ -749,8 +766,9 @@ public:
|
||||
};
|
||||
struct __MetaData {
|
||||
__MetaData() {scope_list << PIStringAscii("PIObject");}
|
||||
void addScope(const PIString & s) {if (!scope_list.contains(s)) scope_list << s;}
|
||||
void addScope(const PIString & s);
|
||||
PIStringList scope_list;
|
||||
PISet<uint> scope_id;
|
||||
PISet<const void * > eh_set;
|
||||
PIMap<const void * , __MetaFunc> eh_func;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user