diff --git a/src/dynamic_array.c b/src/dynamic_array.c index b668766..9cf237d 100644 --- a/src/dynamic_array.c +++ b/src/dynamic_array.c @@ -1,13 +1,15 @@ #include "dynamic_array.h" #include "arena_allocator.h" #include +#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}; + .object_count = 0, + .object_size = object_size}; assert(darr->metadata != NULL); assert(darr->data != NULL); @@ -23,5 +25,17 @@ void wn_darr_deinit(wn_darr *dynamic_array) { arena_deinit(dynamic_array->data); } +void *wn_darr_append(wn_darr *dynamic_array, void *data) { + void *object = arena_alloc(dynamic_array->data, dynamic_array->object_size); + void *objectptr = arena_alloc(dynamic_array->metadata, sizeof(void *)); + objectptr = object; + + dynamic_array->object_count++; + + return object; +} + // TODO: This -void wn_darr_append(wn_darr *dynamic_array, void *data, size_t data_size) {} +void *wn_darr_get(wn_darr *dynamic_array, size_t index) { + return dynamic_array; +} diff --git a/src/dynamic_array.h b/src/dynamic_array.h index ca7779e..397c680 100644 --- a/src/dynamic_array.h +++ b/src/dynamic_array.h @@ -5,10 +5,12 @@ typedef struct wn_darr { Arena *metadata; Arena *data; - size_t count; + size_t object_count; + size_t object_size; } 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); +void *wn_darr_append(wn_darr *dynamic_array, void *data); +void *wn_darr_get(wn_darr *dynamic_array, size_t index);