From 383014e754c2b663c7b87cb75cf7af5760c6561e Mon Sep 17 00:00:00 2001 From: Christopher Jeffrey Date: Fri, 29 Apr 2016 17:09:13 -0700 Subject: [PATCH] faster strings for bufferwriter. --- lib/bcoin/writer.js | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/lib/bcoin/writer.js b/lib/bcoin/writer.js index d1579ace..6f351082 100644 --- a/lib/bcoin/writer.js +++ b/lib/bcoin/writer.js @@ -56,6 +56,7 @@ BufferWriter.prototype.render = function render(keep) { case '64be': off += utils.write64BE(data, item[1], off); break; case 'varint': off += utils.writeVarint(data, item[1], off); break; case 'bytes': off += item[1].copy(data, off); break; + case 'str': off += data.write(item[1], off, item[2]); break; case 'checksum': off += utils.checksum(data.slice(0, off)).copy(data, off); break; @@ -244,9 +245,10 @@ BufferWriter.prototype.getSize = function getSize() { */ BufferWriter.prototype.writeString = function writeString(value, enc) { - if (typeof value === 'string') - value = new Buffer(value, enc); - this.writeBytes(value); + if (typeof value !== 'string') + return this.writeBytes(value); + this.written += Buffer.byteLength(value, enc); + this.data.push(['str', value, enc]); }; /** @@ -255,9 +257,7 @@ BufferWriter.prototype.writeString = function writeString(value, enc) { */ BufferWriter.prototype.writeHash = function writeHash(value) { - if (typeof value === 'string') - value = new Buffer(value, 'hex'); - this.writeBytes(value); + this.writeString(value, 'hex'); }; /** @@ -267,9 +267,18 @@ BufferWriter.prototype.writeHash = function writeHash(value) { */ BufferWriter.prototype.writeVarString = function writeVarString(value, enc) { - if (typeof value === 'string') - value = new Buffer(value, enc); - this.writeVarBytes(value); + var size; + + if (typeof value !== 'string') + return this.writeVarBytes(value); + + size = Buffer.byteLength(value, enc); + + this.written += utils.sizeVarint(size); + this.written += size; + + this.data.push(['varint', size]); + this.data.push(['str', value, enc]); }; /**