From 4811199406d566d350294cd4b1ac94e174714bcf Mon Sep 17 00:00:00 2001 From: Marcus Holland-Moritz Date: Sun, 4 Feb 2024 13:48:23 +0100 Subject: [PATCH] feat(ricepp): another 15% decode speedup --- ricepp/include/ricepp/bitstream_reader.h | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/ricepp/include/ricepp/bitstream_reader.h b/ricepp/include/ricepp/bitstream_reader.h index 4c81cee0..5068530b 100644 --- a/ricepp/include/ricepp/bitstream_reader.h +++ b/ricepp/include/ricepp/bitstream_reader.h @@ -65,6 +65,10 @@ class bitstream_reader final { size_t find_first_set() { size_t zeros = 0; if (bit_pos_ != 0) [[likely]] { + if (peek_bit()) [[likely]] { + skip_bits(1); + return zeros; + } size_t const remaining_bits = kBitsTypeBits - bit_pos_; bits_type const bits = peek_bits(remaining_bits); size_t const ffs = std::countr_zero(bits); @@ -107,6 +111,11 @@ class bitstream_reader final { } } + bool peek_bit() { + assert(bit_pos_ > 0 && bit_pos_ < kBitsTypeBits); + return (data_ & (static_cast(1) << bit_pos_)) != 0; + } + bits_type peek_bits(size_t num_bits) { assert(bit_pos_ + num_bits <= kBitsTypeBits); if (bit_pos_ == 0) [[unlikely]] {