| 'use strict'; | |
| 
 | |
| function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } | |
| 
 | |
| var Buffer = require('safe-buffer').Buffer; | |
| var util = require('util'); | |
| 
 | |
| function copyBuffer(src, target, offset) { | |
|   src.copy(target, offset); | |
| } | |
| 
 | |
| module.exports = function () { | |
|   function BufferList() { | |
|     _classCallCheck(this, BufferList); | |
| 
 | |
|     this.head = null; | |
|     this.tail = null; | |
|     this.length = 0; | |
|   } | |
| 
 | |
|   BufferList.prototype.push = function push(v) { | |
|     var entry = { data: v, next: null }; | |
|     if (this.length > 0) this.tail.next = entry;else this.head = entry; | |
|     this.tail = entry; | |
|     ++this.length; | |
|   }; | |
| 
 | |
|   BufferList.prototype.unshift = function unshift(v) { | |
|     var entry = { data: v, next: this.head }; | |
|     if (this.length === 0) this.tail = entry; | |
|     this.head = entry; | |
|     ++this.length; | |
|   }; | |
| 
 | |
|   BufferList.prototype.shift = function shift() { | |
|     if (this.length === 0) return; | |
|     var ret = this.head.data; | |
|     if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next; | |
|     --this.length; | |
|     return ret; | |
|   }; | |
| 
 | |
|   BufferList.prototype.clear = function clear() { | |
|     this.head = this.tail = null; | |
|     this.length = 0; | |
|   }; | |
| 
 | |
|   BufferList.prototype.join = function join(s) { | |
|     if (this.length === 0) return ''; | |
|     var p = this.head; | |
|     var ret = '' + p.data; | |
|     while (p = p.next) { | |
|       ret += s + p.data; | |
|     }return ret; | |
|   }; | |
| 
 | |
|   BufferList.prototype.concat = function concat(n) { | |
|     if (this.length === 0) return Buffer.alloc(0); | |
|     var ret = Buffer.allocUnsafe(n >>> 0); | |
|     var p = this.head; | |
|     var i = 0; | |
|     while (p) { | |
|       copyBuffer(p.data, ret, i); | |
|       i += p.data.length; | |
|       p = p.next; | |
|     } | |
|     return ret; | |
|   }; | |
| 
 | |
|   return BufferList; | |
| }(); | |
| 
 | |
| if (util && util.inspect && util.inspect.custom) { | |
|   module.exports.prototype[util.inspect.custom] = function () { | |
|     var obj = util.inspect({ length: this.length }); | |
|     return this.constructor.name + ' ' + obj; | |
|   }; | |
| }
 |