19#ifndef JACK_RING_BUFFER_CLASS_H
20#define JACK_RING_BUFFER_CLASS_H
27#include <jack/ringbuffer.h>
33template<
typename Type>
41 jack_ringbuffer_t *mRingBufferPtr;
53 mRingBufferPtr = jack_ringbuffer_create(mLength *
sizeof(Type));
57 jack_ringbuffer_mlock(mRingBufferPtr);
61 if(mRingBufferPtr != NULL)
62 jack_ringbuffer_free(mRingBufferPtr);
77 return jack_ringbuffer_read_space(mRingBufferPtr) /
sizeof(Type);
82 return jack_ringbuffer_write_space(mRingBufferPtr) /
sizeof(Type);
97 jack_ringbuffer_read(mRingBufferPtr, (
char *)&dest,
sizeof(Type));
108 void read(Type *dest,
unsigned cnt){
109 jack_ringbuffer_data_t readVec[2];
110 unsigned int read_size =
sizeof(Type) * cnt;
117 jack_ringbuffer_get_read_vector(mRingBufferPtr, readVec);
120 if(readVec[0].len >= read_size){
121 memcpy(dest, readVec[0].buf, read_size);
124 if(readVec[0].len == 0){
125 memcpy(dest, readVec[1].buf, read_size);
128 char * byterep = (
char *)dest;
130 memcpy(byterep, readVec[0].buf, readVec[0].len);
132 memcpy(byterep + readVec[0].len, readVec[1].buf, read_size - readVec[0].len);
136 jack_ringbuffer_read_advance(mRingBufferPtr, read_size);
149 jack_ringbuffer_write(mRingBufferPtr, (
char *)&src,
sizeof(Type));
158 void write(Type *src,
unsigned int cnt){
159 jack_ringbuffer_data_t writeVec[2];
160 unsigned int write_size =
sizeof(Type) * cnt;
167 jack_ringbuffer_get_write_vector(mRingBufferPtr, writeVec);
169 if(writeVec[0].len >= write_size){
170 memcpy(writeVec[0].buf,src,write_size);
173 if(writeVec[0].len == 0){
174 memcpy(writeVec[1].buf,src,write_size);
177 char * byterep = (
char *)src;
179 memcpy(writeVec[0].buf, byterep, writeVec[0].len);
181 memcpy(writeVec[1].buf, byterep + writeVec[0].len, write_size - writeVec[0].len);
184 jack_ringbuffer_write_advance(mRingBufferPtr, write_size);
194 jack_ringbuffer_reset(mRingBufferPtr);
Definition: jackringbuffer.hpp:39
void reset()
Reset.
Definition: jackringbuffer.hpp:193
void read(Type *dest, unsigned cnt)
Read into an array.
Definition: jackringbuffer.hpp:108
size_t length()
Get the total length of the ring buffer.
Definition: jackringbuffer.hpp:66
size_t getReadSpace()
Get the number of items that can be read at this time.
Definition: jackringbuffer.hpp:76
RingBuffer(size_t size, bool mlock=false)
The Constructor.
Definition: jackringbuffer.hpp:50
void write(Type *src, unsigned int cnt)
Write an array of values into the ring buffer.
Definition: jackringbuffer.hpp:158
void write(Type src)
Write into the ring buffer.
Definition: jackringbuffer.hpp:144
size_t getWriteSpace()
Get the number of items that can be written at this time.
Definition: jackringbuffer.hpp:81
~RingBuffer()
The Destructor.
Definition: jackringbuffer.hpp:60
void read(Type &dest)
Read into dest.
Definition: jackringbuffer.hpp:92
bool isBufferMemoryLocked()
Get whether the ring buffer is locked into the memory.
Definition: jackringbuffer.hpp:71