git-svn-id: svn://db.shs.com.ru/pip@464 12ceb7fc-bf1f-11e4-8940-5bc7170c53b5

This commit is contained in:
2017-04-24 10:44:46 +00:00
parent 929c0869cc
commit 882b30f493
155 changed files with 226 additions and 191 deletions

View File

@@ -1,7 +1,7 @@
/*
PIP - Platform Independent Primitives
Object, base class of some PIP classes, provide EVENT -> EVENT_HANDLER mechanism
Copyright (C) 2016 Ivan Pelipenko peri4ko@yandex.ru
Copyright (C) 2017 Ivan Pelipenko peri4ko@yandex.ru
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -55,9 +55,6 @@ handler A: event to event
*/
PIVector<PIObject * > PIObject::objects;
PIMap<PIString, PIObject::__EHData> PIObject::__eh_data;
PIString PIObject::__EHFunc::arguments() const {
return types.join(",");
@@ -80,7 +77,7 @@ PIObject::PIObject(const PIString & name): _signature_(__PIOBJECT_SIGNATURE__),
//__PIVariantInitBuiltin__();
setName(name);
setDebug(true);
objects << this;
objects() << this;
//piCout << "new" << this;
}
@@ -88,7 +85,7 @@ PIObject::PIObject(const PIString & name): _signature_(__PIOBJECT_SIGNATURE__),
PIObject::~PIObject() {
//piCout << "delete" << this;
piMonitor.objects--;
objects.removeAll(this);
objects().removeAll(this);
piDisconnect(this);
}
@@ -148,7 +145,7 @@ PIStringList PIObject::events() {
PIStringList PIObject::methodsEH() {
PIMutexLocker ml(__eh_mutex());
PIStringList ret;
__EHData & ehd(__eh_data[className()]);
__EHData & ehd(__eh_data()[className()]);
piForeachC (__EHPair & eh, ehd.eh_func)
ret << eh.second.fullFormat();
return ret;
@@ -157,7 +154,7 @@ PIStringList PIObject::methodsEH() {
bool PIObject::isMethodEHContains(const PIString & name) const {
PIMutexLocker ml(__eh_mutex());
__EHData & ehd(__eh_data[className()]);
__EHData & ehd(__eh_data()[className()]);
piForeachC (__EHPair & eh, ehd.eh_func)
if (eh.second.func_name == name)
return true;
@@ -167,7 +164,7 @@ bool PIObject::isMethodEHContains(const PIString & name) const {
PIString PIObject::methodEHArguments(const PIString & name) const {
PIMutexLocker ml(__eh_mutex());
__EHData & ehd(__eh_data[className()]);
__EHData & ehd(__eh_data()[className()]);
piForeachC (__EHPair & eh, ehd.eh_func)
if (eh.second.func_name == name)
return eh.second.arguments();
@@ -177,7 +174,7 @@ PIString PIObject::methodEHArguments(const PIString & name) const {
PIString PIObject::methodEHFullFormat(const PIString & name) const {
PIMutexLocker ml(__eh_mutex());
__EHData & ehd(__eh_data[className()]);
__EHData & ehd(__eh_data()[className()]);
piForeachC (__EHPair & eh, ehd.eh_func)
if (eh.second.func_name == name)
return eh.second.fullFormat();
@@ -192,7 +189,7 @@ PIString PIObject::methodEHFromAddr(const void * addr) const {
PIVector<PIObject::__EHFunc> PIObject::findEH(const PIString & name) const {
PIVector<__EHFunc> ret;
__EHData & ehd(__eh_data[className()]);
__EHData & ehd(__eh_data()[className()]);
piForeachC (__EHPair & eh, ehd.eh_func)
if (eh.second.func_name == name)
ret << eh.second;
@@ -202,7 +199,7 @@ PIVector<PIObject::__EHFunc> PIObject::findEH(const PIString & name) const {
PIObject::__EHFunc PIObject::methodEH(const void * addr) const {
PIMutexLocker ml(__eh_mutex());
return __eh_data[className()].eh_func.value(addr);
return __eh_data()[className()].eh_func.value(addr);
}
@@ -341,7 +338,7 @@ void PIObject::piDisconnect(PIObject * src) {
void PIObject::updateConnectors() {
//piCout << "*** updateConnectors" << this;
connectors.clear();
piForeach (PIObject * o, objects) {
piForeach (PIObject * o, objects()) {
if (o == this) continue;
PIVector<Connection> & oc(o->connections);
piForeach (Connection & c, oc)
@@ -357,6 +354,18 @@ PIMutex & PIObject::__eh_mutex() {
}
PIMap<PIString, PIObject::__EHData> & PIObject::__eh_data() {
static PIMap<PIString, PIObject::__EHData> ret;
return ret;
}
PIVector<PIObject * > & PIObject::objects() {
static PIVector<PIObject * > ret;
return ret;
}
PIString PIObject::simplifyType(const char * a) {
PIString ret = PIStringAscii(a).trim();
int white = -1;
@@ -398,6 +407,12 @@ bool PIObject::execute(const PIString & method) {
}
bool PIObject::isPIObject(const PIObject * o) {
if (!o) return false;
return o->_signature_ == __PIOBJECT_SIGNATURE__;
}
void PIObject::dump(const PIString & line_prefix) const {
@@ -412,7 +427,7 @@ void PIObject::dump(const PIString & line_prefix) const {
//printf("dump %d properties ok\n", properties_.size());
PICout(PICoutManipulators::AddNewLine) << line_prefix << " }";
PICout(PICoutManipulators::AddNewLine) << line_prefix << " methodsEH {";
__EHData & ehd(__eh_data[className()]);
__EHData & ehd(__eh_data()[className()]);
PICout(PICoutManipulators::AddNewLine) << line_prefix << " count: " << ehd.eh_func.size_s();
//printf("dump %d methods\n", ehd.eh_func.size());
piForeachC (__EHPair & eh, ehd.eh_func) {
@@ -455,8 +470,8 @@ void dumpApplication() {
PICout(PICoutManipulators::AddNewLine) << " started: " << pi->execDateTime.toString();
PICout(PICoutManipulators::AddNewLine) << " uptime, s: " << (cd.toSystemTime() - pi->execDateTime.toSystemTime()).toSeconds();
PICout(PICoutManipulators::AddNewLine) << " PIObjects {";
PICout(PICoutManipulators::AddNewLine) << " count: " << PIObject::objects.size_s();
piForeachC (PIObject * o, PIObject::objects)
PICout(PICoutManipulators::AddNewLine) << " count: " << PIObject::objects().size_s();
piForeachC (PIObject * o, PIObject::objects())
o->dump(" ");
PICout(PICoutManipulators::AddNewLine) << " }";
PICout(PICoutManipulators::AddNewLine) << "}";