nerve-sdk-js
Version:
nerve nerve-js nerve-sdk nerve-js-sdk
162 lines (137 loc) • 3.55 kB
JavaScript
'use strict';
var bufferUtil = require('./buffer');
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 this.bufs = [];
};
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;
};
BufferWriter.prototype.toBuffer = function () {
return this.concat();
};
BufferWriter.prototype.concat = function () {
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 = Buffer.alloc(1);
buf.writeUInt8(n, 0);
this.write(buf);
return this;
};
BufferWriter.prototype.writeUInt16BE = function (n) {
var buf = Buffer.alloc(2);
buf.writeUInt16BE(n, 0);
this.write(buf);
return this;
};
BufferWriter.prototype.writeUInt16LE = function (n) {
var buf = Buffer.alloc(2);
buf.writeUInt16LE(n, 0);
this.write(buf);
return this;
};
BufferWriter.prototype.writeUInt32BE = function (n) {
var buf = Buffer.alloc(4);
buf.writeUInt32BE(n, 0);
this.write(buf);
return this;
};
BufferWriter.prototype.writeInt32LE = function (n) {
var buf = Buffer.alloc(4);
buf.writeInt32LE(n, 0);
this.write(buf);
return this;
};
BufferWriter.prototype.writeUInt32LE = function (n) {
var buf = Buffer.alloc(4);
buf.writeUInt32LE(n, 0);
this.write(buf);
return this;
};
BufferWriter.prototype.writeUInt64BEBN = function (bn) {
var buf = bn.toBuffer({
size: 8
});
this.write(buf);
return this;
};
BufferWriter.prototype.writeUInt64LEBN = function (bn) {
var buf = bn.toBuffer({
size: 8
});
this.writeReverse(buf);
return this;
};
BufferWriter.prototype.writeVarintNum = function (n) {
var buf = BufferWriter.varintBufNum(n);
this.write(buf);
return this;
};
BufferWriter.prototype.writeVarintBN = function (bn) {
var buf = BufferWriter.varintBufBN(bn);
this.write(buf);
return this;
};
BufferWriter.varintBufNum = function (n) {
var buf = undefined;
if (n < 253) {
buf = Buffer.alloc(1);
buf.writeUInt8(n, 0);
} else if (n < 0x10000) {
buf = Buffer.alloc(1 + 2);
buf.writeUInt8(253, 0);
buf.writeUInt16LE(n, 1);
} else if (n < 0x100000000) {
buf = Buffer.alloc(1 + 4);
buf.writeUInt8(254, 0);
buf.writeUInt32LE(n, 1);
} else {
buf = Buffer.alloc(1 + 8);
buf.writeUInt8(255, 0);
buf.writeInt32LE(n & -1, 1);
buf.writeUInt32LE(Math.floor(n / 0x100000000), 5);
}
return buf;
};
BufferWriter.varintBufBN = function (bn) {
var buf = undefined;
var n = bn.toNumber();
if (n < 253) {
buf = Buffer.alloc(1);
buf.writeUInt8(n, 0);
} else if (n < 0x10000) {
buf = Buffer.alloc(1 + 2);
buf.writeUInt8(253, 0);
buf.writeUInt16LE(n, 1);
} else if (n < 0x100000000) {
buf = Buffer.alloc(1 + 4);
buf.writeUInt8(254, 0);
buf.writeUInt32LE(n, 1);
} else {
var bw = new BufferWriter();
bw.writeUInt8(255);
bw.writeUInt64LEBN(bn);
var buf = bw.concat();
}
return buf;
};
module.exports = BufferWriter;