int choose(Rand& rand) const { const size_t v = rand.get(totalRatio); for (size_t i = 0; i < TYPE_MAX; i++) { if (v < ratio[i]) return i; } throw cybozu::Exception("must not reach here."); }
bool rest( const Int entrpy, const Rand& rand0to12 ) { Int r = rand0to12.get(); switch ( entrpy ) { case 0: return r > 10; break; case 1: return r > 10; break; case 2: return r > 10; break; case 3: return r > 9; break; case 4: return r > 9; break; case 5: return r > 8; break; case 6: return r > 8; break; case 7: return r > 8; break; case 8: return r > 7; break; case 9: return r > 7; break; case 10: return r > 6; break; case 11: return r > 6; break; case 12: return r > 5; break; default: break; } return false; }
DenseMtx Precode_Matrix::make_MT() const { // rfc 6330, pg 24 Rand rnd; DenseMtx MT = DenseMtx (_params.H, _params.K_padded + _params.S); for (uint16_t row = 0; row < MT.rows(); ++row) { uint16_t col; for (col = 0; col < MT.cols() - 1; ++col) { auto tmp = rnd.get (col + 1, 6, _params.H); if ((row == tmp) || (row == (tmp + rnd.get (col + 1, 7, _params.H - 1) + 1) % _params.H)) { MT (row, col) = 1; } else { MT (row, col) = 0; } } // last column: alpha ^^ i, as in rfc6330 MT (row, col) = RaptorQ::Impl::oct_exp[row]; } return MT; }
void Gauss::srand(void) { static Rand rand; Rand::setSeed( rand.get() ); // randomize }