/*
* Copyright (c) 2021 Goldman Sachs.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* and Eclipse Distribution License v. 1.0 which accompany this distribution.
* The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
* and the Eclipse Distribution License is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*/
package org.eclipse.collections.impl.parallel;
import org.eclipse.collections.api.block.procedure.Procedure;
public final class BatchIterableProcedureFJTask<T, BT extends Procedure<? super T>> implements Runnable
{
private final ProcedureFactory<BT> procedureFactory;
private BT procedure;
private final BatchIterable<T> iterable;
private final int sectionIndex;
private final int sectionCount;
private final BatchIterableProcedureFJTaskRunner<T, BT> taskRunner;
Creates an array of ProcedureFJTasks wrapping Procedures created by the specified ProcedureFactory.
/**
* Creates an array of ProcedureFJTasks wrapping Procedures created by the specified ProcedureFactory.
*/
public BatchIterableProcedureFJTask(
BatchIterableProcedureFJTaskRunner<T, BT> newFJTaskRunner,
ProcedureFactory<BT> procedureFactory,
BatchIterable<T> iterable,
int index,
int count)
{
this.taskRunner = newFJTaskRunner;
this.procedureFactory = procedureFactory;
this.iterable = iterable;
this.sectionIndex = index;
this.sectionCount = count;
}
@Override
public void run()
{
try
{
this.procedure = this.procedureFactory.create();
this.iterable.batchForEach(this.procedure, this.sectionIndex, this.sectionCount);
}
catch (Throwable newError)
{
this.taskRunner.setFailed(newError);
}
finally
{
this.taskRunner.taskCompleted(this);
}
}
public BT getProcedure()
{
return this.procedure;
}
}