AK: Remove the fallible constructor from LittleEndianOutputBitStream

This commit is contained in:
Tim Schumacher 2023-01-30 11:05:12 +01:00 committed by Linus Groh
parent 0fee97916b
commit 8b2f23d016
3 changed files with 13 additions and 18 deletions

View file

@ -303,9 +303,9 @@ private:
/// in little-endian order to another stream.
class LittleEndianOutputBitStream : public Stream {
public:
static ErrorOr<NonnullOwnPtr<LittleEndianOutputBitStream>> construct(MaybeOwned<Stream> stream)
explicit LittleEndianOutputBitStream(MaybeOwned<Stream> stream)
: m_stream(move(stream))
{
return adopt_nonnull_own_or_enomem<LittleEndianOutputBitStream>(new LittleEndianOutputBitStream(move(stream)));
}
virtual ErrorOr<Bytes> read(Bytes) override
@ -372,11 +372,6 @@ public:
}
private:
LittleEndianOutputBitStream(MaybeOwned<Stream> stream)
: m_stream(move(stream))
{
}
MaybeOwned<Stream> m_stream;
u8 m_current_byte { 0 };
size_t m_bit_offset { 0 };

View file

@ -15,21 +15,21 @@ TEST_CASE(little_endian_bit_stream_input_output_match)
// Note: The bit stream only ever reads from/writes to the underlying stream in one byte chunks,
// so testing with sizes that will not trigger a write will yield unexpected results.
auto bit_write_stream = MUST(LittleEndianOutputBitStream::construct(MaybeOwned<AK::Stream>(*memory_stream)));
LittleEndianOutputBitStream bit_write_stream { MaybeOwned<AK::Stream>(*memory_stream) };
LittleEndianInputBitStream bit_read_stream { MaybeOwned<AK::Stream>(*memory_stream) };
// Test two mirrored chunks of a fully mirrored pattern to check that we are not dropping bits.
{
MUST(bit_write_stream->write_bits(0b1111u, 4));
MUST(bit_write_stream->write_bits(0b1111u, 4));
MUST(bit_write_stream.write_bits(0b1111u, 4));
MUST(bit_write_stream.write_bits(0b1111u, 4));
auto result = MUST(bit_read_stream.read_bits(4));
EXPECT_EQ(0b1111u, result);
result = MUST(bit_read_stream.read_bits(4));
EXPECT_EQ(0b1111u, result);
}
{
MUST(bit_write_stream->write_bits(0b0000u, 4));
MUST(bit_write_stream->write_bits(0b0000u, 4));
MUST(bit_write_stream.write_bits(0b0000u, 4));
MUST(bit_write_stream.write_bits(0b0000u, 4));
auto result = MUST(bit_read_stream.read_bits(4));
EXPECT_EQ(0b0000u, result);
result = MUST(bit_read_stream.read_bits(4));
@ -38,8 +38,8 @@ TEST_CASE(little_endian_bit_stream_input_output_match)
// Test two mirrored chunks of a non-mirrored pattern to check that we are writing bits within a pattern in the correct order.
{
MUST(bit_write_stream->write_bits(0b1000u, 4));
MUST(bit_write_stream->write_bits(0b1000u, 4));
MUST(bit_write_stream.write_bits(0b1000u, 4));
MUST(bit_write_stream.write_bits(0b1000u, 4));
auto result = MUST(bit_read_stream.read_bits(4));
EXPECT_EQ(0b1000u, result);
result = MUST(bit_read_stream.read_bits(4));
@ -48,8 +48,8 @@ TEST_CASE(little_endian_bit_stream_input_output_match)
// Test two different chunks to check that we are not confusing their order.
{
MUST(bit_write_stream->write_bits(0b1000u, 4));
MUST(bit_write_stream->write_bits(0b0100u, 4));
MUST(bit_write_stream.write_bits(0b1000u, 4));
MUST(bit_write_stream.write_bits(0b0100u, 4));
auto result = MUST(bit_read_stream.read_bits(4));
EXPECT_EQ(0b1000u, result);
result = MUST(bit_read_stream.read_bits(4));
@ -58,7 +58,7 @@ TEST_CASE(little_endian_bit_stream_input_output_match)
// Test a pattern that spans multiple bytes.
{
MUST(bit_write_stream->write_bits(0b1101001000100001u, 16));
MUST(bit_write_stream.write_bits(0b1101001000100001u, 16));
auto result = MUST(bit_read_stream.read_bits(16));
EXPECT_EQ(0b1101001000100001u, result);
}

View file

@ -449,7 +449,7 @@ ErrorOr<void> DeflateDecompressor::decode_codes(CanonicalCode& literal_code, Opt
ErrorOr<NonnullOwnPtr<DeflateCompressor>> DeflateCompressor::construct(MaybeOwned<AK::Stream> stream, CompressionLevel compression_level)
{
auto bit_stream = TRY(LittleEndianOutputBitStream::construct(move(stream)));
auto bit_stream = TRY(try_make<LittleEndianOutputBitStream>(move(stream)));
auto deflate_compressor = TRY(adopt_nonnull_own_or_enomem(new (nothrow) DeflateCompressor(move(bit_stream), compression_level)));
return deflate_compressor;
}