1#pragma once
2
3#include <container/seadStrTreeMap.h>
4#include <heap/seadExpHeap.h>
5#include <heap/seadHeapMgr.h>
6
7namespace al {
8class AudioResourceDirector;
9
10class MemorySystem {
11public:
12 MemorySystem(sead::Heap* heap);
13
14 void allocFailedCallbackFunc(const sead::HeapMgr::AllocFailedCallbackArg*);
15 void createSequenceHeap();
16 void freeAllSequenceHeap();
17 bool printSequenceHeap();
18 bool createSceneHeap(const char* stageName, bool backwards);
19 void createSceneResourceHeap(const char* stageName, bool backwards);
20 void destroySceneHeap();
21 void destroySceneResourceHeap();
22 void createCourseSelectHeap();
23 void destroyCourseSelectHeap();
24 void createWorldResourceHeap();
25 void destroyWorldResourceHeap();
26 void freeAllPlayerHeap();
27 sead::Heap* tryFindNamedHeap(const char* heapName);
28 sead::Heap* findNamedHeap(const char* heapName);
29 void addNamedHeap(sead::Heap* heap, const char* heapName);
30 void removeNamedHeap(const char* heapName);
31
32 sead::ExpHeap* getStationedHeap() { return mStationedHeap; }
33
34 sead::ExpHeap* getSequenceHeap() { return mSequenceHeap; }
35
36 sead::ExpHeap* getSceneResourceHeap() { return mSceneResourceHeap; }
37
38 sead::ExpHeap* getSceneHeap() { return mSceneHeap; }
39
40 sead::ExpHeap* getPlayerResourceHeap() { return mPlayerResourceHeap; }
41
42 sead::ExpHeap* getCourseSelectResourceHeap() { return mCourseSelectResourceHeap; }
43
44 sead::ExpHeap* getCourseSelectHeap() { return mCourseSelectHeap; }
45
46 sead::ExpHeap* getWorldResourceHeap() { return mWorldResourceHeap; }
47
48 AudioResourceDirector* getAudioResourceDirector() { return mAudioResourceDirector; }
49
50 void setAudioResourceDirector(AudioResourceDirector* audioResourceDirector) {
51 mAudioResourceDirector = audioResourceDirector;
52 }
53
54private:
55 sead::ExpHeap* mStationedHeap;
56 sead::ExpHeap* mSequenceHeap;
57 sead::ExpHeap* mSceneResourceHeap;
58 sead::ExpHeap* mSceneHeap;
59 sead::ExpHeap* mPlayerResourceHeap;
60 sead::ExpHeap* mCourseSelectResourceHeap;
61 sead::ExpHeap* mCourseSelectHeap;
62 sead::ExpHeap* mWorldResourceHeap;
63 sead::StrTreeMap<32, sead::Heap*> mHeapList;
64 AudioResourceDirector* mAudioResourceDirector;
65 bool mIsExistFileResource;
66 sead::Delegate1<MemorySystem, const sead::HeapMgr::AllocFailedCallbackArg*> mDelegate;
67};
68
69static_assert(sizeof(MemorySystem) == 0x90);
70} // namespace al
71