Skip to content

Commit 5b91563

Browse files
author
Maarten
committed
Again make parallellizations prettier.
1 parent ec4b31e commit 5b91563

File tree

2 files changed

+9
-11
lines changed

2 files changed

+9
-11
lines changed

src/main/java/org/leibnizcenter/cfg/earleyparser/ExpressionWrapper.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,22 +8,26 @@ public class ExpressionWrapper extends Resolvable {
88
private Resolvable expression;
99

1010
public ExpressionWrapper(Resolvable expression) {
11+
if (expression == null) throw new NullPointerException();
1112
this.expression = expression;
1213
}
1314

1415
@SuppressWarnings("unused")
1516
public Resolvable getExpression() {
1617
if (lock) throw new IllegalStateException("Value already locked");
18+
if (expression == null) throw new NullPointerException();
1719
return expression;
1820
}
1921

2022
@SuppressWarnings("unused")
2123
public void setExpression(Resolvable expression) {
2224
if (lock) throw new IllegalStateException("Value already locked");
25+
if (expression == null) throw new NullPointerException();
2326
this.expression = expression;
2427
}
2528

2629
public double resolve() {
30+
if (expression == null) throw new NullPointerException();
2731
if (lock) return cached;
2832
return expression.resolveFinal();
2933
}

src/main/java/org/leibnizcenter/cfg/earleyparser/chart/Chart.java

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -321,9 +321,8 @@ private void completeNoViterbi(final int position,
321321
) {
322322
if (states == null || states.size() <= 0) return;
323323

324-
325324
final DeferredStateScoreComputations newStates = new DeferredStateScoreComputations(stateSets.grammar.semiring);
326-
Stream<StateInformationTriple> stream = states.stream()
325+
List<Complete.Delta> deltas = states.stream()
327326
// For all states
328327
// i: Y<sub>j</sub> → value· [a",y"]
329328
// j: X<sub>k</suv> → l·Zm [a',y']
@@ -333,13 +332,10 @@ private void completeNoViterbi(final int position,
333332

334333
// WARNING: shared mutated mutability
335334
.sequential()
336-
.map(completedState -> new StateInformationTriple(null, completedState, addInnerScores.getOrCreate(completedState, stateSets.innerScores.getAtom(completedState))));
337-
338-
/* Safe to parallelize here */
339-
if (parallelizeComplete) stream = stream.parallel();
340-
341-
List<Complete.Delta> deltas = stream
335+
.map(completedState -> new StateInformationTriple(null, completedState, addInnerScores.getOrCreate(completedState, stateSets.innerScores.getAtom(completedState))))
336+
// TODO can/want parallelize this?
342337
.flatMap(stateSets.activeStates::streamAllStatesToAdvance)
338+
.sequential()
343339
.map(stateInformation -> completeNoViterbiForTriple(
344340
position,
345341
addInnerScores.getOrCreate(stateInformation.stateToAdvance, stateSets.innerScores.getAtom(stateInformation.stateToAdvance)),
@@ -396,9 +392,7 @@ private void computeViterbiScoresForCompletedState(
396392
int completedPos = completedState.position;
397393
final Set<State> statesToAdvance = stateSets.activeStates.getStatesActiveOnNonTerminal(Yl, completedState.ruleStartPosition, completedPos);
398394
if (statesToAdvance != null && statesToAdvance.size() > 0) {
399-
Stream<State> stream = statesToAdvance.stream();
400-
/* Safe to parallelize here */
401-
if (parallelizeComplete) stream = stream.parallel();
395+
Stream<State> stream = (parallelizeComplete ? statesToAdvance.parallelStream() : statesToAdvance.stream());
402396
Collection<Complete.ViterbiDelta> newStates = stream
403397
.map((stateToAdvance) -> computeViterbiForState(completedState, completedViterbi, stateToAdvance))
404398
.filter(d -> d != null)

0 commit comments

Comments
 (0)