| 1 | #pragma once |
| 2 | |
| 3 | #include "heap/seadHeap.h" |
| 4 | |
| 5 | namespace sead |
| 6 | { |
| 7 | class FrameHeap : public Heap |
| 8 | { |
| 9 | SEAD_RTTI_OVERRIDE(FrameHeap, Heap) |
| 10 | public: |
| 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 | |
| 49 | protected: |
| 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 | |