A reimplementation of Mario Kart Wii's physics engine in C++
Loading...
Searching...
No Matches
FrameHeap.hh
1#pragma once
2
3#include "abstract/memory/HeapCommon.hh"
4
5namespace Kinoko::Abstract::Memory {
6
7class MEMiFrmHeapHead : public MEMiHeapHead {
8private:
9 MEMiFrmHeapHead(void *end, u16 opt);
10 ~MEMiFrmHeapHead();
11
12public:
13 static MEMiFrmHeapHead *create(void *startAddress, size_t size, u16 flag);
14 void destroy();
15
16 void *alloc(size_t size, s32 align);
17 // Freeing by block is invalid
18 // Freeing by flag is not implemented in Kinoko
19 // void free(u32 flag);
20 [[nodiscard]] u32 getAllocatableSize(s32 align) const;
21
22 void *calcUsedEnd();
23
24private:
25 [[nodiscard]] void *allocFromHead(size_t size, s32 alignment);
26 [[nodiscard]] void *allocFromTail(size_t size, s32 alignment);
27
28 void *m_headAllocator;
29 void *m_tailAllocator;
30
31 static constexpr u32 FRM_HEAP_SIGNATURE = 0x46524d48; // FRMH
32};
33
34} // namespace Kinoko::Abstract::Memory