summaryrefslogtreecommitdiff
path: root/include/kitchensink/internal/utils/kitbuffer.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/kitchensink/internal/utils/kitbuffer.h')
-rw-r--r--include/kitchensink/internal/utils/kitbuffer.h30
1 files changed, 30 insertions, 0 deletions
diff --git a/include/kitchensink/internal/utils/kitbuffer.h b/include/kitchensink/internal/utils/kitbuffer.h
new file mode 100644
index 0000000..67d93c3
--- /dev/null
+++ b/include/kitchensink/internal/utils/kitbuffer.h
@@ -0,0 +1,30 @@
+#ifndef KITBUFFER_H
+#define KITBUFFER_H
+
+#include "kitchensink/kitconfig.h"
+
+typedef struct Kit_Buffer Kit_Buffer;
+
+typedef void (*Kit_BufferFreeCallback)(void*);
+typedef void (*Kit_ForEachItemCallback)(void*, void *userdata);
+
+struct Kit_Buffer {
+ unsigned int read_p;
+ unsigned int write_p;
+ unsigned int size;
+ Kit_BufferFreeCallback free_cb;
+ void **data;
+};
+
+KIT_LOCAL Kit_Buffer* Kit_CreateBuffer(unsigned int size, Kit_BufferFreeCallback free_cb);
+KIT_LOCAL void Kit_DestroyBuffer(Kit_Buffer *buffer);
+
+KIT_LOCAL void Kit_ClearBuffer(Kit_Buffer *buffer);
+KIT_LOCAL void* Kit_ReadBuffer(Kit_Buffer *buffer);
+KIT_LOCAL void* Kit_PeekBuffer(const Kit_Buffer *buffer);
+KIT_LOCAL void Kit_AdvanceBuffer(Kit_Buffer *buffer);
+KIT_LOCAL int Kit_WriteBuffer(Kit_Buffer *buffer, void *ptr);
+KIT_LOCAL void Kit_ForEachItemInBuffer(const Kit_Buffer *buffer, Kit_ForEachItemCallback cb, void *userdata);
+KIT_LOCAL int Kit_IsBufferFull(const Kit_Buffer *buffer);
+
+#endif // KITBUFFER_H