NSMBW-Decomp
A decompilation of New Super Mario Bros. Wii
Loading...
Searching...
No Matches
eggHeap.h
1#pragma once
2
3#include <types.h>
4#include <lib/egg/core/eggDisposer.h>
5#include <revolution/MEM.h>
6
7// [TODO: extend this]
8
9namespace EGG {
10
11class Allocator;
12class FrmHeap;
13
14class Heap : Disposer {
15public:
16 Heap()
17 : mFlag(0) {}
18 Heap(MEMiHeapHead *heapHead);
19 virtual ~Heap();
20 // [TODO: this is likely an enum]
21 virtual int getHeapKind() const = 0;
22 virtual void initAllocator(Allocator *allocator, long align) = 0;
23 virtual void *alloc(size_t, long) = 0;
24 virtual void free(void *) = 0;
25 virtual void destroy() = 0;
26
27 static void *alloc(size_t, int, EGG::Heap *);
28 static void free(void *, EGG::Heap *);
29
30 static Heap *findContainHeap(const void *);
31
32 void appendDisposer(Disposer *disposer) { nw4r::ut::List_Append(&mChildren, disposer); }
33 void removeDisposer(Disposer *disposer) { nw4r::ut::List_Remove(&mChildren, disposer); }
34
35 MEMiHeapHead *mHeapHandle;
36 void *mHeapBuffer;
37 Heap *mParentHeap;
38 u16 mFlag; // [TODO: TBitFlag<u16>]
39 u8 mPad1[0xa];
40 nw4r::ut::List mChildren;
41 const char *mpName;
42
43 static FrmHeap *dynamicCastToFrm(Heap *heap) {
44 if (heap != nullptr && heap->getHeapKind() == 2) {
45 return (FrmHeap *)heap;
46 }
47 return nullptr;
48 }
49
50 static Heap *sCurrentHeap;
51};
52
53} // namespace EGG
54
55void *operator new(size_t, void *);
56void *operator new(size_t, int);
57void *operator new(size_t, EGG::Heap *, int);
58void *operator new[](size_t, EGG::Heap *, int);
Disposer()
Registers the disposer in the containing heap.