25 #include "bititerator.hpp"
30 BitIterator::BitIterator(
const uint8_t *
const p,
size_t size)
39 void BitIterator::addByte(uint8_t
byte)
41 m_bitBuffer = (m_bitBuffer << 8) |
byte;
45 void BitIterator::load(
size_t numBits)
47 size_t numBytes = (numBits + 7) / 8;
50 m_bitBuffer >>= (32 - m_bitsOnBuffer);
54 for (; i < numBytes && m_size > 0; ++i) {
59 for (; i < numBytes; ++i) {
64 m_bitBuffer = m_bitBuffer << (32 - m_bitsOnBuffer);
67 uint32_t BitIterator::get(
size_t n)
69 uint32_t ret = peek(n);
76 uint32_t BitIterator::peek(
size_t n)
84 if (n > m_bitsOnBuffer) {
85 load(n - m_bitsOnBuffer);
88 assert(n <= m_bitsOnBuffer);
90 return m_bitBuffer >> (32 - n);
93 void BitIterator::skip(
size_t n)
95 size_t num_bits = std::min(n, m_bitsOnBuffer);
96 m_bitsOnBuffer -= num_bits;
97 m_bitBuffer <<= num_bits;
Global namespace for libopenraw.