diff --git a/include/htd/data_structure/dynamic_array.h b/include/htd/data_structure/dynamic_array.h index 6af9a43..54f5a3c 100644 --- a/include/htd/data_structure/dynamic_array.h +++ b/include/htd/data_structure/dynamic_array.h @@ -17,6 +17,8 @@ void* dynarr_at(DynamicArray* arr, usize idx); void dynarr_set(DynamicArray* arr, usize idx, void* data); +void dynarr_copy(DynamicArray* src, DynamicArray* dst); + void dynarr_push(DynamicArray* arr, void* data); void dynarr_free(DynamicArray* arr); diff --git a/src/data_structure/dynamic_array.c b/src/data_structure/dynamic_array.c index 86df5e9..9e39f14 100644 --- a/src/data_structure/dynamic_array.c +++ b/src/data_structure/dynamic_array.c @@ -22,6 +22,14 @@ void dynarr_set(DynamicArray* arr, usize idx, void* data) { memcpy(&((u8*)arr->data)[arr->data_size * idx], data, arr->data_size); } +void dynarr_copy(DynamicArray* src, DynamicArray* dst) { + dst->data_size = src->data_size; + dst->len = src->len; + dst->capacity = src->capacity; + dst->data = (void*)malloc(dst->capacity * dst->data_size); + memcpy(dst->data, src->data, dst->len * dst->data_size); +} + void* dynarr_last(DynamicArray* arr) { return &((u8*)arr->data)[arr->data_size * (arr->len - 1)]; }