Search in sources :

Example 11 with MinoFieldMemento

use of searcher.pack.memento.MinoFieldMemento 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();
}
Also used : ColumnField(core.column_field.ColumnField) MinoFieldMemento(searcher.pack.memento.MinoFieldMemento) ForkJoinPool(java.util.concurrent.ForkJoinPool)

Example 12 with MinoFieldMemento

use of searcher.pack.memento.MinoFieldMemento 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;
}
Also used : ColumnField(core.column_field.ColumnField) MinoFieldMemento(searcher.pack.memento.MinoFieldMemento) ForkJoinPool(java.util.concurrent.ForkJoinPool)

Example 13 with MinoFieldMemento

use of searcher.pack.memento.MinoFieldMemento 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;
}
Also used : ColumnField(core.column_field.ColumnField) MinoFieldMemento(searcher.pack.memento.MinoFieldMemento) ForkJoinPool(java.util.concurrent.ForkJoinPool)

Example 14 with MinoFieldMemento

use of searcher.pack.memento.MinoFieldMemento 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;
}
Also used : ColumnField(core.column_field.ColumnField) List(java.util.List) MinoFieldMemento(searcher.pack.memento.MinoFieldMemento) ForkJoinPool(java.util.concurrent.ForkJoinPool)

Example 15 with MinoFieldMemento

use of searcher.pack.memento.MinoFieldMemento in project solution-finder by knewjade.

the class SetupPackSearcher 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自体の作成をして終了する)
        task.compute().parallel().forEach(callback);
        // 計算を最後まで行ったことを伝えるため true を返却
        return true;
    });
    // 結果を取得するまで待つ
    Boolean result = submitTask.get();
    assert result;
    // 終了処理
    forkJoinPool.shutdown();
}
Also used : ColumnField(core.column_field.ColumnField) MinoFieldMemento(searcher.pack.memento.MinoFieldMemento) ForkJoinPool(java.util.concurrent.ForkJoinPool)

Aggregations

MinoFieldMemento (searcher.pack.memento.MinoFieldMemento)20 ColumnField (core.column_field.ColumnField)17 ForkJoinPool (java.util.concurrent.ForkJoinPool)12 SizedBit (searcher.pack.SizedBit)8 MinoFields (searcher.pack.mino_fields.MinoFields)3 ColumnSmallField (core.column_field.ColumnSmallField)2 List (java.util.List)2 Optional (java.util.Optional)2 SolutionFilter (searcher.pack.memento.SolutionFilter)2 ColumnFieldFactory (core.column_field.ColumnFieldFactory)1 Stream (java.util.stream.Stream)1 InOutPairField (searcher.pack.InOutPairField)1