aboutsummaryrefslogtreecommitdiffstats
path: root/libqpdf/BitStream.cc
diff options
context:
space:
mode:
authorJay Berkenbilt <ejb@ql.org>2008-04-29 14:55:25 +0200
committerJay Berkenbilt <ejb@ql.org>2008-04-29 14:55:25 +0200
commit9a0b88bf7777c153dc46ace22db74ef24d51583a (patch)
treef567ac1cf2bf5071a611eb49323a935b6ac938ff /libqpdf/BitStream.cc
downloadqpdf-9a0b88bf7777c153dc46ace22db74ef24d51583a.tar.zst
update release date to actual daterelease-qpdf-2.0
git-svn-id: svn+q:///qpdf/trunk@599 71b93d88-0707-0410-a8cf-f5a4172ac649
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;
+ }
+}