This repository has been archived on 2017-07-22. You can view files and clone it, but cannot push or open issues/pull-requests.
jlsampler/jl_ringbuf.c

54 lines
1.1 KiB
C

#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;
}