diff --git a/AK/MemoryStream.cpp b/AK/MemoryStream.cpp index 62c6d11cc0e..4f2a45518b9 100644 --- a/AK/MemoryStream.cpp +++ b/AK/MemoryStream.cpp @@ -119,7 +119,7 @@ void AllocatingMemoryStream::peek_some(Bytes bytes) const auto peek_offset = m_read_offset; while (read_bytes < bytes.size()) { - auto range = MUST(next_read_range(peek_offset)); + auto range = next_read_range(peek_offset); if (range.size() == 0) break; @@ -129,6 +129,11 @@ void AllocatingMemoryStream::peek_some(Bytes bytes) const } } +ReadonlyBytes AllocatingMemoryStream::peek_some_contiguous() const +{ + return next_read_range(m_read_offset); +} + ErrorOr AllocatingMemoryStream::read_some(Bytes bytes) { size_t read_bytes = 0; @@ -136,7 +141,7 @@ ErrorOr AllocatingMemoryStream::read_some(Bytes bytes) while (read_bytes < bytes.size()) { VERIFY(m_write_offset >= m_read_offset); - auto range = TRY(next_read_range(m_read_offset)); + auto range = next_read_range(m_read_offset); if (range.size() == 0) break; @@ -236,7 +241,7 @@ ErrorOr> AllocatingMemoryStream::offset_of(ReadonlyBytes needle return AK::memmem(search_spans.begin(), search_spans.end(), needle); } -ErrorOr AllocatingMemoryStream::next_read_range(size_t read_offset) const +ReadonlyBytes AllocatingMemoryStream::next_read_range(size_t read_offset) const { VERIFY(m_write_offset >= read_offset); @@ -245,7 +250,7 @@ ErrorOr AllocatingMemoryStream::next_read_range(size_t read_offse size_t const read_size = min(CHUNK_SIZE - read_offset % CHUNK_SIZE, m_write_offset - read_offset); if (read_size == 0) - return ReadonlyBytes { static_cast(nullptr), 0 }; + return {}; VERIFY(chunk_index < m_chunks.size()); diff --git a/AK/MemoryStream.h b/AK/MemoryStream.h index 4e5f4680dcf..a4934822281 100644 --- a/AK/MemoryStream.h +++ b/AK/MemoryStream.h @@ -91,6 +91,7 @@ public: static constexpr size_t CHUNK_SIZE = 4096; void peek_some(Bytes) const; + ReadonlyBytes peek_some_contiguous() const; virtual ErrorOr read_some(Bytes) override; virtual ErrorOr write_some(ReadonlyBytes) override; @@ -107,7 +108,7 @@ private: // Note: We set the inline buffer capacity to zero to make moving chunks as efficient as possible. using Chunk = AK::Detail::ByteBuffer<0>; - ErrorOr next_read_range(size_t read_offset) const; + ReadonlyBytes next_read_range(size_t read_offset) const; ErrorOr next_write_range(); void cleanup_unused_chunks();