#include "vptr_manager.h" #include "shm_manager.h" #include extern bg::detail::ShmContext g_shm_ctx; bg::detail::TypeName::TypeName(const char* type, size_t size /*= 0*/) { if(size) { snprintf(m_type, MAX_TYPE_NAME_LENGTH, "%s[%#zux]", type, size); } else { snprintf(m_type, MAX_TYPE_NAME_LENGTH, "%s", type); } } void bg::detail::ShmLog(ShmLogLevel level, const char* file, size_t line, const char* func, const char* fmt, ...) { va_list args; // [rsp+8h] [rbp-E8h] BYREF static char buf[0x2000uLL]; va_start(args, fmt); vsnprintf(buf, 0x2000uLL, fmt, args); va_end(args); g_shm_ctx.logger(level, file, line, func, buf); } void bg::detail::ShmStdoutLog(ShmLogLevel level, const char* file, size_t line, const char* func, const char* msg) { static const char* levels[] = {"TRACE", "DEBUG", "INFO", "WARN", "ERROR", "FATAL"}; printf( "[%s:%zu(%s)][%s] %s\n", file, line, func, levels[level], msg); } void* bg::detail::ShmAllocate(size_t bytes, const void* ptr) { return (void*)bg::ShmMalloc(bytes); } void bg::detail::ShmDeallocate(void* ptr, size_t size) { bg::ShmFree(ptr); } uint64_t bg::detail::ShmCurrentVersion() { return 0ll; } void* bg::detail::ShmAllocateRawMemory(size_t* bytes, size_t alignment) { if(g_shm_ctx.mgr) { return g_shm_ctx.mgr->AllocateRawMemory(bytes, alignment); } return nullptr; } bool bg::detail::ShmHasSingleton(const TypeName& type) { if(g_shm_ctx.mgr) { return g_shm_ctx.mgr->HasSingleton(type); } return false; } void* bg::detail::ShmGetSingleton(const TypeName& type, size_t bytes, bool* first_call) { if(g_shm_ctx.mgr) { return g_shm_ctx.mgr->GetSingleton(type, bytes, first_call); } return nullptr; } void bg::detail::ShmFreeSingleton(const TypeName& type) { if(g_shm_ctx.mgr) { return g_shm_ctx.mgr->FreeSingleton(type); } return; }