/** Retrieve a list of bit offsets The \p bit_offsets vector is first cleared. \param[out] bit_offsets A list of bit offsets, in ascending order */ void OBBitVec::ToVecInt(std::vector<int> & bit_offsets) const { bit_offsets.clear(); bit_offsets.reserve(CountBits()); for (int i = NextBit(-1);i != -1;i = NextBit(i)) bit_offsets.push_back(i); }
OSCL_EXPORT_REF void BitStreamParser::WriteBits(uint8 numberOfBits, const uint8* data) { //This is not the most efficient algorithm, but it is the least complex. //Treat "data" as an input stream. BitStreamParser input(const_cast<uint8*>(data), BITS_TO_BYTES(numberOfBits)); //Skip over the unused bits. input.NextBits(input.BitsLeft() - numberOfBits); //Loop through each bit to process... while (numberOfBits) { uint8 bitmask = 1 << bitpos; //READ uint8 byte = *bytepos; //MODIFY byte &= ~(bitmask); //Clear the bit being written. byte |= (input.ReadBits(1) << bitpos); //Write the bit. //WRITE *bytepos = byte; //Advance the bit pointer NextBit(); numberOfBits--; } }
bit Random::NextBit() { return NextBit(0.5); }