Merge pull request #1 from creationix/master

Make encode and decode available outside the EE interface.
master
Chris Dickinson 11 years ago
commit bf42927908

@ -0,0 +1,33 @@
module.exports = Decoder
var MSB = 0x80
, REST = 0x7F
function Decoder() {
this.accum = []
}
Decoder.prototype.write = write;
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.ondata(out)
return
}

@ -0,0 +1,17 @@
module.exports = encode
var MSB = 0x80
, REST = 0x7F
, MSBALL = ~REST
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
}

@ -1,52 +1,22 @@
module.exports = varint
varint.encode = encode
varint.encode = require('./encode.js');
var EE = require('events').EventEmitter
, MSB = 0x80
, REST = 0x7F
, MSBALL = ~REST
, Decoder = require('./decode.js')
function varint() {
var ee = new EE
, dec = new Decoder
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
dec.ondata = function (item) {
ee.emit("data", item)
}
len = accum.length
out = 0
for(var i = 0; i < len; ++i) {
out |= accum[i] << (7 * i)
ee.write = function (item) {
dec.write(item);
}
accum.length = 0
this.emit('data', out)
return
return ee
}

Loading…
Cancel
Save