Files
2025-09-16 22:32:07 -04:00

75 lines
2.5 KiB
C++

#ifndef M_HEAP_H
#define M_HEAP_H
#include "common.h"
#include "egg/core/eggExpHeap.h"
#include "egg/core/eggFrmHeap.h"
// #include "egg/core/eggExpHeap.h"
// #include "egg/core/eggAssertHeap.h"
// TODO: REWRITE THIS
namespace EGG {
class ExpHeap;
class AssertHeap;
} // namespace EGG
// TODO: Doc symbols and func locations
class mHeap {
public:
// TODO - fix when importing RVL MEM
enum AllocOptBit_t {
OPT_NONE = 0x0,
OPT_1 = 0x1,
OPT_2 = 0x2,
OPT_4 = 0x4,
};
static u16 GetOptFlag(AllocOptBit_t);
static EGG::Heap *setCurrentHeap(EGG::Heap *);
static EGG::Heap *
createExpHeap(size_t size, EGG::Heap *parentHeap, const char *name, u32 align, AllocOptBit_t attrs);
static size_t adjustExpHeap(EGG::ExpHeap *heap);
static size_t expHeapCost(size_t start, u32 size);
static EGG::FrmHeap *
createFrmHeap(size_t size, EGG::Heap *parentHeap, const char *name, size_t align, AllocOptBit_t attrs);
static void destroyFrmHeap(EGG::FrmHeap *heap);
static size_t adjustFrmHeap(EGG::FrmHeap *heap);
static size_t frmHeapCost(size_t start, u32 size);
mHeap() : heap(nullptr) {}
mHeap(EGG::Heap *heap);
~mHeap();
static EGG::ExpHeap *createHeap(size_t size, EGG::Heap *, const char *name);
static void saveCurrentHeap();
static void restoreCurrentHeap();
static EGG::FrmHeap *
createFrmHeapToCurrent(size_t size, EGG::Heap *parentHeap, const char *name, u32 align, AllocOptBit_t attrs);
static int getGameHeapNum();
static EGG::Heap *createGameHeap(int heapNum, size_t size, EGG::Heap *parentHeap);
static void createGameHeap1(size_t size, EGG::Heap *parentHeap);
static void createArchiveHeap(size_t size, EGG::Heap *parentHeap);
static void createCommandHeap(size_t size, EGG::Heap *parentHeap);
static void createDylinkHeap(size_t size, EGG::Heap *parentHeap);
static EGG::AssertHeap *createAssertHeap(EGG::Heap *parentHeap);
static EGG::FrmHeap *makeHeapOnCurrentGameHeap(size_t size, const char *name, u32 align, AllocOptBit_t flags);
static int getDefaultGameHeapId();
static bool isValidHeapId(u32 id) {
return id >= 1 && id <= 2;
}
static EGG::Heap *g_gameHeaps[4];
static EGG::Heap *s_SavedCurrentHeap;
static EGG::Heap *g_archiveHeap;
static EGG::Heap *g_commandHeap;
static EGG::ExpHeap *g_dylinkHeap;
static EGG::AssertHeap *g_assertHeap;
static u8 g_DefaultGameHeapId;
static const char *const s_GameHeapNames[4];
EGG::Heap *heap;
}; // namespace mHeap
#endif