mirror of
https://github.com/zeldaret/ss
synced 2026-05-31 01:15:38 -04:00
dHeap(Allocator) work
This commit is contained in:
+57
-9
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user