17#ifndef RANS_INTERNAL_CONTAINERS_ADAPTIVESYMBOLTABLE_H_
18#define RANS_INTERNAL_CONTAINERS_ADAPTIVESYMBOLTABLE_H_
23#include <fairlogger/Logger.h>
32template <
class source_T,
class symbol_T>
52 template <
typename container_T>
93template <
class source_T,
class value_T>
94template <
typename container_T>
97 using namespace utils;
98 using namespace internal;
99 using count_type =
typename value_T::value_type;
102 this->mEscapeSymbol = [&]() -> value_T {
104 const count_type cumulatedFrequency = renormedHistogram.getNumSamples() - symbolFrequency;
105 return {symbolFrequency, cumulatedFrequency, this->getPrecision()};
110 count_type cumulatedFrequency = 0;
111 forEachIndexValue(renormedHistogram, [&,
this](
const source_type& sourceSymbol,
const count_type& symbolFrequency) {
112 if (symbolFrequency) {
113 this->mContainer[sourceSymbol] =
symbol_type{symbolFrequency, cumulatedFrequency, this->getPrecision()};
114 cumulatedFrequency += symbolFrequency;
117 mSize = this->mContainer.size();
120template <
typename source_T,
typename symbol_T>
126template <
typename source_T,
typename symbol_T>
131 return std::count_if(histogram.
begin(), histogram.
end(),
132 [&](
const auto&
value) {
133 return !histogram.isEscapeSymbol(internal::getValue(value));
Abstract container class that defines and implements basic properties shared by histograms and lookup...
Histogram renormed to sum of frequencies being 2^P for use in fast rans coding.
helper functionalities useful for packing operations
typename base_type::const_reference const_reference
typename base_type::value_type symbol_type
size_type getPrecision() const noexcept
typename base_type::size_type size_type
typename base_type::source_type source_type
AdaptiveSymbolTable()=default
typename base_type::pointer pointer
const_pointer lookupUnsafe(source_type sourceSymbol) const
typename base_type::container_type container_type
const_reference getEscapeSymbol() const noexcept
typename base_type::const_iterator const_iterator
typename base_type::reference reference
bool isEscapeSymbol(const_reference symbol) const noexcept
const_pointer lookupSafe(source_type sourceSymbol) const
symbol_type mEscapeSymbol
bool isEscapeSymbol(source_type sourceSymbol) const noexcept
size_type mSymbolTablePrecision
size_type size() const noexcept
bool isValidSymbol(const symbol_type &value) const noexcept
bool hasEscapeSymbol() const noexcept
typename base_type::difference_type difference_type
const_reference operator[](source_type sourceSymbol) const noexcept
typename base_type::const_pointer const_pointer
value_type getIncompressibleSymbolFrequency() const noexcept
size_t getRenormingBits() const noexcept
container_type mContainer
const_iterator begin() const noexcept
const_iterator end() const noexcept
typename base_type::pointer pointer
typename base_type::difference_type difference_type
typename base_type::source_type source_type
typename base_type::const_iterator const_iterator
typename base_type::value_type value_type
typename base_type::reference reference
typename base_type::container_type container_type
typename base_type::const_pointer const_pointer
typename base_type::const_reference const_reference
typename base_type::size_type size_type
GLsizei const GLfloat * value
auto getMinMax(const container_T &container, typename container_T::const_iterator begin, typename container_T::const_iterator end, typename container_T::const_reference zeroElem={}) -> std::pair< typename container_T::source_type, typename container_T::source_type >
size_t countNUsedAlphabetSymbols(const AdaptiveHistogram< source_T > &histogram)
std::pair< source_T, source_T > getMinMax(const AdaptiveSymbolTable< source_T, symbol_T > &symbolTable)
Common utility functions.