diff options
Diffstat (limited to 'libqpdf/BitStream.cc')
-rw-r--r-- | libqpdf/BitStream.cc | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/libqpdf/BitStream.cc b/libqpdf/BitStream.cc new file mode 100644 index 00000000..c6fda4e6 --- /dev/null +++ b/libqpdf/BitStream.cc @@ -0,0 +1,45 @@ + + +#include <qpdf/BitStream.hh> + +// See comments in bits.cc +#define BITS_READ 1 +#include "bits.icc" + +BitStream::BitStream(unsigned char const* p, int nbytes) : + start(p), + nbytes(nbytes) +{ + reset(); +} + +void +BitStream::reset() +{ + p = start; + bit_offset = 7; + bits_available = 8 * nbytes; +} + +unsigned long +BitStream::getBits(int nbits) +{ + return read_bits(this->p, this->bit_offset, + this->bits_available, nbits); +} + +void +BitStream::skipToNextByte() +{ + if (bit_offset != 7) + { + unsigned int bits_to_skip = bit_offset + 1; + if (bits_available < bits_to_skip) + { + throw QEXC::Internal("overflow skipping to next byte in bitstream"); + } + bit_offset = 7; + ++p; + bits_available -= bits_to_skip; + } +} |