#include "CMemory.hpp" #include "CGameAllocator.hpp" #include namespace Retro { LogVisor::LogModule Log("CMemory"); static CGameAllocator g_gameAllocator; static IAllocator* g_memoryAllocator = &g_gameAllocator; static bool g_memoryAllocatorReady = false; void CMemory::Startup(COsContext& cos) { g_memoryAllocatorReady = g_memoryAllocator->Initialize(cos); } void CMemory::Shutdown() { g_memoryAllocator->Shutdown(); g_memoryAllocatorReady = false; } void CMemory::SetAllocator(COsContext& cos, IAllocator& alloc) { if (&alloc != g_memoryAllocator) { g_memoryAllocator = &alloc; g_memoryAllocator->Initialize(cos); } } void CMemory::OffsetFakeStatics(int val) { g_memoryAllocator->OffsetFakeStatics(val); } void CMemory::SetOutOfMemoryCallback(const IAllocator::TOutOfMemoryCallback cb, void* ctx) { g_memoryAllocator->SetOutOfMemoryCallback(cb, ctx); } void CMemory::Free(void* ptr) { g_memoryAllocator->Free(ptr); } void* CMemory::Alloc(u32 sz, IAllocator::EHint hint, IAllocator::EScope scope, IAllocator::EType type, const CCallStack& cs) { void* newPtr = g_memoryAllocator->Alloc(sz, hint, scope, type, cs); if (!newPtr) Log.report(LogVisor::Error, "Alloc Failed! - Size %d", sz); return newPtr; } CMemorySys::CMemorySys(COsContext& cos, IAllocator& alloc) { CMemory::Startup(cos); CMemory::SetAllocator(cos, alloc); } CMemorySys::~CMemorySys() { CMemory::Shutdown(); } IAllocator& CMemorySys::GetGameAllocator() {return g_gameAllocator;} }