aboutsummaryrefslogtreecommitdiffstats
path: root/subprojects/language-web
diff options
context:
space:
mode:
authorLibravatar Kristóf Marussy <kristof@marussy.com>2023-09-11 19:22:26 +0200
committerLibravatar Kristóf Marussy <kristof@marussy.com>2023-09-11 19:22:26 +0200
commit4d365b54dad8d066bba2a2b1a05092b4802b9970 (patch)
tree12e5ae36b0041463ded54e7a69dcdc9f3662794f /subprojects/language-web
parentfix: build failures after integrating generation (diff)
downloadrefinery-4d365b54dad8d066bba2a2b1a05092b4802b9970.tar.gz
refinery-4d365b54dad8d066bba2a2b1a05092b4802b9970.tar.zst
refinery-4d365b54dad8d066bba2a2b1a05092b4802b9970.zip
feat: cancellation token for ModelStore
Diffstat (limited to 'subprojects/language-web')
-rw-r--r--subprojects/language-web/src/main/java/tools/refinery/language/web/semantics/CancellableSeed.java99
-rw-r--r--subprojects/language-web/src/main/java/tools/refinery/language/web/semantics/SemanticsWorker.java9
2 files changed, 4 insertions, 104 deletions
diff --git a/subprojects/language-web/src/main/java/tools/refinery/language/web/semantics/CancellableSeed.java b/subprojects/language-web/src/main/java/tools/refinery/language/web/semantics/CancellableSeed.java
deleted file mode 100644
index aa14f39d..00000000
--- a/subprojects/language-web/src/main/java/tools/refinery/language/web/semantics/CancellableSeed.java
+++ /dev/null
@@ -1,99 +0,0 @@
1/*
2 * SPDX-FileCopyrightText: 2023 The Refinery Authors <https://refinery.tools/>
3 *
4 * SPDX-License-Identifier: EPL-2.0
5 */
6package tools.refinery.language.web.semantics;
7
8import tools.refinery.store.map.AnyVersionedMap;
9import tools.refinery.store.map.Cursor;
10import tools.refinery.store.reasoning.representation.PartialSymbol;
11import tools.refinery.store.reasoning.seed.ModelSeed;
12import tools.refinery.store.reasoning.seed.Seed;
13import tools.refinery.store.tuple.Tuple;
14import tools.refinery.viatra.runtime.CancellationToken;
15
16import java.util.Set;
17
18class CancellableSeed<T> implements Seed<T> {
19 private final CancellationToken cancellationToken;
20 private final Seed<T> seed;
21
22 private CancellableSeed(CancellationToken cancellationToken, Seed<T> seed) {
23 this.cancellationToken = cancellationToken;
24 this.seed = seed;
25 }
26
27 @Override
28 public int arity() {
29 return seed.arity();
30 }
31
32 @Override
33 public Class<T> valueType() {
34 return seed.valueType();
35 }
36
37 @Override
38 public T reducedValue() {
39 return seed.reducedValue();
40 }
41
42 @Override
43 public T get(Tuple key) {
44 return seed.get(key);
45 }
46
47 @Override
48 public Cursor<Tuple, T> getCursor(T defaultValue, int nodeCount) {
49 return new CancellableCursor<>(cancellationToken, seed.getCursor(defaultValue, nodeCount));
50 }
51
52 public static ModelSeed wrap(CancellationToken cancellationToken, ModelSeed modelSeed) {
53 var builder = ModelSeed.builder(modelSeed.getNodeCount());
54 for (var partialSymbol : modelSeed.getSeededSymbols()) {
55 wrap(cancellationToken, (PartialSymbol<?, ?>) partialSymbol, modelSeed, builder);
56 }
57 return builder.build();
58 }
59
60 private static <A, C> void wrap(CancellationToken cancellationToken, PartialSymbol<A, C> partialSymbol,
61 ModelSeed originalModelSeed, ModelSeed.Builder builder) {
62 var originalSeed = originalModelSeed.getSeed(partialSymbol);
63 builder.seed(partialSymbol, new CancellableSeed<>(cancellationToken, originalSeed));
64 }
65
66 private record CancellableCursor<T>(CancellationToken cancellationToken, Cursor<Tuple, T> cursor)
67 implements Cursor<Tuple, T> {
68 @Override
69 public Tuple getKey() {
70 return cursor.getKey();
71 }
72
73 @Override
74 public T getValue() {
75 return cursor.getValue();
76 }
77
78 @Override
79 public boolean isTerminated() {
80 return cursor.isTerminated();
81 }
82
83 @Override
84 public boolean move() {
85 cancellationToken.checkCancelled();
86 return cursor.move();
87 }
88
89 @Override
90 public boolean isDirty() {
91 return cursor.isDirty();
92 }
93
94 @Override
95 public Set<AnyVersionedMap> getDependingMaps() {
96 return cursor.getDependingMaps();
97 }
98 }
99}
diff --git a/subprojects/language-web/src/main/java/tools/refinery/language/web/semantics/SemanticsWorker.java b/subprojects/language-web/src/main/java/tools/refinery/language/web/semantics/SemanticsWorker.java
index c745d86e..33b1c4fb 100644
--- a/subprojects/language-web/src/main/java/tools/refinery/language/web/semantics/SemanticsWorker.java
+++ b/subprojects/language-web/src/main/java/tools/refinery/language/web/semantics/SemanticsWorker.java
@@ -34,7 +34,7 @@ import tools.refinery.store.reasoning.representation.PartialRelation;
34import tools.refinery.store.reasoning.translator.TranslationException; 34import tools.refinery.store.reasoning.translator.TranslationException;
35import tools.refinery.store.reasoning.translator.multiobject.MultiObjectTranslator; 35import tools.refinery.store.reasoning.translator.multiobject.MultiObjectTranslator;
36import tools.refinery.store.tuple.Tuple; 36import tools.refinery.store.tuple.Tuple;
37import tools.refinery.viatra.runtime.CancellationToken; 37import tools.refinery.store.util.CancellationToken;
38 38
39import java.util.ArrayList; 39import java.util.ArrayList;
40import java.util.TreeMap; 40import java.util.TreeMap;
@@ -74,8 +74,8 @@ class SemanticsWorker implements Callable<SemanticsResult> {
74 @Override 74 @Override
75 public SemanticsResult call() { 75 public SemanticsResult call() {
76 var builder = ModelStore.builder() 76 var builder = ModelStore.builder()
77 .with(ViatraModelQueryAdapter.builder() 77 .cancellationToken(cancellationToken)
78 .cancellationToken(cancellationToken)) 78 .with(ViatraModelQueryAdapter.builder())
79 .with(PropagationAdapter.builder()) 79 .with(PropagationAdapter.builder())
80 .with(ReasoningAdapter.builder() 80 .with(ReasoningAdapter.builder()
81 .requiredInterpretations(Concreteness.PARTIAL)); 81 .requiredInterpretations(Concreteness.PARTIAL));
@@ -91,8 +91,7 @@ class SemanticsWorker implements Callable<SemanticsResult> {
91 cancellationToken.checkCancelled(); 91 cancellationToken.checkCancelled();
92 var store = builder.build(); 92 var store = builder.build();
93 cancellationToken.checkCancelled(); 93 cancellationToken.checkCancelled();
94 var cancellableModelSeed = CancellableSeed.wrap(cancellationToken, modelSeed); 94 var model = store.getAdapter(ReasoningStoreAdapter.class).createInitialModel(modelSeed);
95 var model = store.getAdapter(ReasoningStoreAdapter.class).createInitialModel(cancellableModelSeed);
96 cancellationToken.checkCancelled(); 95 cancellationToken.checkCancelled();
97 var partialInterpretation = getPartialInterpretation(initializer, model); 96 var partialInterpretation = getPartialInterpretation(initializer, model);
98 97