feat: Added align_arena_offset
Added it, it should work, no testing by now so damn, but its fine, used aformula from stack overflow :)
This commit is contained in:
25
src/arena.c
25
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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user