From 5c3798b4e2dc0c63b6dfe5160d5d4e77bf5e7083 Mon Sep 17 00:00:00 2001 From: Jens Ahrensfeld Date: Wed, 15 Jun 2022 06:09:59 +0000 Subject: [PATCH] - improved buffers git-svn-id: http://moon:8086/svn/software/trunk/libsrc/cpp@971 b431acfa-c32f-4a4a-93f1-934dc6c82436 --- radio/processor/src/Buffer.hpp | 2 +- radio/processor/src/Buffer.tcc | 21 +++++---------------- 2 files changed, 6 insertions(+), 17 deletions(-) diff --git a/radio/processor/src/Buffer.hpp b/radio/processor/src/Buffer.hpp index b23e4a7..0b1c17f 100644 --- a/radio/processor/src/Buffer.hpp +++ b/radio/processor/src/Buffer.hpp @@ -60,7 +60,7 @@ class Buffer : public IBuffer T* data_r(); size_t write(const T* pData, size_t len); - size_t read(T* pData, size_t len, bool do_consume=true); + size_t read(T* pData, size_t len); T readAt(size_t offset); Result consume(size_t len); Result produce(size_t len); diff --git a/radio/processor/src/Buffer.tcc b/radio/processor/src/Buffer.tcc index 8b1ef62..70821bb 100644 --- a/radio/processor/src/Buffer.tcc +++ b/radio/processor/src/Buffer.tcc @@ -108,7 +108,7 @@ size_t Buffer::write(const T *pData, size_t len) } template -size_t Buffer::read(T* pData, size_t len, bool do_consume) +size_t Buffer::read(T* pData, size_t len) { len = std::min(m_len, len); size_t numRead = 0; @@ -120,10 +120,7 @@ size_t Buffer::read(T* pData, size_t len, bool do_consume) memcpy(pData, data_r(), actual_len*sizeof(T)); len -= actual_len; pData += actual_len; - if (do_consume) - { - consume(actual_len); - } + numRead += actual_len; } return numRead; @@ -138,7 +135,7 @@ T Buffer::readAt(size_t offset) } size_t i = (m_ri + offset) % m_capacity; T result = bufferActive()[i]; - consume(1); + consume(1+offset); return result; } @@ -150,12 +147,8 @@ typename Buffer::Result Buffer::consume(size_t len) RETURN_OR_EXCEPT(Result::Err_InvalidSize); } m_len -= len; + m_ri = (m_ri + len) % m_capacity; - m_ri += len; - if (m_ri >= m_capacity) - { - m_ri -= m_capacity; - } return Result::Ok; } @@ -167,12 +160,8 @@ typename Buffer::Result Buffer::produce(size_t len) RETURN_OR_EXCEPT(Result::Err_InvalidSize); } m_len += len; + m_wi = (m_wi + len) % m_capacity; - m_wi += len; - if (m_wi >= m_capacity) - { - m_wi -= m_capacity; - } return Result::Ok; }