diff options
| author | robojumper <robojumper@gmail.com> | 2024-05-04 00:39:30 +0200 |
|---|---|---|
| committer | robojumper <robojumper@gmail.com> | 2024-05-04 19:59:42 +0200 |
| commit | fa4b2862fd54925affe5ce9fa64dc6c37a71fb28 (patch) | |
| tree | 832fea965092b5b492dcc0d96f738c8261da2ed2 /src/d/d_heap.cpp | |
| parent | 1ecdfe9a4dfdd429c04424d77a9c0e6c148832a1 (diff) | |
dHeap(Allocator) work
Diffstat (limited to 'src/d/d_heap.cpp')
| -rw-r--r-- | src/d/d_heap.cpp | 66 |
1 files changed, 57 insertions, 9 deletions
diff --git a/src/d/d_heap.cpp b/src/d/d_heap.cpp index 4bfa5e52..2e9c3198 100644 --- a/src/d/d_heap.cpp +++ b/src/d/d_heap.cpp @@ -1,4 +1,5 @@ #include <d/d_heap.h> +#include <d/d_heap_alloc.h> dHeap dHeap::work1Heap; dHeap dHeap::work2Heap; @@ -9,6 +10,22 @@ dHeap dHeap::layoutEx2Heap; dHeap dHeap::layoutResHeap; dHeap dHeap::fontHeap; dHeap dHeap::HBMHeap; +dHeapAllocator dHeapAllocator::sAllocator; + +extern u8 lbl_80571C58; +extern "C" void fn_802de710(); + +// TODO TU splits? + +void dHeapAllocator::onAlloc(EGG::HeapAllocArg *arg) { + if (arg->heap != nullptr) { + return; + } + if (lbl_80571C58 == 0) { + return; + } + fn_802de710(); +} EGG::ExpHeap *dHeap::init(const char *name, size_t size, EGG::Heap *parent) { heap = EGG::ExpHeap::create(size, parent, 4); @@ -18,30 +35,61 @@ EGG::ExpHeap *dHeap::init(const char *name, size_t size, EGG::Heap *parent) { } return heap; } + void dHeap::createWork1Heap(size_t size, EGG::Heap *parent) { - work1Heap.init("ゲーム用作業用ヒープ(dHeap::work1Heap)", size, parent); + static const char name[] = "ゲーム用作業用ヒープ(dHeap::work1Heap)"; + work1Heap.init(name, size, parent); } void dHeap::createWork2Heap(size_t size, EGG::Heap *parent) { - work2Heap.init("ゲーム用作業用ヒープ(dHeap::work2Heap)", size, parent); + static const char name[] = "ゲーム用作業用ヒープ(dHeap::work2Heap)"; + work2Heap.init(name, size, parent); } void dHeap::createWorkExHeap(size_t size, EGG::Heap *parent) { - workExHeap.init("ゲーム用拡張作業用ヒープ(dHeap::workExHeap)", size, parent); + static const char name[] = "ゲーム用拡張作業用ヒープ(dHeap::workExHeap)"; + workExHeap.init(name, size, parent); } void dHeap::createLayoutHeap(size_t size, EGG::Heap *parent) { - layoutHeap.init("レイアウト作業用ヒープ(dHeap::layoutHeap)", size, parent); + static const char name[] = "レイアウト作業用ヒープ(dHeap::layoutHeap)"; + layoutHeap.init(name, size, parent); } void dHeap::createLayoutExHeap(size_t size, EGG::Heap *parent) { - layoutExHeap.init("レイアウト拡張作業用ヒープ(dHeap::layoutExHeap)", size, parent); + static const char name[] = "レイアウト拡張作業用ヒープ(dHeap::layoutExHeap)"; + layoutExHeap.init(name, size, parent); } void dHeap::createLayoutEx2Heap(size_t size, EGG::Heap *parent) { - layoutEx2Heap.init("レイアウト拡張作業用ヒープ2(dHeap::layoutEx2Heap)", size, parent); + static const char name[] = "レイアウト拡張作業用ヒープ2(dHeap::layoutEx2Heap)"; + layoutEx2Heap.init(name, size, parent); } void dHeap::createLayoutResHeap(size_t size, EGG::Heap *parent) { - layoutResHeap.init("レイアウトリソース用ヒープ(dHeap::layoutResHeap)", size, parent); + static const char name[] = "レイアウトリソース用ヒープ(dHeap::layoutResHeap)"; + layoutResHeap.init(name, size, parent); } void dHeap::createFontHeap(size_t size, EGG::Heap *parent) { - fontHeap.init("フォント用ヒープ(dHeap::fontHeap)", size, parent); + static const char name[] = "フォント用ヒープ(dHeap::fontHeap)"; + fontHeap.init(name, size, parent); } void dHeap::createHBMHeap(size_t size, EGG::Heap *parent) { - HBMHeap.init("HBM用ヒープ(dHeap::HBMHeap)", size, parent); + static const char name[] = "HBM用ヒープ(dHeap::HBMHeap)"; + HBMHeap.init(name, size, parent); +} + +// TODO this doesn't match (many more stack stores) +void dHeapAllocator::initCallbacks() { + sAllocator.doInitCallbacks(); +} + +void *operator new(size_t size) { + return EGG::Heap::alloc(size, 0x04, nullptr); +} + +void *operator new[](size_t size) { + return EGG::Heap::alloc(size, 0x04, nullptr); +} + +void operator delete(void *ptr) { + return EGG::Heap::free(ptr, nullptr); +} + +void operator delete[](void *ptr) { + return EGG::Heap::free(ptr, nullptr); } |
