AK: Add OutputMemoryStream class.

This commit is contained in:
asynts 2020-09-01 16:16:32 +02:00 committed by Andreas Kling
parent 3a2658951b
commit 7efd2a6d59
3 changed files with 29 additions and 0 deletions

View file

@ -53,6 +53,7 @@ class InputMemoryStream;
class DuplexMemoryStream;
class OutputStream;
class InputBitStream;
class OutputMemoryStream;
template<size_t Capacity>
class CircularDuplexStream;
@ -150,6 +151,7 @@ using AK::LogStream;
using AK::NonnullOwnPtr;
using AK::NonnullRefPtr;
using AK::Optional;
using AK::OutputMemoryStream;
using AK::OutputStream;
using AK::OwnPtr;
using AK::ReadonlyBytes;

View file

@ -308,8 +308,24 @@ private:
size_t m_base_offset { 0 };
};
class OutputMemoryStream final : public OutputStream {
public:
size_t write(ReadonlyBytes bytes) override { return m_stream.write(bytes); }
bool write_or_error(ReadonlyBytes bytes) override { return m_stream.write_or_error(bytes); }
ByteBuffer copy_into_contiguous_buffer() const { return m_stream.copy_into_contiguous_buffer(); }
Optional<size_t> offset_of(ReadonlyBytes value) const { return m_stream.offset_of(value); }
size_t size() const { return m_stream.woffset(); }
private:
DuplexMemoryStream m_stream;
};
}
using AK::DuplexMemoryStream;
using AK::InputMemoryStream;
using AK::InputStream;
using AK::OutputMemoryStream;

View file

@ -160,4 +160,15 @@ TEST_CASE(read_endian_values)
EXPECT_EQ(value2, 0x04050607u);
}
TEST_CASE(write_endian_values)
{
const u8 expected[] { 4, 3, 2, 1, 1, 2, 3, 4 };
OutputMemoryStream stream;
stream << LittleEndian<u32> { 0x01020304 } << BigEndian<u32> { 0x01020304 };
EXPECT_EQ(stream.size(), 8u);
EXPECT(compare({ expected, sizeof(expected) }, stream.copy_into_contiguous_buffer()));
}
TEST_MAIN(MemoryStream)