@Override
  public int advance(int target) throws IOException {
    DisiWrapper<Iter> top = subIterators.top();
    do {
      top.doc = top.approximation.advance(target);
      top = subIterators.updateTop();
    } while (top.doc < target);

    return top.doc;
  }
  @Override
  public int nextDoc() throws IOException {
    DisiWrapper<Iter> top = subIterators.top();
    final int doc = top.doc;
    do {
      top.doc = top.approximation.nextDoc();
      top = subIterators.updateTop();
    } while (top.doc == doc);

    return top.doc;
  }