/* PIP - Platform Independent Primitives Introspection module - interface for containers Ivan Pelipenko peri4ko@yandex.ru This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . */ #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_p.h" __PIINTROSPECTION_SINGLETON_CPP__(Containers) #ifdef CC_GCC # include 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(); } PIIntrospectionContainersInterface::~PIIntrospectionContainersInterface() { delete p; } void PIIntrospectionContainersInterface::containerNew(const PIIntrospectionContainersType & ti, uint isz) { p->containerNew(ti, isz); } void PIIntrospectionContainersInterface::containerDelete(const PIIntrospectionContainersType & ti) { p->containerDelete(ti); } void PIIntrospectionContainersInterface::containerAlloc(const PIIntrospectionContainersType & ti, ullong cnt) { p->containerAlloc(ti, cnt); } void PIIntrospectionContainersInterface::containerFree(const PIIntrospectionContainersType & ti, ullong cnt) { p->containerFree(ti, cnt); } void PIIntrospectionContainersInterface::containerUsed(const PIIntrospectionContainersType & ti, ullong cnt) { p->containerUsed(ti, cnt); } void PIIntrospectionContainersInterface::containerUnused(const PIIntrospectionContainersType & ti, ullong cnt) { p->containerUnused(ti, cnt); } #endif