54 lines
1.1 KiB
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;
|
||
|
}
|