SymbolChance() { // : bit_exp(bitsin-1), bit_mant(bitsin) { bitZero().set(ZERO_CHANCE); bitSign().set(SIGN_CHANCE); // printf("bits: %i\n",bits); for (int i=0; i<bits-1; i++) { bitExp(i).set(EXP_CHANCES[i]); } for (int i=0; i<bits; i++) { bitMant(i).set(MANT_CHANCES[i]); } }
void info_symbol(int n) const { // TODO: move implementation to separate source file to have a chance to use // `using namespace util` without consequences maniac::util::indent(n); printf("ZERO: "); bitZero().info_bitchance(); maniac::util::indent(n); printf("SIGN: "); bitSign().info_bitchance(); for (int i=0; i<bits-1; i++) { maniac::util::indent(n); printf("EXP % 2i: ", i); bitExp(i).info_bitchance(); } for (int i=0; i<bits; i++) { maniac::util::indent(n); printf("MNT % 2i: ", i); bitMant(i).info_bitchance(); } }
BitChance inline &bit(SymbolChanceBitType typ, int i = 0) { switch (typ) { default: case BIT_ZERO: return bitZero(); case BIT_SIGN: return bitSign(); case BIT_EXP: return bitExp(i); case BIT_MANT: return bitMant(i); } }
int scale() const { return bitZero().scale(); }