use of core.column_field.ColumnField in project solution-finder by knewjade.
the class PerfectPackSearcher method forEach.
public void forEach(Consumer<Result> callback) throws InterruptedException, ExecutionException {
// 探索準備
MinoFieldMemento emptyMemento = MinoFieldMementoFactory.create();
ColumnField innerField = inOutPairFields.get(0).getInnerField();
PackingTask task = createPackingTask(sizedBit, emptyMemento, innerField);
// 探索
ForkJoinPool forkJoinPool = new ForkJoinPool();
ForkJoinTask<Boolean> submitTask = forkJoinPool.submit(() -> {
// Streamは終端操作を実行するまで実際には計算を行わない
// そのため、終端操作をPool内でしなければ、Pool外のスレッド場で動くため注意が必要
// (終端操作をしなかった場合、Pool内ではStream自体の作成をして終了する)
Stream<Result> compute = toStream(task);
compute.forEach(callback);
// 計算を最後まで行ったことを伝えるため true を返却
return true;
});
// 結果を取得するまで待つ
Boolean result = submitTask.get();
assert result;
// 終了処理
forkJoinPool.shutdown();
}
use of core.column_field.ColumnField in project solution-finder by knewjade.
the class PerfectPackSearcher method count.
public Long count() throws InterruptedException, ExecutionException {
// 探索準備
MinoFieldMemento emptyMemento = MinoFieldMementoFactory.create();
ColumnField innerField = inOutPairFields.get(0).getInnerField();
PackingTask task = createPackingTask(sizedBit, emptyMemento, innerField);
// 探索
ForkJoinPool forkJoinPool = new ForkJoinPool();
ForkJoinTask<Long> submitTask = forkJoinPool.submit(() -> {
// Streamは終端操作を実行するまで実際には計算を行わない
// そのため、終端操作をPool内でしなければ、Pool外のスレッド場で動くため注意が必要
// (終端操作をしなかった場合、Pool内ではStream自体の作成をして終了する)
Stream<Result> compute = toStream(task);
return compute.count();
});
// 結果を取得するまで待つ
Long result = submitTask.get();
assert result != null;
// 終了処理
forkJoinPool.shutdown();
return result;
}
use of core.column_field.ColumnField in project solution-finder by knewjade.
the class SetupPackSearcher method stream.
public <T> T stream(Function<Stream<Result>, T> callback) throws InterruptedException, ExecutionException {
// 探索準備
MinoFieldMemento emptyMemento = MinoFieldMementoFactory.create();
ColumnField innerField = inOutPairFields.get(0).getInnerField();
PackingTask task = createPackingTask(sizedBit, emptyMemento, innerField);
// 探索
ForkJoinPool forkJoinPool = new ForkJoinPool();
ForkJoinTask<T> submitTask = forkJoinPool.submit(() -> {
return callback.apply(task.compute().parallel());
});
// 結果を取得するまで待つ
T result = submitTask.get();
assert result != null;
// 終了処理
forkJoinPool.shutdown();
return result;
}
use of core.column_field.ColumnField in project solution-finder by knewjade.
the class SetupPackSearcher method toList.
public List<Result> toList() throws InterruptedException, ExecutionException {
// 探索準備
MinoFieldMemento emptyMemento = MinoFieldMementoFactory.create();
ColumnField innerField = inOutPairFields.get(0).getInnerField();
PackingTask task = createPackingTask(sizedBit, emptyMemento, innerField);
// 探索
ForkJoinPool forkJoinPool = new ForkJoinPool();
ForkJoinTask<List<Result>> submitTask = forkJoinPool.submit(() -> {
// (終端操作をしなかった場合、Pool内ではStream自体の作成をして終了する)
return task.compute().parallel().collect(Collectors.toList());
});
// 結果を取得するまで待つ
List<Result> results = submitTask.get();
// 終了処理
forkJoinPool.shutdown();
return results;
}
use of core.column_field.ColumnField in project solution-finder by knewjade.
the class SetupPackSearcher method isFilled.
@Override
public boolean isFilled(ColumnField columnField, int index) {
ColumnField innerField = needFillFields.get(index);
long needFillBoard = innerField.getBoard(0);
return (columnField.getBoard(0) & needFillBoard) == needFillBoard;
}
Aggregations