diff --git a/Utilities/rANS/include/rANS/internal/SymbolTable.h b/Utilities/rANS/include/rANS/internal/SymbolTable.h index 77d9380725dff..8768c034c5008 100644 --- a/Utilities/rANS/include/rANS/internal/SymbolTable.h +++ b/Utilities/rANS/include/rANS/internal/SymbolTable.h @@ -67,6 +67,9 @@ SymbolTable::SymbolTable(const SymbolStatistics& symbolStats, size_t probabil mSymbols.emplace_back(symCumulated, symFrequency, probabiltyBits); mIndex.emplace_back(&mSymbols.back()); } + if (int(mSymbols.size()) == mMax - mMin + 2) { + mSymbols.back().freq = 0; // make literal symbol to have 0 freq + } // advanced diagnostics for debug builds #if !defined(NDEBUG) @@ -81,10 +84,8 @@ SymbolTable::SymbolTable(const SymbolStatistics& symbolStats, size_t probabil template inline const T& SymbolTable::operator[](int64_t index) const { - const auto idx = index - mMin; - assert(idx >= 0); - assert(idx < mSymbols.size()); - return *(mIndex[idx]); + const uint64_t idx = static_cast(index - mMin); + return idx < mSymbols.size() ? *(mIndex[idx]) : getLiteralSymbol(); } template