Files
PixelDefense/engine/breeze/memory/stack_alloc.c

39 lines
948 B
C

#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 bzStackAllocReset(BzStackAlloc *alloc) {
alloc->allocated = 0;
}
void *bzStackAlloc(BzStackAlloc *alloc, size_t numBytes) {
BZ_ASSERT(alloc->allocated + 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;
}