/* PIP - Platform Independent Primitives Introspection module - implementation of containers Copyright (C) 2019 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 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include "piintrospection_containers_p.h" PIIntrospectionContainers::Type::Type() { count = items = 0u; bytes_allocated = bytes_used = 0U; } PIIntrospectionContainers::PIIntrospectionContainers() { } void PIIntrospectionContainers::containerNew(const char * tn) { PIMutexLocker _ml(mutex); uint id = typeID(tn); typenames[id] = PIStringAscii(tn); data[id].count++; } void PIIntrospectionContainers::containerDelete(const char * tn) { PIMutexLocker _ml(mutex); data[typeID(tn)].count--; } void PIIntrospectionContainers::containerAlloc(const char * tn, ullong cnt) { PIMutexLocker _ml(mutex); data[typeID(tn)].bytes_allocated += cnt; } void PIIntrospectionContainers::containerFree(const char * tn, ullong cnt) { PIMutexLocker _ml(mutex); data[typeID(tn)].bytes_allocated -= cnt; } void PIIntrospectionContainers::containerUsed(const char * tn, ullong cnt) { PIMutexLocker _ml(mutex); data[typeID(tn)].bytes_used += cnt; } void PIIntrospectionContainers::containerUnused(const char * tn, ullong cnt) { PIMutexLocker _ml(mutex); data[typeID(tn)].bytes_used -= cnt; } uint PIIntrospectionContainers::typeID(const char * tn) { if (!tn) return 0u; size_t l = strlen(tn); if (l == 0) return 0u; return crc.calculate(tn, l); } PIByteArray & operator <<(PIByteArray & s, const PIIntrospectionContainers::Type & v) { s << v.count << v.items << v.bytes_allocated << v.bytes_used; return s; } PIByteArray & operator >>(PIByteArray & s, PIIntrospectionContainers::Type & v) { s >> v.count >> v.items >> v.bytes_allocated >> v.bytes_used; return s; }