This commit is contained in:
Daniel Ledda
2025-11-09 05:36:10 +01:00
parent 52f9a2fe33
commit db92620d65
3 changed files with 34 additions and 37 deletions

28
core.h
View File

@@ -45,8 +45,10 @@ typedef struct string string;
#define Billion(n) ((n)*1000000000LL)
#define ArrayCount(arr) (sizeof(arr) / sizeof((arr)[0]))
#define MemberSize(type, memberName) (sizeof(((type*)0)->data))
#define MemberSizeUnderlying(type, memberName) (sizeof(*((type*)0)->data))
#define MemberSize(type, memberName) sizeof(((type *)0)->memberName)
#define MemberType(type, memberName) typeof(((type *)0)->memberName)
#define MemberSizeUnderlying(type, memberName) sizeof(*((type *)0)->memberName)
#define MemberTypeUnderlying(type, memberName) typeof(*((type *)0)->memberName)
// ### Arenas ###
typedef struct {
@@ -142,14 +144,14 @@ inline function Vec4 vec4(real32 x, real32 y, real32 z, real32 w) {
DefineList(string, String);
#define PushList(arena, type, size) ((type){ pushSize(arena, MemberSizeUnderlying(type, data)), size, 0 })
#define EmptyList(type) ((type){ NULL, 0, 0 })
#define PushListZero(arena, type, size) ((type){ pushSizeFill(arena, MemberSizeUnderlying(type, data), 0), size, 0 })
#define PushFullList(arena, type, size) ((type){ pushSize(arena, MemberSizeUnderlying(type, data)), size, size })
#define PushFullListZero(arena, type, size) ((type){ pushSizeFill(arena, MemberSizeUnderlying(type, data), 0), size, size })
#define ArrayAsList(type, array) ((type){ array, ArrayCount(array), ArrayCount(array) })
#define PushList(arena, type, size) (type){ (MemberTypeUnderlying(type, data) *)pushSize(arena, MemberSizeUnderlying(type, data)*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 ArrayAsList(type, array) (type){ array, ArrayCount(array), ArrayCount(array) }
#define AppendList(type, list, element) \
#define AppendList(list, element) \
if ((list)->head < (list)->length) { \
(list)->data[(list)->head++] = (element); \
}
@@ -264,12 +266,10 @@ typedef enum {
#define COLOR_TEXT_FG_BG(text, foregroundcolor, backgroundcolor) ANSI_INSTRUCTION_FROM_ENUM(foregroundcolor) ANSI_INSTRUCTION_FROM_ENUM(backgroundcolor) text ANSI_RESET
#define COLOR_TEXT_RGB(text, red, green, blue) ANSI_INSTRUCTION_STR("38;2;" #red ";" #green ";" #blue) text ANSI_RESET
#define SetStdErr() DeferLoop
DefineList(int, Int);
void printIntListErr(IntList l);
void printStrListErr(StringList l);
void print(const char *fmt, ...);
void printErr(const char *fmt, ...);
void printIntList(IntList l);
void printStrList(StringList l);
extern void (*print)(const char *fmt, ...);
// ### Loops ###
#define EachIn(list, it) size_t it = 0; it < (list).head; it++