Class CompoundParallelTupleIter

  extended by org.eigenbase.runtime.AbstractTupleIter
      extended by org.eigenbase.runtime.CompoundParallelTupleIter
All Implemented Interfaces:
TupleIter, ClosableAllocation

public class CompoundParallelTupleIter
extends AbstractTupleIter

CompoundParallelTupleIter creates one TupleIter out of several. Unlike its serial counterpart CompoundTupleIter, it runs all its inputs in parallel, in separate threads that it spawns. It outputs the next element available from any of its inputs. Note that the order of output rows is indeterminate, since it is unpredictable which input will arrive next.

The compound TupleIter is finished when all of its inputs are finished. The set of input iterators is fixed at construction.

This variant is needed when an input is infinite, since CompoundTupleIter would hang. Extending this class to preserve order is problematic, given its low level:

$Id: //open/dev/farrago/src/org/eigenbase/runtime/ $
Marc Berkowitz

Nested Class Summary
static class CompoundParallelTupleIter.Test
Nested classes/interfaces inherited from interface org.eigenbase.runtime.TupleIter
TupleIter.NoDataReason, TupleIter.TimeoutException
Field Summary
private  boolean[] endOfData
private  int i
private  TupleIter[] in
Fields inherited from interface org.eigenbase.runtime.TupleIter
Constructor Summary
CompoundParallelTupleIter(TupleIter[] tupleIters)
Method Summary
 void closeAllocation()
          Closes this object.
 Object fetchNext()
          Returns the next element in the iteration.
 void restart()
          Restarts this iterator, so that a subsequent call to TupleIter.fetchNext() returns the first element in the collection being iterated.
Methods inherited from class org.eigenbase.runtime.AbstractTupleIter
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

Field Detail


private final TupleIter[] in


private final boolean[] endOfData


private int i
Constructor Detail


public CompoundParallelTupleIter(TupleIter[] tupleIters)
Method Detail


public Object fetchNext()
Description copied from interface: TupleIter
Returns the next element in the iteration. If there is no next value, it returns a value from the TupleIter.NoDataReason enumeration indicating why no data was returned.

If this method returns TupleIter.NoDataReason.END_OF_DATA, no further data will be returned by this iterator unless TupleIter.restart() is called.

If this method returns TupleIter.NoDataReason.UNDERFLOW, no data is currently available, but may be come available in the future. It is possible for consecutive calls to return UNDERFLOW and then END_OF_DATA.

The object returned by this method may be re-used for each subsequent call to fetchNext(). In other words, callers must either make certain that the returned value is no longer needed or is copied before any subsequent calls to fetchNext().

the next element in the iteration, or an instance of TupleIter.NoDataReason.


public void restart()
Description copied from interface: TupleIter
Restarts this iterator, so that a subsequent call to TupleIter.fetchNext() returns the first element in the collection being iterated.

Specified by:
restart in interface TupleIter
restart in class AbstractTupleIter


public void closeAllocation()
Description copied from interface: ClosableAllocation
Closes this object.