41#define SRN_SPSC_RING_CAP_TYPE uint32_t
Error handling for the runtime.
bool srn_spsc_ring_push(srn_spsc_ring_t *r, const void *elem)
Producer side.
bool srn_spsc_ring_empty(const srn_spsc_ring_t *r)
Whether the ring currently holds no elements.
#define SRN_SPSC_RING_CAP_TYPE
srn_spsc_ring_t * srn_spsc_ring_make(srn_context_t *ctx, size_t magnitude, size_t elem_size)
Set up a ring by allocating the buf to be the size of cap * elem_size.
bool srn_spsc_ring_pop(srn_spsc_ring_t *r, void *out)
Consumer side.
SRN_SPSC_RING_CAP_TYPE cap
SRN_SPSC_RING_CAP_TYPE mask
_Atomic size_t tail
Producer index. Only the producer advances it.
_Atomic size_t head
Consumer index. Only the consumer advances it.
unsigned char * buf
cap * elem_size bytes.