summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergeanur <s.anureev@yandex.ua>2021-01-08 16:47:41 +0200
committerSergeanur <s.anureev@yandex.ua>2021-01-08 16:47:41 +0200
commitead2a1a60604f00182a869a5f0c8069db749a83d (patch)
treefb0a00a0969db2080be713acfccae0e88eb912ce
parent8485dcdb0337cec75bd247970fccf960ec3830ce (diff)
MemoryManager of base::
-rw-r--r--premake5.lua2
-rw-r--r--src/core/common.h1
-rw-r--r--src/leeds/base/memoryManager.cpp75
-rw-r--r--src/leeds/base/memoryManager.h39
4 files changed, 117 insertions, 0 deletions
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 <rphanim.h>
#include <rpskin.h>
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