From 0d249b1d47a7f84cfe5f09ad070d1affd26566da Mon Sep 17 00:00:00 2001 From: Syndamia Date: Tue, 28 Apr 2026 14:06:44 +0300 Subject: feat!: Refactor using MemoryManager The idea is to provide a universal memory management "API", through which you allocate and deallocate. This allows our implementations (for String and Vector) to be more generic. It does also allow usage of different allocators depending on situation. --- Array.c | 97 ----------------------------------------------------------------- 1 file changed, 97 deletions(-) delete mode 100644 Array.c (limited to 'Array.c') diff --git a/Array.c b/Array.c deleted file mode 100644 index 6be8c1a..0000000 --- a/Array.c +++ /dev/null @@ -1,97 +0,0 @@ -#include "Array.h" -#include "Types.h" -#include "GlobalArena.h" -#include -#include - -struct ArrayMeta { - BumpArena b; - usize element_size; - usize count; - usize length; -}; - -static inline struct ArrayMeta* -A_metadata(void* arr) { - return arr - sizeof(struct ArrayMeta); -} - -typedef void* Array; - -Array -A_new(BumpArena b, usize element_size, usize length) { - if (NULL == b) - return NULL; - - struct ArrayMeta am = { - .b = b, - .element_size = element_size, - .count = 0, - .length = length, - }; - - void* start = B_alloc(b, sizeof(am) + element_size * length); - if (NULL == start) - return NULL; - - memcpy(start, &am, sizeof(am)); - return start + sizeof(am); -} - -usize -A_length(Array arr) { - if (NULL == arr) - return 0; - return A_metadata(arr)->length; -} - -usize -A_count(Array arr) { - if (NULL == arr) - return 0; - return A_metadata(arr)->count; -} - -Result -A_push(Array arr, void *value) { - if (NULL == arr) - return R_Uninitialized; - - struct ArrayMeta *am = A_metadata(arr); - - if (am->count >= am->length) { - if (!B_resizeable(am->b, arr)) - return R_OutOfBounds; - - RETURN_NOTOK(B_resize(am->b, sizeof(*am) + am->element_size * (am->length << 1))); - am->length <<= 1; - } - - memcpy(arr + am->count++ * am->element_size, value, am->element_size); - - return R_Ok; -} - -Result -A_ppush(Array arr, void *pvalue) { - void* temp = pvalue; - return A_push(arr, &temp); -} - -void* -A_pop(Array arr) { - if (NULL == arr) - return NULL; - - struct ArrayMeta *am = A_metadata(arr); - - if (am->count == 0) - return NULL; - - return arr + am->element_size * --am->count; -} - -Array -AG_new(usize element_size, usize length) { - return A_new(g_arena, element_size, length); -} -- cgit v1.2.3