diff options
| author | enzofc708 <47937189+enzofc708@users.noreply.github.com> | 2026-08-04 14:45:49 -0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-08-04 19:45:49 +0200 |
| commit | 29e3578e388b2ff350388e2cdfe45497c4ebdae2 (patch) | |
| tree | 1019aca1a8142880209e954487d37f3a03fb8aa2 /libs/nds/include | |
| parent | 51640eb100522a3986779599f057d72c8cb9e42e (diff) | |
* add heap.c
* add frmh heap
* add heap_list
* add unth heap
* link heap.c
* fix external references
Diffstat (limited to 'libs/nds/include')
| -rw-r--r-- | libs/nds/include/nds/heap.h | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/libs/nds/include/nds/heap.h b/libs/nds/include/nds/heap.h new file mode 100644 index 00000000..221bac8a --- /dev/null +++ b/libs/nds/include/nds/heap.h @@ -0,0 +1,104 @@ +#include "global.h" +#include "types.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct Heap_Region_ { + /* 00 */ void *start; + /* 04 */ void *end; + /* 08 */ +} Heap_Region; + +typedef struct Heap_LinkedObject_ { + /* 00 */ void *prev; + /* 04 */ void *next; + /* 08 */ +} Heap_LinkedObject; + +typedef struct Heap_LinkedList_ { + /* 00 */ void *head; + /* 04 */ void *tail; + /* 08 */ u16 numElements; + /* 0a */ u16 offset; + /* 0c */ +} Heap_LinkedList; + +typedef struct Heap_Header_ { + /* 00 */ u32 stamp; + /* 04 */ Heap_LinkedObject link; + /* 0c */ Heap_LinkedList children; + /* 18 */ void *startAddr; + /* 1c */ void *endAddr; + /* 20 */ u32 flags; + /* 24 */ +} Heap_Header; + +typedef struct Heap_EXPHBlockHeader_ { + /* 00 */ u16 stamp; + /* 02 */ u16 flags; + /* 04 */ u32 size; + /* 08 */ struct Heap_EXPHBlockHeader_ *prev; + /* 0c */ struct Heap_EXPHBlockHeader_ *next; + /* 20 */ +} Heap_EXPHBlockHeader; + +typedef struct Heap_EXPHBlockList_ { + /* 00 */ Heap_EXPHBlockHeader *head; + /* 04 */ Heap_EXPHBlockHeader *tail; + /* 08 */ +} Heap_EXPHBlockList; + +typedef struct Heap_EXPHHeader_ { + /* 00 */ Heap_EXPHBlockList freeBlocks; + /* 08 */ Heap_EXPHBlockList usedBlocks; + /* 10 */ u16 id; + /* 12 */ u16 flags; + /* 14 */ +} Heap_EXPHHeader; + +typedef struct Heap_FRMHState_ { + /* 00 */ u32 id; + /* 04 */ void *head; + /* 08 */ void *tail; + /* 0c */ struct Heap_FRMHState_ *prev; + /* 10 */ +} Heap_FRMHState; + +typedef struct Heap_FRMHHeader_ { + /* 00 */ void *head; + /* 04 */ void *tail; + /* 08 */ Heap_FRMHState *state; + /* 0c */ +} Heap_FRMHHeader; + +typedef struct Heap_UNTHBlockHeader_ { + /* 00 */ struct Heap_UNTHBlockHeader_ *next; + /* 04 */ +} Heap_UNTHBlockHeader; + +typedef struct Heap_UNTHBlockList_ { + /* 00 */ Heap_UNTHBlockHeader *head; + /* 04 */ +} Heap_UNTHBlockList; + +typedef struct Heap_UNTHHeader_ { + /* 00 */ Heap_UNTHBlockList freeBlocks; + /* 04 */ u32 blockSize; + /* 08 */ +} Heap_UNTHHeader; + +// function declarations +void *Heap_EXPHNew(Heap_Header *heap, u32 size, int alignment); +void Heap_EXPHFreeBlock(Heap_Header *heap, void *memBlock); +void Heap_InitHeader(Heap_Header *pHeapHd, u32 signature, void *heapStart, void *heapEnd, u16 optFlag); +void Heap_DestroyInternal(Heap_Header *pHeapHd); +void Heap_InitList(Heap_LinkedList *list, u16 offset); +void Heap_ListAppend(Heap_LinkedList *list, void *object); +void Heap_ListRemove(Heap_LinkedList *list, void *object); +void *Heap_ListNext(Heap_LinkedList *list, void *object); + +#ifdef __cplusplus +} +#endif
\ No newline at end of file |
