diff options
author | Max Kellermann <max@duempel.org> | 2013-12-15 22:32:05 +0100 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2013-12-15 23:07:08 +0100 |
commit | ecdebb315ffb99efcdaaf8d7f0a7d717e58d0161 (patch) | |
tree | 98ac166f61788b1d387cc50c85ce9584429ec6b0 | |
parent | 1f523be72decf652dfe64ac6885770d8e86de0c7 (diff) | |
download | mpd-ecdebb315ffb99efcdaaf8d7f0a7d717e58d0161.tar.gz mpd-ecdebb315ffb99efcdaaf8d7f0a7d717e58d0161.tar.xz mpd-ecdebb315ffb99efcdaaf8d7f0a7d717e58d0161.zip |
util/PeakBuffer: use DynamicFifoBuffer instead of struct fifo_buffer
Switch to the C++ version.
-rw-r--r-- | src/event/FullyBufferedSocket.cxx | 1 | ||||
-rw-r--r-- | src/util/PeakBuffer.cxx | 72 | ||||
-rw-r--r-- | src/util/PeakBuffer.hxx | 11 |
3 files changed, 36 insertions, 48 deletions
diff --git a/src/event/FullyBufferedSocket.cxx b/src/event/FullyBufferedSocket.cxx index 9bb82a600..e7869cd66 100644 --- a/src/event/FullyBufferedSocket.cxx +++ b/src/event/FullyBufferedSocket.cxx @@ -20,7 +20,6 @@ #include "config.h" #include "FullyBufferedSocket.hxx" #include "system/SocketError.hxx" -#include "util/fifo_buffer.h" #include "util/Error.hxx" #include "util/Domain.hxx" #include "Compiler.h" diff --git a/src/util/PeakBuffer.cxx b/src/util/PeakBuffer.cxx index 7db1c97dc..c66218043 100644 --- a/src/util/PeakBuffer.cxx +++ b/src/util/PeakBuffer.cxx @@ -18,48 +18,39 @@ */ #include "PeakBuffer.hxx" -#include "HugeAllocator.hxx" -#include "fifo_buffer.h" +#include "DynamicFifoBuffer.hxx" #include <algorithm> #include <assert.h> -#include <stdint.h> #include <string.h> PeakBuffer::~PeakBuffer() { - if (normal_buffer != nullptr) - fifo_buffer_free(normal_buffer); - - if (peak_buffer != nullptr) - HugeFree(peak_buffer, peak_size); + delete normal_buffer; + delete peak_buffer; } bool PeakBuffer::IsEmpty() const { - return (normal_buffer == nullptr || - fifo_buffer_is_empty(normal_buffer)) && - (peak_buffer == nullptr || - fifo_buffer_is_empty(peak_buffer)); + return (normal_buffer == nullptr || normal_buffer->IsEmpty()) && + (peak_buffer == nullptr || peak_buffer->IsEmpty()); } -ConstBuffer<void> +WritableBuffer<void> PeakBuffer::Read() const { if (normal_buffer != nullptr) { - size_t size; - const void *p = fifo_buffer_read(normal_buffer, &size); - if (p != nullptr) - return { p, size }; + const auto p = normal_buffer->Read(); + if (!p.IsNull()) + return p.ToVoid(); } if (peak_buffer != nullptr) { - size_t size; - const void *p = fifo_buffer_read(peak_buffer, &size); - if (p != nullptr) - return { p, size }; + const auto p = peak_buffer->Read(); + if (!p.IsNull()) + return p.ToVoid(); } return nullptr; @@ -68,15 +59,15 @@ PeakBuffer::Read() const void PeakBuffer::Consume(size_t length) { - if (normal_buffer != nullptr && !fifo_buffer_is_empty(normal_buffer)) { - fifo_buffer_consume(normal_buffer, length); + if (normal_buffer != nullptr && !normal_buffer->IsEmpty()) { + normal_buffer->Consume(length); return; } - if (peak_buffer != nullptr && !fifo_buffer_is_empty(peak_buffer)) { - fifo_buffer_consume(peak_buffer, length); - if (fifo_buffer_is_empty(peak_buffer)) { - HugeFree(peak_buffer, peak_size); + if (peak_buffer != nullptr && !peak_buffer->IsEmpty()) { + peak_buffer->Consume(length); + if (peak_buffer->IsEmpty()) { + delete peak_buffer; peak_buffer = nullptr; } @@ -85,7 +76,7 @@ PeakBuffer::Consume(size_t length) } static size_t -AppendTo(fifo_buffer *buffer, const void *data, size_t length) +AppendTo(DynamicFifoBuffer<uint8_t> &buffer, const void *data, size_t length) { assert(data != nullptr); assert(length > 0); @@ -93,14 +84,13 @@ AppendTo(fifo_buffer *buffer, const void *data, size_t length) size_t total = 0; do { - size_t max_length; - void *p = fifo_buffer_write(buffer, &max_length); - if (p == nullptr) + const auto p = buffer.Write(); + if (p.IsNull()) break; - const size_t nbytes = std::min(length, max_length); - memcpy(p, data, nbytes); - fifo_buffer_append(buffer, nbytes); + const size_t nbytes = std::min(length, p.size); + memcpy(p.data, data, nbytes); + buffer.Append(nbytes); data = (const uint8_t *)data + nbytes; length -= nbytes; @@ -116,15 +106,15 @@ PeakBuffer::Append(const void *data, size_t length) if (length == 0) return true; - if (peak_buffer != nullptr && !fifo_buffer_is_empty(peak_buffer)) { - size_t nbytes = AppendTo(peak_buffer, data, length); + if (peak_buffer != nullptr && !peak_buffer->IsEmpty()) { + size_t nbytes = AppendTo(*peak_buffer, data, length); return nbytes == length; } if (normal_buffer == nullptr) - normal_buffer = fifo_buffer_new(normal_size); + normal_buffer = new DynamicFifoBuffer<uint8_t>(normal_size); - size_t nbytes = AppendTo(normal_buffer, data, length); + size_t nbytes = AppendTo(*normal_buffer, data, length); if (nbytes > 0) { data = (const uint8_t *)data + nbytes; length -= nbytes; @@ -133,13 +123,11 @@ PeakBuffer::Append(const void *data, size_t length) } if (peak_buffer == nullptr && peak_size > 0) { - peak_buffer = (fifo_buffer *)HugeAllocate(peak_size); + peak_buffer = new DynamicFifoBuffer<uint8_t>(peak_size); if (peak_buffer == nullptr) return false; - - fifo_buffer_init(peak_buffer, peak_size); } - nbytes = AppendTo(peak_buffer, data, length); + nbytes = AppendTo(*peak_buffer, data, length); return nbytes == length; } diff --git a/src/util/PeakBuffer.hxx b/src/util/PeakBuffer.hxx index 0e58e80b8..66f4c1a9f 100644 --- a/src/util/PeakBuffer.hxx +++ b/src/util/PeakBuffer.hxx @@ -20,13 +20,14 @@ #ifndef MPD_PEAK_BUFFER_HXX #define MPD_PEAK_BUFFER_HXX -#include "ConstBuffer.hxx" +#include "WritableBuffer.hxx" #include "Compiler.h" #include <stddef.h> +#include <stdint.h> -struct fifo_buffer; -template<typename T> struct ConstBuffer; +template<typename T> struct WritableBuffer; +template<typename T> class DynamicFifoBuffer; /** * A FIFO-like buffer that will allocate more memory on demand to @@ -36,7 +37,7 @@ template<typename T> struct ConstBuffer; class PeakBuffer { size_t normal_size, peak_size; - fifo_buffer *normal_buffer, *peak_buffer; + DynamicFifoBuffer<uint8_t> *normal_buffer, *peak_buffer; public: PeakBuffer(size_t _normal_size, size_t _peak_size) @@ -60,7 +61,7 @@ public: bool IsEmpty() const; gcc_pure - ConstBuffer<void> Read() const; + WritableBuffer<void> Read() const; void Consume(size_t length); |