summaryrefslogtreecommitdiff
path: root/src/d/d_heap.cpp
blob: b3441f0d11796ebf43ae7a71d85faf2472b9b68f (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"
#include "s/s_Assert.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;

static bool sAssertOnAllocFailure = true;

// TODO TU splits?

void dHeapAllocator::onAlloc(EGG::HeapAllocArg *arg) {
    if (arg->ptr != nullptr) {
        return;
    }
    if (!sAssertOnAllocFailure) {
        return;
    }
    sAssert::assert();
}

EGG::ExpHeap *dHeap::init(const char *name, size_t size, EGG::Heap *parent) {
    heap = EGG::ExpHeap::create(size, parent, 4);
    if (heap != nullptr) {
        heap->setAllocMode(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);
}

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);
}