#ifndef AMALGAM_BUFFER_H #define AMALGAM_BUFFER_H #include "types.h" #include "misc.h" #include "defs.h" #define BUFFER_OK 0 #define BUFFER_ALLOC_FAIL -1 typedef struct { char* data; usize size; usize capacity; } Buffer; CHECK_RESULT int buffer_init(Buffer *self, struct ScopedAllocator *allocator); /* @data can be NULL */ CHECK_RESULT int buffer_append(Buffer *self, const void *data, usize size); void* buffer_get(Buffer *self, usize index, usize type_size); CHECK_RESULT int buffer_pop(Buffer *self, void *data, usize size); void* buffer_start(Buffer *self); void *buffer_end(Buffer *self); usize __buffer_get_size(Buffer *self, usize type_size); #define buffer_get_size(self, type) __buffer_get_size((self), sizeof(type)) #endif