You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

53 lines
739 B
JavaScript

module.exports = varint
varint.encode = encode
var EE = require('events').EventEmitter
, MSB = 0x80
, REST = 0x7F
, MSBALL = ~REST
function varint() {
var ee = new EE
ee.write = write
ee.accum = []
return ee
}
function encode(num, out, offset) {
out = out || []
offset = offset || 0
while(num & MSBALL) {
out[offset++] = (num & 0xFF) | MSB
num >>>= 7
}
out[offset] = num
return out
}
function write(byte) {
var msb = byte & MSB
, accum = this.accum
, len
, out
accum[accum.length] = byte & REST
if(msb) {
return
}
len = accum.length
out = 0
for(var i = 0; i < len; ++i) {
out |= accum[i] << (7 * i)
}
accum.length = 0
this.emit('data', out)
return
}