AK: Add DuplexMemoryStream::copy_into_contiguous_buffer.

This commit is contained in:
asynts 2020-09-01 11:55:04 +02:00 committed by Andreas Kling
parent b68a873067
commit 3a2658951b
Notes: sideshowbarker 2024-07-19 02:56:38 +09:00

View file

@ -225,7 +225,7 @@ public:
return {}; return {};
} }
size_t read(Bytes bytes) override size_t read_without_consuming(Bytes bytes) const
{ {
size_t nread = 0; size_t nread = 0;
while (bytes.size() - nread > 0 && m_write_offset - m_read_offset - 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)); 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(); try_discard_chunks();
return nread; return nread;
@ -272,6 +278,16 @@ public:
return true; 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 roffset() const { return m_read_offset; }
size_t woffset() const { return m_write_offset; } size_t woffset() const { return m_write_offset; }