diff options
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 |
