5using namespace Abstract::Memory;
11 dynamicCastHandleToFrm()->destroy();
14FrmHeap *FrmHeap::create(
void *startAddress,
size_t size, u16 opt) {
15 FrmHeap *heap =
nullptr;
16 void *buffer = startAddress;
18 void *endAddress = RoundDown(AddOffset(startAddress, size), 4);
19 startAddress = RoundUp(startAddress, 4);
21 size_t addrRange = GetAddrNum(endAddress) - GetAddrNum(startAddress);
22 if (startAddress > endAddress || addrRange <
sizeof(FrmHeap) + 4) {
26 void *handleStart = AddOffset(startAddress,
sizeof(FrmHeap));
27 MEMiFrmHeapHead *handle =
28 MEMiFrmHeapHead::create(handleStart, addrRange -
sizeof(FrmHeap), opt);
30 heap =
new (startAddress) FrmHeap(handle);
31 heap->registerHeapBuffer(buffer);
37FrmHeap *FrmHeap::create(
size_t size, Heap *pHeap, u16 opt) {
38 FrmHeap *heap =
nullptr;
41 pHeap = Heap::getCurrentHeap();
44 if (size == std::numeric_limits<size_t>::max()) {
45 size = pHeap->getAllocatableSize();
48 void *block = pHeap->alloc(size, 4);
50 heap = create(block, size, opt);
52 heap->setParentHeap(pHeap);
61void FrmHeap::destroy() {
62 Heap *pParent = getParentHeap();
69void *FrmHeap::alloc(
size_t size, s32 align) {
70 return dynamicCastHandleToFrm()->alloc(size, align);
75void FrmHeap::free(
void *) {}
77u32 FrmHeap::getAllocatableSize(s32 align)
const {
78 return dynamicCastHandleToFrm()->getAllocatableSize(align);
81MEMiFrmHeapHead *FrmHeap::dynamicCastHandleToFrm() {
82 return reinterpret_cast<MEMiFrmHeapHead *
>(m_handle);
85const MEMiFrmHeapHead *FrmHeap::dynamicCastHandleToFrm()
const {
86 return reinterpret_cast<MEMiFrmHeapHead *
>(m_handle);
A low-level representation of a memory heap for managing dynamic memory allocation....
A high-level representation of a memory heap for managing dynamic memory allocation....