From 44a7a95ae9e33b36678c74dbff1277cff95e2dab Mon Sep 17 00:00:00 2001 From: Warwick Date: Fri, 6 Feb 2026 09:47:01 +0000 Subject: [PATCH] Came up with a basic structure for a dynamic array --- src/dynamic_array.c | 27 +++++++++++++++++++++++++++ src/dynamic_array.h | 14 ++++++++++++++ 2 files changed, 41 insertions(+) create mode 100644 src/dynamic_array.c create mode 100644 src/dynamic_array.h diff --git a/src/dynamic_array.c b/src/dynamic_array.c new file mode 100644 index 0000000..b668766 --- /dev/null +++ b/src/dynamic_array.c @@ -0,0 +1,27 @@ +#include "dynamic_array.h" +#include "arena_allocator.h" +#include + +wn_darr *wn_darr_init(Arena *arena, size_t object_size, size_t object_count) { + wn_darr *darr = arena_alloc(arena, sizeof(wn_darr)); + *darr = + (wn_darr){.metadata = arena_init(arena, object_count * sizeof(void *)), + .data = arena_init(arena, object_count * object_size), + .count = 0}; + + assert(darr->metadata != NULL); + assert(darr->data != NULL); + + return darr; +} + +void wn_darr_deinit(wn_darr *dynamic_array) { + assert(dynamic_array->metadata != NULL); + assert(dynamic_array->data != NULL); + + arena_deinit(dynamic_array->metadata); + arena_deinit(dynamic_array->data); +} + +// TODO: This +void wn_darr_append(wn_darr *dynamic_array, void *data, size_t data_size) {} diff --git a/src/dynamic_array.h b/src/dynamic_array.h new file mode 100644 index 0000000..ca7779e --- /dev/null +++ b/src/dynamic_array.h @@ -0,0 +1,14 @@ +#pragma once +#include "arena_allocator.h" +#include + +typedef struct wn_darr { + Arena *metadata; + Arena *data; + size_t count; +} wn_darr; + +wn_darr *wn_darr_init(Arena *arena, size_t object_size, size_t object_number); +void wn_darr_deinit(wn_darr *dynamic_array); + +void wn_darr_append(wn_darr *dynamic_array, void *data, size_t data_size);