summaryrefslogtreecommitdiff
path: root/src/KingSystem/Volante/vltLayerMgrTask.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/KingSystem/Volante/vltLayerMgrTask.cpp')
-rw-r--r--src/KingSystem/Volante/vltLayerMgrTask.cpp66
1 files changed, 66 insertions, 0 deletions
diff --git a/src/KingSystem/Volante/vltLayerMgrTask.cpp b/src/KingSystem/Volante/vltLayerMgrTask.cpp
new file mode 100644
index 00000000..5a9f26ad
--- /dev/null
+++ b/src/KingSystem/Volante/vltLayerMgrTask.cpp
@@ -0,0 +1,66 @@
+#include <heap/seadHeapMgr.h>
+#include <thread/seadThread.h>
+#include "KingSystem/Utils/HeapUtil.h"
+
+// The heap helpers declared in HeapUtil.h are defined at the start of this TU in the original
+// binary: they follow a static initializer, their statics sit right before LayerMgrTask::sInstance
+// and they are out-of-line.
+namespace ksys::util {
+
+// Name, layout and purpose unknown; this is stubbed in release builds
+class DebugHeapHolder {
+ SEAD_SINGLETON_DISPOSER(DebugHeapHolder)
+ DebugHeapHolder() = default;
+
+public:
+ virtual ~DebugHeapHolder() = default;
+ virtual sead::Heap* getHeap() { return nullptr; }
+};
+
+SEAD_SINGLETON_DISPOSER_IMPL(DebugHeapHolder)
+
+// Name, layout and purpose unknown; this is stubbed in release builds
+class DebugHeapHolder2 {
+ SEAD_SINGLETON_DISPOSER(DebugHeapHolder2)
+ DebugHeapHolder2() = default;
+
+public:
+ virtual ~DebugHeapHolder2() = default;
+ virtual sead::Heap* getHeap() { return nullptr; }
+};
+
+SEAD_SINGLETON_DISPOSER_IMPL(DebugHeapHolder2)
+
+sead::Heap* getHeapOrCurrentHeap(sead::Heap* heap) {
+ if (heap)
+ return heap;
+
+ if (!sead::ThreadMgr::instance())
+ return nullptr;
+
+ return getCurrentHeap();
+}
+
+void adjustHeapOrCurrentHeap(sead::Heap* heap) {
+ if (!heap)
+ heap = getCurrentHeap();
+ heap->adjust();
+}
+
+sead::Heap* getCurrentHeap() {
+ return sead::HeapMgr::instance()->getCurrentHeap();
+}
+
+sead::Heap* getDebugHeap() {
+ if (!DebugHeapHolder::instance())
+ return nullptr;
+ return DebugHeapHolder::instance()->getHeap();
+}
+
+sead::Heap* getDebugHeap2() {
+ if (DebugHeapHolder2::instance())
+ return DebugHeapHolder2::instance()->getHeap();
+ return getDebugHeap();
+}
+
+} // namespace ksys::util