File syn_spsc_queue.h¶
File List > src > syntropic > util > syn_spsc_queue.h
Go to the documentation of this file
#ifndef SYN_SPSC_QUEUE_H
#define SYN_SPSC_QUEUE_H
#include "../common/syn_defs.h"
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
typedef struct {
uint8_t *buffer;
size_t elem_size;
size_t capacity;
volatile size_t head;
volatile size_t tail;
} SYN_SPSC_Queue;
SYN_Status syn_spsc_queue_init(SYN_SPSC_Queue *q, void *elem_buf, size_t elem_size,
size_t capacity);
SYN_Status syn_spsc_queue_push(SYN_SPSC_Queue *q, const void *item);
SYN_Status syn_spsc_queue_pop(SYN_SPSC_Queue *q, void *out_item);
bool syn_spsc_queue_is_empty(const SYN_SPSC_Queue *q);
bool syn_spsc_queue_is_full(const SYN_SPSC_Queue *q);
size_t syn_spsc_queue_count(const SYN_SPSC_Queue *q);
#ifdef __cplusplus
}
#endif
#endif /* SYN_SPSC_QUEUE_H */