23 #include "bititerator.h"
28 BitIterator::BitIterator(
const void *
const p) :
29 m_p(static_cast<const uint8_t * const>(p)),
30 m_bitBuffer(0), m_bitsOnBuffer(0)
35 void BitIterator::load(
size_t numBits)
37 size_t numBytes = (numBits + 7) / 8;
40 m_bitBuffer >>= (32 - m_bitsOnBuffer);
42 m_bitsOnBuffer += 8 * numBytes;
45 for (
size_t i = 0; i < numBytes; ++i) {
46 m_bitBuffer = (m_bitBuffer << 8) | *m_p;
51 m_bitBuffer = m_bitBuffer << (32 - m_bitsOnBuffer);
54 uint32_t BitIterator::get(
size_t n)
61 if (n > m_bitsOnBuffer)
62 load(n - m_bitsOnBuffer);
64 assert(n <= m_bitsOnBuffer);
66 uint32_t ret = m_bitBuffer >> (32 - n);
CIFF is the container for CRW files. It is an attempt from Canon to make this a standard. I guess it failed.