Single-Producer Single-Consumer Lock-Free FIFO Ring
include/structures/spsc_fifo_ring.h View source View on GitHubStructs
Section titled “Structs”spsc_fifo_ring
Section titled “spsc_fifo_ring” struct spsc_fifo_ring (5 fields) source
§
atomic_size_t head Written by Producer
§
atomic_size_t tail Written by Consumer
§
size_t size Capacity (pow2) §
size_t mask size - 1
§
uint8_t *data Functions
Section titled “Functions”spsc_fifo_ring_init
Section titled “spsc_fifo_ring_init”bool spsc_fifo_ring_init(struct spsc_fifo_ring *fifo, size_t size) source (rounded to power of 2)
spsc_fifo_ring_init_with
Section titled “spsc_fifo_ring_init_with”void spsc_fifo_ring_init_with(
struct spsc_fifo_ring *fifo,
void *buffer,
size_t size
) source spsc_fifo_ring_destroy
Section titled “spsc_fifo_ring_destroy”void spsc_fifo_ring_destroy(struct spsc_fifo_ring *fifo) source spsc_fifo_ring_write
Section titled “spsc_fifo_ring_write”size_t spsc_fifo_ring_write(
struct spsc_fifo_ring *fifo,
const void *src,
size_t len
) source spsc_fifo_ring_read
Section titled “spsc_fifo_ring_read”size_t spsc_fifo_ring_read(
struct spsc_fifo_ring *fifo,
void *dst,
size_t len
) source spsc_fifo_ring_peek
Section titled “spsc_fifo_ring_peek”size_t spsc_fifo_ring_peek(
const struct spsc_fifo_ring *fifo,
void *dst,
size_t len
) source peek up to len bytes into dst without consuming
spsc_fifo_ring_push_ptr
Section titled “spsc_fifo_ring_push_ptr”bool spsc_fifo_ring_push_ptr(
struct spsc_fifo_ring *fifo,
const void *ptr
) source spsc_fifo_ring_pop_ptr
Section titled “spsc_fifo_ring_pop_ptr”bool spsc_fifo_ring_pop_ptr(
struct spsc_fifo_ring *fifo,
void **out_ptr
) source spsc_fifo_ring_len
Section titled “spsc_fifo_ring_len”size_t spsc_fifo_ring_len(const struct spsc_fifo_ring *fifo) source spsc_fifo_ring_avail
Section titled “spsc_fifo_ring_avail”size_t spsc_fifo_ring_avail(const struct spsc_fifo_ring *fifo) source spsc_fifo_ring_is_empty
Section titled “spsc_fifo_ring_is_empty”bool spsc_fifo_ring_is_empty(const struct spsc_fifo_ring *fifo) source spsc_fifo_ring_is_full
Section titled “spsc_fifo_ring_is_full”bool spsc_fifo_ring_is_full(const struct spsc_fifo_ring *fifo) source spsc_fifo_ring_reset
Section titled “spsc_fifo_ring_reset”void spsc_fifo_ring_reset(struct spsc_fifo_ring *fifo) source Macros
Section titled “Macros”SPSC_FIFO_RING_INIT
Section titled “SPSC_FIFO_RING_INIT”#define SPSC_FIFO_RING_INIT source Expansion
#define SPSC_FIFO_RING_INIT \
(struct spsc_fifo_ring) { \
.head = 0, .tail = 0, .size = 0, .mask = 0, .data = NULL \
}