Files
cig/buffer_allocator.c
T

56 lines
1.4 KiB
C

#include "allocator.h"
void *buffer_allocator_alloc(buffer_allocator_t *this, size_t bytes) {
size_t new_size = this->size + bytes;
if (new_size > this->capacity) {
return NULL;
}
void *ptr = &this->data[this->size]
this->size = new_size;
return ptr;
}
void *buffer_allocator_resize(buffer_allocator_t *this, void *old_ptr, size_t bytes) {
// TODO: check if the pointer is even in the buffer?
void *new_ptr = buffer_allocator_alloc(this, bytes);
if (new_ptr == NULL) {
return NULL;
}
// TODO: copy over data
}
void buffer_allocator_reset(buffer_allocator_t *this) {
this->size = 0;
}
static void *buffer_alloc(void *this, size_t bytes, const char *file, int line) {
(void)file;
(void)line;
return buffer_allocator_alloc((buffer_allocator_t *)this, bytes);
}
static void *buffer_resize(void *this, void *old_ptr, size_t bytes, const char *file, int line) {
(void)old_ptr;
(void)file;
(void)line;
// TODO: do the concrete implementation first!
void *new_ptr = buffer_allocator_alloc((buffer_allocator_t *)this, bytes);
}
static void buffer_free(void *this, void *ptr, const char *file, int line) {
(void)this;
(void)ptr;
(void)file;
(void)line;
}
static const allocator_vtbl_t buffer_vtbl = {
.alloc = buffer_alloc,
.resize = buffer_resize,
.free = buffer_free,
};
allocator_t buffer_allocator_interface(buffer_allocator_t *this) {
}