code: function FifoQueue(min) {
    if (!(this instanceof FifoQueue)) {
      return new FifoQueue(min);
    }
    this.queue = (min > 0) ? new Array(min) : [];
    this.first = -1;
    this.last  = -1;
    this.total = 0;
  }
docs: /* Note:  Dicer appears to read ahead.
  + each type of event (such as header or end) fires in part order; however
  + for typical MarkLogic documents, part streams become available in batches
  + the header event fires when each part stream becomes available
  + if parts are piped as soon as available, the end event for one pipe
  can fire after the next pipe starts reading
  + thus, if parts are piped as soon as available, different types of events
  can interleave, as in:
  part reader 1
  header event 1
  part reader 2
  header event 2
  part data 1
  part data 2
  part end 1
  part end 2
  finish