some fManager, fBase, mHeap, f - lists and tree stuff

This commit is contained in:
elijah-thomas774
2024-03-17 17:40:00 -04:00
parent c2a4909bd2
commit 606cc15eed
29 changed files with 1270 additions and 344 deletions
+4
View File
@@ -65,6 +65,10 @@ public:
*/
bool removeTreeNode(cTreeNd_c *node);
const cTreeNd_c *getRoot() const {
return mpRootNode;
}
protected:
cTreeNd_c *mpRootNode; ///< The root node of the tree.
};
+27 -4
View File
@@ -1,8 +1,31 @@
#pragma once
#include "egg/core/eggHeap.h"
#include "egg/core/eggExpHeap.h"
class dHeap {
public:
static EGG::Heap* work1Heap;
};
public:
EGG::ExpHeap *heap;
public:
static dHeap work1Heap;
static dHeap work2Heap;
static dHeap workExHeap;
static dHeap layoutHeap;
static dHeap layoutExHeap;
static dHeap layoutEx2Heap;
static dHeap layoutResHeap;
static dHeap fontHeap;
static dHeap HBMHeap;
public:
EGG::ExpHeap *init(const char *name, size_t size, EGG::Heap *parent);
static void createWork1Heap(size_t size, EGG::Heap *parent);
static void createWork2Heap(size_t size, EGG::Heap *parent);
static void createWorkExHeap(size_t size, EGG::Heap *parent);
static void createLayoutHeap(size_t size, EGG::Heap *parent);
static void createLayoutExHeap(size_t size, EGG::Heap *parent);
static void createLayoutEx2Heap(size_t size, EGG::Heap *parent);
static void createLayoutResHeap(size_t size, EGG::Heap *parent);
static void createFontHeap(size_t size, EGG::Heap *parent);
static void createHBMHeap(size_t size, EGG::Heap *parent);
};
+1
View File
@@ -0,0 +1 @@
#pragma once
+1
View File
@@ -0,0 +1 @@
#pragma once
+1 -2
View File
@@ -3,7 +3,6 @@
#include "egg/core/eggHeap.h"
#include <common.h>
namespace EGG {
class ExpHeap : public Heap {
@@ -22,7 +21,7 @@ public:
public:
/* 80495ab0 */ ExpHeap(MEMiHeapHead *heapHead);
/* 80495b70 */ static ExpHeap *create(void *block, u32 size, u16 attr);
/* 80495c30 */ static ExpHeap *create(u32 size, Heap *heap, u16 attr);
/* 80495c30 */ static ExpHeap *create(size_t size, Heap *heap, u16 attr);
/* 80495d00 */ void setGroupID(u16 groupId);
/* 80495f80 */ u32 getSizeForMBlock(const void *block);
};
+4 -1
View File
@@ -65,6 +65,9 @@ public:
/* vt 0x28 | 00000000 */ virtual u32 adjust() = 0;
public:
void setName(const char *name) {
mName = name;
}
inline bool isExpHeap() {
return getHeapKind() == HEAP_KIND_EXPANDED;
}
@@ -94,7 +97,7 @@ public:
/* 80495690 */ static Heap *findHeap(MEMiHeapHead *heapHandle);
/* 80495730 */ Heap *findParentHeap();
/* 80495780 */ static Heap *findContainHeap(const void *memBlock);
/* 80495560 */ static void *alloc(u32 size, int align, Heap *heap);
/* 80495560 */ static void *alloc(size_t size, int align, Heap *heap);
/* 804957c0 */ static void free(void *memBlock, Heap *heap);
/* 80495830 */ void dispose();
/* 804958a0 */ void dump();
+43 -14
View File
@@ -4,6 +4,7 @@
// https://github.com/NSMBW-Community/NSMBW-Decomp/blob/master/include/dol/framework/f_base.hpp and the Skyward Sword
// Ghidra database. Comments and docs can be seen above. stripped in this file for easier looking
#include "egg/core/eggExpHeap.h"
#include "egg/core/eggFrmHeap.h"
#include "f/f_base_id.h"
#include "f/f_helper_unk.h"
@@ -12,28 +13,36 @@
#include "f/f_profile.h"
#include <common.h>
// Ghidra: fBase
// size: 0x64
// official name
class fBase_c {
public:
/* 0x00 */ fBaseID_e unique_ID;
/* 0x04 */ u32 params1; // params1
/* 0x04 */ u32 params; // params1
/* 0x08 */ ProfileName profile_name; // Actor Id
/* 0x0A */ u8 lifecycle_state;
/* 0x0B */ bool delete_request;
/* 0x0C */ bool update_request;
/* 0x0D */ bool retry_create;
/* 0x0C */ s8 update_request;
/* 0x0D */ bool create_request;
/* 0x0E */ u8 group_type;
/* 0x0F */ u8 proc_control;
/* 0x10 */ fManager_c manager;
/* 0x50 */ fBaHelper_c *p_unused_helper;
/* 0x54 */ fLiMgBa_c unused_list;
/* 0x50 */ fBaHelper_c *p_helper;
/* 0x54 */ fLiMgBa_c actor_list;
/* 0x5C */ EGG::FrmHeap *p_heap;
/* 0x60 */ // vtable
public:
enum LIFECYCLE_e { WAITING_FOR_CREATE, ACTIVE, TO_BE_DELETED };
enum UPDATE_STATUS_e {
UPDATING,
UPDATE_REQUEST,
UPDATE_FORCE,
};
enum LIFECYCLE_e {
WAITING_FOR_CREATE,
ACTIVE,
TO_BE_DELETED,
};
enum GROUP_TYPE_e {
OTHER,
SCENE,
@@ -59,6 +68,17 @@ public:
proc_control &= ~flag;
}
fManager_c *getManager() {
return &manager;
}
void setParams() {
unique_ID = m_rootUniqueID;
params = m_tmpCtData.params;
profile_name = m_tmpCtData.prof_name;
group_type = m_tmpCtData.group_type;
}
public:
/* 802e12f0 */ fBase_c();
/* 802e23b0 */ static void *operator new(size_t);
@@ -78,8 +98,8 @@ public: // vtable 0x60
/* 0x30 | 802E1AA0 */ virtual int preDraw();
/* 0x34 | 802E1AD0 */ virtual void postDraw(MAIN_STATE_e state);
/* 0x38 | 802E1B90 */ virtual void deleteReady();
/* 0x3C | 802E20E0 */ virtual bool entryFrmHeap(unsigned long size, EGG::Heap *parentHeap);
/* 0x40 | 802E22E0 */ virtual bool entryFrmHeapNonAdjust(unsigned long size, EGG::Heap *parentHeap);
/* 0x3C | 802E20E0 */ virtual bool entryFrmHeap(size_t size, EGG::Heap *parentHeap);
/* 0x40 | 802E22E0 */ virtual bool entryFrmHeapNonAdjust(size_t size, EGG::Heap *parentHeap);
/* 0x44 | 802E23A0 */ virtual bool createHeap();
/* 0x48 | 802E1480 */ virtual ~fBase_c();
@@ -92,9 +112,13 @@ public:
/* 802e1ae0 */ int drawPack();
/* 802e1ba0 */ int connectProc();
/* 802e1e00 */ void deleteRequest();
/* 802e1e80 */ void forceUpdate();
/* 802e1f90 */ static fBase_c *getConnectRoot();
/* 802e1f90 */ static fBase_c *getConnectTreeNext(fBase_c *);
/* 802e1f90 */ fBase_c *getConnectParent() const;
/* 802e1fb0 */ fBase_c *getConnectChild() const;
/* 802e1fd0 */ fBase_c *getConnectBrNext() const;
/* 802e1ff0 */ void updateExecutePriority(u16 priority);
/* 802e2090 */ bool setConnectChild(fBase_c *child);
/* 802e2420 */ void runCreate();
/* 802e24a0 */ fBase_c *getChildProcessCreateState() const;
@@ -110,16 +134,21 @@ public:
u8 groupType);
public:
/* 80575ba8 */ static fLiMgBa_c m_additional_actors;
/* 80575ba8 */ static fLiMgBa_c m_forceExecuteList;
/* 80575bb0 */ static int (*sLoadAsyncCallback)();
/* 80575bb4 */ static void (*sUnloadCallback)();
private:
/* 80573fb8 */ static fBaseID_e m_rootUniqueID;
/* 805b84c8 */ static ProfileName m_tmpCtProfName;
/* 805b84cc */ static fTrNdBa_c *m_tmpCtConnectParent;
/* 805b84d0 */ static u32 m_tmpCtParam;
/* 805b84d4 */ static u8 m_tmpCtGroupType;
struct ConstructData {
/* 805b84c8 */ ProfileName prof_name;
/* 805b84cc */ fTrNdBa_c *connect_parent;
/* 805b84d0 */ u32 params;
/* 805b84d4 */ u8 group_type;
};
static ConstructData m_tmpCtData;
friend class fManager_c;
friend class fLiNdBa_c;
+1 -4
View File
@@ -9,7 +9,6 @@
#include "f/f_profile.h"
#include <common.h>
class fBase_c;
/// @brief A list of fLiNdBa_c nodes.
@@ -24,9 +23,7 @@ public:
int countNodeByProfName(ProfileName profName) const;
/* 802e2760 */ const fLiNdBa_c *searchNodeByID(fBaseID_e id) const;
/* 802e2790 */ const fLiNdBa_c *searchNodeByID(fBaseID_e id, fLiMgBa_c *start) const;
/* 802e27d0 */ void link(fLiNdBa_c &, fBase_c *);
/* 802e2830 */ void unlink(fLiNdBa_c &);
/* 802e2790 */ const fLiNdBa_c *searchNodeByProfName(ProfileName name, fLiNdBa_c *start) const;
inline fLiNdBa_c *getFirst() const {
return (fLiNdBa_c *)cListMg_c::getFirst();
+1 -1
View File
@@ -15,7 +15,7 @@ class fBase_c;
class fLiMgPTMF_c : public fLiMgBa_c {
public:
fLiMgPTMF_c(int (fBase_c::*procFunc)()) : mpProcFunc(procFunc) {}
/* 802e2680 */ bool addNode(fLiNdPrio_c *node);
/* 802e2680 */ void addNode(fLiNdPrio_c *node);
/* 802e26e0 */ bool walkPack();
fLiNdPrio_c *getFirst() const {
+3 -2
View File
@@ -6,12 +6,10 @@
#include "c/c_list.h"
#include <common.h>
class fBase_c;
class fLiNdBa_c : public cListNd_c {
public:
fLiNdBa_c() : p_owner(nullptr) {}
fLiNdBa_c(fBase_c *owner) : p_owner(owner) {}
inline fLiNdBa_c *getPrev() const {
@@ -22,5 +20,8 @@ public:
return (fLiNdBa_c *)cListNd_c::getNext();
}
/* 802e27d0 */ void link(fBase_c *);
/* 802e2830 */ void unlink();
fBase_c *p_owner;
};
+24 -6
View File
@@ -7,14 +7,19 @@
#include "f/f_profile.h"
#include <common.h>
/// @brief A list node with priority fields for an order in a list.
/// @note Unofficial name.
class fLiNdPrio_c : public fLiNdBa_c {
public:
/// @brief Constructs a new list node.
/// @param owner The node's owner.
fLiNdPrio_c(fBase_c *owner) : fLiNdBa_c(owner), mOrder(0), mNewOrder(0) {}
fLiNdPrio_c(fBase_c *owner) : fLiNdBa_c(owner), m_order(0), m_new_order(0) {}
void Initialize(fBase_c *owner) {
p_owner = owner;
m_order = 0;
m_new_order = 0;
}
fLiNdPrio_c *getPrev() const {
return (fLiNdPrio_c *)fLiNdBa_c::getPrev();
@@ -25,13 +30,26 @@ public:
}
u16 getOrder() const {
return mOrder;
return m_order;
}
u16 getNewOrder() const {
return mNewOrder;
return m_new_order;
}
u16 mOrder; ///< The priority of this node.
u16 mNewOrder; ///< The priority the node should change to if it differs from ::mOrder.
bool isPriorityChange() {
return m_new_order != m_order;
}
void updatePriority() {
m_order = m_new_order;
}
void setOrder(u16 order) {
m_order = order;
m_new_order = order;
}
u16 m_order; ///< The priority of this node.
u16 m_new_order; ///< The priority the node should change to if it differs from ::mOrder.
};
+14 -22
View File
@@ -1,15 +1,16 @@
#pragma once
// this file was ported from https://github.com/NSMBW-Community/NSMBW-Decomp/blob/master/include/dol/framework/f_manager.hpp
// this file was ported from
// https://github.com/NSMBW-Community/NSMBW-Decomp/blob/master/include/dol/framework/f_manager.hpp
#include "f/f_base_id.h"
#include "f/f_list_mg_ptmf.h"
#include "f/f_list_mg.h"
#include "f/f_list_mg_ptmf.h"
#include "f/f_list_nd.h"
#include "f/f_list_nd_prio.h"
#include "f/f_profile.h"
#include "f/f_tree_mg_ptmf.h"
#include "f/f_tree_nd.h"
#include "f/f_profile.h"
#define GET_PROC_FLAG(proc) (1 << (proc - 1))
@@ -17,10 +18,7 @@ class fBase_c;
class fManager_c {
public:
enum LOOP_PROC_e {
NOTHING, CONNECT, CREATE, EXECUTE, DELETE, DRAW
};
enum LOOP_PROC_e { NOTHING, CONNECT, CREATE, EXECUTE, DELETE, DRAW };
enum PROC_FLAGS {
PROC_FLAG_CONNECT = GET_PROC_FLAG(CONNECT),
@@ -29,13 +27,7 @@ public:
PROC_FLAG_DELETE = GET_PROC_FLAG(DELETE),
PROC_FLAG_DRAW = GET_PROC_FLAG(DRAW)
};
fManager_c(fBase_c *owner) :
connect_node(owner),
execute_node(owner),
draw_node(owner),
search_node(owner) {}
fManager_c(fBase_c *owner) : connect_node(owner), execute_node(owner), draw_node(owner), search_node(owner) {}
/* 802e28c0 */ int getSearchTableNum();
/* 802e28d0 */ static fBase_c *searchBaseByID(fBaseID_e id);
/* 802e2920 */ static fBase_c *searchBaseByProfName(ProfileName profID, const fBase_c *parent);
@@ -43,21 +35,21 @@ public:
/* 802e29e0 */ static void mainLoop();
private:
fTrNdBa_c connect_node; ///< The node in ::m_connectManage.
fTrNdBa_c connect_node; ///< The node in ::m_connectManage.
fLiNdPrio_c execute_node; ///< The node in ::m_executeManage.
fLiNdPrio_c draw_node; ///< The node in ::m_drawManage.
fLiNdBa_c search_node; ///< The node in ::m_searchManage.
fLiNdPrio_c draw_node; ///< The node in ::m_drawManage.
fLiNdBa_c search_node; ///< The node in ::m_searchManage.
/* 805b84d8 */ static fTrMgPTMF_c m_connectManage; ///< A tree that connects all loaded bases.
/* 805b84e8 */ static fLiMgPTMF_c m_createManage; ///< A list of all the bases scheduled for creation.
/* 805b84e8 */ static fLiMgPTMF_c m_createManage; ///< A list of all the bases scheduled for creation.
/* 805b84fc */ static fLiMgPTMF_c m_executeManage; ///< A list of all the bases scheduled for execution.
/* 805b8510 */ static fLiMgPTMF_c m_drawManage; ///< A list of all the bases scheduled for drawing.
/* 805b8524 */ static fLiMgPTMF_c m_deleteManage; ///< A list of all the bases scheduled for deletion.
/* 805b8510 */ static fLiMgPTMF_c m_drawManage; ///< A list of all the bases scheduled for drawing.
/* 805b8524 */ static fLiMgPTMF_c m_deleteManage; ///< A list of all the bases scheduled for deletion.
/* 805b8548 */ static fLiMgBa_c m_searchManage[8];
/* 80575bb8 */ static u32 m_StopProcInf; ///< Which processes should be executed this frame.
/* 80575bb8 */ static u32 m_StopProcInf; ///< Which processes should be executed this frame.
/* 80573fc0 */ static LOOP_PROC_e m_nowLoopProc; ///< The process ::mainLoop is currently in.
friend class fBase_c;
};
};
+35 -25
View File
@@ -4,20 +4,30 @@
#include "f/f_profile_name.h"
/// @brief Creates a profile of a base with given values for execute and draw order.
#define SPECIAL_BASE_PROFILE(profName, className, executeOrder, drawOrder, baseProperties) void *className##_classInit() { return new className(); } \
fProfile::fBaseProfile_c g_profile_##profName = { &className##_classInit, executeOrder, drawOrder, baseProperties }
#define SPECIAL_BASE_PROFILE(profName, className, executeOrder, drawOrder, baseProperties) \
void *className##_classInit() { \
return new className(); \
} \
fProfile::fBaseProfile_c g_profile_##profName = {&className##_classInit, executeOrder, drawOrder, baseProperties}
/// @brief Creates a profile of an actor with given values for execute and draw order and the actor properties. @see SPECIAL_BASE_PROFILE
#define SPECIAL_ACTOR_PROFILE(profName, className, executeOrder, drawOrder, baseProperties, properties) void *className##_classInit() { return new className(); } \
const fProfile::fActorProfile_c g_profile_##profName = { &className##_classInit, executeOrder, drawOrder, baseProperties, properties }
/// @brief Creates a profile of an actor with given values for execute and draw order and the actor properties. @see
/// SPECIAL_BASE_PROFILE
#define SPECIAL_ACTOR_PROFILE(profName, className, executeOrder, drawOrder, baseProperties, properties) \
void *className##_classInit() { \
return new className(); \
} \
const fProfile::fActorProfile_c g_profile_##profName = {&className##_classInit, executeOrder, drawOrder, \
baseProperties, properties}
/// @brief Creates a profile for a base, with the profile number as the priority for both the draw and execute order. @see SPECIAL_BASE_PROFILE
#define DEFAULT_BASE_PROFILE(profName, className) SPECIAL_BASE_PROFILE(profName, className, fProfile::profName, fProfile::profName);
/// @brief Creates a profile for a base, with the profile number as the priority for both the draw and execute order.
/// @see SPECIAL_BASE_PROFILE
#define DEFAULT_BASE_PROFILE(profName, className) \
SPECIAL_BASE_PROFILE(profName, className, fProfile::profName, fProfile::profName);
/// @brief Creates a profile of an actor with default values. @see DEFAULT_BASE_PROFILE
#define DEFAULT_ACTOR_PROFILE(profName, className, baseProperties, properties) SPECIAL_ACTOR_PROFILE(profName, className, fProfile::profName, fProfile::profName, baseProperties, properties);
#define DEFAULT_ACTOR_PROFILE(profName, className, baseProperties, properties) \
SPECIAL_ACTOR_PROFILE(profName, className, fProfile::profName, fProfile::profName, baseProperties, properties);
/*
fProfile::fActorProfile_c g_profile_NAME = {
@@ -46,22 +56,22 @@ char *dProf_getName(ProfileName profName);
/// @note Unofficial name.
namespace fProfile {
/// @brief A set of basic information needed to construct a base.
/// @details A profile consists of a pointer to a constructor function
/// and a priority value for execution and drawing order.
struct fBaseProfile_c {
void *(*mpClassInit)(); ///< The constructor function.
u16 mExecuteOrder; ///< The execution priority of the base.
u16 mDrawOrder; ///< The draw priority of the base.
u32 mBaseProperties;
};
/// @brief A set of basic information needed to construct a base.
/// @details A profile consists of a pointer to a constructor function
/// and a priority value for execution and drawing order.
struct fBaseProfile_c {
void *(*mpClassInit)(); ///< The constructor function.
u16 m_execute_order; ///< The execution priority of the base.
u16 m_draw_order; ///< The draw priority of the base.
u32 mBaseProperties;
};
/// @brief A set of basic information needed to construct an actor.
/// @details In addition to the fields in fBaseProfile_c, it also contains some properties about the actor.
struct fActorProfile_c : fBaseProfile_c {
u32 mActorProperties; ///< Some actor-related properties. @todo Document the bitfield.
};
/// @brief A set of basic information needed to construct an actor.
/// @details In addition to the fields in fBaseProfile_c, it also contains some properties about the actor.
struct fActorProfile_c : fBaseProfile_c {
u32 mActorProperties; ///< Some actor-related properties. @todo Document the bitfield.
};
extern fBaseProfile_c *(*sProfileList)[NUMBER_OF_ACTORS]; ///< A list of all profiles.
extern fBaseProfile_c *(*sProfileList)[NUMBER_OF_ACTORS]; ///< A list of all profiles.
} // namespace fProfile
} // namespace fProfile
+4 -1
View File
@@ -7,7 +7,6 @@
#include "f/f_profile.h"
#include <common.h>
class fTrNdBa_c;
/// @brief A container for a tree of fTrNdBa_c nodes.
@@ -29,4 +28,8 @@ public:
* @return The found node, or @p nullptr if none was found.
*/
const fTrNdBa_c *searchNodeByGroupType(u8 groupType, const fTrNdBa_c *parent) const;
const fTrNdBa_c *getRoot() const {
return (fTrNdBa_c *)cTreeMg_c::getRoot();
}
};
-1
View File
@@ -7,7 +7,6 @@
#include "f/f_tree_mg.h"
#include <common.h>
class fBase_c;
/// @brief A container for a tree of fTrNdBa_c nodes with a reference to a process function.
-1
View File
@@ -7,7 +7,6 @@
#include "f/f_profile.h"
#include <common.h>
class fBase_c;
class fTrNdBa_c : public cTreeNd_c {
+36 -28
View File
@@ -1,37 +1,45 @@
#pragma once
#include "egg/core/eggHeap.h"
#include "egg/core/eggFrmHeap.h"
#include "egg/core/eggHeap.h"
// #include "egg/core/eggExpHeap.h"
// #include "egg/core/eggAssertHeap.h"
namespace EGG {
class ExpHeap;
class AssertHeap;
}
class ExpHeap;
class AssertHeap;
} // namespace EGG
// TODO: Doc symbols and func locations
namespace mHeap {
/* 802f0f00 */ u8 copyAttribute(u32);
/* 802f0f40 */ EGG::Heap* setCurrentHeap(EGG::Heap*);
/* 802f0f50 */ EGG::ExpHeap* createExpHeap(s32 size, EGG::Heap* parentHeap, char* name, s32 align, u32 unk);
/* 802f1060 */ void adjustExpHeap(EGG::Heap* heap);
/* 802f10d0 */ s32 expHeapCost(s32 start, s32 size);
/* 802f10f0 */ EGG::FrmHeap* createFrmHeap(s32 size, EGG::Heap* parentHeap, char* name, s32 align, u32 unk);
/* 802f1200 */ void destroyFrmHeap(EGG::Heap* heap);
/* 802f1220 */ void adjustFrmHeap(EGG::Heap* heap);
/* 802f1290 */ s32 frmHeapCost(s32 start, s32 size);
/* 802f12b0 */ void setTempHeap(EGG::Heap** prevHeap, EGG::Heap* tempNewHeap);
/* 802f12f0 */ void restoreTempHeap(EGG::Heap** prevHeap);
/* 802f1350 */ void createHeap(s32 size, EGG::Heap*, char* name);
/* 802f13d0 */ void saveCurrentHeap();
/* 802f13e0 */ void restoreCurrentHeap();
/* 802f1410 */ EGG::Heap* makeFrmHeapAndSet(s32 size, EGG::Heap* parentHeap, char* name, s32 align, u32 unk);
/* 802f1450 */ int getGameHeapNum();
/* 802f1460 */ EGG::Heap* createGameHeap(s32 heapNum, s32 size, EGG::Heap* parentHeap);
/* 802f1510 */ EGG::Heap* createGameHeap1(s32 size, EGG::Heap* parentHeap);
/* 802f1560 */ void createArchiveHeap(s32 size, EGG::Heap* parentHeap);
/* 802f1590 */ void createCommandHeap(s32 size, EGG::Heap* parentHeap);
/* 802f15c0 */ void createDylinkHeap(s32 size, EGG::Heap* parentHeap);
/* 802f15f0 */ void createAssertHeap(EGG::Heap* parentHeap);
/* 802f1640 */ EGG::Heap* makeHeapOnCurrentGameHeap(s32 size, char* name, s32 align, u32 unk);
};
/* 802f0f00 */ u8 copyAttribute(u32);
/* 802f0f40 */ EGG::Heap *setCurrentHeap(EGG::Heap *);
/* 802f0f50 */ EGG::ExpHeap *createExpHeap(size_t size, EGG::Heap *parentHeap, char *name, s32 align, u32 unk);
/* 802f1060 */ void adjustExpHeap(EGG::Heap *heap);
/* 802f10d0 */ s32 expHeapCost(size_t start, size_t size);
/* 802f10f0 */ EGG::FrmHeap *createFrmHeap(size_t size, EGG::Heap *parentHeap, char *name, s32 align, u32 unk);
/* 802f1200 */ void destroyFrmHeap(EGG::FrmHeap *heap);
/* 802f1220 */ size_t adjustFrmHeap(EGG::FrmHeap *heap);
/* 802f1290 */ s32 frmHeapCost(size_t start, size_t size);
/* 802f12b0 */ void setTempHeap(EGG::Heap **prevHeap, EGG::Heap *tempNewHeap);
/* 802f12f0 */ void restoreTempHeap(EGG::Heap **prevHeap);
/* 802f1350 */ void createHeap(size_t size, EGG::Heap *, char *name);
/* 802f13d0 */ void saveCurrentHeap();
/* 802f13e0 */ void restoreCurrentHeap();
/* 802f1410 */ EGG::FrmHeap *makeFrmHeapAndUpdate(size_t size, EGG::Heap *parentHeap, const char *name, s32 align,
u32 unk);
/* 802f1450 */ int getGameHeapNum();
/* 802f1460 */ EGG::Heap *createGameHeap(s32 heapNum, size_t size, EGG::Heap *parentHeap);
/* 802f1510 */ EGG::Heap *createGameHeap1(s32 size, EGG::Heap *parentHeap);
/* 802f1560 */ void createArchiveHeap(size_t size, EGG::Heap *parentHeap);
/* 802f1590 */ void createCommandHeap(size_t size, EGG::Heap *parentHeap);
/* 802f15c0 */ void createDylinkHeap(size_t size, EGG::Heap *parentHeap);
/* 802f15f0 */ void createAssertHeap(EGG::Heap *parentHeap);
/* 802f1640 */ EGG::Heap *makeHeapOnCurrentGameHeap(size_t size, char *name, s32 align, u32 unk);
extern EGG::ExpHeap *g_gameHeaps[4];
extern EGG::ExpHeap *s_SavedCurrentHeap;
extern EGG::ExpHeap *g_archiveHeap;
extern EGG::ExpHeap *g_commandHeap;
extern EGG::ExpHeap *g_dylinkHeap;
extern EGG::AssertHeap *g_assertHeap;
}; // namespace mHeap