it.unimi.dsi.mg4j.search
Class OrDocumentIterator.OrIndexIntervalIterator
java.lang.Object
it.unimi.dsi.fastutil.objects.AbstractObjectIterator<Interval>
it.unimi.dsi.mg4j.search.AbstractDocumentIterator.AbstractIntervalIterator
it.unimi.dsi.mg4j.search.AbstractCompositeDocumentIterator.AbstractCompositeIndexIntervalIterator
it.unimi.dsi.mg4j.search.OrDocumentIterator.OrIndexIntervalIterator
- All Implemented Interfaces:
- ObjectIterator<Interval>, IntervalIterator, Iterator<Interval>
- Enclosing class:
- OrDocumentIterator
protected class OrDocumentIterator.OrIndexIntervalIterator
- extends AbstractCompositeDocumentIterator.AbstractCompositeIndexIntervalIterator
- implements IntervalIterator
An optimised interval iterator with the same semantics as that implemented
by OrDocumentIterator
, but using just IndexIterator.positionArray()
.
Method Summary |
int |
extent()
Returns an approximation of a lower bound for the length of an interval
returned by this iterator. |
void |
intervalTerms(IntSet terms)
Provides the set of terms that span the current interval. |
Interval |
nextInterval()
Returns the next interval provided by this interval iterator, or null if no more intervals are available. |
void |
reset()
Resets the internal state of this iterator for a new document. |
OrDocumentIterator.OrIndexIntervalIterator
public OrDocumentIterator.OrIndexIntervalIterator(Index index)
reset
public void reset()
throws IOException
- Description copied from interface:
IntervalIterator
- Resets the internal state of this iterator for a new document.
To reduce object creation, interval iterators are usually created in a lazy
fashion by document iterator when they are needed. However, this implies that
every time the document iterator is moved, some internal state of the interval iterator must be reset
(e.g., because on the new document some of the component interval iterators are now
IntervalIterators.TRUE
).
- Specified by:
reset
in interface IntervalIterator
- Throws:
IOException
intervalTerms
public void intervalTerms(IntSet terms)
- Description copied from interface:
IntervalIterator
- Provides the set of terms that span the current interval.
For each interval returned by MG4J, there is a set of terms that caused the interval to be returned.
The terms appear inside the interval, and certainly at its extremes.
Note that the results of this method must be taken with a grain of salt: there might be different sets of terms
causing the current interval, and only one will be returned.
- Specified by:
intervalTerms
in interface IntervalIterator
- Parameters:
terms
- a set of integers that will be filled with the terms spanning the current interval.
nextInterval
public Interval nextInterval()
- Description copied from interface:
IntervalIterator
- Returns the next interval provided by this interval iterator, or
null
if no more intervals are available.
This method has been reintroduced in MG4J 1.2 with a different semantics.
The special return value null
is used to mark the end of iteration. The reason
for this change is providing fully lazy iteration over intervals. Fully lazy iteration
does not provide an hasNext()
method—you have to actually ask for the next
element and check the return value. Fully lazy iteration is much lighter on method calls (half) and
in most (if not all) MG4J classes leads to a much simpler logic. Moreover, IntervalIterator.nextInterval()
can be specified as throwing an IOException
, which avoids the pernicious proliferation
of try/catch blocks in very short, low-level methods (it was having a detectable impact on performance).
- Specified by:
nextInterval
in interface IntervalIterator
- Returns:
- the next interval, or
null
if no more intervals are available.
extent
public int extent()
- Description copied from interface:
IntervalIterator
- Returns an approximation of a lower bound for the length of an interval
returned by this iterator.
- Specified by:
extent
in interface IntervalIterator
- Returns:
- an approximation of a lower bound for the length of an interval.