mirror of
https://github.com/zeldaret/ss
synced 2026-05-25 07:23:00 -04:00
d75f4c92ef
* d_heap OK * wibo workaround
98 lines
3.1 KiB
C++
98 lines
3.1 KiB
C++
#include <d/d_heap.h>
|
|
#include <d/d_heap_alloc.h>
|
|
|
|
dHeap dHeap::work1Heap;
|
|
dHeap dHeap::work2Heap;
|
|
dHeap dHeap::workExHeap;
|
|
dHeap dHeap::layoutHeap;
|
|
dHeap dHeap::layoutExHeap;
|
|
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->ptr != 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);
|
|
if (heap != nullptr) {
|
|
heap->setGroupID(0);
|
|
heap->mName = name;
|
|
}
|
|
return heap;
|
|
}
|
|
|
|
void dHeap::createWork1Heap(size_t size, EGG::Heap *parent) {
|
|
static const char name[] = "ゲーム用作業用ヒープ(dHeap::work1Heap)";
|
|
work1Heap.init(name, size, parent);
|
|
}
|
|
void dHeap::createWork2Heap(size_t size, EGG::Heap *parent) {
|
|
static const char name[] = "ゲーム用作業用ヒープ(dHeap::work2Heap)";
|
|
work2Heap.init(name, size, parent);
|
|
}
|
|
void dHeap::createWorkExHeap(size_t size, EGG::Heap *parent) {
|
|
static const char name[] = "ゲーム用拡張作業用ヒープ(dHeap::workExHeap)";
|
|
workExHeap.init(name, size, parent);
|
|
}
|
|
void dHeap::createLayoutHeap(size_t size, EGG::Heap *parent) {
|
|
static const char name[] = "レイアウト作業用ヒープ(dHeap::layoutHeap)";
|
|
layoutHeap.init(name, size, parent);
|
|
}
|
|
void dHeap::createLayoutExHeap(size_t size, EGG::Heap *parent) {
|
|
static const char name[] = "レイアウト拡張作業用ヒープ(dHeap::layoutExHeap)";
|
|
layoutExHeap.init(name, size, parent);
|
|
}
|
|
void dHeap::createLayoutEx2Heap(size_t size, EGG::Heap *parent) {
|
|
static const char name[] = "レイアウト拡張作業用ヒープ2(dHeap::layoutEx2Heap)";
|
|
layoutEx2Heap.init(name, size, parent);
|
|
}
|
|
void dHeap::createLayoutResHeap(size_t size, EGG::Heap *parent) {
|
|
// Supposed to be "レイアウトリソース用ヒープ(dHeap::layoutResHeap)" but
|
|
// this creates a Linux compile issue with wibo
|
|
static const char name[] = "レイアウトリ\x83\x5Cース用ヒープ(dHeap::layoutResHeap)";
|
|
layoutResHeap.init(name, size, parent);
|
|
}
|
|
void dHeap::createFontHeap(size_t size, EGG::Heap *parent) {
|
|
static const char name[] = "フォント用ヒープ(dHeap::fontHeap)";
|
|
fontHeap.init(name, size, parent);
|
|
}
|
|
void dHeap::createHBMHeap(size_t size, EGG::Heap *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);
|
|
}
|