aboutsummaryrefslogtreecommitdiffstats
path: root/subprojects/store-query-viatra/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'subprojects/store-query-viatra/src/main')
-rw-r--r--subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/pquery/RawPatternMatcher.java10
-rw-r--r--subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/pquery/ResultSetCursor.java43
2 files changed, 48 insertions, 5 deletions
diff --git a/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/pquery/RawPatternMatcher.java b/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/pquery/RawPatternMatcher.java
index 8f56586e..5924ff15 100644
--- a/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/pquery/RawPatternMatcher.java
+++ b/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/pquery/RawPatternMatcher.java
@@ -9,13 +9,13 @@ import org.eclipse.viatra.query.runtime.matchers.tuple.TupleMask;
9import org.eclipse.viatra.query.runtime.matchers.tuple.Tuples; 9import org.eclipse.viatra.query.runtime.matchers.tuple.Tuples;
10import org.eclipse.viatra.query.runtime.rete.index.Indexer; 10import org.eclipse.viatra.query.runtime.rete.index.Indexer;
11import org.eclipse.viatra.query.runtime.rete.matcher.RetePatternMatcher; 11import org.eclipse.viatra.query.runtime.rete.matcher.RetePatternMatcher;
12import tools.refinery.store.map.Cursor;
13import tools.refinery.store.map.Cursors;
12import tools.refinery.store.query.ResultSet; 14import tools.refinery.store.query.ResultSet;
13import tools.refinery.store.query.viatra.ViatraTupleLike; 15import tools.refinery.store.query.viatra.ViatraTupleLike;
14import tools.refinery.store.tuple.Tuple; 16import tools.refinery.store.tuple.Tuple;
15import tools.refinery.store.tuple.TupleLike; 17import tools.refinery.store.tuple.TupleLike;
16 18
17import java.util.stream.Stream;
18
19/** 19/**
20 * Directly access the tuples inside a VIATRA pattern matcher.<p> 20 * Directly access the tuples inside a VIATRA pattern matcher.<p>
21 * This class neglects calling 21 * This class neglects calling
@@ -64,12 +64,12 @@ public class RawPatternMatcher extends GenericPatternMatcher implements ResultSe
64 } 64 }
65 65
66 @Override 66 @Override
67 public Stream<TupleLike> allResults() { 67 public Cursor<TupleLike, Boolean> allResults() {
68 if (emptyMaskIndexer == null) { 68 if (emptyMaskIndexer == null) {
69 return backend.getAllMatches(empty).map(ViatraTupleLike::new); 69 return new ResultSetCursor(backend.getAllMatches(empty).iterator());
70 } 70 }
71 var matches = emptyMaskIndexer.get(Tuples.staticArityFlatTupleOf()); 71 var matches = emptyMaskIndexer.get(Tuples.staticArityFlatTupleOf());
72 return matches == null ? Stream.of() : matches.stream().map(ViatraTupleLike::new); 72 return matches == null ? Cursors.empty() : new ResultSetCursor(matches.stream().iterator());
73 } 73 }
74 74
75 @Override 75 @Override
diff --git a/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/pquery/ResultSetCursor.java b/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/pquery/ResultSetCursor.java
new file mode 100644
index 00000000..5e6d1970
--- /dev/null
+++ b/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/pquery/ResultSetCursor.java
@@ -0,0 +1,43 @@
1package tools.refinery.store.query.viatra.internal.pquery;
2
3import org.eclipse.viatra.query.runtime.matchers.tuple.ITuple;
4import tools.refinery.store.map.Cursor;
5import tools.refinery.store.query.viatra.ViatraTupleLike;
6import tools.refinery.store.tuple.TupleLike;
7
8import java.util.Iterator;
9
10class ResultSetCursor implements Cursor<TupleLike, Boolean> {
11 private final Iterator<? extends ITuple> tuplesIterator;
12 private boolean terminated;
13 private TupleLike key;
14
15 public ResultSetCursor(Iterator<? extends ITuple> tuplesIterator) {
16 this.tuplesIterator = tuplesIterator;
17 }
18
19 @Override
20 public TupleLike getKey() {
21 return key;
22 }
23
24 @Override
25 public Boolean getValue() {
26 return true;
27 }
28
29 @Override
30 public boolean isTerminated() {
31 return terminated;
32 }
33
34 @Override
35 public boolean move() {
36 if (!terminated && tuplesIterator.hasNext()) {
37 key = new ViatraTupleLike(tuplesIterator.next());
38 return true;
39 }
40 terminated = true;
41 return false;
42 }
43}