This commit is contained in:
Imbus 2024-06-23 14:08:57 +02:00
parent 23273d09e2
commit 6a9b169b7d
2 changed files with 48 additions and 0 deletions

24
ringbuf.c Normal file
View file

@ -0,0 +1,24 @@
/* SPDX-License-Identifier: MIT */
#include "ringbuf.h"
void rb_init(struct RingBuf *rb, int capacity, void *(*alloc)(int),
int struct_size) {
rb->struct_size = struct_size;
rb->capacity = capacity;
rb->write_idx = 0;
rb->read_idx = 0;
rb->buffer = alloc(capacity * struct_size); /* Calloc? */
}
void rb_destroy(struct RingBuf *rb, int(free)(void *)) { free(rb->buffer); }
enum WriteResult rb_push(struct RingBuf *rb, void *data[], int amount) {
if (rb->write_idx == rb->read_idx) {
return CollisionError;
}
// Iterate over the data and copy it to the buffer
return Ok;
}

24
ringbuf.h Normal file
View file

@ -0,0 +1,24 @@
/* SPDX-License-Identifier: MIT */
/**
* Ring buffer, also known as circular buffer.
*/
struct RingBuf {
int struct_size; /* Size of the struct */
int capacity; /* The physical capacity of the entire ringbuf */
int write_idx; /* The write head */
int read_idx; /* THe read head */
void **buffer; /* The actual data */
};
enum WriteResult { CollisionError, Ok };
/** Initialize the ring buffer */
void rb_init(struct RingBuf *rb, int capacity, void *(*alloc)(int),
int struct_size);
/** Insert data to the ring buffer */
enum WriteResult rb_push(struct RingBuf *rb, void *data[], int amount);
/** Read data from the ring buffer */
// void *rb_read(struct RingBuf *rb, int amount);