23#include "rawspeedconfig.h"
41 requires std::signed_integral<T>
48 [[nodiscard]]
bool has_value() const RAWSPEED_READONLY {
return val >= 0; }
51 requires std::same_as<U, T>
60 requires std::same_as<U, T>
113 invariant(input.size() == Traits::MaxProcessBytes);
115 constexpr int StreamChunkBitwidth =
118 auto speculativeOptimisticCache =
cache;
119 auto speculativeOptimisticChunk =
122 speculativeOptimisticCache.push(speculativeOptimisticChunk,
123 StreamChunkBitwidth);
127 if (std::accumulate(&input(0), &input(4),
true, [](
bool b, std::byte
byte) {
128 return b && (
byte != std::byte{0xFF});
130 cache = speculativeOptimisticCache;
136 const int numBytesNeeded = 4 - i;
139 const std::byte c0 = input(p + 0);
140 cache.push(std::to_integer<uint8_t>(c0), 8);
141 if (c0 != std::byte{0xFF}) {
147 const std::byte c1 = input(p + 1);
148 if (c1 == std::byte{0x00}) {
162 cache.fillLevel -= 8;
172 cache.fillLevel = 64;
Declaration of the bitstream data structure.
void establishClassInvariants() const noexcept
size_type RAWSPEED_READONLY getInputPosition() const
size_type getRemainingSize() const
void fill(int nbits=Cache::MaxGetBits)
size_type getStreamPosition() const
PosOrUnknown< size_type > endOfStreamPos
size_type fillCache(std::array< std::byte, BitStreamerTraits< BitStreamerJPEG >::MaxProcessBytes > input)
BitStreamer< BitStreamerJPEG > Base
T value_or(U fallback) const
PosOrUnknown & operator=(U newValue)
bool has_value() const RAWSPEED_READONLY
constexpr RAWSPEED_READNONE Ttgt implicit_cast(Tsrc value)
int8_t getByteSwapped(int8_t v)
Endianness getHostEndianness()
constexpr unsigned RAWSPEED_READNONE bitwidth(T unused={})
static constexpr int MaxGetBits
static constexpr BitOrder Tag
static constexpr int MaxProcessBytes
static constexpr bool canUseWithPrefixCodeDecoder