Theortical append in dynamic array

This commit is contained in:
Warwick 2026-02-06 10:07:44 +00:00
parent 44a7a95ae9
commit a2ce93c913
2 changed files with 20 additions and 4 deletions

View file

@ -1,13 +1,15 @@
#include "dynamic_array.h"
#include "arena_allocator.h"
#include <assert.h>
#include <stddef.h>
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;
}

View file

@ -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);