From 50fb1482f6dd3d738ba5fd23dfa6789c0f397c92 Mon Sep 17 00:00:00 2001 From: Leo Tenenbaum Date: Sat, 5 Dec 2020 14:31:19 -0500 Subject: rotating line --- base.c | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 base.c (limited to 'base.c') diff --git a/base.c b/base.c new file mode 100644 index 0000000..adab1ea --- /dev/null +++ b/base.c @@ -0,0 +1,40 @@ +// this file includes functions, etc. used just about everywhere + +#if DEBUG +#define logln(...) printf(__VA_ARGS__), printf("\n"); +#else +#define logln(...) +#endif + +// allocates aligned temporary memory +static u8 *tmp_alloc(State *state, size_t bytes) { + u32 used = state->tmp_mem_used; + u32 max_aligns_needed = (u32)(bytes + sizeof(MaxAlign) - 1) / (u32)sizeof(MaxAlign); // = ceil(bytes / sizeof(MaxAlign)) + MaxAlign *ret = state->tmp_mem + used; + if (bytes == 0) { + return NULL; + } + if (used + max_aligns_needed > arr_count(state->tmp_mem)) { + assert(0); + return NULL; + } + state->tmp_mem_used += max_aligns_needed; + memset(ret, 0, bytes); + return (u8 *)ret; +} + +/* +these functions save and restore the state of the temporary memory. +*/ +static u32 tmp_push(State *state) { + return state->tmp_mem_used; +} + +static void tmp_pop(State *state, u32 mark) { + state->tmp_mem_used = mark; +} + +#define tmp_alloc_object(state, type) ((type *)tmp_alloc((state), sizeof(type))) +#define tmp_alloc_arr(state, type, n) ((type *)tmp_alloc((state), (n) * sizeof(type))) +#define calloc_object(type) ((type *)calloc(1, sizeof(type))) +#define calloc_arr(type, n) ((type *)calloc((n), sizeof(type))) -- cgit v1.2.3