AK: Override read_until_filled in FixedMemoryStream

This specialized method allow significant performance improvements for
the user.
This commit is contained in:
Lucas CHOLLET 2023-06-06 13:52:56 -04:00 committed by Jelle Raaijmakers
parent d00a563462
commit 102fdf6305
Notes: sideshowbarker 2024-07-17 04:10:16 +09:00
2 changed files with 12 additions and 0 deletions

View file

@ -54,6 +54,17 @@ ErrorOr<Bytes> FixedMemoryStream::read_some(Bytes bytes)
return bytes.trim(to_read);
}
ErrorOr<void> FixedMemoryStream::read_until_filled(AK::Bytes bytes)
{
if (remaining() < bytes.size())
return Error::from_string_view_or_print_error_and_return_errno("Can't read past the end of the stream memory"sv, EINVAL);
m_bytes.slice(m_offset).copy_trimmed_to(bytes);
m_offset += bytes.size();
return {};
}
ErrorOr<size_t> FixedMemoryStream::seek(i64 offset, SeekMode seek_mode)
{
switch (seek_mode) {

View file

@ -24,6 +24,7 @@ public:
virtual void close() override;
virtual ErrorOr<void> truncate(size_t) override;
virtual ErrorOr<Bytes> read_some(Bytes bytes) override;
virtual ErrorOr<void> read_until_filled(Bytes bytes) override;
virtual ErrorOr<size_t> seek(i64 offset, SeekMode seek_mode = SeekMode::SetPosition) override;