diff options
author | Max Kellermann <max@duempel.org> | 2014-01-06 21:38:25 +0100 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2014-01-06 22:17:30 +0100 |
commit | a9e849ff4f7e0d8e3f8c46de53f495e47c3019cc (patch) | |
tree | df309f4cb572cf691fd8fba56c90b73fe1987f3b /src/DecoderBuffer.cxx | |
parent | 4c95a4d7c67cb161fe42f8cd3a62c90208b515cc (diff) | |
download | mpd-a9e849ff4f7e0d8e3f8c46de53f495e47c3019cc.tar.gz mpd-a9e849ff4f7e0d8e3f8c46de53f495e47c3019cc.tar.xz mpd-a9e849ff4f7e0d8e3f8c46de53f495e47c3019cc.zip |
DecoderBuffer: _read() returns ConstBuffer object
Diffstat (limited to '')
-rw-r--r-- | src/DecoderBuffer.cxx | 29 |
1 files changed, 13 insertions, 16 deletions
diff --git a/src/DecoderBuffer.cxx b/src/DecoderBuffer.cxx index 0b326a6fd..bc65dd15d 100644 --- a/src/DecoderBuffer.cxx +++ b/src/DecoderBuffer.cxx @@ -20,6 +20,7 @@ #include "config.h" #include "DecoderBuffer.hxx" #include "DecoderAPI.hxx" +#include "util/ConstBuffer.hxx" #include <glib.h> @@ -124,15 +125,13 @@ decoder_buffer_fill(DecoderBuffer *buffer) return true; } -const void * -decoder_buffer_read(const DecoderBuffer *buffer, size_t *length_r) +ConstBuffer<void> +decoder_buffer_read(const DecoderBuffer *buffer) { - if (buffer->consumed >= buffer->length) - /* buffer is empty */ - return nullptr; - - *length_r = buffer->length - buffer->consumed; - return buffer->data + buffer->consumed; + return { + buffer->data + buffer->consumed, + buffer->length - buffer->consumed + }; } void @@ -149,19 +148,17 @@ decoder_buffer_consume(DecoderBuffer *buffer, size_t nbytes) bool decoder_buffer_skip(DecoderBuffer *buffer, size_t nbytes) { - size_t length; - const void *data; bool success; /* this could probably be optimized by seeking */ while (true) { - data = decoder_buffer_read(buffer, &length); - if (data != nullptr) { - if (length > nbytes) - length = nbytes; - decoder_buffer_consume(buffer, length); - nbytes -= length; + auto data = decoder_buffer_read(buffer); + if (!data.IsEmpty()) { + if (data.size > nbytes) + data.size = nbytes; + decoder_buffer_consume(buffer, data.size); + nbytes -= data.size; if (nbytes == 0) return true; } |