git-svn-id: svn://db.shs.com.ru/pip@839 12ceb7fc-bf1f-11e4-8940-5bc7170c53b5
This commit is contained in:
30
main.cpp
30
main.cpp
@@ -47,7 +47,7 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
class TestSnd: public PIObject {
|
class TestSnd: public PIObject {
|
||||||
PIOBJECT_SUBCLASS(TestSnd, PIObject)
|
PIOBJECT(TestSnd)
|
||||||
public:
|
public:
|
||||||
EVENT(reinitSpec)
|
EVENT(reinitSpec)
|
||||||
EVENT(coeffsChanged)
|
EVENT(coeffsChanged)
|
||||||
@@ -58,7 +58,22 @@ public:
|
|||||||
EVENT(playerValuesReceived)
|
EVENT(playerValuesReceived)
|
||||||
EVENT(calculate)
|
EVENT(calculate)
|
||||||
EVENT(autostart)
|
EVENT(autostart)
|
||||||
EVENT(syncOff)
|
EVENT(syncOff);
|
||||||
|
};
|
||||||
|
|
||||||
|
class CA: public PIObject {
|
||||||
|
PIOBJECT(CA)
|
||||||
|
EVENT(evA)
|
||||||
|
};
|
||||||
|
|
||||||
|
class CB: public CA {
|
||||||
|
PIOBJECT_SUBCLASS(CB, CA)
|
||||||
|
EVENT(evB)
|
||||||
|
};
|
||||||
|
|
||||||
|
class CC: public CB {
|
||||||
|
PIOBJECT_SUBCLASS(CC, CB)
|
||||||
|
EVENT(evC)
|
||||||
};
|
};
|
||||||
|
|
||||||
#define CONN(sn) CONNECTU(snd, sn, rec, sn)
|
#define CONN(sn) CONNECTU(snd, sn, rec, sn)
|
||||||
@@ -91,7 +106,7 @@ int main(int argc, char * argv[]) {
|
|||||||
CONN(syncOff);
|
CONN(syncOff);
|
||||||
|
|
||||||
// 0.6 us on call
|
// 0.6 us on call
|
||||||
for (int j = 0; j < 10; ++j) {
|
/*for (int j = 0; j < 10; ++j) {
|
||||||
tm.reset();
|
tm.reset();
|
||||||
for (int i = 0; i < 10000; ++i) {
|
for (int i = 0; i < 10000; ++i) {
|
||||||
snd->reinitSpec();
|
snd->reinitSpec();
|
||||||
@@ -100,13 +115,16 @@ int main(int argc, char * argv[]) {
|
|||||||
}
|
}
|
||||||
double el = tm.elapsed_m();
|
double el = tm.elapsed_m();
|
||||||
piCout << el;
|
piCout << el;
|
||||||
}
|
}*/
|
||||||
|
piCout << "****";
|
||||||
//snd->dump();
|
PIPeer().dump();
|
||||||
|
piCout << "----";
|
||||||
|
|
||||||
delete snd;
|
delete snd;
|
||||||
delete rec;
|
delete rec;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
|
||||||
PIString s;
|
PIString s;
|
||||||
s = "gafaffaf";
|
s = "gafaffaf";
|
||||||
piCout << s;
|
piCout << s;
|
||||||
|
|||||||
@@ -541,6 +541,7 @@ bool PIObject::isPIObject(const PIObject * o) {
|
|||||||
void PIObject::dump(const PIString & line_prefix) const {
|
void PIObject::dump(const PIString & line_prefix) const {
|
||||||
//printf("dump %s \"%s\"\n", className(), name().data());
|
//printf("dump %s \"%s\"\n", className(), name().data());
|
||||||
PICout(PICoutManipulators::AddNewLine) << line_prefix << "class " << className() << " (" << (const void*)this << ", \"" << name() << "\") {";
|
PICout(PICoutManipulators::AddNewLine) << line_prefix << "class " << className() << " (" << (const void*)this << ", \"" << name() << "\") {";
|
||||||
|
PICout(PICoutManipulators::AddNewLine) << line_prefix << " scope: " << scopeList().join(" -> ");
|
||||||
PICout(PICoutManipulators::AddNewLine) << line_prefix << " properties {";
|
PICout(PICoutManipulators::AddNewLine) << line_prefix << " properties {";
|
||||||
PICout(PICoutManipulators::AddNewLine) << line_prefix << " count: " << properties_.size_s();
|
PICout(PICoutManipulators::AddNewLine) << line_prefix << " count: " << properties_.size_s();
|
||||||
//printf("dump %d properties\n", properties_.size());
|
//printf("dump %d properties\n", properties_.size());
|
||||||
@@ -621,3 +622,13 @@ bool dumpApplicationToFile(const PIString & path) {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void PIObject::__MetaData::addScope(const PIString & s) {
|
||||||
|
if (!scope_list.contains(s)) {
|
||||||
|
scope_list << s;
|
||||||
|
scope_id << __string_id(s);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -203,13 +203,11 @@
|
|||||||
virtual const char * className() const {return #name;} \
|
virtual const char * className() const {return #name;} \
|
||||||
virtual const uint classNameID() const {static uint ret = __string_id(PIStringAscii(#name)); return ret;} \
|
virtual const uint classNameID() const {static uint ret = __string_id(PIStringAscii(#name)); return ret;} \
|
||||||
private: \
|
private: \
|
||||||
virtual int ptrOffset() const {name * o = (name*)100; return int(llong((PIObject*)o) - llong(o));}
|
virtual int ptrOffset() const {name * o = (name*)100; return int(llong((PIObject*)o) - llong(o));} \
|
||||||
|
class __BaseInitializer__ { \
|
||||||
#define PIOBJECT_PARENT(name) \
|
|
||||||
class __##name##_ParentInitializer__ { \
|
|
||||||
public: \
|
public: \
|
||||||
__##name##_ParentInitializer__() { \
|
__BaseInitializer__() { \
|
||||||
uint pid = name::__classNameIDS(); \
|
uint pid = PIObject::__classNameIDS(); \
|
||||||
if (pid == 0) return; \
|
if (pid == 0) return; \
|
||||||
uint id = __classNameIDS(); \
|
uint id = __classNameIDS(); \
|
||||||
PIMutexLocker ml(__meta_mutex()); \
|
PIMutexLocker ml(__meta_mutex()); \
|
||||||
@@ -220,11 +218,30 @@
|
|||||||
__MetaData & eh(__meta_data()[id]); \
|
__MetaData & eh(__meta_data()[id]); \
|
||||||
eh.eh_set << ehp.eh_set; \
|
eh.eh_set << ehp.eh_set; \
|
||||||
eh.eh_func << ehp.eh_func; \
|
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.scope_list = ehp.scope_list; \
|
||||||
eh.addScope(__classNameS()); \
|
eh.addScope(__classNameS()); \
|
||||||
} \
|
} \
|
||||||
}; \
|
}; \
|
||||||
__##name##_ParentInitializer__ __##name##_parent_init__; \
|
__ParentInitializer__ __parent_init__; \
|
||||||
public: \
|
public: \
|
||||||
virtual const char * parentClassName() const {return #name;} \
|
virtual const char * parentClassName() const {return #name;} \
|
||||||
typedef name __Parent__; \
|
typedef name __Parent__; \
|
||||||
@@ -749,8 +766,9 @@ public:
|
|||||||
};
|
};
|
||||||
struct __MetaData {
|
struct __MetaData {
|
||||||
__MetaData() {scope_list << PIStringAscii("PIObject");}
|
__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;
|
PIStringList scope_list;
|
||||||
|
PISet<uint> scope_id;
|
||||||
PISet<const void * > eh_set;
|
PISet<const void * > eh_set;
|
||||||
PIMap<const void * , __MetaFunc> eh_func;
|
PIMap<const void * , __MetaFunc> eh_func;
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user