diff --git a/Userland/Libraries/LibCompress/Deflate.cpp b/Userland/Libraries/LibCompress/Deflate.cpp index d35201af431..2c8ac8d2abd 100644 --- a/Userland/Libraries/LibCompress/Deflate.cpp +++ b/Userland/Libraries/LibCompress/Deflate.cpp @@ -9,7 +9,6 @@ #include #include #include -#include #include #include @@ -166,14 +165,6 @@ ErrorOr CanonicalCode::read_symbol(LittleEndianInputBitStream& stream) cons return Error::from_string_literal("Symbol exceeds maximum symbol number"); } -ErrorOr CanonicalCode::write_symbol(LittleEndianOutputBitStream& stream, u32 symbol) const -{ - auto code = symbol < m_bit_codes.size() ? m_bit_codes[symbol] : 0u; - auto length = symbol < m_bit_code_lengths.size() ? m_bit_code_lengths[symbol] : 0u; - TRY(stream.write_bits(code, length)); - return {}; -} - DeflateDecompressor::CompressedBlock::CompressedBlock(DeflateDecompressor& decompressor, CanonicalCode literal_codes, Optional distance_codes) : m_decompressor(decompressor) , m_literal_codes(literal_codes) diff --git a/Userland/Libraries/LibCompress/Deflate.h b/Userland/Libraries/LibCompress/Deflate.h index 00f237a0b98..74bf5c538e1 100644 --- a/Userland/Libraries/LibCompress/Deflate.h +++ b/Userland/Libraries/LibCompress/Deflate.h @@ -7,6 +7,7 @@ #pragma once +#include #include #include #include @@ -51,6 +52,14 @@ private: Vector m_bit_code_lengths {}; }; +ALWAYS_INLINE ErrorOr CanonicalCode::write_symbol(LittleEndianOutputBitStream& stream, u32 symbol) const +{ + auto code = symbol < m_bit_codes.size() ? m_bit_codes[symbol] : 0u; + auto length = symbol < m_bit_code_lengths.size() ? m_bit_code_lengths[symbol] : 0u; + TRY(stream.write_bits(code, length)); + return {}; +} + class DeflateDecompressor final : public Stream { private: class CompressedBlock { diff --git a/Userland/Libraries/LibGfx/ImageFormats/WebPSharedLossless.cpp b/Userland/Libraries/LibGfx/ImageFormats/WebPSharedLossless.cpp index 2545594d649..3b5b4928e0e 100644 --- a/Userland/Libraries/LibGfx/ImageFormats/WebPSharedLossless.cpp +++ b/Userland/Libraries/LibGfx/ImageFormats/WebPSharedLossless.cpp @@ -32,12 +32,4 @@ ErrorOr CanonicalCode::read_symbol(LittleEndianInputBitStream& bit_stream) [&bit_stream](Compress::CanonicalCode const& code) { return code.read_symbol(bit_stream); })); } -ErrorOr CanonicalCode::write_symbol(LittleEndianOutputBitStream& bit_stream, u32 symbol) const -{ - TRY(m_code.visit( - [&](u32 single_code) -> ErrorOr { VERIFY(symbol == single_code); return {};}, - [&](Compress::CanonicalCode const& code) { return code.write_symbol(bit_stream, symbol); })); - return {}; -} - } diff --git a/Userland/Libraries/LibGfx/ImageFormats/WebPSharedLossless.h b/Userland/Libraries/LibGfx/ImageFormats/WebPSharedLossless.h index f6da1c84fb2..34fb372db3f 100644 --- a/Userland/Libraries/LibGfx/ImageFormats/WebPSharedLossless.h +++ b/Userland/Libraries/LibGfx/ImageFormats/WebPSharedLossless.h @@ -39,6 +39,14 @@ private: Variant m_code; }; +ALWAYS_INLINE ErrorOr CanonicalCode::write_symbol(LittleEndianOutputBitStream& bit_stream, u32 symbol) const +{ + TRY(m_code.visit( + [&](u32 single_code) __attribute__((always_inline))->ErrorOr { VERIFY(symbol == single_code); return {}; }, + [&](Compress::CanonicalCode const& code) __attribute__((always_inline)) { return code.write_symbol(bit_stream, symbol); })); + return {}; +} + // https://developers.google.com/speed/webp/docs/webp_lossless_bitstream_specification#61_overview // "From here on, we refer to this set as a prefix code group." class PrefixCodeGroup {