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