introspection major optimization
This commit is contained in:
@@ -17,13 +17,49 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "piintrospection_containers.h"
|
||||
|
||||
PIIntrospectionContainersType::~PIIntrospectionContainersType() {
|
||||
if (has_demangled) {
|
||||
//free((void*)demangled);
|
||||
has_demangled = false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#if defined(PIP_INTROSPECTION) && !defined(PIP_FORCE_NO_PIINTROSPECTION)
|
||||
|
||||
#include "piintrospection_containers.h"
|
||||
#include "piintrospection_containers_p.h"
|
||||
|
||||
__PIINTROSPECTION_SINGLETON_CPP__(Containers)
|
||||
|
||||
#ifdef CC_GCC
|
||||
# include <cxxabi.h>
|
||||
const char * demangle(const char * name) {
|
||||
int status = -4;
|
||||
char * res = abi::__cxa_demangle(name, NULL, NULL, &status);
|
||||
if (status == 0) return res;
|
||||
return name;
|
||||
}
|
||||
#else
|
||||
const char * demangle(const char * name) {return name;}
|
||||
#endif
|
||||
|
||||
|
||||
void PIIntrospectionContainersType::finish() {
|
||||
inited = true;
|
||||
if (!name) {
|
||||
printf("[PIIntrospectionContainersType::finish] Null name!\n");
|
||||
return;
|
||||
}
|
||||
size_t l = strlen(name);
|
||||
if (l > 0)
|
||||
id = piHashData((const uchar*)name, int(l));
|
||||
demangled = demangle(name);
|
||||
has_demangled = name != demangled;
|
||||
//printf("create typeinfo for %s -> %s\n", name, demangled);
|
||||
}
|
||||
|
||||
|
||||
PIIntrospectionContainersInterface::PIIntrospectionContainersInterface() {
|
||||
p = new PIIntrospectionContainers();
|
||||
@@ -35,33 +71,33 @@ PIIntrospectionContainersInterface::~PIIntrospectionContainersInterface() {
|
||||
}
|
||||
|
||||
|
||||
void PIIntrospectionContainersInterface::containerNew(const char * tn, uint isz) {
|
||||
p->containerNew(tn, isz);
|
||||
void PIIntrospectionContainersInterface::containerNew(const PIIntrospectionContainersType & ti, uint isz) {
|
||||
p->containerNew(ti, isz);
|
||||
}
|
||||
|
||||
|
||||
void PIIntrospectionContainersInterface::containerDelete(const char * tn) {
|
||||
p->containerDelete(tn);
|
||||
void PIIntrospectionContainersInterface::containerDelete(const PIIntrospectionContainersType & ti) {
|
||||
p->containerDelete(ti);
|
||||
}
|
||||
|
||||
|
||||
void PIIntrospectionContainersInterface::containerAlloc(const char * tn, ullong cnt) {
|
||||
p->containerAlloc(tn, cnt);
|
||||
void PIIntrospectionContainersInterface::containerAlloc(const PIIntrospectionContainersType & ti, ullong cnt) {
|
||||
p->containerAlloc(ti, cnt);
|
||||
}
|
||||
|
||||
|
||||
void PIIntrospectionContainersInterface::containerFree(const char * tn, ullong cnt) {
|
||||
p->containerFree(tn, cnt);
|
||||
void PIIntrospectionContainersInterface::containerFree(const PIIntrospectionContainersType & ti, ullong cnt) {
|
||||
p->containerFree(ti, cnt);
|
||||
}
|
||||
|
||||
|
||||
void PIIntrospectionContainersInterface::containerUsed(const char * tn, ullong cnt) {
|
||||
p->containerUsed(tn, cnt);
|
||||
void PIIntrospectionContainersInterface::containerUsed(const PIIntrospectionContainersType & ti, ullong cnt) {
|
||||
p->containerUsed(ti, cnt);
|
||||
}
|
||||
|
||||
|
||||
void PIIntrospectionContainersInterface::containerUnused(const char * tn, ullong cnt) {
|
||||
p->containerUnused(tn, cnt);
|
||||
void PIIntrospectionContainersInterface::containerUnused(const PIIntrospectionContainersType & ti, ullong cnt) {
|
||||
p->containerUnused(ti, cnt);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user