From a69e97943539a8abc4d2762638c169dc19c88516 Mon Sep 17 00:00:00 2001 From: Javier Date: Sun, 7 Jun 2015 21:22:45 +0200 Subject: initial import --- bitreader.cc | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 bitreader.cc (limited to 'bitreader.cc') diff --git a/bitreader.cc b/bitreader.cc new file mode 100644 index 0000000..dd85f74 --- /dev/null +++ b/bitreader.cc @@ -0,0 +1,45 @@ +#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(); +} -- cgit v1.2.3