Merge pull request #1 from creationix/master
Make encode and decode available outside the EE interface.master
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…
Reference in New Issue