fix(core): update
This commit is contained in:
41
ts/bzip2/bititerator.ts
Normal file
41
ts/bzip2/bititerator.ts
Normal file
@@ -0,0 +1,41 @@
|
||||
var BITMASK = [0, 0x01, 0x03, 0x07, 0x0F, 0x1F, 0x3F, 0x7F, 0xFF];
|
||||
|
||||
// returns a function that reads bits.
|
||||
// takes a buffer iterator as input
|
||||
export function bitIterator(nextBuffer: () => Buffer) {
|
||||
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)
|
||||
// @ts-ignore
|
||||
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;
|
||||
};
|
||||
// @ts-ignore
|
||||
f.bytesRead = 0;
|
||||
return f;
|
||||
};
|
Reference in New Issue
Block a user