From 543a58bb874be8a510d54e91a37797b0c71b1160 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Sat, 12 Jul 2014 02:26:38 +0200 Subject: DecoderBuffer: implement _skip() using decoder_skip() --- src/decoder/DecoderBuffer.cxx | 25 ++++++++----------------- 1 file changed, 8 insertions(+), 17 deletions(-) (limited to 'src/decoder') diff --git a/src/decoder/DecoderBuffer.cxx b/src/decoder/DecoderBuffer.cxx index e26a702b7..7902e6e89 100644 --- a/src/decoder/DecoderBuffer.cxx +++ b/src/decoder/DecoderBuffer.cxx @@ -165,23 +165,14 @@ decoder_buffer_consume(DecoderBuffer *buffer, size_t nbytes) bool decoder_buffer_skip(DecoderBuffer *buffer, size_t nbytes) { - bool success; + const size_t available = decoder_buffer_available(buffer); + if (available >= nbytes) { + decoder_buffer_consume(buffer, nbytes); + return true; + } - /* this could probably be optimized by seeking */ + decoder_buffer_clear(buffer); + nbytes -= available; - while (true) { - 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; - } - - success = decoder_buffer_fill(buffer); - if (!success) - return false; - } + return decoder_skip(buffer->decoder, *buffer->is, nbytes); } -- cgit v1.2.3