From 9877602ffa492ee338e698abf593fcf81a7e023b Mon Sep 17 00:00:00 2001 From: William Date: Sat, 13 Apr 2024 17:55:01 +0800 Subject: [PATCH] (MOD) Refinements and widened extendibilities for Status --- MemMan/Makefile | 0 MemMan/include/memman.h | 57 +++++++++++++++++++++++++++++++++++++++++ MemMan/src/memman.c | 35 +++++++++++++++++++++++++ 3 files changed, 92 insertions(+) create mode 100644 MemMan/Makefile create mode 100644 MemMan/include/memman.h create mode 100644 MemMan/src/memman.c diff --git a/MemMan/Makefile b/MemMan/Makefile new file mode 100644 index 0000000..e69de29 diff --git a/MemMan/include/memman.h b/MemMan/include/memman.h new file mode 100644 index 0000000..bebc8da --- /dev/null +++ b/MemMan/include/memman.h @@ -0,0 +1,57 @@ +#ifndef MEMMAN_H +#define MEMMAN_H + +#include +#include + +/* + Higher the priority it is, the less time for lifespan it has. + */ + +typedef struct { + void *addr; + int priority; // -1 for manual +} Memory; + +typedef struct { + Memory *members; + size_t poolsize; + int priority; +} MemoryPool; + +typedef struct { + MemoryPool *members; + void *(*allocator)(size_t sz); + void (*delocator)(void *addr); +} MemoryPoolManager; + +Status memman_memory_allocate(Memory *inst, size_t sz); +Status memman_memory_reallocate(Memory *inst, size_t sz); +void memman_memory_release(Memory *inst); + +Status memman_memorypool_create(MemoryPool *inst, Memory **members, + size_t poolsize); +Status memman_memorypool_constr(MemoryPool *inst, Memory **members, + size_t poolsize, int priority); +Status memman_memorypool_allocate(MemoryPool *inst, int idx, size_t sz); +Status memman_memorypool_reallocate(MemoryPool *inst, int idx, size_t sz); +Status memman_memorypool_release(MemoryPool *inst, int idx); +Status memman_memorypool_prioritise(MemoryPool *inst, int idx); +Status memman_memorypool_deprioritise(MemoryPool *inst, int idx); +void memman_memorypool_delete(MemoryPool *inst); + +Status memman_memorypoolmanager_create(MemoryPoolManager *inst, + MemoryPool **membersptr); +Status memman_memorypoolmanager_constr(MemoryPoolManager *inst, + MemoryPool **membersptr, + void *(*allocator)(size_t sz), + void (*delocator)(void *addr)); +Status memman_memorypoolmanager_addmember(MemoryPoolManager *inst, + MemoryPool *newmember); +Status memman_memorypoolmanager_removemember(MemoryPoolManager *inst, int idx); +Status memman_memorypoolmanager_allocate(MemoryPoolManager *inst, + ArrayIndexerRange selected, size_t sz); +Status memman_memorypoolmanager_release(MemoryPoolManager *inst, + ArrayIndexerRange selected); + +#endif /* MEMMAN_H */ diff --git a/MemMan/src/memman.c b/MemMan/src/memman.c new file mode 100644 index 0000000..348e1ed --- /dev/null +++ b/MemMan/src/memman.c @@ -0,0 +1,35 @@ +#include +#include + +/* + enum { + MEMMAN_RELEASE_LEVEL_INSTANTAL = 0, + MEMMAN_RELEASE_LEVEL_STACK = 1, + MEMMAN_RELEASE_LEVEL_HEAP = 2 + }; + + typedef struct { + void *addr; + int release_level; + } Memory; + + typedef struct { + Memory *members; + int release_level; + } MemoryPool; + + typedef struct { + MemoryPool *members; + void *(*allocator)(size_t sz); + void (*delocator)(void *addr); + } MemoryPoolManager; +*/ + +int memman_memorypoolmanager_create(MemoryPoolManager *inst, + MemoryPool **membersptr) +{ + fails(inst, COMMON_ERROR_INVALID_ARGUMENT); + fails(membersptr, COMMON_ERROR_INVALID_ARGUMENT); + + +}