summaryrefslogtreecommitdiff
path: root/src/std/containers/ring_queue.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/std/containers/ring_queue.c')
-rw-r--r--src/std/containers/ring_queue.c68
1 files changed, 0 insertions, 68 deletions
diff --git a/src/std/containers/ring_queue.c b/src/std/containers/ring_queue.c
deleted file mode 100644
index 8bfc10b..0000000
--- a/src/std/containers/ring_queue.c
+++ /dev/null
@@ -1,68 +0,0 @@
-#include "ring_queue.h"
-
-#include <stdlib.h>
-#include <string.h>
-#include "defines.h"
-
-ring_queue* ring_queue_new(size_t type_size, size_t capacity, void* memory) {
- ring_queue* q = malloc(sizeof(ring_queue));
- q->len = 0;
- q->capacity = capacity;
- q->type_size = type_size;
- q->head = 0;
- q->tail = -1;
-
- if (memory) {
- // caller owns the memory
- q->owns_memory = false;
- q->data = memory;
- } else {
- // ring queue should own the memory
- q->owns_memory = true;
- q->data = malloc(capacity * type_size);
- }
-
- return q;
-}
-
-void ring_queue_free(ring_queue* queue) {
- if (queue) {
- if (queue->owns_memory) {
- free(queue->data);
- }
- free(queue);
- }
-}
-
-bool ring_queue_enqueue(ring_queue* queue, const void* value) {
- if (queue->len == queue->capacity) {
- return false;
- }
-
- queue->tail = (queue->tail + 1) % queue->capacity;
- memcpy(queue->data + (queue->tail * queue->type_size), value, queue->type_size);
- queue->len++;
- return true;
-}
-
-bool ring_queue_dequeue(ring_queue* queue, void* out_value) {
- if (queue->len == 0) {
- // queue is empty
- return false;
- }
-
- memcpy(out_value, queue->data + (queue->head * queue->type_size), queue->type_size);
- queue->head = (queue->head + 1) % queue->capacity;
- queue->len--;
- return true;
-}
-
-bool ring_queue_peek(const ring_queue* queue, void* out_value) {
- if (queue->len == 0) {
- // queue is empty
- return false;
- }
-
- memcpy(out_value, queue->data + (queue->head * queue->type_size), queue->type_size);
- return true;
-} \ No newline at end of file