From 2467cbd84a46da46f1367218f7c5f96f3901598c Mon Sep 17 00:00:00 2001 From: Daniel Ledda Date: Mon, 10 Nov 2025 03:27:39 +0100 Subject: [PATCH] update --- core.h | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/core.h b/core.h index 8173228..a212711 100644 --- a/core.h +++ b/core.h @@ -139,25 +139,27 @@ inline function Vec4 vec4(real32 x, real32 y, real32 z, real32 w) { size_t length;\ size_t capacity;\ } prefix ## List +#define ListElementType(list) MemberTypeUnderlying(type, data) +#define ListElementSize(list) MemberSizeUnderlying(type, data) DefineList(string, String); -#define PushList(arena, type, size) (type){ (MemberTypeUnderlying(type, data) *)pushSize(arena, MemberSizeUnderlying(type, data)*size), size, 0 } +#define PushList(arena, type, size) (type){ (ListElementType(type) *)pushSize(arena, ListElementSize(type)*size), size, 0 } #define EmptyList(type) (type){ NULL, 0, 0 } -#define PushListZero(arena, type, size) (type){ (MemberTypeUnderlying(type, data) *)pushSizeFill(arena, MemberSizeUnderlying(type, data)*size, 0), size, 0 } -#define PushFullList(arena, type, size) (type){ (MemberTypeUnderlying(type, data) *)pushSize(arena, MemberSizeUnderlying(type, data)*size), size, size } -#define PushFullListZero(arena, type, size) (type){ (MemberTypeUnderlying(type, data) *)pushSizeFill(arena, MemberSizeUnderlying(type, data)*size, 0), size, size } +#define PushListZero(arena, type, size) (type){ (ListElementType(type) *)pushSizeFill(arena, ListElementSize(type)*size, 0), size, 0 } +#define PushFullList(arena, type, size) (type){ (ListElementType(type) *)pushSize(arena, ListElementSize(type)*size), size, size } +#define PushFullListZero(arena, type, size) (type){ (ListElementType(type) *)pushSizeFill(arena, ListElementSize(type)*size, 0), size, size } #define ArrayAsList(type, array) (type){ array, ArrayCount(array), ArrayCount(array) } #define AppendList(list, element) \ if ((list)->length < (list)->capacity) { \ (list)->data[(list)->length++] = (element); \ } -#define ZeroListFull(list) memset((list)->data, 0, (list)->length * MemberTypeUnderlying(typeof(list), data)) +#define ZeroListFull(list) memset((list)->data, 0, (list)->length * ListElementSize(*(list))) #define ZeroList(list) (list)->length = 0; \ - memset((list)->data, 0, (list)->length * MemberTypeUnderlying(typeof(list), data)); -#define ListSlice(list, start, stop) (stop > list.length || start > stop ? {0} : { list.data + start, stop - start, stop - start, }) -#define ListTail(list, start) ListSlice(list, list.length) + memset((list)->data, 0, (list)->length * ListElementType(*(list))); +#define ListSlice(list, start, stop) (stop > (list)->length || start > stop ? {0} : { (list)->data + start, stop - start, stop - start, }) +#define ListTail(list, start) ListSlice(list, (list)->length) // ### Strings ### struct string {