1 #include "ring_buffer.h"
2 #include "system/stacktrace.h"
4 void ring_buffer_push(RingBuffer *buffer,
10 size_t i = (buffer->begin + buffer->count) % buffer->capacity;
12 if (buffer->count < buffer->capacity) {
14 buffer->data + i * buffer->element_size,
16 buffer->element_size);
19 if (buffer->dtor) buffer->dtor(buffer->data + i * buffer->element_size);
21 buffer->data + i * buffer->element_size,
23 buffer->element_size);
24 buffer->begin = (buffer->begin + 1) % buffer->capacity;
28 int ring_buffer_pop(RingBuffer *buffer)
32 if (buffer->count == 0) return 0;
35 size_t i = (buffer->begin + buffer->count - 1) % buffer->capacity;
36 buffer->dtor(buffer->data + i * buffer->element_size);
44 void *ring_buffer_top(RingBuffer *buffer)
47 if (buffer->count == 0) return NULL;
48 size_t i = (buffer->begin + buffer->count - 1) % buffer->capacity;
49 return buffer->data + i * buffer->element_size;