diff mupdf-source/thirdparty/zxing-cpp/core/src/BitSource.h @ 2:b50eed0cc0ef upstream

ADD: MuPDF v1.26.7: the MuPDF source as downloaded by a default build of PyMuPDF 1.26.4. The directory name has changed: no version number in the expanded directory now.
author Franz Glasner <fzglas.hg@dom66.de>
date Mon, 15 Sep 2025 11:43:07 +0200
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mupdf-source/thirdparty/zxing-cpp/core/src/BitSource.h	Mon Sep 15 11:43:07 2025 +0200
@@ -0,0 +1,72 @@
+/*
+* Copyright 2016 Nu-book Inc.
+* Copyright 2016 ZXing authors
+*/
+// SPDX-License-Identifier: Apache-2.0
+
+#pragma once
+
+namespace ZXing {
+
+class ByteArray;
+
+/**
+* <p>This provides an easy abstraction to read bits at a time from a sequence of bytes, where the
+* number of bits read is not often a multiple of 8.</p>
+*
+* <p>This class is thread-safe but not reentrant -- unless the caller modifies the bytes array
+* it passed in, in which case all bets are off.</p>
+*
+* @author Sean Owen
+*/
+class BitSource
+{
+	const ByteArray& _bytes;
+	int _byteOffset = 0;
+	int _bitOffset = 0;
+
+public:
+	/**
+	* @param bytes bytes from which this will read bits. Bits will be read from the first byte first.
+	* Bits are read within a byte from most-significant to least-significant bit.
+	* IMPORTANT: Bit source DOES NOT copy data byte, thus make sure that the bytes outlive the bit source object.
+	*/
+	explicit BitSource(const ByteArray& bytes) : _bytes(bytes) {}
+	
+	BitSource(BitSource &) = delete;
+	BitSource& operator=(const BitSource &) = delete;
+
+	/**
+	* @return index of next bit in current byte which would be read by the next call to {@link #readBits(int)}.
+	*/
+	int bitOffset() const {
+		return _bitOffset;
+	}
+
+	/**
+	* @return index of next byte in input byte array which would be read by the next call to {@link #readBits(int)}.
+	*/
+	int byteOffset() const {
+		return _byteOffset;
+	}
+
+	/**
+	* @param numBits number of bits to read
+	* @return int representing the bits read. The bits will appear as the least-significant bits of the int
+	*/
+	int readBits(int numBits);
+
+	/**
+	* @param numBits number of bits to peak
+	* @return int representing the bits peaked.  The bits will appear as the least-significant
+	*         bits of the int
+	*/
+	int peakBits(int numBits) const;
+
+	/**
+	* @return number of bits that can be read successfully
+	*/
+	int available() const;
+};
+
+} // ZXing