'use strict' var Buffer = require('safe-buffer').Buffer var writeToStream = require('./writeToStream') var EE = require('events').EventEmitter var inherits = require('inherits') function generate (packet) { var stream = new Accumulator() writeToStream(packet, stream) return stream.concat() } function Accumulator () { this._array = new Array(20) this._i = 0 } inherits(Accumulator, EE) Accumulator.prototype.write = function (chunk) { this._array[this._i++] = chunk return true } Accumulator.prototype.concat = function () { var length = 0 var lengths = new Array(this._array.length) var list = this._array var pos = 0 var i var result for (i = 0; i < list.length && list[i] !== undefined; i++) { if (typeof list[i] !== 'string') lengths[i] = list[i].length else lengths[i] = Buffer.byteLength(list[i]) length += lengths[i] } result = Buffer.allocUnsafe(length) for (i = 0; i < list.length && list[i] !== undefined; i++) { if (typeof list[i] !== 'string') { list[i].copy(result, pos) pos += lengths[i] } else { result.write(list[i], pos) pos += lengths[i] } } return result } module.exports = generate