mirror of
https://github.com/SerenityOS/serenity
synced 2024-10-07 00:19:27 +00:00
LibCore: Add a wrapper for adapting Core::Stream to AK::InputStream
This commit is contained in:
parent
35bcdefdf7
commit
4e7da96d58
|
@ -807,4 +807,50 @@ void WrappedAKOutputStream::close()
|
|||
{
|
||||
}
|
||||
|
||||
WrapInAKInputStream::WrapInAKInputStream(Core::Stream::Stream& stream)
|
||||
: m_stream(stream)
|
||||
{
|
||||
}
|
||||
|
||||
size_t WrapInAKInputStream::read(Bytes bytes)
|
||||
{
|
||||
if (has_any_error())
|
||||
return 0;
|
||||
|
||||
auto data_or_error = m_stream.read(bytes);
|
||||
if (data_or_error.is_error()) {
|
||||
set_fatal_error();
|
||||
return 0;
|
||||
}
|
||||
|
||||
return data_or_error.value().size();
|
||||
}
|
||||
|
||||
bool WrapInAKInputStream::unreliable_eof() const
|
||||
{
|
||||
return m_stream.is_eof();
|
||||
}
|
||||
|
||||
bool WrapInAKInputStream::read_or_error(Bytes bytes)
|
||||
{
|
||||
if (read(bytes) < bytes.size()) {
|
||||
set_fatal_error();
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool WrapInAKInputStream::discard_or_error(size_t count)
|
||||
{
|
||||
auto maybe_error = m_stream.discard(count);
|
||||
|
||||
if (maybe_error.is_error()) {
|
||||
set_fatal_error();
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1030,4 +1030,17 @@ private:
|
|||
NonnullOwnPtr<OutputStream> m_stream;
|
||||
};
|
||||
|
||||
// Note: This is only a temporary hack, to break up the task of moving away from AK::Stream into smaller parts.
|
||||
class WrapInAKInputStream final : public InputStream {
|
||||
public:
|
||||
WrapInAKInputStream(Core::Stream::Stream& stream);
|
||||
virtual size_t read(Bytes) override;
|
||||
virtual bool unreliable_eof() const override;
|
||||
virtual bool read_or_error(Bytes) override;
|
||||
virtual bool discard_or_error(size_t count) override;
|
||||
|
||||
private:
|
||||
Core::Stream::Stream& m_stream;
|
||||
};
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue