Change decode to use prototype instead of closure

master
Tim Caswell 11 years ago
parent 20acc39be4
commit 4284621de5

@ -1,31 +1,33 @@
module.exports = decoder
module.exports = Decoder
var MSB = 0x80
, REST = 0x7F
function decoder(emit) {
var accum = []
return function (byte) {
var msb = byte & MSB
, 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
emit(out)
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
}

@ -3,14 +3,19 @@ module.exports = varint
varint.encode = require('./encode.js');
var EE = require('events').EventEmitter
, decoder = require('./decode.js')
, Decoder = require('./decode.js')
function varint() {
var ee = new EE
, dec = new Decoder
ee.write = decoder(function (item) {
dec.ondata = function (item) {
ee.emit("data", item)
})
}
ee.write = function (item) {
dec.write(item);
}
return ee
}

Loading…
Cancel
Save