#include "ring_buffer.h" #include "string.h" void ring_buffer_init(struct ring_buffer *buffer, u32 el_size) { buffer->start = 0; buffer->end = 0; buffer->element_size = el_size; buffer->size = 0; } void ring_buffer_push(struct ring_buffer *buffer, void *el) { if (buffer->size >= RING_BUFFER_SIZE) return; char *dst = buffer->buffer + buffer->start; memcpy(dst, el, buffer->element_size); buffer->start = (buffer->start + buffer->element_size) % RING_BUFFER_SIZE; buffer->size += buffer->element_size; } void *ring_buffer_pop(struct ring_buffer *buffer) { if (buffer->size == 0) return NULL; void *res = buffer->buffer + buffer->end; buffer->end = (buffer->end + buffer->element_size) % RING_BUFFER_SIZE; buffer->size -= buffer->element_size; return res; }