commit c11f93d5b0e8bcf727c00d64a310c5f064a2c719
parent 227a7015a85deeed52eb2c58456303c201674118
Author: falkTX <falktx@falktx.com>
Date: Sun, 27 Aug 2023 09:21:01 +0200
Fix RingBuffer::getReadableDataSize, add a few methods
Signed-off-by: falkTX <falktx@falktx.com>
Diffstat:
1 file changed, 24 insertions(+), 2 deletions(-)
diff --git a/distrho/extra/RingBuffer.hpp b/distrho/extra/RingBuffer.hpp
@@ -201,13 +201,21 @@ public:
}
/*
+ * Get the full ringbuffer size.
+ */
+ uint32_t getSize() const noexcept
+ {
+ return buffer != nullptr ? buffer->size : 0;
+ }
+
+ /*
* Get the size of the data available to read.
*/
uint32_t getReadableDataSize() const noexcept
{
DISTRHO_SAFE_ASSERT_RETURN(buffer != nullptr, 0);
- const uint32_t wrap = buffer->head > buffer->tail ? 0 : buffer->size;
+ const uint32_t wrap = buffer->head >= buffer->tail ? 0 : buffer->size;
return wrap + buffer->head - buffer->tail;
}
@@ -219,7 +227,7 @@ public:
{
DISTRHO_SAFE_ASSERT_RETURN(buffer != nullptr, 0);
- const uint32_t wrap = (buffer->tail > buffer->wrtn) ? 0 : buffer->size;
+ const uint32_t wrap = buffer->tail > buffer->wrtn ? 0 : buffer->size;
return wrap + buffer->tail - buffer->wrtn;
}
@@ -243,6 +251,20 @@ public:
std::memset(buffer->buf, 0, buffer->size);
}
+ /*
+ * Reset the ring buffer read and write positions, marking the buffer as empty.
+ * Requires a buffer struct tied to this class.
+ */
+ void flush() noexcept
+ {
+ DISTRHO_SAFE_ASSERT_RETURN(buffer != nullptr,);
+
+ buffer->head = buffer->tail = buffer->wrtn = 0;
+ buffer->invalidateCommit = false;
+
+ errorWriting = false;
+ }
+
// -------------------------------------------------------------------
// read operations