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 untilcurrentRangeStart()
andcurrentRangeEnd()
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 interfaceAutoCloseable
- Specified by:
close
in interfaceSafeCloseable
-
hasNext
boolean hasNext() -
advance
boolean advance(long v)Advance the current iterator position until
currentRangeStart()
andcurrentRangeEnd()
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 ofcurrentRangeStart()
, this will simply advancecurrentRangeStart()
. Returns true if the operation was successful. Otherwise, returns false. In this case the iteration is over and the iterator is exhausted (calls tohasNext()
will return false, any other operation is undefined).Although calls to
advance()
may be interleaved with calls tohasNext()
/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 withadvance()
, 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()
-