diff --git a/src/ringbuffer.cpp b/src/ringbuffer.cpp index 9b87c78..05b29be 100644 --- a/src/ringbuffer.cpp +++ b/src/ringbuffer.cpp @@ -4,27 +4,28 @@ #include #include "ringbuffer.h" -bool RingBuffer::PushEvent(jack_midi_event_t &ev) +bool RingBuffer::PushEvent(const jack_midi_event_t &ev) { - if (Free() <= sizeof ev.time + sizeof ev.size + ev.size) return false; + size_t f = jack_ringbuffer_write_space(m_buffer); + if (f <= sizeof ev.time + sizeof ev.size + ev.size) return false; - Write((uint8_t *)&ev.time, sizeof ev.time); - Write((uint8_t *)&ev.size, sizeof ev.size); - Write((uint8_t* )ev.buffer, ev.size); + jack_ringbuffer_write(m_buffer, (const char *)&ev.size, sizeof ev.size); + jack_ringbuffer_write(m_buffer, (const char *)&ev.time, sizeof ev.time); + jack_ringbuffer_write(m_buffer, (const char *)ev.buffer, ev.size); return true; } bool RingBuffer::PopEvent(jack_midi_event_t &ev) { - if (Size() >= sizeof ev.time + sizeof ev.size) { - uint8_t *peek; - peek = Peek((uint8_t *)&ev.time, sizeof ev.time, m_read); - peek = Peek((uint8_t *)&ev.size, sizeof ev.size, peek); - if (Size() >= sizeof ev.time + sizeof ev.size + ev.size) { + size_t f = jack_ringbuffer_read_space(m_buffer); + if (f >= sizeof ev.time + sizeof ev.size) { + jack_ringbuffer_peek(m_buffer, (char *)&ev.size, sizeof ev.size); + if (f >= sizeof ev.time + sizeof ev.size + ev.size) { ev.buffer = (jack_midi_data_t *)malloc(ev.size); - m_read = peek; - Read((uint8_t *)ev.buffer, ev.size); + jack_ringbuffer_read(m_buffer, (char *)&ev.size, sizeof ev.size); + jack_ringbuffer_read(m_buffer, (char *)&ev.time, sizeof ev.time); + jack_ringbuffer_read(m_buffer, (char *)ev.buffer, ev.size); return true; } } diff --git a/src/ringbuffer.h b/src/ringbuffer.h index dd89e44..abe65d7 100644 --- a/src/ringbuffer.h +++ b/src/ringbuffer.h @@ -3,70 +3,24 @@ #ifndef RINGBUFFER_H #define RINGBUFFER_H +#include + class RingBuffer { private: - uint8_t *m_buffer; - uint8_t *m_end; - uint8_t *m_write; - uint8_t *m_read; + jack_ringbuffer_t *m_buffer; public: RingBuffer(size_t length) { - m_buffer = (uint8_t *)malloc(length); - m_end = m_buffer + length; - m_write = m_buffer; - m_read = m_buffer; + m_buffer = jack_ringbuffer_create(length); } ~RingBuffer() { - free(m_buffer); + jack_ringbuffer_free(m_buffer); } - void Write(const uint8_t *buffer, size_t length) - { - while (length--) { - if (m_write == m_end) m_write = m_buffer; - *m_write++ = *buffer++; - } - } - - void Read(uint8_t *buffer, size_t length) - { - while (length--) { - if (m_read == m_end) m_read = m_buffer; - *buffer++ = *m_read++; - } - } - - uint8_t *Peek(uint8_t *buffer, size_t length, uint8_t *peek) - { - while (length--) { - if (peek == m_end) peek = m_buffer; - *buffer++ = *peek++; - } - return peek; - } - - size_t Size() const - { - if (m_write >= m_read) return m_write - m_read; - return (m_end - m_read) + (m_write - m_buffer); - } - - size_t Free() const - { - return (m_end - m_buffer) - Size(); - } - - void Reset() - { - m_write = m_buffer; - m_read = m_buffer; - } - - bool PushEvent(jack_midi_event_t &event); + bool PushEvent(const jack_midi_event_t &event); bool PopEvent(jack_midi_event_t &event); };