68 lines
1.4 KiB
C++
68 lines
1.4 KiB
C++
// TJP COPYRIGHT HEADER
|
|
|
|
#include "Extensible.h"
|
|
#include <atomic>
|
|
|
|
#include <tjp/core/log/Log.h>
|
|
#include <tjp/core/log/LogOf.h>
|
|
|
|
namespace tjp::core {
|
|
|
|
std::atomic<size_t> nextExtensionIndex = 0;
|
|
size_t getNextExtensionIndex()
|
|
{
|
|
sLogDebug("core::extensible", logVar(nextExtensionIndex));
|
|
return nextExtensionIndex++;
|
|
}
|
|
|
|
constexpr size_t MAX_CACHE_STATISTICS = 64;
|
|
static std::array<size_t, MAX_CACHE_STATISTICS+1> numPerSizeCurrent = {0};
|
|
static std::array<size_t, MAX_CACHE_STATISTICS+1> numPerSizeTotals = {0};
|
|
|
|
void onExtensibleCache_(void *t, size_t size)
|
|
{
|
|
if (size < MAX_CACHE_STATISTICS)
|
|
{
|
|
if (size > 0)
|
|
{
|
|
numPerSizeCurrent[size-1]--;
|
|
numPerSizeTotals[size-1]--;
|
|
}
|
|
|
|
numPerSizeCurrent[size]++;
|
|
numPerSizeTotals[size]++;
|
|
}
|
|
|
|
|
|
sLogDebug("core::extensible", "C " << logVar(numPerSizeCurrent));
|
|
sLogDebug("core::extensible", "T " << logVar(numPerSizeTotals));
|
|
}
|
|
|
|
void onExtensibleCacheNew_(void *t)
|
|
{
|
|
onExtensibleCache_(t, 0);
|
|
}
|
|
|
|
void onExtensibleCacheClear_(void *t, size_t size)
|
|
{
|
|
if (size < MAX_CACHE_STATISTICS)
|
|
{
|
|
numPerSizeCurrent[size]--;
|
|
numPerSizeTotals[size]--;
|
|
|
|
numPerSizeCurrent[0]++;
|
|
numPerSizeTotals[0]++;
|
|
}
|
|
}
|
|
|
|
void onExtensibleCacheDelete_(void *t, size_t size)
|
|
{
|
|
numPerSizeCurrent[size]--;
|
|
|
|
sLogDebug("core::extensible", "C " << logVar(numPerSizeCurrent));
|
|
sLogDebug("core::extensible", "T " << logVar(numPerSizeTotals));
|
|
}
|
|
|
|
|
|
} // namespace
|