From d25e11bee6ca5ca523884da132d18e1400e077b9 Mon Sep 17 00:00:00 2001 From: Minteck Date: Tue, 24 Aug 2021 14:41:48 +0200 Subject: Initial commit --- node_modules/unbzip2-stream/lib/bit_iterator.js | 39 +++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 node_modules/unbzip2-stream/lib/bit_iterator.js (limited to 'node_modules/unbzip2-stream/lib/bit_iterator.js') diff --git a/node_modules/unbzip2-stream/lib/bit_iterator.js b/node_modules/unbzip2-stream/lib/bit_iterator.js new file mode 100644 index 0000000..270e2d6 --- /dev/null +++ b/node_modules/unbzip2-stream/lib/bit_iterator.js @@ -0,0 +1,39 @@ +var BITMASK = [0, 0x01, 0x03, 0x07, 0x0F, 0x1F, 0x3F, 0x7F, 0xFF]; + +// returns a function that reads bits. +// takes a buffer iterator as input +module.exports = function bitIterator(nextBuffer) { + var bit = 0, byte = 0; + var bytes = nextBuffer(); + var f = function(n) { + if (n === null && bit != 0) { // align to byte boundary + bit = 0 + byte++; + return; + } + var result = 0; + while(n > 0) { + if (byte >= bytes.length) { + byte = 0; + bytes = nextBuffer(); + } + var left = 8 - bit; + if (bit === 0 && n > 0) + f.bytesRead++; + if (n >= left) { + result <<= left; + result |= (BITMASK[left] & bytes[byte++]); + bit = 0; + n -= left; + } else { + result <<= n; + result |= ((bytes[byte] & (BITMASK[n] << (8 - n - bit))) >> (8 - n - bit)); + bit += n; + n = 0; + } + } + return result; + }; + f.bytesRead = 0; + return f; +}; -- cgit