| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- "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;
- };
-
- /**
- * Writes raw bytes without a tag or length prefix.
- * @name BufferWriter#raw
- * @function
- * @param {Uint8Array} value Raw bytes
- * @returns {BufferWriter} `this`
- */
- BufferWriter.prototype.raw = function write_raw_buffer(value) {
- var len = value.length >>> 0;
- return len ? this._push(BufferWriter.writeBytesBuffer, len, value) : this;
- };
-
- function writeStringBufferAscii(val, buf, pos) {
- for (var i = 0; i < val.length;)
- buf[pos++] = val.charCodeAt(i++);
- }
-
- 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(len === value.length && len < 40 ? writeStringBufferAscii : writeStringBuffer, len, value);
- return this;
- };
-
-
- /**
- * Finishes the write operation.
- * @name BufferWriter#finish
- * @function
- * @returns {Buffer} Finished buffer
- */
-
- BufferWriter._configure();
|