From bcf1439eb8d936d3b43ac817519cd47e9624210e Mon Sep 17 00:00:00 2001 From: iamcheeseman Date: Sun, 24 May 2026 09:04:26 -0400 Subject: completely redo lists --- teensy/teensy_list.h | 53 ++++++++++++++++++++-------------------------------- 1 file changed, 20 insertions(+), 33 deletions(-) (limited to 'teensy/teensy_list.h') diff --git a/teensy/teensy_list.h b/teensy/teensy_list.h index 56ae4b4..6d6e536 100644 --- a/teensy/teensy_list.h +++ b/teensy/teensy_list.h @@ -4,45 +4,32 @@ #include "teensy_common.h" #include "teensy_mem.h" -typedef struct { - size_t cap; - size_t len; -} ty_List_Header; - #define TY_LIST_MIN_CAP 8 #define TY_LIST_GROW_RATE 2 -#define ty_list_get_header(arr) ((ty_List_Header*)arr - 1) -#define ty_list_cap(arr) (ty_list_get_header(arr)->cap) -#define ty_list_len(arr) (ty_list_get_header(arr)->len) - -#define ty_list_last(arr) ((arr)[ty_list_len(arr) - 1]) - -#define ty_list_reserve(arr, amt) \ - do { \ - ty_List_Header *header = ty_list_get_header(arr); \ - if ((amt) > header->cap) { \ - header->cap = (amt) < TY_LIST_MIN_CAP ? TY_LIST_MIN_CAP : (amt); \ - header = ty_realloc( \ - header, \ - (sizeof(*(arr)) * (amt)) + sizeof(ty_List_Header) \ - ); \ - (arr) = (void*)(header + 1); \ - } \ +#define ty_list_last(arr) ((arr)->items[(arr)->len - 1]) + +#define ty_list_reserve(arr, amt) \ + do { \ + if ((amt) > (arr)->cap) { \ + (arr)->cap = ty_max(TY_LIST_MIN_CAP, (arr)->cap); \ + while ((arr)->cap < (amt)) \ + (arr)->cap *= TY_LIST_GROW_RATE; \ + \ + (arr)->items = ty_realloc( \ + (arr)->items, \ + sizeof(*(arr)->items) * (arr)->cap \ + ); \ + } \ } while (0) -#define ty_list_append(arr, elem) \ - do { \ - ty_List_Header *header = ty_list_get_header(arr); \ - ty_list_reserve(arr, header->len + 1); \ - (arr)[header->len++] = (elem); \ +#define ty_list_append(arr, elem) \ + do { \ + ty_list_reserve(arr, (arr)->len + 1); \ + (arr)->items[(arr)->len++] = (elem); \ } while (0) -#define ty_list_clear(arr) \ - (ty_list_get_header(arr)->len = 0) - -#define ty_list_free(arr) (ty_free(ty_list_get_header(arr))) - -void *ty_list_create(void); +#define ty_list_clear(arr) ((arr)->len = 0) +#define ty_list_free(arr) ty_free((arr)->items) #endif // TEENSY_LIST_H_ -- cgit v1.3-2-g0d8e