--- /dev/null
+"use strict";
+module.exports = BufferWriter;
+
+// extends Writer
+var Writer = require("./writer");
+(BufferWriter.prototype = Object.create(Writer.prototype)).constructor = BufferWriter;
+
+var util = require("./util/minimal");
+
+/**
+ * Constructs a new buffer writer instance.
+ * @classdesc Wire format writer using node buffers.
+ * @extends Writer
+ * @constructor
+ */
+function BufferWriter() {
+ Writer.call(this);
+}
+
+BufferWriter._configure = function () {
+ /**
+ * Allocates a buffer of the specified size.
+ * @function
+ * @param {number} size Buffer size
+ * @returns {Buffer} Buffer
+ */
+ BufferWriter.alloc = util._Buffer_allocUnsafe;
+
+ BufferWriter.writeBytesBuffer = util.Buffer && util.Buffer.prototype instanceof Uint8Array && util.Buffer.prototype.set.name === "set"
+ ? function writeBytesBuffer_set(val, buf, pos) {
+ buf.set(val, pos); // faster than copy (requires node >= 4 where Buffers extend Uint8Array and set is properly inherited)
+ // also works for plain array values
+ }
+ /* istanbul ignore next */
+ : function writeBytesBuffer_copy(val, buf, pos) {
+ if (val.copy) // Buffer values
+ val.copy(buf, pos, 0, val.length);
+ else for (var i = 0; i < val.length;) // plain array values
+ buf[pos++] = val[i++];
+ };
+};
+
+
+/**
+ * @override
+ */
+BufferWriter.prototype.bytes = function write_bytes_buffer(value) {
+ if (util.isString(value))
+ value = util._Buffer_from(value, "base64");
+ var len = value.length >>> 0;
+ this.uint32(len);
+ if (len)
+ this._push(BufferWriter.writeBytesBuffer, len, value);
+ return this;
+};
+
+function writeStringBuffer(val, buf, pos) {
+ if (val.length < 40) // plain js is faster for short strings (probably due to redundant assertions)
+ util.utf8.write(val, buf, pos);
+ else if (buf.utf8Write)
+ buf.utf8Write(val, pos);
+ else
+ buf.write(val, pos);
+}
+
+/**
+ * @override
+ */
+BufferWriter.prototype.string = function write_string_buffer(value) {
+ var len = util.Buffer.byteLength(value);
+ this.uint32(len);
+ if (len)
+ this._push(writeStringBuffer, len, value);
+ return this;
+};
+
+
+/**
+ * Finishes the write operation.
+ * @name BufferWriter#finish
+ * @function
+ * @returns {Buffer} Finished buffer
+ */
+
+BufferWriter._configure();