24 #include "bititerator.hpp" 29 BitIterator::BitIterator(
const uint8_t *
const p,
size_t size)
38 void BitIterator::load(
size_t numBits)
40 size_t numBytes = (numBits + 7) / 8;
43 m_bitBuffer >>= (32 - m_bitsOnBuffer);
45 m_bitsOnBuffer += 8 * numBytes;
48 for (
size_t i = 0; i < numBytes && m_size > 0; ++i) {
49 m_bitBuffer = (m_bitBuffer << 8) | *m_p;
55 m_bitBuffer = m_bitBuffer << (32 - m_bitsOnBuffer);
58 uint32_t BitIterator::get(
size_t n)
60 uint32_t ret = peek(n);
67 uint32_t BitIterator::peek(
size_t n)
74 if (n > m_bitsOnBuffer)
75 load(n - m_bitsOnBuffer);
77 assert(n <= m_bitsOnBuffer);
79 return m_bitBuffer >> (32 - n);
82 void BitIterator::skip(
size_t n)
84 size_t num_bits = std::min(n, m_bitsOnBuffer);
85 m_bitsOnBuffer -= num_bits;
86 m_bitBuffer <<= num_bits;
CIFF is the container for CRW files. It is an attempt from Canon to make this a standard. I guess it failed.