Add stack allocator
This commit is contained in:
34
engine/breeze/memory/stack_alloc.c
Normal file
34
engine/breeze/memory/stack_alloc.c
Normal file
@@ -0,0 +1,34 @@
|
||||
#include "stack_alloc.h"
|
||||
|
||||
#include "memory.h"
|
||||
|
||||
BzStackAlloc bzStackAllocCreate(size_t size) {
|
||||
BzStackAlloc alloc = {
|
||||
.memory=bzAlloc(size),
|
||||
.size=size,
|
||||
.allocated=0
|
||||
};
|
||||
BZ_ASSERT(alloc.memory);
|
||||
|
||||
return alloc;
|
||||
}
|
||||
|
||||
void bzStackAllocDestroy(BzStackAlloc *alloc) {
|
||||
bzFree(alloc->memory);
|
||||
alloc->memory = NULL;
|
||||
alloc->size = 0;
|
||||
alloc->allocated = 0;
|
||||
}
|
||||
|
||||
void *bzStackAlloc(BzStackAlloc *alloc, size_t numBytes) {
|
||||
BZ_ASSERT(alloc->size + numBytes < alloc->size);
|
||||
void *allocated = (u8 *) alloc->memory + alloc->allocated;
|
||||
alloc->allocated += numBytes;
|
||||
return allocated;
|
||||
}
|
||||
|
||||
void bzStackAllocFree(BzStackAlloc *alloc, void *ptr) {
|
||||
size_t byteOffset = (u8 *) ptr - (u8 *) alloc->memory;
|
||||
BZ_ASSERT(byteOffset >= 0 && byteOffset < alloc->size);
|
||||
alloc->allocated = byteOffset;
|
||||
}
|
||||
Reference in New Issue
Block a user