#include "bitreader.h" BitReader::BitReader(QIODevice *device) : child(device), buf(0), avail(0) { } BitReader::~BitReader() { } quint64 BitReader::readBits(int n) { quint64 x = peekBits(n); Q_ASSERT(avail >= n); buf -= x << (avail - n); avail -= n; return x; } quint64 BitReader::peekBits(int n) { while (n > avail) { char c; child->getChar(&c); buf = (buf << 8) | (quint8)(c); avail += 8; } quint64 x = buf >> (avail - n); return x; } void BitReader::skipUntilNextByte() { int skip = avail % 8; readBits(skip); } bool BitReader::atEnd() { return avail == 0 && child->atEnd(); }