utils.h (629B)
1 #ifndef UTILS_H 2 #define UTILS_H 3 4 #include "starfield/types.h" 5 6 struct arena { 7 void *ptr; 8 u64 cap, len; 9 }; 10 11 inline void 12 arena_reset(struct arena *arena) 13 { 14 arena->len = 0; 15 } 16 17 inline void * 18 arena_alloc(struct arena *arena, u64 size, u64 alignment) 19 { 20 u64 aligned_len = ALIGN_NEXT(arena->len, alignment); 21 22 if (arena->cap < aligned_len + size) 23 return NULL; 24 25 void *ptr = (u8 *) arena->ptr + aligned_len; 26 arena->len = aligned_len + size; 27 28 return ptr; 29 } 30 31 #define PUSH_SIZED(arena, T) arena_alloc(arena, sizeof(T), alignof(T)) 32 #define PUSH_ARRAY(arena, T, n) arena_alloc(arena, sizeof(T) * (n), alignof(T)) 33 34 #endif /* UTILS_H */