From 94278ec39b08b4085fa920f870261eb7639baa6b Mon Sep 17 00:00:00 2001 From: Albert Cervin Date: Fri, 27 Jan 2023 09:57:23 +0100 Subject: Split out the frame allocator Used to be a part of main --- src/allocator.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 src/allocator.c (limited to 'src/allocator.c') diff --git a/src/allocator.c b/src/allocator.c new file mode 100644 index 0000000..308b97c --- /dev/null +++ b/src/allocator.c @@ -0,0 +1,24 @@ +#include "allocator.h" + +struct frame_allocator frame_allocator_create(size_t capacity) { + return (struct frame_allocator){ + .capacity = capacity, .offset = 0, .buf = (uint8_t *)malloc(capacity)}; +} + +void frame_allocator_destroy(struct frame_allocator *alloc) { + free(alloc->buf); + alloc->buf = NULL; +} + +void *frame_allocator_alloc(struct frame_allocator *alloc, size_t sz) { + if (alloc->offset + sz > alloc->capacity) { + return NULL; + } + + void *mem = alloc->buf + alloc->offset; + alloc->offset += sz; + + return mem; +} + +void frame_allocator_clear(struct frame_allocator *alloc) { alloc->offset = 0; } -- cgit v1.2.3