summaryrefslogtreecommitdiff
path: root/src/d/d_heap.cpp
blob: 2e9c3198defbc3567d3bf6b3f1cb45f73da15174 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#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->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);
    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) {
    static const char name[] = "レイアウトリソース用ヒープ(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);
}