30 CU_RINGBUFFER_ERROR_NONE = 0,
31 CU_RINGBUFFER_ERROR_OOM,
32 CU_RINGBUFFER_ERROR_INVALID_LAYOUT,
33 CU_RINGBUFFER_ERROR_INVALID,
34 CU_RINGBUFFER_ERROR_FULL,
35 CU_RINGBUFFER_ERROR_EMPTY,
41cu_RingBuffer_Result cu_RingBuffer_create(
cu_Allocator allocator,
42 cu_Layout layout,
size_t capacity, cu_Destructor_Optional destructor);
46static inline size_t cu_RingBuffer_size(
const cu_RingBuffer *rb) {
51static inline size_t cu_RingBuffer_capacity(
const cu_RingBuffer *rb) {
56static inline bool cu_RingBuffer_is_empty(
const cu_RingBuffer *rb) {
61static inline bool cu_RingBuffer_is_full(
const cu_RingBuffer *rb) {
66cu_RingBuffer_Error_Optional cu_RingBuffer_push(
cu_RingBuffer *rb,
void *elem);
68cu_RingBuffer_Error_Optional cu_RingBuffer_pop(
#define CU_IF_NULL(expr)
Definition macro.h:6
#define CU_OPTIONAL_DECL(NAME, T)
Definition optional.h:25
#define CU_RESULT_DECL(NAME, T, E)
Definition result.h:23
void cu_RingBuffer_clear(cu_RingBuffer *rb)
Definition ring_buffer.c:102
cu_RingBuffer_Error
Definition ring_buffer.h:29
Definition allocator.h:24
Ring buffer storing elements in FIFO order.
Definition ring_buffer.h:18
cu_Layout layout
Definition ring_buffer.h:23
size_t capacity
Definition ring_buffer.h:20
cu_Allocator allocator
Definition ring_buffer.h:24
size_t head
Definition ring_buffer.h:21
cu_Slice_Optional data
Definition ring_buffer.h:19
size_t length
Definition ring_buffer.h:22
cu_Destructor_Optional destructor
Definition ring_buffer.h:25