diff --git a/radio/processor/src/Buffer.hpp b/radio/processor/src/Buffer.hpp index 36e9ca5..585d3b2 100644 --- a/radio/processor/src/Buffer.hpp +++ b/radio/processor/src/Buffer.hpp @@ -49,6 +49,8 @@ class Buffer : public IBuffer Buffer(size_t capacity); ~Buffer(); + void resize(size_t size); + void fill(T value); size_t len(); size_t capacity(); void clear(); @@ -60,14 +62,6 @@ class Buffer : public IBuffer Result consume(size_t len); Result produce(size_t len); void print(const char *prefix); - - private: - size_t m_capacity; - size_t m_len; - size_t m_wi; - size_t m_ri; - size_t m_bid; - T *m_data[2]; void make_contigious() { if (m_len == 0) @@ -89,6 +83,14 @@ class Buffer : public IBuffer return m_data[m_bid]; } + private: + size_t m_capacity; + size_t m_len; + size_t m_wi; + size_t m_ri; + size_t m_bid; + T *m_data[2]; + T *bufferStdBy() { return m_data[!m_bid & 1]; diff --git a/radio/processor/src/Buffer.tcc b/radio/processor/src/Buffer.tcc index 754f8ad..d0df06d 100644 --- a/radio/processor/src/Buffer.tcc +++ b/radio/processor/src/Buffer.tcc @@ -11,8 +11,7 @@ Buffer::Buffer(size_t capacity) , m_bid(0) , m_data{nullptr, nullptr} { - m_data[0] = new T[capacity]; - m_data[1] = new T[capacity]; + resize(capacity); } template @@ -22,6 +21,30 @@ Buffer::~Buffer() delete [] m_data[1]; } +template +void Buffer::resize(size_t size) +{ + delete [] m_data[0]; + delete [] m_data[1]; + m_data[0] = new T[size]; + m_data[1] = new T[size]; + m_capacity = size; + + clear(); +} + +template +void Buffer::fill(T value) +{ + T *pData = data_w(); + + for (m_wi=0; m_wi < capacity(); m_wi++) + { + pData[m_wi] = value; + m_len++; + } +} + template size_t Buffer::len() {