From d6b613df104d03f623134edb628b91a1b60aad7d Mon Sep 17 00:00:00 2001 From: LaEntropiaa Date: Sun, 29 Mar 2026 21:08:34 -0600 Subject: [PATCH] feat: Added align_arena_offset Added it, it should work, no testing by now so damn, but its fine, used aformula from stack overflow :) --- include/arena.h | 1 + src/arena.c | 25 +++++++++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/include/arena.h b/include/arena.h index b55c4c1..6715694 100644 --- a/include/arena.h +++ b/include/arena.h @@ -18,6 +18,7 @@ typedef enum { ARENA_OUT_OF_SPACE, ARENA_NULL_ARG, ARENA_INVALID_SIZE, + ARENA_INVALID_ALIGN, } ArenaErr; typedef struct { diff --git a/src/arena.c b/src/arena.c index 4022d62..b25ea4f 100644 --- a/src/arena.c +++ b/src/arena.c @@ -125,4 +125,29 @@ ArenaErr arena_realloc(Arena *arena, size_t new_size) { return ARENA_OK; } +SizeResult align_arena_offset(Arena *arena, size_t alignment) { + if (arena == NULL) { + SizeResult err = { + .is_valid = false, + .err = ARENA_NULL_ARG, + }; + return err; + } + + if (alignment < 1) { + SizeResult err = { + .is_valid = false, + .err = ARENA_INVALID_ALIGN, + }; + return err; + } + + SizeResult val = { + .is_valid = true, + .val = ((arena->offset + (alignment - 1)) & ~(alignment - 1)), + // Formula for alignment, found at stackoverflow, i came up with one + // but it involved 3 divisions, this one is way faster :) + }; + return val; +}