#include "jl_ringbuf.h" struct RingBuffer { int size; jack_ringbuffer_t *buf; }; RingBuffer *jlrb_new(int size) { RingBuffer *rb = jl_malloc_exit(sizeof(RingBuffer)); rb->size = size; // It appears that we need to add one extra byte to the allocation // in order to get the capacity we desire -jdl 2015-08-29. rb->buf = jack_ringbuffer_create(sizeof(void *) * size + 1); return rb; } void jlrb_free(RingBuffer ** rb) { jack_ringbuffer_free((*rb)->buf); jl_free(*rb); *rb = NULL; } int jlrb_size(RingBuffer * rb) { return rb->size; } inline int jlrb_count(RingBuffer * rb) { return jack_ringbuffer_read_space(rb->buf) / sizeof(void *); } inline bool jlrb_put(RingBuffer * rb, void *data) { int writeSpace = jack_ringbuffer_write_space(rb->buf); if (writeSpace < sizeof(void *)) { return false; } jack_ringbuffer_write(rb->buf, (char *)(&data), sizeof(void *)); return true; } inline void *jlrb_get(RingBuffer * rb) { if (jlrb_count(rb) == 0) { return NULL; } void *data; jack_ringbuffer_read(rb->buf, (char *)(&data), sizeof(void *)); return data; }