Interface ReadOnlyIndex.RangeIterator

All Superinterfaces:
AutoCloseable, SafeCloseable
All Known Implementing Classes:
ComplementRangeIterator, SortedRanges.RangeIterator
Enclosing interface:
ReadOnlyIndex

public static interface ReadOnlyIndex.RangeIterator
extends SafeCloseable
  • Field Summary

    Fields 
    Modifier and Type Field Description
    static ReadOnlyIndex.RangeIterator empty  
  • Method Summary

    Modifier and Type Method Description
    boolean advance​(long v)
    Advance the current iterator position until currentRangeStart() and currentRangeEnd() are both greater than or equal to ‘v’.
    void close()  
    long currentRangeEnd()  
    long currentRangeStart()  
    boolean hasNext()  
    long next()  
    void postpone​(long v)
    Given an iterator state with a current range of [start, end], and a value v such that start <= v <= end, postpone(v) makes the iterator current range [v, end].
  • Field Details

  • Method Details

    • close

      void close()
      Specified by:
      close in interface AutoCloseable
      Specified by:
      close in interface SafeCloseable
    • hasNext

      boolean hasNext()
    • advance

      boolean advance​(long v)

      Advance the current iterator position until currentRangeStart() and currentRangeEnd() are both greater than or equal to ‘v’. This may or may not move the iterator to the next range: if ‘v’ is inside the current range (but to the right of currentRangeStart(), this will simply advance currentRangeStart(). Returns true if the operation was successful. Otherwise, returns false. In this case the iteration is over and the iterator is exhausted (calls to hasNext() will return false, any other operation is undefined).

      Although calls to advance() may be interleaved with calls to hasNext()/next() if necessary, this is not the common case, as they are separate protocols having little to do with each other. In particular, when iterating with advance(), you do not use next() to bring the next range into view, even at the start of the iteration. Many common usages only involve calls to advance().

      Example:

      
       RangeIterator it = index.getRangeIterator();
       if (!it.advance(100)) {
           return;  // iteration done… no ranges at 100 or greater
       }
       assert(it.currentRangeStart() >= 100 && it.currentRangeEnd() >= 100);
        // do something with range
       if (!it.advance(500)) {
          return;  // iteration done… no ranges at 500 or greater
       }
       assert(it.currentRangeStart() >= 500 && it.currentRangeEnd() >= 500);
       // do something with range
       
      Parameters:
      v - a value to search forward from the current iterator position
      Returns:
      false if iteration is exhausted, otherwise true.
    • postpone

      void postpone​(long v)
      Given an iterator state with a current range of [start, end], and a value v such that start <= v <= end, postpone(v) makes the iterator current range [v, end]. This call is useful to code that may need to process parts of ranges from different call sites from the site iterator. The results of this call are undefined if the value provided is not contained in the current range.
      Parameters:
      v - A value contained in the current iterator range
    • currentRangeStart

      long currentRangeStart()
    • currentRangeEnd

      long currentRangeEnd()
    • next

      long next()