From 84c39cf8719ae72870ef8038d7563c0b4e211d0b Mon Sep 17 00:00:00 2001 From: Thomas Voss Date: Sat, 31 Dec 2022 02:37:31 +0100 Subject: Simplify everything --- src/gevector.h | 73 +++++++++++++++++++++++++--------------------------------- 1 file changed, 32 insertions(+), 41 deletions(-) (limited to 'src') diff --git a/src/gevector.h b/src/gevector.h index 881fb03..4657a9a 100644 --- a/src/gevector.h +++ b/src/gevector.h @@ -11,21 +11,18 @@ #define GEVECTOR_DEF_API(t, n) GEVECTOR_DEF_API_HELPER(t, n, n##_t) #define GEVECTOR_DEF_API_HELPER(t, n, n_t) \ typedef struct { \ - size_t len; \ - size_t __cap; \ + t *data; \ + size_t cap, len; \ double __gfac; \ - t *__data; \ } n_t; \ \ - int n##_new(n_t *, size_t, double); \ - t n##_get(n_t *, size_t); \ - int n##_insert(n_t *, t, size_t); \ - int n##_push(n_t *, t); \ - t n##_pop(n_t *); \ - void n##_remove(n_t *, size_t); \ - int n##_resize(n_t *, size_t); \ - size_t n##_len(n_t *); \ - void n##_free(n_t *); + int n##_new(n_t *, size_t, double); \ + int n##_insert(n_t *, t, size_t); \ + int n##_push(n_t *, t); \ + t n##_pop(n_t *); \ + void n##_remove(n_t *, size_t); \ + int n##_resize(n_t *, size_t); \ + void n##_free(n_t *); #define GEVECTOR_DEF_IMPL(t, n) GEVECTOR_DEF_IMPL_HELPER(t, n, n##_t) #define GEVECTOR_DEF_IMPL_HELPER(t, n, n_t) \ @@ -34,17 +31,28 @@ { \ *vec = (n_t) { \ .len = 0, \ + .cap = cap == 0 ? 16 : cap, \ .__gfac = gfac == 0 ? 1.5f : gfac, \ - .__cap = cap == 0 ? 16 : cap, \ }; \ - vec->__data = malloc(vec->__cap * sizeof(t)); \ - return vec->__data == NULL ? -1 : 0; \ + vec->data = malloc(vec->cap * sizeof(t)); \ + return vec->data == NULL ? -1 : 0; \ } \ \ - t \ - n##_get(n_t *vec, size_t i) \ + int \ + n##_insert(n_t *vec, t elem, size_t i) \ { \ - return vec->__data[i]; \ + if (vec->len == vec->cap) { \ + size_t ncap = (size_t) (vec->cap * vec->__gfac); \ + if (ncap == vec->cap) \ + ncap++; \ + if (n##_resize(vec, ncap) == -1) \ + return -1; \ + } \ + for (size_t j = vec->len; j > i; j--) \ + vec->data[j] = vec->data[j - 1]; \ + vec->data[i] = elem; \ + vec->len++; \ + return 0; \ } \ \ int \ @@ -56,48 +64,31 @@ t \ n##_pop(n_t *vec) \ { \ - return vec->__data[--vec->len]; \ - } \ - \ - int \ - n##_insert(n_t *vec, t elem, size_t i) \ - { \ - if (vec->len == vec->__cap) { \ - size_t ncap = (size_t) (vec->__cap * vec->__gfac); \ - if (ncap == vec->__cap) \ - ncap++; \ - if (n##_resize(vec, ncap) == -1) \ - return -1; \ - } \ - for (size_t j = vec->len; j > i; j--) \ - vec->__data[j] = vec->__data[j - 1]; \ - vec->__data[i] = elem; \ - vec->len++; \ - return 0; \ + return vec->data[--vec->len]; \ } \ \ void \ n##_remove(n_t *vec, size_t i) \ { \ for (size_t j = i; j < vec->len - 1; j++) \ - vec->__data[j] = vec->__data[j + 1]; \ + vec->data[j] = vec->data[j + 1]; \ vec->len--; \ } \ \ int \ n##_resize(n_t *vec, size_t ncap) \ { \ - vec->__data = realloc(vec->__data, sizeof(t) * ncap); \ - if (vec->__data == NULL) \ + vec->data = realloc(vec->data, sizeof(t) * ncap); \ + if (vec->data == NULL) \ return -1; \ - vec->__cap = ncap; \ + vec->cap = ncap; \ return 0; \ } \ \ void \ n##_free(n_t *vec) \ { \ - free(vec->__data); \ + free(vec->data); \ } #endif /* !LIBGE_GEVECTOR_H */ -- cgit v1.2.3