aboutsummaryrefslogtreecommitdiffstats
path: root/libqpdf/BitStream.cc
diff options
context:
space:
mode:
Diffstat (limited to 'libqpdf/BitStream.cc')
-rw-r--r--libqpdf/BitStream.cc45
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;
+ }
+}