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:
@@ -18,6 +18,7 @@ typedef enum {
|
|||||||
ARENA_OUT_OF_SPACE,
|
ARENA_OUT_OF_SPACE,
|
||||||
ARENA_NULL_ARG,
|
ARENA_NULL_ARG,
|
||||||
ARENA_INVALID_SIZE,
|
ARENA_INVALID_SIZE,
|
||||||
|
ARENA_INVALID_ALIGN,
|
||||||
} ArenaErr;
|
} ArenaErr;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
|||||||
25
src/arena.c
25
src/arena.c
@@ -125,4 +125,29 @@ ArenaErr arena_realloc(Arena *arena, size_t new_size) {
|
|||||||
return ARENA_OK;
|
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