text: /**
   * Create a buffer segment
   * @private
   * @param {Buffer} buf
   * @param {number} [offset]
   * @param {number} [count]
   * @constructor
   */
  function BufferSegment(buf, offset, count) {
    if (!Buffer.isBuffer(buf)) throw new TypeError('buf must be a buffer');
  
    this.buffer = buf;
    this.offset = offset || 0;
    this.count = count || buf.length;
  }
  
  BufferSegment.prototype.toString = function() {
    return this.buffer.toString('utf8', this.offset, this.offset + this.count);
  };
  
  BufferSegment.prototype.toBuffer = function() {
    if (this.offset === 0 && this.count === this.buffer.length) return this.buffer;
    return this.buffer.slice(this.offset, this.offset + this.count);
  };
  
  BufferSegment.prototype.copyTo = function(dst, offset) {
    this.buffer.copy(dst, offset, this.offset, this.offset + this.count);
  };
  
  module.exports = function(buf, offset, count) {
    return new BufferSegment(buf, offset, count);
  };