private int computePositionOfLast() {
    final int last = _nodes.cardinality();
    final int currNode = _currentNode;
    final AbstractTranslet translet = _translet;

    int lastPosition = _position;
    for (int index = _currentIndex; index < last; ) {
      final int position = _docOrder ? index + 1 : last - index;
      int nodeIndex = _nodes.at(index++); // note increment

      if (_filter.test(nodeIndex, position, last, currNode, translet, this)) {
        lastPosition++;
      }
    }
    return lastPosition;
  }
  public int next() {
    final int last = _nodes.cardinality();
    final int currentNode = _currentNode;
    final AbstractTranslet translet = _translet;

    for (int index = _currentIndex; index < last; ) {
      final int position = _docOrder ? index + 1 : last - index;
      final int node = _nodes.at(index++); // note increment

      if (_filter.test(node, position, last, currentNode, translet, this)) {
        _currentIndex = index;
        return returnNode(node);
      }
    }
    return END;
  }