| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- '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
|