git-svn-id: svn://db.shs.com.ru/pip@838 12ceb7fc-bf1f-11e4-8940-5bc7170c53b5
This commit is contained in:
168
main.cpp
168
main.cpp
@@ -1,10 +1,112 @@
|
|||||||
#include "pip.h"
|
#include "pip.h"
|
||||||
|
#include "piintrospection_server.h"
|
||||||
|
#include "piintrospection_containers_p.h"
|
||||||
|
//#include <winsock2.h>
|
||||||
|
|
||||||
|
class CL: public PIObject {
|
||||||
|
PIOBJECT(CL)
|
||||||
|
public:
|
||||||
|
EVENT_HANDLER1(void, nc, PIEthernet * , client) {
|
||||||
|
piCout << "client" << client;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
PIKbdListener kbd(0, 0, false);
|
||||||
|
#include <typeinfo>
|
||||||
|
#define PIIS_TYPENAME(t) typeid(t).name()
|
||||||
|
|
||||||
|
template<typename T> class Name
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
static const char * name() {return PIIS_TYPENAME(T);}
|
||||||
|
};
|
||||||
|
|
||||||
|
PISystemMonitor sys_mon;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class TestRec: public PIObject {
|
||||||
|
PIOBJECT(TestRec)
|
||||||
|
public:
|
||||||
|
EVENT_HANDLER(void, reinitSpec) {piCout << "reinitSpec";int a = 10; (void*)&a;}
|
||||||
|
|
||||||
|
EVENT_HANDLER(void, coeffsChanged) {piCout << "coeffsChanged";}
|
||||||
|
EVENT_HANDLER(void, guiAboutSend) {piCout << "guiAboutSend";}
|
||||||
|
EVENT_HANDLER(void, guiAfterSend) {piCout << "guiAfterSend";}
|
||||||
|
EVENT_HANDLER(void, guiReceived) {piCout << "guiReceived";}
|
||||||
|
|
||||||
|
EVENT_HANDLER(void, playerReceived) {piCout << "playerReceived";int a = 10; (void*)&a;}
|
||||||
|
|
||||||
|
EVENT_HANDLER(void, playerValuesReceived) {piCout << "playerValuesReceived";}
|
||||||
|
EVENT_HANDLER(void, calculate) {piCout << "calculate";}
|
||||||
|
EVENT_HANDLER(void, autostart) {piCout << "autostart";}
|
||||||
|
|
||||||
|
EVENT_HANDLER(void, syncOff) {piCout << "syncOff";int a = 10; (void*)&a;}
|
||||||
|
|
||||||
|
EVENT_HANDLER(void, del) {piCout << "DEL";}
|
||||||
|
};
|
||||||
|
|
||||||
|
class TestSnd: public PIObject {
|
||||||
|
PIOBJECT_SUBCLASS(TestSnd, PIObject)
|
||||||
|
public:
|
||||||
|
EVENT(reinitSpec)
|
||||||
|
EVENT(coeffsChanged)
|
||||||
|
EVENT(guiAboutSend)
|
||||||
|
EVENT(guiAfterSend)
|
||||||
|
EVENT(guiReceived)
|
||||||
|
EVENT(playerReceived)
|
||||||
|
EVENT(playerValuesReceived)
|
||||||
|
EVENT(calculate)
|
||||||
|
EVENT(autostart)
|
||||||
|
EVENT(syncOff)
|
||||||
|
};
|
||||||
|
|
||||||
|
#define CONN(sn) CONNECTU(snd, sn, rec, sn)
|
||||||
|
|
||||||
int main(int argc, char * argv[]) {
|
int main(int argc, char * argv[]) {
|
||||||
PIMap<int, PIVector<int> > x;
|
//sys_mon.startOnSelf();
|
||||||
x[3] << 5;
|
|
||||||
piCout << x;
|
PITimeMeasurer tm;
|
||||||
x.remove(3);
|
|
||||||
|
TestRec * rec = 0;
|
||||||
|
TestSnd * snd = 0;
|
||||||
|
|
||||||
|
for (int i = 0; i < 1; ++i) {
|
||||||
|
if (rec) delete rec;
|
||||||
|
if (snd) delete snd;
|
||||||
|
rec = new TestRec();
|
||||||
|
snd = new TestSnd();
|
||||||
|
}
|
||||||
|
|
||||||
|
CONNECTU(snd, deleted, rec, del)
|
||||||
|
CONN(reinitSpec)
|
||||||
|
CONN(coeffsChanged)
|
||||||
|
CONN(guiAboutSend)
|
||||||
|
CONN(guiAfterSend)
|
||||||
|
CONN(guiReceived)
|
||||||
|
CONN(playerReceived)
|
||||||
|
CONN(playerValuesReceived)
|
||||||
|
CONN(calculate)
|
||||||
|
CONN(autostart)
|
||||||
|
CONN(syncOff);
|
||||||
|
|
||||||
|
// 0.6 us on call
|
||||||
|
for (int j = 0; j < 10; ++j) {
|
||||||
|
tm.reset();
|
||||||
|
for (int i = 0; i < 10000; ++i) {
|
||||||
|
snd->reinitSpec();
|
||||||
|
snd->playerReceived();
|
||||||
|
snd->syncOff();
|
||||||
|
}
|
||||||
|
double el = tm.elapsed_m();
|
||||||
|
piCout << el;
|
||||||
|
}
|
||||||
|
|
||||||
|
//snd->dump();
|
||||||
|
|
||||||
|
delete snd;
|
||||||
|
delete rec;
|
||||||
|
|
||||||
PIString s;
|
PIString s;
|
||||||
s = "gafaffaf";
|
s = "gafaffaf";
|
||||||
piCout << s;
|
piCout << s;
|
||||||
@@ -12,4 +114,62 @@ int main(int argc, char * argv[]) {
|
|||||||
s = "dd";
|
s = "dd";
|
||||||
piCout << s;
|
piCout << s;
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
PIINTROSPECTION_START;
|
||||||
|
//uint id = standardCRC_32().calculate("6PIChar");
|
||||||
|
//PIIntrospectionContainers * ci = PIINTROSPECTION_CONTAINERS->p;
|
||||||
|
FOREVER {
|
||||||
|
piMSleep(100);
|
||||||
|
//piCout << ci->data[id].count << ci->data[id].bytes_allocated << ci->data[id].bytes_used;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
PICLI cli(argc, argv);
|
||||||
|
cli.setDebug(false);
|
||||||
|
cli.addArgument("send");
|
||||||
|
//PISystemInfo::machineID();
|
||||||
|
kbd.enableExitCapture();
|
||||||
|
kbd.start();
|
||||||
|
|
||||||
|
if (cli.hasArgument("send")) {
|
||||||
|
/*piCout << "send mode";
|
||||||
|
PIEthernet eth;
|
||||||
|
eth.setSendAddress(cli.rawArguments().back() + ":15123");
|
||||||
|
eth.open();
|
||||||
|
while (!kbd.exiting) {
|
||||||
|
eth.send(PIByteArray("test string", 12));
|
||||||
|
piMSleep(500);
|
||||||
|
}*/
|
||||||
|
PIEthernet eth(PIEthernet::TCP_Server);
|
||||||
|
eth.listen(cli.rawArguments().back() + ":15123", true);
|
||||||
|
//eth.open();
|
||||||
|
CL cl;
|
||||||
|
CONNECTU(ð, newConnection, &cl, nc);
|
||||||
|
|
||||||
|
WAIT_FOR_EXIT;
|
||||||
|
piCout << "exiting ...";
|
||||||
|
|
||||||
|
} else {
|
||||||
|
piCout << "recv mode";
|
||||||
|
PIEthernet eth(PIEthernet::TCP_Client);
|
||||||
|
//eth.setReadAddress(cli.rawArguments().back() + ":15123");
|
||||||
|
eth.startThreadedRead();
|
||||||
|
int s = eth.socket();
|
||||||
|
piCout << s;
|
||||||
|
piCout << "connect ...";
|
||||||
|
eth.connect(cli.rawArguments().back() + /*":13361"*/":15123");
|
||||||
|
piCout << "connect done" << eth.isConnected();
|
||||||
|
//fcntl(fd, F_SETFL, O_NONBLOCK);
|
||||||
|
|
||||||
|
WAIT_FOR_EXIT;
|
||||||
|
piCout << "exiting ...";
|
||||||
|
|
||||||
|
}
|
||||||
|
/*PIThread t;
|
||||||
|
t.start(10);
|
||||||
|
//WAIT_FOR_EXIT;
|
||||||
|
piSleep(20.);
|
||||||
|
t.stop(true);*/
|
||||||
|
piCout << "exit main ...";
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -182,14 +182,14 @@ PIStringList PIObject::events() {
|
|||||||
|
|
||||||
PIStringList PIObject::scopeList() const {
|
PIStringList PIObject::scopeList() const {
|
||||||
PIMutexLocker ml(__meta_mutex());
|
PIMutexLocker ml(__meta_mutex());
|
||||||
return __meta_data()[className()].scope_list;
|
return __meta_data()[classNameID()].scope_list;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
PIStringList PIObject::methodsEH() const {
|
PIStringList PIObject::methodsEH() const {
|
||||||
PIMutexLocker ml(__meta_mutex());
|
PIMutexLocker ml(__meta_mutex());
|
||||||
PIStringList ret;
|
PIStringList ret;
|
||||||
__MetaData & ehd(__meta_data()[className()]);
|
__MetaData & ehd(__meta_data()[classNameID()]);
|
||||||
piForeachC (__EHPair & eh, ehd.eh_func)
|
piForeachC (__EHPair & eh, ehd.eh_func)
|
||||||
ret << eh.second.fullFormat();
|
ret << eh.second.fullFormat();
|
||||||
return ret;
|
return ret;
|
||||||
@@ -198,7 +198,7 @@ PIStringList PIObject::methodsEH() const {
|
|||||||
|
|
||||||
bool PIObject::isMethodEHContains(const PIString & name) const {
|
bool PIObject::isMethodEHContains(const PIString & name) const {
|
||||||
PIMutexLocker ml(__meta_mutex());
|
PIMutexLocker ml(__meta_mutex());
|
||||||
__MetaData & ehd(__meta_data()[className()]);
|
__MetaData & ehd(__meta_data()[classNameID()]);
|
||||||
piForeachC (__EHPair & eh, ehd.eh_func)
|
piForeachC (__EHPair & eh, ehd.eh_func)
|
||||||
if (eh.second.func_name == name)
|
if (eh.second.func_name == name)
|
||||||
return true;
|
return true;
|
||||||
@@ -208,7 +208,7 @@ bool PIObject::isMethodEHContains(const PIString & name) const {
|
|||||||
|
|
||||||
PIString PIObject::methodEHArguments(const PIString & name) const {
|
PIString PIObject::methodEHArguments(const PIString & name) const {
|
||||||
PIMutexLocker ml(__meta_mutex());
|
PIMutexLocker ml(__meta_mutex());
|
||||||
__MetaData & ehd(__meta_data()[className()]);
|
__MetaData & ehd(__meta_data()[classNameID()]);
|
||||||
piForeachC (__EHPair & eh, ehd.eh_func)
|
piForeachC (__EHPair & eh, ehd.eh_func)
|
||||||
if (eh.second.func_name == name)
|
if (eh.second.func_name == name)
|
||||||
return eh.second.arguments();
|
return eh.second.arguments();
|
||||||
@@ -218,7 +218,7 @@ PIString PIObject::methodEHArguments(const PIString & name) const {
|
|||||||
|
|
||||||
PIString PIObject::methodEHFullFormat(const PIString & name) const {
|
PIString PIObject::methodEHFullFormat(const PIString & name) const {
|
||||||
PIMutexLocker ml(__meta_mutex());
|
PIMutexLocker ml(__meta_mutex());
|
||||||
__MetaData & ehd(__meta_data()[className()]);
|
__MetaData & ehd(__meta_data()[classNameID()]);
|
||||||
piForeachC (__EHPair & eh, ehd.eh_func)
|
piForeachC (__EHPair & eh, ehd.eh_func)
|
||||||
if (eh.second.func_name == name)
|
if (eh.second.func_name == name)
|
||||||
return eh.second.fullFormat();
|
return eh.second.fullFormat();
|
||||||
@@ -233,7 +233,7 @@ PIString PIObject::methodEHFromAddr(const void * addr) const {
|
|||||||
|
|
||||||
PIVector<PIObject::__MetaFunc> PIObject::findEH(const PIString & name) const {
|
PIVector<PIObject::__MetaFunc> PIObject::findEH(const PIString & name) const {
|
||||||
PIVector<__MetaFunc> ret;
|
PIVector<__MetaFunc> ret;
|
||||||
__MetaData & ehd(__meta_data()[className()]);
|
__MetaData & ehd(__meta_data()[classNameID()]);
|
||||||
piForeachC (__EHPair & eh, ehd.eh_func)
|
piForeachC (__EHPair & eh, ehd.eh_func)
|
||||||
if (eh.second.func_name == name)
|
if (eh.second.func_name == name)
|
||||||
ret << eh.second;
|
ret << eh.second;
|
||||||
@@ -243,7 +243,7 @@ PIVector<PIObject::__MetaFunc> PIObject::findEH(const PIString & name) const {
|
|||||||
|
|
||||||
PIObject::__MetaFunc PIObject::methodEH(const void * addr) const {
|
PIObject::__MetaFunc PIObject::methodEH(const void * addr) const {
|
||||||
PIMutexLocker ml(__meta_mutex());
|
PIMutexLocker ml(__meta_mutex());
|
||||||
return __meta_data()[className()].eh_func.value(addr);
|
return __meta_data()[classNameID()].eh_func.value(addr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -418,12 +418,24 @@ PIMutex & PIObject::__meta_mutex() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
PIMap<PIString, PIObject::__MetaData> & PIObject::__meta_data() {
|
PIMap<uint, PIObject::__MetaData> & PIObject::__meta_data() {
|
||||||
static PIMap<PIString, PIObject::__MetaData> ret;
|
static PIMap<uint, PIObject::__MetaData> ret;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
CRC_32 & PIObject::__meta_crc() {
|
||||||
|
static CRC_32 ret = standardCRC_32();
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
uint PIObject::__string_id(const PIString & s) {
|
||||||
|
if (s.isEmpty()) return 0;
|
||||||
|
return __meta_crc().calculate(s.toByteArray());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void PIObject::callQueuedEvents() {
|
void PIObject::callQueuedEvents() {
|
||||||
mutex_queue.lock();
|
mutex_queue.lock();
|
||||||
PIVector<__QueuedEvent> qe = events_queue;
|
PIVector<__QueuedEvent> qe = events_queue;
|
||||||
@@ -538,7 +550,7 @@ void PIObject::dump(const PIString & line_prefix) const {
|
|||||||
//printf("dump %d properties ok\n", properties_.size());
|
//printf("dump %d properties ok\n", properties_.size());
|
||||||
PICout(PICoutManipulators::AddNewLine) << line_prefix << " }";
|
PICout(PICoutManipulators::AddNewLine) << line_prefix << " }";
|
||||||
PICout(PICoutManipulators::AddNewLine) << line_prefix << " methods {";
|
PICout(PICoutManipulators::AddNewLine) << line_prefix << " methods {";
|
||||||
__MetaData & ehd(__meta_data()[className()]);
|
__MetaData & ehd(__meta_data()[classNameID()]);
|
||||||
PICout(PICoutManipulators::AddNewLine) << line_prefix << " count: " << ehd.eh_func.size_s();
|
PICout(PICoutManipulators::AddNewLine) << line_prefix << " count: " << ehd.eh_func.size_s();
|
||||||
//printf("dump %d methods\n", ehd.eh_func.size());
|
//printf("dump %d methods\n", ehd.eh_func.size());
|
||||||
piForeachC (__EHPair & eh, ehd.eh_func) {
|
piForeachC (__EHPair & eh, ehd.eh_func) {
|
||||||
|
|||||||
@@ -30,6 +30,7 @@
|
|||||||
#include "pimutex.h"
|
#include "pimutex.h"
|
||||||
#include "piset.h"
|
#include "piset.h"
|
||||||
#include "piqueue.h"
|
#include "piqueue.h"
|
||||||
|
#include "picrc.h"
|
||||||
|
|
||||||
|
|
||||||
#ifdef DOXYGEN
|
#ifdef DOXYGEN
|
||||||
@@ -198,7 +199,9 @@
|
|||||||
typedef name __PIObject__; \
|
typedef name __PIObject__; \
|
||||||
public: \
|
public: \
|
||||||
static const PIString __classNameS() {return PIStringAscii(#name);} \
|
static const PIString __classNameS() {return PIStringAscii(#name);} \
|
||||||
|
static const uint __classNameIDS() {static uint ret = __string_id(PIStringAscii(#name)); return ret;} \
|
||||||
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;} \
|
||||||
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));}
|
||||||
|
|
||||||
@@ -206,14 +209,15 @@
|
|||||||
class __##name##_ParentInitializer__ { \
|
class __##name##_ParentInitializer__ { \
|
||||||
public: \
|
public: \
|
||||||
__##name##_ParentInitializer__() { \
|
__##name##_ParentInitializer__() { \
|
||||||
PIString pn(name::__classNameS()); \
|
uint pid = name::__classNameIDS(); \
|
||||||
if (pn.isEmpty()) return; \
|
if (pid == 0) return; \
|
||||||
|
uint id = __classNameIDS(); \
|
||||||
PIMutexLocker ml(__meta_mutex()); \
|
PIMutexLocker ml(__meta_mutex()); \
|
||||||
if (__meta_data().contains(__classNameS())) return; \
|
if (__meta_data().contains(id)) return; \
|
||||||
__meta_data()[pn]; \
|
__meta_data()[pid]; \
|
||||||
__meta_data()[__classNameS()]; \
|
__meta_data()[id]; \
|
||||||
__MetaData & ehp(__meta_data()[pn]); \
|
__MetaData & ehp(__meta_data()[pid]); \
|
||||||
__MetaData & eh(__meta_data()[__classNameS()]); \
|
__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.scope_list = ehp.scope_list; \
|
eh.scope_list = ehp.scope_list; \
|
||||||
@@ -234,7 +238,7 @@
|
|||||||
public: \
|
public: \
|
||||||
__##name##0_Initializer__() { \
|
__##name##0_Initializer__() { \
|
||||||
PIMutexLocker ml(__meta_mutex()); \
|
PIMutexLocker ml(__meta_mutex()); \
|
||||||
__MetaData & eh(__meta_data()[__classNameS()]); \
|
__MetaData & eh(__meta_data()[__classNameIDS()]); \
|
||||||
void * fp = (void*)(ret(*)(void*))__stat_eh_##name##__; \
|
void * fp = (void*)(ret(*)(void*))__stat_eh_##name##__; \
|
||||||
void * fpV = fp; \
|
void * fpV = fp; \
|
||||||
if (eh.eh_set[fp]) return; \
|
if (eh.eh_set[fp]) return; \
|
||||||
@@ -254,7 +258,7 @@
|
|||||||
public: \
|
public: \
|
||||||
__##name##1##n0##_Initializer__() { \
|
__##name##1##n0##_Initializer__() { \
|
||||||
PIMutexLocker ml(__meta_mutex()); \
|
PIMutexLocker ml(__meta_mutex()); \
|
||||||
__MetaData & eh(__meta_data()[__classNameS()]); \
|
__MetaData & eh(__meta_data()[__classNameIDS()]); \
|
||||||
void * fp = (void*)(ret(*)(void*, a0))__stat_eh_##name##__; \
|
void * fp = (void*)(ret(*)(void*, a0))__stat_eh_##name##__; \
|
||||||
void * fpV = (void*)(ret(*)(void*, const PIVariant &))__stat_eh_v_##name##__; \
|
void * fpV = (void*)(ret(*)(void*, const PIVariant &))__stat_eh_v_##name##__; \
|
||||||
if (eh.eh_set[fp]) return; \
|
if (eh.eh_set[fp]) return; \
|
||||||
@@ -276,7 +280,7 @@
|
|||||||
public: \
|
public: \
|
||||||
__##name##2##n0##n1##_Initializer__() { \
|
__##name##2##n0##n1##_Initializer__() { \
|
||||||
PIMutexLocker ml(__meta_mutex()); \
|
PIMutexLocker ml(__meta_mutex()); \
|
||||||
__MetaData & eh(__meta_data()[__classNameS()]); \
|
__MetaData & eh(__meta_data()[__classNameIDS()]); \
|
||||||
void * fp = (void*)(ret(*)(void*, a0, a1))__stat_eh_##name##__; \
|
void * fp = (void*)(ret(*)(void*, a0, a1))__stat_eh_##name##__; \
|
||||||
void * fpV = (void*)(ret(*)(void*, const PIVariant &, const PIVariant &))__stat_eh_v_##name##__; \
|
void * fpV = (void*)(ret(*)(void*, const PIVariant &, const PIVariant &))__stat_eh_v_##name##__; \
|
||||||
if (eh.eh_set[fp]) return; \
|
if (eh.eh_set[fp]) return; \
|
||||||
@@ -298,7 +302,7 @@
|
|||||||
public: \
|
public: \
|
||||||
__##name##3##n0##n1##n2##_Initializer__() { \
|
__##name##3##n0##n1##n2##_Initializer__() { \
|
||||||
PIMutexLocker ml(__meta_mutex()); \
|
PIMutexLocker ml(__meta_mutex()); \
|
||||||
__MetaData & eh(__meta_data()[__classNameS()]); \
|
__MetaData & eh(__meta_data()[__classNameIDS()]); \
|
||||||
void * fp = (void*)(ret(*)(void*, a0, a1, a2))__stat_eh_##name##__; \
|
void * fp = (void*)(ret(*)(void*, a0, a1, a2))__stat_eh_##name##__; \
|
||||||
void * fpV = (void*)(ret(*)(void*, const PIVariant &, const PIVariant &, const PIVariant &))__stat_eh_v_##name##__; \
|
void * fpV = (void*)(ret(*)(void*, const PIVariant &, const PIVariant &, const PIVariant &))__stat_eh_v_##name##__; \
|
||||||
if (eh.eh_set[fp]) return; \
|
if (eh.eh_set[fp]) return; \
|
||||||
@@ -320,7 +324,7 @@
|
|||||||
public: \
|
public: \
|
||||||
__##name##4##n0##n1##n2##n3##_Initializer__() { \
|
__##name##4##n0##n1##n2##n3##_Initializer__() { \
|
||||||
PIMutexLocker ml(__meta_mutex()); \
|
PIMutexLocker ml(__meta_mutex()); \
|
||||||
__MetaData & eh(__meta_data()[__classNameS()]); \
|
__MetaData & eh(__meta_data()[__classNameIDS()]); \
|
||||||
void * fp = (void*)(ret(*)(void*, a0, a1, a2, a3))__stat_eh_##name##__; \
|
void * fp = (void*)(ret(*)(void*, a0, a1, a2, a3))__stat_eh_##name##__; \
|
||||||
void * fpV = (void*)(ret(*)(void*, const PIVariant &, const PIVariant &, const PIVariant &, const PIVariant &))__stat_eh_v_##name##__; \
|
void * fpV = (void*)(ret(*)(void*, const PIVariant &, const PIVariant &, const PIVariant &, const PIVariant &))__stat_eh_v_##name##__; \
|
||||||
if (eh.eh_set[fp]) return; \
|
if (eh.eh_set[fp]) return; \
|
||||||
@@ -416,11 +420,11 @@
|
|||||||
#define EVENT_VHANDLER EVENT_VHANDLER0
|
#define EVENT_VHANDLER EVENT_VHANDLER0
|
||||||
|
|
||||||
|
|
||||||
#define EVENT0(name) EVENT_HANDLER0(void, name) {PIObject::raiseEvent(this, #name);}
|
#define EVENT0(name) EVENT_HANDLER0(void, name) {static uint eid = __string_id(PIStringAscii(#name)); PIObject::raiseEvent(this, eid);}
|
||||||
#define EVENT1(name, a0, n0) EVENT_HANDLER1(void, name, a0, n0) {PIObject::raiseEvent(this, #name, n0);}
|
#define EVENT1(name, a0, n0) EVENT_HANDLER1(void, name, a0, n0) {static uint eid = __string_id(PIStringAscii(#name)); PIObject::raiseEvent(this, eid, n0);}
|
||||||
#define EVENT2(name, a0, n0, a1, n1) EVENT_HANDLER2(void, name, a0, n0, a1, n1) {PIObject::raiseEvent(this, #name, n0, n1);}
|
#define EVENT2(name, a0, n0, a1, n1) EVENT_HANDLER2(void, name, a0, n0, a1, n1) {static uint eid = __string_id(PIStringAscii(#name)); PIObject::raiseEvent(this, eid, n0, n1);}
|
||||||
#define EVENT3(name, a0, n0, a1, n1, a2, n2) EVENT_HANDLER3(void, name, a0, n0, a1, n1, a2, n2) {PIObject::raiseEvent(this, #name, n0, n1, n2);}
|
#define EVENT3(name, a0, n0, a1, n1, a2, n2) EVENT_HANDLER3(void, name, a0, n0, a1, n1, a2, n2) {static uint eid = __string_id(PIStringAscii(#name)); PIObject::raiseEvent(this, eid, n0, n1, n2);}
|
||||||
#define EVENT4(name, a0, n0, a1, n1, a2, n2, a3, n3) EVENT_HANDLER4(void, name, a0, n0, a1, n1, a2, n2, a3, n3) {PIObject::raiseEvent(this, #name, n0, n1, n2, n3);}
|
#define EVENT4(name, a0, n0, a1, n1, a2, n2, a3, n3) EVENT_HANDLER4(void, name, a0, n0, a1, n1, a2, n2, a3, n3) {static uint eid = __string_id(PIStringAscii(#name)); PIObject::raiseEvent(this, eid, n0, n1, n2, n3);}
|
||||||
#define EVENT EVENT0
|
#define EVENT EVENT0
|
||||||
|
|
||||||
#define RAISE_EVENT0(src, event) (src)->event();
|
#define RAISE_EVENT0(src, event) (src)->event();
|
||||||
@@ -483,14 +487,16 @@ private:
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
|
||||||
//! Returns object name
|
//! Returns object name
|
||||||
PIString name() const {return property(PIStringAscii("name")).toString();}
|
PIString name() const {return property(PIStringAscii("name")).toString();}
|
||||||
|
|
||||||
//! Returns object class name
|
//! Returns object class name
|
||||||
virtual const char * className() const {return "PIObject";}
|
virtual const char * className() const {return "PIObject";}
|
||||||
|
|
||||||
|
virtual const uint classNameID() const {static uint ret = __string_id(PIStringAscii("PIObject")); return ret;}
|
||||||
|
|
||||||
static const PIString __classNameS() {return PIStringAscii("PIObject");}
|
static const PIString __classNameS() {return PIStringAscii("PIObject");}
|
||||||
|
static const uint __classNameIDS() {static uint ret = __string_id(PIStringAscii("PIObject")); return ret;}
|
||||||
|
|
||||||
//! Returns parent object class name
|
//! Returns parent object class name
|
||||||
virtual const char * parentClassName() const {return "";}
|
virtual const char * parentClassName() const {return "";}
|
||||||
@@ -566,33 +572,6 @@ public:
|
|||||||
PIString methodEHFullFormat(const PIString & name) const;
|
PIString methodEHFullFormat(const PIString & name) const;
|
||||||
PIString methodEHFromAddr(const void * addr) const;
|
PIString methodEHFromAddr(const void * addr) const;
|
||||||
|
|
||||||
/*
|
|
||||||
template <typename RS, typename RD>
|
|
||||||
static void piConnectU(PIObject * src, RS(*sig)(void*), PIObject * dest, RD(*slt)(void*), PIString signame) {
|
|
||||||
src->connections << PIObject::Connection((void*)slt, (void*)sig, signame, dest);
|
|
||||||
}
|
|
||||||
template <typename RS, typename RD, typename A0>
|
|
||||||
static void piConnectU(PIObject * src, RS(*sig)(void*,A0), PIObject * dest, RD(*slt)(void*,A0), PIString signame) {
|
|
||||||
src->connections << PIObject::Connection((void*)slt, (void*)sig, signame, dest);
|
|
||||||
}
|
|
||||||
template <typename RS, typename RD, typename A0, typename A1>
|
|
||||||
static void piConnectU(PIObject * src, RS(*sig)(void*,A0,A1), PIObject * dest, RD(*slt)(void*,A0,A1), PIString signame) {
|
|
||||||
src->connections << PIObject::Connection((void*)slt, (void*)sig, signame, dest);
|
|
||||||
}
|
|
||||||
template <typename RS, typename RD, typename A0, typename A1, typename A2>
|
|
||||||
static void piConnectU(PIObject * src, RS(*sig)(void*,A0,A1,A2), PIObject * dest, RD(*slt)(void*,A0,A1,A2), PIString signame) {
|
|
||||||
src->connections << PIObject::Connection((void*)slt, (void*)sig, signame, dest);
|
|
||||||
}
|
|
||||||
template <typename RS, typename RD, typename A0, typename A1, typename A2, typename A3>
|
|
||||||
static void piConnectU(PIObject * src, RS(*sig)(void*,A0,A1,A2,A3), PIObject * dest, RD(*slt)(void*,A0,A1,A2,A3), PIString signame) {
|
|
||||||
src->connections << PIObject::Connection((void*)slt, (void*)sig, signame, dest);
|
|
||||||
}
|
|
||||||
template <typename RS, typename RD, typename A0, typename A1, typename A2, typename A3, typename A4>
|
|
||||||
static void piConnectU(PIObject * src, RS(*sig)(void*,A0,A1,A2,A3,A4), PIObject * dest, RD(*slt)(void*,A0,A1,A2,A3,A4), PIString signame) {
|
|
||||||
src->connections << PIObject::Connection((void*)slt, (void*)sig, signame, dest);
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
// / Direct connect
|
// / Direct connect
|
||||||
static void piConnect(PIObject * src, const PIString & sig, PIObject * dest_o, void * dest, void * ev_h, void * e_h, int args, const char * loc);
|
static void piConnect(PIObject * src, const PIString & sig, PIObject * dest_o, void * dest, void * ev_h, void * e_h, int args, const char * loc);
|
||||||
static bool piConnectU(PIObject * src, const PIString & ename, PIObject * dest_o, void * dest, const PIString & hname, const char * loc, PIObject * performer = 0);
|
static bool piConnectU(PIObject * src, const PIString & ename, PIObject * dest_o, void * dest, const PIString & hname, const char * loc, PIObject * performer = 0);
|
||||||
@@ -613,10 +592,10 @@ public:
|
|||||||
static void piDisconnect(PIObject * src);
|
static void piDisconnect(PIObject * src);
|
||||||
|
|
||||||
// / Raise events
|
// / Raise events
|
||||||
static void raiseEvent(PIObject * sender, const char * event) {
|
static void raiseEvent(PIObject * sender, const uint eventID) {
|
||||||
for (int j = 0; j < sender->connections.size_s(); ++j) {
|
for (int j = 0; j < sender->connections.size_s(); ++j) {
|
||||||
__Connection & i(sender->connections[j]);
|
__Connection & i(sender->connections[j]);
|
||||||
if (strcmp(i.event.dataAscii(), event) != 0) continue;
|
if (i.eventID != eventID) continue;
|
||||||
if (i.performer) {
|
if (i.performer) {
|
||||||
i.performer->postQueuedEvent(__QueuedEvent(i.slot, i.dest, i.dest_o, sender));
|
i.performer->postQueuedEvent(__QueuedEvent(i.slot, i.dest, i.dest_o, sender));
|
||||||
} else {
|
} else {
|
||||||
@@ -630,10 +609,10 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
template <typename T0>
|
template <typename T0>
|
||||||
static void raiseEvent(PIObject * sender, const char * event, const T0 & v0 = T0()) {
|
static void raiseEvent(PIObject * sender, const uint eventID, const T0 & v0 = T0()) {
|
||||||
for (int j = 0; j < sender->connections.size_s(); ++j) {
|
for (int j = 0; j < sender->connections.size_s(); ++j) {
|
||||||
__Connection & i(sender->connections[j]);
|
__Connection & i(sender->connections[j]);
|
||||||
if (strcmp(i.event.dataAscii(), event) != 0) continue;
|
if (i.eventID != eventID) continue;
|
||||||
if (i.performer) {
|
if (i.performer) {
|
||||||
PIVector<PIVariant> vl;
|
PIVector<PIVariant> vl;
|
||||||
if (i.args_count > 0) vl << PIVariant::fromValue(v0);
|
if (i.args_count > 0) vl << PIVariant::fromValue(v0);
|
||||||
@@ -649,10 +628,10 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
template <typename T0, typename T1>
|
template <typename T0, typename T1>
|
||||||
static void raiseEvent(PIObject * sender, const char * event, const T0 & v0 = T0(), const T1 & v1 = T1()) {
|
static void raiseEvent(PIObject * sender, const uint eventID, const T0 & v0 = T0(), const T1 & v1 = T1()) {
|
||||||
for (int j = 0; j < sender->connections.size_s(); ++j) {
|
for (int j = 0; j < sender->connections.size_s(); ++j) {
|
||||||
__Connection & i(sender->connections[j]);
|
__Connection & i(sender->connections[j]);
|
||||||
if (strcmp(i.event.dataAscii(), event) != 0) continue;
|
if (i.eventID != eventID) continue;
|
||||||
if (i.performer) {
|
if (i.performer) {
|
||||||
PIVector<PIVariant> vl;
|
PIVector<PIVariant> vl;
|
||||||
if (i.args_count > 0) vl << PIVariant::fromValue(v0);
|
if (i.args_count > 0) vl << PIVariant::fromValue(v0);
|
||||||
@@ -672,10 +651,10 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
template <typename T0, typename T1, typename T2>
|
template <typename T0, typename T1, typename T2>
|
||||||
static void raiseEvent(PIObject * sender, const char * event, const T0 & v0 = T0(), const T1 & v1 = T1(), const T2 & v2 = T2()) {
|
static void raiseEvent(PIObject * sender, const uint eventID, const T0 & v0 = T0(), const T1 & v1 = T1(), const T2 & v2 = T2()) {
|
||||||
for (int j = 0; j < sender->connections.size_s(); ++j) {
|
for (int j = 0; j < sender->connections.size_s(); ++j) {
|
||||||
__Connection & i(sender->connections[j]);
|
__Connection & i(sender->connections[j]);
|
||||||
if (strcmp(i.event.dataAscii(), event) != 0) continue;
|
if (i.eventID != eventID) continue;
|
||||||
if (i.performer) {
|
if (i.performer) {
|
||||||
PIVector<PIVariant> vl;
|
PIVector<PIVariant> vl;
|
||||||
if (i.args_count > 0) vl << PIVariant::fromValue(v0);
|
if (i.args_count > 0) vl << PIVariant::fromValue(v0);
|
||||||
@@ -697,10 +676,10 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
template <typename T0, typename T1, typename T2, typename T3>
|
template <typename T0, typename T1, typename T2, typename T3>
|
||||||
static void raiseEvent(PIObject * sender, const char * event, const T0 & v0 = T0(), const T1 & v1 = T1(), const T2 & v2 = T2(), const T3 & v3 = T3()) {
|
static void raiseEvent(PIObject * sender, const uint eventID, const T0 & v0 = T0(), const T1 & v1 = T1(), const T2 & v2 = T2(), const T3 & v3 = T3()) {
|
||||||
for (int j = 0; j < sender->connections.size_s(); ++j) {
|
for (int j = 0; j < sender->connections.size_s(); ++j) {
|
||||||
__Connection & i(sender->connections[j]);
|
__Connection & i(sender->connections[j]);
|
||||||
if (strcmp(i.event.dataAscii(), event) != 0) continue;
|
if (i.eventID != eventID) continue;
|
||||||
if (i.performer) {
|
if (i.performer) {
|
||||||
PIVector<PIVariant> vl;
|
PIVector<PIVariant> vl;
|
||||||
if (i.args_count > 0) vl << PIVariant::fromValue(v0);
|
if (i.args_count > 0) vl << PIVariant::fromValue(v0);
|
||||||
@@ -724,54 +703,6 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
// / Raise events through manager
|
|
||||||
static void raiseEvent(const PIString & destObject, const PIString & name) {
|
|
||||||
PIObject * dest = findByName(destObject);
|
|
||||||
if (dest == 0) {
|
|
||||||
cout << "PIObject::piConnect: can`t find PIObject with \"" << destObject << "\" name!" << endl;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
raiseEvent(dest, name);
|
|
||||||
}
|
|
||||||
template <typename T0>
|
|
||||||
static void raiseEvent(const PIString & destObject, const PIString & name, const T0 & v0 = T0()) {
|
|
||||||
PIObject * dest = findByName(destObject);
|
|
||||||
if (dest == 0) {
|
|
||||||
cout << "PIObject::piConnect: can`t find PIObject with \"" << destObject << "\" name!" << endl;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
raiseEvent<T0>(dest, name, v0);
|
|
||||||
}
|
|
||||||
template <typename T0, typename T1>
|
|
||||||
static void raiseEvent(const PIString & destObject, const PIString & name, const T0 & v0 = T0(), const T1 & v1 = T1()) {
|
|
||||||
PIObject * dest = findByName(destObject);
|
|
||||||
if (dest == 0) {
|
|
||||||
cout << "PIObject::piConnect: can`t find PIObject with \"" << destObject << "\" name!" << endl;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
raiseEvent<T0, T1>(dest, name, v0, v1);
|
|
||||||
}
|
|
||||||
template <typename T0, typename T1, typename T2>
|
|
||||||
static void raiseEvent(const PIString & destObject, const PIString & name, const T0 & v0 = T0(), const T1 & v1 = T1(), const T2 & v2 = T2()) {
|
|
||||||
PIObject * dest = findByName(destObject);
|
|
||||||
if (dest == 0) {
|
|
||||||
cout << "PIObject::piConnect: can`t find PIObject with \"" << destObject << "\" name!" << endl;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
raiseEvent<T0, T1, T2>(name, dest, v0, v1, v2);
|
|
||||||
}
|
|
||||||
template <typename T0, typename T1, typename T2, typename T3>
|
|
||||||
static void raiseEvent(const PIString & destObject, const PIString & name, const T0 & v0 = T0(), const T1 & v1 = T1(), const T2 & v2 = T2(), const T3 & v3 = T3()) {
|
|
||||||
PIObject * dest = findByName(destObject);
|
|
||||||
if (dest == 0) {
|
|
||||||
cout << "PIObject::piConnect: can`t find PIObject with \"" << destObject << "\" name!" << endl;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
raiseEvent<T0, T1, T2, T3>(name,dest , v0, v1, v2, v3);
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
//! Returns PIObject* with name "name" or 0, if there is no object found
|
//! Returns PIObject* with name "name" or 0, if there is no object found
|
||||||
static PIObject * findByName(const PIString & name) {
|
static PIObject * findByName(const PIString & name) {
|
||||||
PIMutexLocker _ml(mutexObjects());
|
PIMutexLocker _ml(mutexObjects());
|
||||||
@@ -826,7 +757,10 @@ public:
|
|||||||
typedef PIPair<const void * , __MetaFunc> __EHPair;
|
typedef PIPair<const void * , __MetaFunc> __EHPair;
|
||||||
|
|
||||||
static PIMutex & __meta_mutex();
|
static PIMutex & __meta_mutex();
|
||||||
static PIMap<PIString, __MetaData> & __meta_data(); // [classname]=__MetaData
|
static PIMap<uint, __MetaData> & __meta_data(); // [__string_id(classname)]=__MetaData
|
||||||
|
|
||||||
|
static CRC_32 & __meta_crc();
|
||||||
|
static uint __string_id(const PIString & s);
|
||||||
|
|
||||||
//! \brief Execute all posted events from CONNECTU_QUEUED connections
|
//! \brief Execute all posted events from CONNECTU_QUEUED connections
|
||||||
void callQueuedEvents();
|
void callQueuedEvents();
|
||||||
@@ -862,6 +796,7 @@ private:
|
|||||||
slot = sl;
|
slot = sl;
|
||||||
signal = si;
|
signal = si;
|
||||||
event = e;
|
event = e;
|
||||||
|
eventID = __string_id(e);
|
||||||
dest_o = d_o;
|
dest_o = d_o;
|
||||||
dest = d;
|
dest = d;
|
||||||
args_count = ac;
|
args_count = ac;
|
||||||
@@ -870,6 +805,7 @@ private:
|
|||||||
void * slot;
|
void * slot;
|
||||||
void * signal;
|
void * signal;
|
||||||
PIString event;
|
PIString event;
|
||||||
|
uint eventID;
|
||||||
PIObject * dest_o;
|
PIObject * dest_o;
|
||||||
PIObject * performer;
|
PIObject * performer;
|
||||||
void * dest;
|
void * dest;
|
||||||
|
|||||||
@@ -4,6 +4,6 @@
|
|||||||
#define PIP_VERSION_MAJOR 1
|
#define PIP_VERSION_MAJOR 1
|
||||||
#define PIP_VERSION_MINOR 10
|
#define PIP_VERSION_MINOR 10
|
||||||
#define PIP_VERSION_REVISION 0
|
#define PIP_VERSION_REVISION 0
|
||||||
#define PIP_VERSION_SUFFIX "_alpha"
|
#define PIP_VERSION_SUFFIX "_beta"
|
||||||
|
|
||||||
#endif // PIVERSION_H
|
#endif // PIVERSION_H
|
||||||
|
|||||||
Reference in New Issue
Block a user