From 29597aecaf5a4653f45b97a92c7e3d94c50b494b Mon Sep 17 00:00:00 2001 From: Warwick Date: Fri, 26 Apr 2024 13:08:13 +0100 Subject: [PATCH] Added empty --- src/dyn_arr.c | 7 +++++++ src/dyn_arr.h | 24 ++++++++++++++++++++---- src/main.c | 4 +++- 3 files changed, 30 insertions(+), 5 deletions(-) diff --git a/src/dyn_arr.c b/src/dyn_arr.c index 027c538..36ff055 100644 --- a/src/dyn_arr.c +++ b/src/dyn_arr.c @@ -19,6 +19,13 @@ void *dyn_arr_init(size_t item_size, size_t capacity) { return dyna_ptr; } +bool dyna_empty(void *array) { + if (dyna_length(array) == 0) { + return false; + } + return true; +} + void *dyna_ensure_capacity(void *array, size_t item_count, size_t item_size) { dyna_header *header = dyna_get_header(array); size_t minimum_capacity = header->length + item_count; diff --git a/src/dyn_arr.h b/src/dyn_arr.h index 7c8e636..548d98c 100644 --- a/src/dyn_arr.h +++ b/src/dyn_arr.h @@ -1,14 +1,29 @@ #pragma once #include +#include #define ARRAY_INITIAL_CAPACITY 4 +/* TODO: + * Functions to implement to match what I want: + * - Capacity + * - shrink capacity to size + * - Modifiers + * - clear + * - insert + * - (optional) insert range + * - pop + * - (optional) swap + * - (optional) resize +*/ + typedef struct dyna_header { size_t capacity; size_t length; } dyna_header; +// Initialisation #define dyna_init(T) (T *)dyn_arr_init(sizeof(T), ARRAY_INITIAL_CAPACITY) void *dyn_arr_init(size_t item_size, size_t capacity); @@ -17,8 +32,9 @@ void *dyn_arr_init(size_t item_size, size_t capacity); (array)[dyna_get_header(array)->length] = (value), \ &(array)[dyna_get_header(array)->length++]) -#define dyna_get_header(array) ((dyna_header *)(array) - 1) -#define dyna_length(array) (array_header(array)->length) -#define dyna_capacity(array) (array_header(array)->capacity) - +// Get meta data +#define dyna_get_header(array) ((dyna_header *)(array)-1) +#define dyna_length(array) (dyna_get_header(array)->length) +#define dyna_capacity(array) (dyna_get_header(array)->capacity) +bool dyna_empty(void* array); void *dyna_ensure_capacity(void *array, size_t item_count, size_t item_size); diff --git a/src/main.c b/src/main.c index db9f74e..ea10563 100644 --- a/src/main.c +++ b/src/main.c @@ -4,11 +4,13 @@ int main() { int *dyna_array = dyna_init(int); + printf("empty %d\n", dyna_empty(dyna_array)); for (int i = 0; i < 999999999; i++) { dyna_append(dyna_array, i); } - printf("capacity %zu\n", dyna_get_header(dyna_array)->capacity); + printf("capacity %zu\n", dyna_capacity(dyna_array)); + printf("empty %d\n", dyna_empty(dyna_array)); return EXIT_SUCCESS; }