diff options
Diffstat (limited to 'subprojects/store-query-viatra/src/main')
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; | |||
9 | import org.eclipse.viatra.query.runtime.matchers.tuple.Tuples; | 9 | import org.eclipse.viatra.query.runtime.matchers.tuple.Tuples; |
10 | import org.eclipse.viatra.query.runtime.rete.index.Indexer; | 10 | import org.eclipse.viatra.query.runtime.rete.index.Indexer; |
11 | import org.eclipse.viatra.query.runtime.rete.matcher.RetePatternMatcher; | 11 | import org.eclipse.viatra.query.runtime.rete.matcher.RetePatternMatcher; |
12 | import tools.refinery.store.map.Cursor; | ||
13 | import tools.refinery.store.map.Cursors; | ||
12 | import tools.refinery.store.query.ResultSet; | 14 | import tools.refinery.store.query.ResultSet; |
13 | import tools.refinery.store.query.viatra.ViatraTupleLike; | 15 | import tools.refinery.store.query.viatra.ViatraTupleLike; |
14 | import tools.refinery.store.tuple.Tuple; | 16 | import tools.refinery.store.tuple.Tuple; |
15 | import tools.refinery.store.tuple.TupleLike; | 17 | import tools.refinery.store.tuple.TupleLike; |
16 | 18 | ||
17 | import 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 @@ | |||
1 | package tools.refinery.store.query.viatra.internal.pquery; | ||
2 | |||
3 | import org.eclipse.viatra.query.runtime.matchers.tuple.ITuple; | ||
4 | import tools.refinery.store.map.Cursor; | ||
5 | import tools.refinery.store.query.viatra.ViatraTupleLike; | ||
6 | import tools.refinery.store.tuple.TupleLike; | ||
7 | |||
8 | import java.util.Iterator; | ||
9 | |||
10 | class 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 | } | ||