diff options
Diffstat (limited to 'AK/MemoryStream.h')
-rw-r--r-- | AK/MemoryStream.h | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/AK/MemoryStream.h b/AK/MemoryStream.h index 96df59f3c9..dc8818698e 100644 --- a/AK/MemoryStream.h +++ b/AK/MemoryStream.h @@ -225,7 +225,7 @@ public: return {}; } - size_t read(Bytes bytes) override + size_t read_without_consuming(Bytes bytes) const { size_t nread = 0; while (bytes.size() - nread > 0 && m_write_offset - m_read_offset - nread > 0) { @@ -234,8 +234,14 @@ public: nread += chunk_bytes.copy_trimmed_to(bytes.slice(nread)); } - m_read_offset += nread; + return nread; + } + + size_t read(Bytes bytes) override + { + const auto nread = read_without_consuming(bytes); + m_read_offset += nread; try_discard_chunks(); return nread; @@ -272,6 +278,16 @@ public: return true; } + ByteBuffer copy_into_contiguous_buffer() const + { + auto buffer = ByteBuffer::create_uninitialized(remaining()); + + const auto nread = read_without_consuming(buffer); + ASSERT(nread == buffer.size()); + + return buffer; + } + size_t roffset() const { return m_read_offset; } size_t woffset() const { return m_write_offset; } |