From a8035b64662e9b9fe6689ec60e5087ff95bc2672 Mon Sep 17 00:00:00 2001
From: aap <aap@papnet.eu>
Date: Sat, 28 Nov 2020 16:16:15 +0100
Subject: [PATCH] moved some stuff to MemoryMgr

---
 src/animation/AnimBlendAssociation.cpp |   2 +-
 src/animation/AnimBlendClumpData.cpp   |   2 +-
 src/core/CdStream.cpp                  |   2 +-
 src/core/CdStreamPosix.cpp             |   2 +-
 src/core/Streaming.cpp                 |   1 +
 src/render/PlayerSkin.cpp              |   1 +
 src/rw/MemoryHeap.cpp                  | 125 ------------------------
 src/rw/MemoryHeap.h                    |  12 ---
 src/rw/MemoryMgr.cpp                   | 130 +++++++++++++++++++++++++
 src/rw/MemoryMgr.h                     |  12 +++
 src/skel/glfw/glfw.cpp                 |   2 +-
 src/skel/win/win.cpp                   |   2 +-
 12 files changed, 150 insertions(+), 143 deletions(-)
 create mode 100644 src/rw/MemoryMgr.cpp
 create mode 100644 src/rw/MemoryMgr.h

diff --git a/src/animation/AnimBlendAssociation.cpp b/src/animation/AnimBlendAssociation.cpp
index 61d7d69c..b03571b0 100644
--- a/src/animation/AnimBlendAssociation.cpp
+++ b/src/animation/AnimBlendAssociation.cpp
@@ -5,7 +5,7 @@
 #include "RpAnimBlend.h"
 #include "AnimManager.h"
 #include "AnimBlendAssociation.h"
-#include "MemoryHeap.h"
+#include "MemoryMgr.h"
 
 CAnimBlendAssociation::CAnimBlendAssociation(void)
 {
diff --git a/src/animation/AnimBlendClumpData.cpp b/src/animation/AnimBlendClumpData.cpp
index fd2a58de..92515427 100644
--- a/src/animation/AnimBlendClumpData.cpp
+++ b/src/animation/AnimBlendClumpData.cpp
@@ -1,7 +1,7 @@
 #include "common.h"
 
 #include "AnimBlendClumpData.h"
-#include "MemoryHeap.h"
+#include "MemoryMgr.h"
 
 
 CAnimBlendClumpData::CAnimBlendClumpData(void)
diff --git a/src/core/CdStream.cpp b/src/core/CdStream.cpp
index a1235930..f987dea5 100644
--- a/src/core/CdStream.cpp
+++ b/src/core/CdStream.cpp
@@ -5,7 +5,7 @@
 #include "CdStream.h"
 #include "rwcore.h"
 #include "RwHelper.h"
-#include "MemoryHeap.h"
+#include "MemoryMgr.h"
 
 #define CDDEBUG(f, ...)   debug ("%s: " f "\n", "cdvd_stream", ## __VA_ARGS__)
 #define CDTRACE(f, ...)   printf("%s: " f "\n", "cdvd_stream", ## __VA_ARGS__)
diff --git a/src/core/CdStreamPosix.cpp b/src/core/CdStreamPosix.cpp
index 35a90a74..0854d850 100644
--- a/src/core/CdStreamPosix.cpp
+++ b/src/core/CdStreamPosix.cpp
@@ -16,7 +16,7 @@
 
 #include "CdStream.h"
 #include "rwcore.h"
-#include "RwHelper.h"
+#include "MemoryMgr.h"
 
 #define CDDEBUG(f, ...)   debug ("%s: " f "\n", "cdvd_stream", ## __VA_ARGS__)
 #define CDTRACE(f, ...)   printf("%s: " f "\n", "cdvd_stream", ## __VA_ARGS__)
diff --git a/src/core/Streaming.cpp b/src/core/Streaming.cpp
index 628d4923..a28fe39d 100644
--- a/src/core/Streaming.cpp
+++ b/src/core/Streaming.cpp
@@ -34,6 +34,7 @@
 #include "main.h"
 #include "Frontend.h"
 #include "Font.h"
+#include "MemoryMgr.h"
 #include "MemoryHeap.h"
 
 bool CStreaming::ms_disableStreaming;
diff --git a/src/render/PlayerSkin.cpp b/src/render/PlayerSkin.cpp
index d66f7ce4..f0fae45a 100644
--- a/src/render/PlayerSkin.cpp
+++ b/src/render/PlayerSkin.cpp
@@ -14,6 +14,7 @@
 #include "RwHelper.h"
 #include "Timer.h"
 #include "Lights.h"
+#include "MemoryMgr.h"
 
 RpClump *gpPlayerClump;
 float gOldFov;
diff --git a/src/rw/MemoryHeap.cpp b/src/rw/MemoryHeap.cpp
index 2cf173b6..0b333ce1 100644
--- a/src/rw/MemoryHeap.cpp
+++ b/src/rw/MemoryHeap.cpp
@@ -494,129 +494,4 @@ CommonSize::Init(uint32 size)
 	m_remaining = 0;
 }
 
-
-
-void *pMemoryTop;
-
-void
-InitMemoryMgr(void)
-{
-#ifdef GTA_PS2
-#error "finish this"
-#else
-	// randomly allocate 128mb
-	gMainHeap.Init(128*1024*1024);
 #endif
-}
-
-
-RwMemoryFunctions memFuncs = {
-	MemoryMgrMalloc,
-	MemoryMgrFree,
-	MemoryMgrRealloc,
-	MemoryMgrCalloc
-};
-
-#ifdef USE_CUSTOM_ALLOCATOR
-// game seems to be using heap directly here, but this is nicer
-void *operator new(size_t sz) { return MemoryMgrMalloc(sz); }
-void *operator new[](size_t sz) { return MemoryMgrMalloc(sz); }
-void operator delete(void *ptr) noexcept { MemoryMgrFree(ptr); }
-void operator delete[](void *ptr) noexcept { MemoryMgrFree(ptr); }
-#endif
-#endif
-
-void*
-MemoryMgrMalloc(uint32 size)
-{
-#ifdef USE_CUSTOM_ALLOCATOR
-	void *mem = gMainHeap.Malloc(size);
-#else
-	void *mem = malloc(size);
-#endif
-	if(mem > pMemoryTop)
-		pMemoryTop = mem;
-	return mem;
-}
-
-void*
-MemoryMgrRealloc(void *ptr, uint32 size)
-{
-#ifdef USE_CUSTOM_ALLOCATOR
-	void *mem = gMainHeap.Realloc(ptr, size);
-#else
-	void *mem = realloc(ptr, size);
-#endif
-	if(mem > pMemoryTop)
-		pMemoryTop = mem;
-	return mem;
-}
-
-void*
-MemoryMgrCalloc(uint32 num, uint32 size)
-{
-#ifdef USE_CUSTOM_ALLOCATOR
-	void *mem = gMainHeap.Malloc(num*size);
-#else
-	void *mem = calloc(num, size);
-#endif
-	if(mem > pMemoryTop)
-		pMemoryTop = mem;
-#ifdef FIX_BUGS
-	memset(mem, 0, num*size);
-#endif
-	return mem;
-}
-
-void
-MemoryMgrFree(void *ptr)
-{
-#ifdef USE_CUSTOM_ALLOCATOR
-#ifdef FIX_BUGS
-	// i don't suppose this is handled by RW?
-	if(ptr == nil) return;
-#endif
-	gMainHeap.Free(ptr);
-#else
-	free(ptr);
-#endif
-}
-
-void *
-RwMallocAlign(RwUInt32 size, RwUInt32 align)
-{
-#ifdef FIX_BUGS
-	uintptr ptralign = align-1;
-	void *mem = (void *)MemoryMgrMalloc(size + sizeof(uintptr) + ptralign);
-
-	ASSERT(mem != nil);
-
-	void *addr = (void *)((((uintptr)mem) + sizeof(uintptr) + ptralign) & ~ptralign);
-
-	ASSERT(addr != nil);
-#else
-	void *mem = (void *)MemoryMgrMalloc(size + align);
-
-	ASSERT(mem != nil);
-
-	void *addr = (void *)((((uintptr)mem) + align) & ~(align - 1));
-
-	ASSERT(addr != nil);
-#endif
-
-	*(((void **)addr) - 1) = mem;
-
-	return addr;
-}
-
-void
-RwFreeAlign(void *mem)
-{
-	ASSERT(mem != nil);
-
-	void *addr = *(((void **)mem) - 1);
-
-	ASSERT(addr != nil);
-
-	MemoryMgrFree(addr);
-}
diff --git a/src/rw/MemoryHeap.h b/src/rw/MemoryHeap.h
index 22e13617..484cbfab 100644
--- a/src/rw/MemoryHeap.h
+++ b/src/rw/MemoryHeap.h
@@ -62,18 +62,6 @@ enum {
 	NUM_FIXED_MEMBLOCKS = 6
 };
 
-extern RwMemoryFunctions memFuncs;
-void InitMemoryMgr(void);
-
-void *MemoryMgrMalloc(uint32 size);
-void *MemoryMgrRealloc(void *ptr, uint32 size);
-void *MemoryMgrCalloc(uint32 num, uint32 size);
-void MemoryMgrFree(void *ptr);
-
-void *RwMallocAlign(RwUInt32 size, RwUInt32 align);
-void RwFreeAlign(void *mem);
-
-
 template<typename T, uint32 N>
 class CStack
 {
diff --git a/src/rw/MemoryMgr.cpp b/src/rw/MemoryMgr.cpp
new file mode 100644
index 00000000..ef0ecbdf
--- /dev/null
+++ b/src/rw/MemoryMgr.cpp
@@ -0,0 +1,130 @@
+#include "common.h"
+#include "MemoryHeap.h"
+#include "MemoryMgr.h"
+
+
+void *pMemoryTop;
+
+void
+InitMemoryMgr(void)
+{
+#ifdef USE_CUSTOM_ALLOCATOR
+#ifdef GTA_PS2
+#error "finish this"
+#else
+	// randomly allocate 128mb
+	gMainHeap.Init(128*1024*1024);
+#endif
+#endif
+}
+
+
+RwMemoryFunctions memFuncs = {
+	MemoryMgrMalloc,
+	MemoryMgrFree,
+	MemoryMgrRealloc,
+	MemoryMgrCalloc
+};
+
+#ifdef USE_CUSTOM_ALLOCATOR
+// game seems to be using heap directly here, but this is nicer
+void *operator new(size_t sz) { return MemoryMgrMalloc(sz); }
+void *operator new[](size_t sz) { return MemoryMgrMalloc(sz); }
+void operator delete(void *ptr) noexcept { MemoryMgrFree(ptr); }
+void operator delete[](void *ptr) noexcept { MemoryMgrFree(ptr); }
+#endif
+
+void*
+MemoryMgrMalloc(size_t size)
+{
+#ifdef USE_CUSTOM_ALLOCATOR
+	void *mem = gMainHeap.Malloc(size);
+#else
+	void *mem = malloc(size);
+#endif
+	if(mem > pMemoryTop)
+		pMemoryTop = mem;
+	return mem;
+}
+
+void*
+MemoryMgrRealloc(void *ptr, size_t size)
+{
+#ifdef USE_CUSTOM_ALLOCATOR
+	void *mem = gMainHeap.Realloc(ptr, size);
+#else
+	void *mem = realloc(ptr, size);
+#endif
+	if(mem > pMemoryTop)
+		pMemoryTop = mem;
+	return mem;
+}
+
+void*
+MemoryMgrCalloc(size_t num, size_t size)
+{
+#ifdef USE_CUSTOM_ALLOCATOR
+	void *mem = gMainHeap.Malloc(num*size);
+#else
+	void *mem = calloc(num, size);
+#endif
+	if(mem > pMemoryTop)
+		pMemoryTop = mem;
+#ifdef FIX_BUGS
+	memset(mem, 0, num*size);
+#endif
+	return mem;
+}
+
+void
+MemoryMgrFree(void *ptr)
+{
+#ifdef USE_CUSTOM_ALLOCATOR
+#ifdef FIX_BUGS
+	// i don't suppose this is handled by RW?
+	if(ptr == nil) return;
+#endif
+	gMainHeap.Free(ptr);
+#else
+	free(ptr);
+#endif
+}
+
+void *
+RwMallocAlign(RwUInt32 size, RwUInt32 align)
+{
+#ifdef FIX_BUGS
+	uintptr ptralign = align-1;
+	void *mem = (void *)MemoryMgrMalloc(size + sizeof(uintptr) + ptralign);
+
+	ASSERT(mem != nil);
+
+	void *addr = (void *)((((uintptr)mem) + sizeof(uintptr) + ptralign) & ~ptralign);
+
+	ASSERT(addr != nil);
+#else
+	void *mem = (void *)MemoryMgrMalloc(size + align);
+
+	ASSERT(mem != nil);
+
+	void *addr = (void *)((((uintptr)mem) + align) & ~(align - 1));
+
+	ASSERT(addr != nil);
+#endif
+
+	*(((void **)addr) - 1) = mem;
+
+	return addr;
+}
+
+void
+RwFreeAlign(void *mem)
+{
+	ASSERT(mem != nil);
+
+	void *addr = *(((void **)mem) - 1);
+
+	ASSERT(addr != nil);
+
+	MemoryMgrFree(addr);
+}
diff --git a/src/rw/MemoryMgr.h b/src/rw/MemoryMgr.h
new file mode 100644
index 00000000..e2962806
--- /dev/null
+++ b/src/rw/MemoryMgr.h
@@ -0,0 +1,12 @@
+#pragma once
+
+extern RwMemoryFunctions memFuncs;
+void InitMemoryMgr(void);
+
+void *MemoryMgrMalloc(size_t size);
+void *MemoryMgrRealloc(void *ptr, size_t size);
+void *MemoryMgrCalloc(size_t num, size_t size);
+void MemoryMgrFree(void *ptr);
+
+void *RwMallocAlign(RwUInt32 size, RwUInt32 align);
+void RwFreeAlign(void *mem);
diff --git a/src/skel/glfw/glfw.cpp b/src/skel/glfw/glfw.cpp
index 2722a4df..0bde1282 100644
--- a/src/skel/glfw/glfw.cpp
+++ b/src/skel/glfw/glfw.cpp
@@ -40,7 +40,7 @@
 #include "Sprite2d.h"
 #include "AnimViewer.h"
 #include "Font.h"
-#include "MemoryHeap.h"
+#include "MemoryMgr.h"
 
 #define MAX_SUBSYSTEMS		(16)
 
diff --git a/src/skel/win/win.cpp b/src/skel/win/win.cpp
index b4897d67..5f6d662c 100644
--- a/src/skel/win/win.cpp
+++ b/src/skel/win/win.cpp
@@ -97,7 +97,7 @@ static psGlobalType PsGlobal;
 #include "Sprite2d.h"
 #include "AnimViewer.h"
 #include "Font.h"
-#include "MemoryHeap.h"
+#include "MemoryMgr.h"
 
 VALIDATE_SIZE(psGlobalType, 0x28);