k-chow/k/utils/ring_buffer.c

34 lines
835 B
C
Raw Normal View History

#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;
}