package com.ldbc.driver.generator;
import com.ldbc.driver.util.Function0;
import java.util.Iterator;
public class InterleaveGenerator<GENERATE_TYPE> extends Generator<GENERATE_TYPE>
{
private final Iterator<? extends GENERATE_TYPE> baseGenerator;
private final Iterator<? extends GENERATE_TYPE> interleaveFromGenerator;
private final Function0<Integer,RuntimeException> amountToInterleaveFun;
private int remainingToInterleave;
InterleaveGenerator( Iterator<? extends GENERATE_TYPE> baseGenerator,
Iterator<? extends GENERATE_TYPE> interleaveFromGenerator,
Function0<Integer,RuntimeException> amountToInterleaveFun )
{
this.baseGenerator = baseGenerator;
this.interleaveFromGenerator = interleaveFromGenerator;
this.amountToInterleaveFun = amountToInterleaveFun;
this.remainingToInterleave = 0;
}
@Override
protected GENERATE_TYPE doNext() throws GeneratorException
{
if ( 0 == remainingToInterleave )
{
if ( baseGenerator.hasNext() )
{
remainingToInterleave = amountToInterleaveFun.apply();
return baseGenerator.next();
}
else
{
return null;
}
}
else
{
if ( interleaveFromGenerator.hasNext() )
{
remainingToInterleave--;
return interleaveFromGenerator.next();
}
else
{
return null;
}
}
}
}