1#pragma once
2
3#include "heap/seadHeap.h"
4
5namespace sead
6{
7class FrameHeap : public Heap
8{
9 SEAD_RTTI_OVERRIDE(FrameHeap, Heap)
10public:
11 struct State
12 {
13 void* mHeadPtr;
14 void* mTailPtr;
15 };
16
17 static FrameHeap* tryCreate(size_t size, const SafeString& name, Heap* parent, s32,
18 HeapDirection direction, bool);
19 static FrameHeap* create(size_t size, const SafeString& name, Heap* parent, s32,
20 HeapDirection direction, bool);
21
22 static size_t getManagementAreaSize(s32);
23
24 void restoreState(const State& state);
25 void freeHead();
26 void freeTail();
27
28 void destroy() override;
29 size_t adjust() override;
30 void* tryAlloc(size_t size, s32 alignment) override;
31 void free(void* ptr) override;
32 void* resizeFront(void* p_void, size_t size) override;
33 void* resizeBack(void* p_void, size_t size) override;
34 void freeAll() override;
35 uintptr_t getStartAddress() const override;
36 uintptr_t getEndAddress() const override;
37 size_t getSize() const override;
38 size_t getFreeSize() const override;
39 size_t getMaxAllocatableSize(int alignment) const override;
40 bool isInclude(const void* p_void) const override;
41 bool isEmpty() const override;
42 bool isFreeable() const override;
43 bool isResizable() const override;
44 bool isAdjustable() const override;
45 void dump() const override;
46 void dumpYAML(WriteStream& stream, int i) const override;
47 void genInformation_(hostio::Context* context) override;
48
49protected:
50 FrameHeap(const SafeString& name, Heap* parent, void* address, size_t size,
51 HeapDirection direction, bool);
52 ~FrameHeap() override;
53
54 void initialize_();
55 void* getAreaStart_() const;
56 void* getAreaEnd_() const;
57
58 State mState;
59};
60} // namespace sead
61