From ead2a1a60604f00182a869a5f0c8069db749a83d Mon Sep 17 00:00:00 2001 From: Sergeanur Date: Fri, 8 Jan 2021 16:47:41 +0200 Subject: [PATCH] MemoryManager of base:: --- premake5.lua | 2 + src/core/common.h | 1 + src/leeds/base/memoryManager.cpp | 75 ++++++++++++++++++++++++++++++++ src/leeds/base/memoryManager.h | 39 +++++++++++++++++ 4 files changed, 117 insertions(+) create mode 100644 src/leeds/base/memoryManager.cpp create mode 100644 src/leeds/base/memoryManager.h diff --git a/premake5.lua b/premake5.lua index f0f3a91f..7634ccdf 100644 --- a/premake5.lua +++ b/premake5.lua @@ -237,6 +237,7 @@ project "reLCS" files { addSrcFiles("src/control") } files { addSrcFiles("src/core") } files { addSrcFiles("src/entities") } + files { addSrcFiles("src/leeds/base") } files { addSrcFiles("src/math") } files { addSrcFiles("src/modelinfo") } files { addSrcFiles("src/objects") } @@ -261,6 +262,7 @@ project "reLCS" includedirs { "src/control" } includedirs { "src/core" } includedirs { "src/entities" } + includedirs { "src/leeds/base" } includedirs { "src/math" } includedirs { "src/modelinfo" } includedirs { "src/objects" } diff --git a/src/core/common.h b/src/core/common.h index 3fb2e963..ed95f6d3 100644 --- a/src/core/common.h +++ b/src/core/common.h @@ -92,6 +92,7 @@ typedef ptrdiff_t ssize_t; #endif #include "config.h" +#include "memoryManager.h" #include #include diff --git a/src/leeds/base/memoryManager.cpp b/src/leeds/base/memoryManager.cpp new file mode 100644 index 00000000..7f6145bd --- /dev/null +++ b/src/leeds/base/memoryManager.cpp @@ -0,0 +1,75 @@ +#include "common.h" +#include "memoryManager.h" + +namespace base +{ + cMemoryManager::cMemoryManager() + { + + } + + void* cMemoryManager::Allocate(uint32 size) + { + void* buf = malloc(size); + memset(buf, 0, size); + return buf; + } + + void* cMemoryManager::AllocateAligned(uint32 size) + { + void* buf = malloc(size); + memset(buf, 0, size); + return buf; + } + + void* cMemoryManager::Realloc(void* buf, uint32 newSize, bool unk) + { + return realloc(buf, newSize); + } + + void cMemoryManager::Free(void* buf) + { + if (buf) + free(buf); + } + + bool cMemoryManager::IsFree(void* buf) + { + return buf == nil; + } + + + cMainMemoryManager* cMainMemoryManager::m_pInstance = nil; + + cMainMemoryManager::cMainMemoryManager() + { + assert(m_pInstance == nil); + m_pInstance = this; + Init(nil, 0); + } + + void cMainMemoryManager::Init(void*, uint32) + { + + } +}; + +void* operator new(uint32 size) +{ + return base::cMainMemoryManager::Instance()->Allocate(size); +} + +void* operator new[](uint32 size) +{ + return base::cMainMemoryManager::Instance()->Allocate(size); +} + +void operator delete(void* buf) +{ + base::cMainMemoryManager::Instance()->Free(buf); +} + +void operator delete[](void* buf) +{ + base::cMainMemoryManager::Instance()->Free(buf); +} \ No newline at end of file diff --git a/src/leeds/base/memoryManager.h b/src/leeds/base/memoryManager.h new file mode 100644 index 00000000..97ee4a43 --- /dev/null +++ b/src/leeds/base/memoryManager.h @@ -0,0 +1,39 @@ +#pragma once + +namespace base +{ + class cMemoryManager + { + public: + cMemoryManager(); + void* Allocate(uint32 size); + void* AllocateAligned(uint32 size); + void* Realloc(void* buf, uint32 newSize, bool unk); + void Free(void* buf); + bool IsFree(void* buf); + }; + + class cMainMemoryManager : public cMemoryManager + { + static cMainMemoryManager* m_pInstance; + static void Init(void*, uint32); + + public: + cMainMemoryManager(); + static cMainMemoryManager *Instance() + { + static cMainMemoryManager instance; + return &instance; + } + }; + + class cMemoryBlock + { + // TODO + }; +} + +void* operator new(uint32 size); +void* operator new[](uint32 size); +void operator delete(void* buf); +void operator delete[](void* buf); \ No newline at end of file