|
|
@ -6,6 +6,7 @@ var assert = require('assert'); |
|
|
|
var BufferWriter = function BufferWriter(obj) { |
|
|
|
if (!(this instanceof BufferWriter)) |
|
|
|
return new BufferWriter(obj); |
|
|
|
this.bufLen = 0; |
|
|
|
if (obj) |
|
|
|
this.set(obj); |
|
|
|
else |
|
|
@ -14,6 +15,7 @@ var BufferWriter = function BufferWriter(obj) { |
|
|
|
|
|
|
|
BufferWriter.prototype.set = function(obj) { |
|
|
|
this.bufs = obj.bufs || this.bufs || []; |
|
|
|
this.bufLen = this.bufs.reduce(function(prev, buf){ return prev + buf.length; }, 0); |
|
|
|
return this; |
|
|
|
}; |
|
|
|
|
|
|
@ -22,58 +24,60 @@ BufferWriter.prototype.toBuffer = function() { |
|
|
|
}; |
|
|
|
|
|
|
|
BufferWriter.prototype.concat = function() { |
|
|
|
return Buffer.concat(this.bufs); |
|
|
|
return Buffer.concat(this.bufs, this.bufLen); |
|
|
|
}; |
|
|
|
|
|
|
|
BufferWriter.prototype.write = function(buf) { |
|
|
|
assert(bufferUtil.isBuffer(buf)); |
|
|
|
this.bufs.push(buf); |
|
|
|
this.bufLen += buf.length; |
|
|
|
return this; |
|
|
|
}; |
|
|
|
|
|
|
|
BufferWriter.prototype.writeReverse = function(buf) { |
|
|
|
assert(bufferUtil.isBuffer(buf)); |
|
|
|
this.bufs.push(bufferUtil.reverse(buf)); |
|
|
|
this.bufLen += buf.length; |
|
|
|
return this; |
|
|
|
}; |
|
|
|
|
|
|
|
BufferWriter.prototype.writeUInt8 = function(n) { |
|
|
|
var buf = new Buffer(1); |
|
|
|
var buf = Buffer.alloc(1); |
|
|
|
buf.writeUInt8(n, 0); |
|
|
|
this.write(buf); |
|
|
|
return this; |
|
|
|
}; |
|
|
|
|
|
|
|
BufferWriter.prototype.writeUInt16BE = function(n) { |
|
|
|
var buf = new Buffer(2); |
|
|
|
var buf = Buffer.alloc(2); |
|
|
|
buf.writeUInt16BE(n, 0); |
|
|
|
this.write(buf); |
|
|
|
return this; |
|
|
|
}; |
|
|
|
|
|
|
|
BufferWriter.prototype.writeUInt16LE = function(n) { |
|
|
|
var buf = new Buffer(2); |
|
|
|
var buf = Buffer.alloc(2); |
|
|
|
buf.writeUInt16LE(n, 0); |
|
|
|
this.write(buf); |
|
|
|
return this; |
|
|
|
}; |
|
|
|
|
|
|
|
BufferWriter.prototype.writeUInt32BE = function(n) { |
|
|
|
var buf = new Buffer(4); |
|
|
|
var buf = Buffer.alloc(4); |
|
|
|
buf.writeUInt32BE(n, 0); |
|
|
|
this.write(buf); |
|
|
|
return this; |
|
|
|
}; |
|
|
|
|
|
|
|
BufferWriter.prototype.writeInt32LE = function(n) { |
|
|
|
var buf = new Buffer(4); |
|
|
|
var buf = Buffer.alloc(4); |
|
|
|
buf.writeInt32LE(n, 0); |
|
|
|
this.write(buf); |
|
|
|
return this; |
|
|
|
}; |
|
|
|
|
|
|
|
BufferWriter.prototype.writeUInt32LE = function(n) { |
|
|
|
var buf = new Buffer(4); |
|
|
|
var buf = Buffer.alloc(4); |
|
|
|
buf.writeUInt32LE(n, 0); |
|
|
|
this.write(buf); |
|
|
|
return this; |
|
|
@ -106,18 +110,18 @@ BufferWriter.prototype.writeVarintBN = function(bn) { |
|
|
|
BufferWriter.varintBufNum = function(n) { |
|
|
|
var buf = undefined; |
|
|
|
if (n < 253) { |
|
|
|
buf = new Buffer(1); |
|
|
|
buf = Buffer.alloc(1); |
|
|
|
buf.writeUInt8(n, 0); |
|
|
|
} else if (n < 0x10000) { |
|
|
|
buf = new Buffer(1 + 2); |
|
|
|
buf = Buffer.alloc(1 + 2); |
|
|
|
buf.writeUInt8(253, 0); |
|
|
|
buf.writeUInt16LE(n, 1); |
|
|
|
} else if (n < 0x100000000) { |
|
|
|
buf = new Buffer(1 + 4); |
|
|
|
buf = Buffer.alloc(1 + 4); |
|
|
|
buf.writeUInt8(254, 0); |
|
|
|
buf.writeUInt32LE(n, 1); |
|
|
|
} else { |
|
|
|
buf = new Buffer(1 + 8); |
|
|
|
buf = Buffer.alloc(1 + 8); |
|
|
|
buf.writeUInt8(255, 0); |
|
|
|
buf.writeInt32LE(n & -1, 1); |
|
|
|
buf.writeUInt32LE(Math.floor(n / 0x100000000), 5); |
|
|
@ -129,14 +133,14 @@ BufferWriter.varintBufBN = function(bn) { |
|
|
|
var buf = undefined; |
|
|
|
var n = bn.toNumber(); |
|
|
|
if (n < 253) { |
|
|
|
buf = new Buffer(1); |
|
|
|
buf = Buffer.alloc(1); |
|
|
|
buf.writeUInt8(n, 0); |
|
|
|
} else if (n < 0x10000) { |
|
|
|
buf = new Buffer(1 + 2); |
|
|
|
buf = Buffer.alloc(1 + 2); |
|
|
|
buf.writeUInt8(253, 0); |
|
|
|
buf.writeUInt16LE(n, 1); |
|
|
|
} else if (n < 0x100000000) { |
|
|
|
buf = new Buffer(1 + 4); |
|
|
|
buf = Buffer.alloc(1 + 4); |
|
|
|
buf.writeUInt8(254, 0); |
|
|
|
buf.writeUInt32LE(n, 1); |
|
|
|
} else { |
|
|
|