71template <
typename CodeTag>
94 std::numeric_limits<typename Traits::CodeTy>::max();
97 void setup(
bool fullDecode_,
bool fixDNGBug16_) {
103 for (
unsigned int numCodesSoFar = 0, codeLen = 1;
110 numCodesSoFar +=
Base::code.nCodesPerLength[codeLen];
115 template <
typename BIT_STREAM>
119 "This BitStreamer specialization is not marked as usable here");
127 "This BitStreamer specialization is not marked as usable here");
133 template <
typename BIT_STREAM>
139 "This BitStreamer specialization is not marked as usable here");
142 partial.code >
maxCodeOL[partial.code_len])) {
143 uint32_t temp = bs.getBitsNoFill(1);
153 partial.code >
maxCodeOL[partial.code_len])
154 ThrowRDE(
"bad Huffman code: %u (len: %u)", partial.code,
159 unsigned codeIndex = partial.code -
codeOffsetOL[partial.code_len];
162 typename Traits::CodeValueTy codeValue =
Base::code.codeValues[codeIndex];
163 return {partial, codeValue};
166 template <
typename BIT_STREAM>
171 partial.code_len = 0;
182 template <
typename BIT_STREAM,
bool FULL_DECODE>
188 typename Traits::CodeValueTy codeValue;
assert(dim.area() >=area)
int processSymbol(BIT_STREAM &bs, CodeSymbol symbol, typename Traits::CodeValueTy codeValue) const
typename Base::Traits Traits
typename Base::CodeSymbol CodeSymbol
bool RAWSPEED_READONLY isFullDecode() const
size_t RAWSPEED_READONLY maxCodeLength() const
PrefixCode< CodeTag > code
void setup(bool fullDecode_, bool fixDNGBug16_)
std::pair< typename Base::CodeSymbol, int > finishReadingPartialSymbol(BIT_STREAM &bs, typename Base::CodeSymbol partial) const
Traits::CodeValueTy decodeCodeValue(BIT_STREAM &bs) const
PrefixCodeLookupDecoder(HuffmanCode< CodeTag > &&hc)
std::vector< typename Traits::CodeTy > codeOffsetOL
AbstractPrefixCodeDecoder< CodeTag > Base
PrefixCodeLookupDecoder(PrefixCode< CodeTag >)=delete
PrefixCodeLookupDecoder(PrefixCode< CodeTag > &&)=delete
typename Base::Traits Traits
PrefixCodeLookupDecoder(const PrefixCode< CodeTag > &)=delete
static constexpr auto MaxCodeValue
int decode(BIT_STREAM &bs) const
std::pair< typename Base::CodeSymbol, int > readSymbol(BIT_STREAM &bs) const
int decodeDifference(BIT_STREAM &bs) const
void setup(bool fullDecode_, bool fixDNGBug16_)
std::vector< typename Traits::CodeTy > maxCodeOL
constexpr RAWSPEED_READNONE Ttgt implicit_cast(Tsrc value)