/** Creates a new sorted wrapper, sorting by BytesRef (ascending) then cost (ascending). */
 public SortedInputIterator(InputIterator source, Comparator<BytesRef> comparator)
     throws IOException {
   this.hasPayloads = source.hasPayloads();
   this.hasContexts = source.hasContexts();
   this.source = source;
   this.comparator = comparator;
   this.reader = sort();
 }
 /** Creates a new iterator, buffering entries from the specified iterator */
 public BufferedInputIterator(InputIterator source) throws IOException {
   BytesRef spare;
   int freqIndex = 0;
   hasPayloads = source.hasPayloads();
   hasContexts = source.hasContexts();
   while ((spare = source.next()) != null) {
     entries.append(spare);
     if (hasPayloads) {
       payloads.append(source.payload());
     }
     if (hasContexts) {
       contextSets.add(source.contexts());
     }
     if (freqIndex >= freqs.length) {
       freqs = ArrayUtil.grow(freqs, freqs.length + 1);
     }
     freqs[freqIndex++] = source.weight();
   }
 }