diff options
| author | Léo Lam <leo@leolam.fr> | 2026-09-28 03:39:30 +0200 |
|---|---|---|
| committer | Léo Lam <leo@leolam.fr> | 2026-10-04 06:50:35 +0200 |
| commit | e70ecefe40408e7e361b0f3ee14c08f87c208ace (patch) | |
| tree | 999100b8d8e344860079ac886b1693ac80bb58d8 /src/KingSystem/Volante/vltLayerMgrTask.cpp | |
| parent | f4cd38c43b436fe91def1a1b0b3dfe0134369870 (diff) | |
vlt: move the heap helpers into vltLayerMgrTask.cpp
The binary defines the HeapUtil.h helpers at the start of the
LayerMgrTask TU: their statics sit just before LayerMgrTask::sInstance.
(AI assisted using Claude Fable 5.1 and Claude Opus 5.5)
Diffstat (limited to 'src/KingSystem/Volante/vltLayerMgrTask.cpp')
| -rw-r--r-- | src/KingSystem/Volante/vltLayerMgrTask.cpp | 66 |
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 |
