| 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; | |
| }; | |
Xet Storage Details
- Size:
- 1.13 kB
- Xet hash:
- 39da4466dc44850eee98507ffb944a81726465edef6e8df549ae7726e461bcb8
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.