diff options
Diffstat (limited to 'src/kitbuffer.c')
-rw-r--r-- | src/kitbuffer.c | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/src/kitbuffer.c b/src/kitbuffer.c new file mode 100644 index 0000000..769f9fd --- /dev/null +++ b/src/kitbuffer.c @@ -0,0 +1,46 @@ +#include "kitchensink/internal/kitbuffer.h" + +#include <stdlib.h> +#include <assert.h> + +Kit_Buffer* Kit_CreateBuffer(unsigned int size) { + Kit_Buffer *b = calloc(1, sizeof(Kit_Buffer)); + b->size = size; + b->data = calloc(size, sizeof(void*)); + return b; +} + +void Kit_DestroyBuffer(Kit_Buffer *buffer) { + assert(buffer != NULL); +} + +void* Kit_ReadBuffer(Kit_Buffer *buffer) { + assert(buffer != NULL); + if(buffer->read_p < buffer->write_p) { + void *out = buffer->data[buffer->read_p]; + buffer->data[buffer->read_p] = NULL; + buffer->read_p++; + if(buffer->read_p >= buffer->size) { + buffer->read_p -= buffer->size; + buffer->write_p -= buffer->size; + } + return out; + } + return NULL; +} + +int Kit_WriteBuffer(Kit_Buffer *buffer, void *ptr) { + assert(buffer != NULL); + assert(ptr != NULL); + + if(!Kit_IsBufferFull(buffer)) { + buffer->data[buffer->write_p] = ptr; + buffer->write_p++; + return 0; + } + return 1; +} + +int Kit_IsBufferFull(const Kit_Buffer *buffer) { + return (buffer->write_p - buffer->read_p >= buffer->size); +}
\ No newline at end of file |