mirror of
https://github.com/LNH-team/pico-loader.git
synced 2026-06-02 09:16:49 +02:00
Initial commit
This commit is contained in:
34
arm9/source/patches/PatchHeap.h
Normal file
34
arm9/source/patches/PatchHeap.h
Normal file
@@ -0,0 +1,34 @@
|
||||
#pragma once
|
||||
#include <array>
|
||||
|
||||
/// @brief Class implementing a heap intended for patch code.
|
||||
/// The heap consists of a linked list of blocks of free
|
||||
/// space. It is possible to add many small pieces.
|
||||
class PatchHeap
|
||||
{
|
||||
public:
|
||||
PatchHeap();
|
||||
|
||||
/// @brief Adds a block of free space to the patch heap.
|
||||
/// @param block The start of the block.
|
||||
/// @param size The size of the block.
|
||||
void AddFreeSpace(void* block, u32 size);
|
||||
|
||||
/// @brief Allocated a block of the given size from the patch heap.
|
||||
/// @param size The size to allocate.
|
||||
/// @return A pointer to the allocated block if successful, or nullptr otherwise.
|
||||
void* Alloc(u32 size);
|
||||
|
||||
private:
|
||||
struct PatchHeapBlock
|
||||
{
|
||||
PatchHeapBlock* next;
|
||||
void* block;
|
||||
u32 size;
|
||||
};
|
||||
|
||||
std::array<PatchHeapBlock, 64> _blocks;
|
||||
PatchHeapBlock* _unusedBlockPool;
|
||||
|
||||
PatchHeapBlock* _freeBlocks;
|
||||
};
|
||||
Reference in New Issue
Block a user