diff --git a/AK/BitStream.h b/AK/BitStream.h index c03ac22ada..f16dfc7d37 100644 --- a/AK/BitStream.h +++ b/AK/BitStream.h @@ -138,17 +138,11 @@ protected: return bits == 0 ? 0 : max >> (digits - bits); } - ALWAYS_INLINE BufferType lsb_aligned_buffer() const - { - return m_bit_offset == bit_buffer_size ? 0 : m_bit_buffer >> m_bit_offset; - } - ALWAYS_INLINE bool is_aligned_to_byte_boundary() const { return m_bit_count % bits_per_byte == 0; } MaybeOwned m_stream; BufferType m_bit_buffer { 0 }; - u8 m_bit_offset { 0 }; u8 m_bit_count { 0 }; }; @@ -217,7 +211,7 @@ public: if (count > m_bit_count) TRY(refill_buffer_from_stream()); - return lsb_aligned_buffer() & lsb_mask(min(count, m_bit_count)); + return m_bit_buffer & lsb_mask(min(count, m_bit_count)); } ALWAYS_INLINE void discard_previously_peeked_bits(u8 count) @@ -226,7 +220,7 @@ public: if (count > m_bit_count) count = m_bit_count; - m_bit_offset += count; + m_bit_buffer >>= count; m_bit_count -= count; } @@ -236,9 +230,6 @@ public: { u8 remaining_bits = 0; - m_bit_buffer = lsb_aligned_buffer(); - m_bit_offset = 0; - if (auto offset = m_bit_count % bits_per_byte; offset != 0) { remaining_bits = m_bit_buffer & lsb_mask(offset); discard_previously_peeked_bits(offset); @@ -256,9 +247,8 @@ private: BufferType buffer = 0; auto bytes = TRY(m_stream->read_some({ &buffer, bytes_to_read })); - m_bit_buffer = (buffer << m_bit_count) | lsb_aligned_buffer(); + m_bit_buffer |= (buffer << m_bit_count); m_bit_count += bytes.size() * bits_per_byte; - m_bit_offset = 0; return {}; }