symbol_distribution::symbol_distribution(const symbol &s) : total_frequencies(1) { for (int i = 0; i < ARITHMETIC_SYMBOL_COUNT; i++) { frequencies[i] = 0u; } frequencies[s.get_sequential_code()] = 1u; }
double symbol_distribution::get_accumulated_probability(const symbol &s) const { double result = 0.0; for (unsigned int i = 0; i < s.get_sequential_code(); i++) { result += static_cast<double>(frequencies[i]) / static_cast<double>(total_frequencies); } return result; }
unsigned int symbol_distribution::get_emissions(const symbol &s) const { return frequencies[s.get_sequential_code()]; }
bool symbol_distribution::has_only_the_symbol(const symbol &s) const { return frequencies[s.get_sequential_code()] == 1 && total_frequencies == 1; }
double symbol_distribution::get_probability_of(const symbol &s) const { int index = s.get_sequential_code(); return static_cast<double>(frequencies[index]) / static_cast<double>(total_frequencies); }
bool symbol_distribution::has_symbol(const symbol &s) const { return 0 != frequencies[s.get_sequential_code()]; }
void symbol_distribution::register_symbol_emision(const symbol &s) { frequencies[s.get_sequential_code()]++; total_frequencies++; }