package org.eclipse.collections.impl.parallel;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.collections.api.block.procedure.primitive.ObjectIntProcedure;
import org.eclipse.collections.api.list.MutableList;
import org.eclipse.collections.impl.utility.ArrayListIterate;
import org.eclipse.collections.impl.utility.ListIterate;
public final class ObjectIntProcedureFJTask<T, BT extends ObjectIntProcedure<? super T>> implements Runnable
{
private final ObjectIntProcedureFactory<BT> procedureFactory;
private BT procedure;
private final List<T> list;
private final int start;
private final int end;
private final ObjectIntProcedureFJTaskRunner<T, BT> taskRunner;
public ObjectIntProcedureFJTask(
ObjectIntProcedureFJTaskRunner<T, BT> newFJTaskRunner,
ObjectIntProcedureFactory<BT> newProcedureFactory,
List<T> list,
int index,
int sectionSize,
boolean isLast)
{
this.taskRunner = newFJTaskRunner;
this.procedureFactory = newProcedureFactory;
this.list = list;
this.start = index * sectionSize;
this.end = isLast ? this.list.size() : this.start + sectionSize;
}
@Override
public void run()
{
try
{
this.procedure = this.procedureFactory.create();
int stop = this.end - 1;
if (this.list instanceof MutableList)
{
((MutableList<T>) this.list).forEachWithIndex(this.start, stop, this.procedure);
}
else if (this.list instanceof ArrayList)
{
ArrayListIterate.forEachWithIndex((ArrayList<T>) this.list, this.start, stop, this.procedure);
}
else
{
ListIterate.forEachWithIndex(this.list, this.start, stop, this.procedure);
}
}
catch (Throwable newError)
{
this.taskRunner.setFailed(newError);
}
finally
{
this.taskRunner.taskCompleted(this);
}
}
public BT getProcedure()
{
return this.procedure;
}
}