diff options
Diffstat (limited to 'subprojects/store-query-viatra/src')
3 files changed, 52 insertions, 10 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 | } | ||
diff --git a/subprojects/store-query-viatra/src/test/java/tools/refinery/store/query/viatra/QueryTest.java b/subprojects/store-query-viatra/src/test/java/tools/refinery/store/query/viatra/QueryTest.java index 3dd517c4..8b25419d 100644 --- a/subprojects/store-query-viatra/src/test/java/tools/refinery/store/query/viatra/QueryTest.java +++ b/subprojects/store-query-viatra/src/test/java/tools/refinery/store/query/viatra/QueryTest.java | |||
@@ -1,6 +1,7 @@ | |||
1 | package tools.refinery.store.query.viatra; | 1 | package tools.refinery.store.query.viatra; |
2 | 2 | ||
3 | import org.junit.jupiter.api.Test; | 3 | import org.junit.jupiter.api.Test; |
4 | import tools.refinery.store.map.Cursor; | ||
4 | import tools.refinery.store.model.ModelStore; | 5 | import tools.refinery.store.model.ModelStore; |
5 | import tools.refinery.store.query.Dnf; | 6 | import tools.refinery.store.query.Dnf; |
6 | import tools.refinery.store.query.ModelQuery; | 7 | import tools.refinery.store.query.ModelQuery; |
@@ -14,7 +15,6 @@ import tools.refinery.store.tuple.TupleLike; | |||
14 | 15 | ||
15 | import java.util.HashSet; | 16 | import java.util.HashSet; |
16 | import java.util.Set; | 17 | import java.util.Set; |
17 | import java.util.stream.Stream; | ||
18 | 18 | ||
19 | import static org.junit.jupiter.api.Assertions.*; | 19 | import static org.junit.jupiter.api.Assertions.*; |
20 | import static tools.refinery.store.query.literal.Literals.not; | 20 | import static tools.refinery.store.query.literal.Literals.not; |
@@ -712,11 +712,10 @@ class QueryTest { | |||
712 | assertThrows(IllegalArgumentException.class, () -> queryBuilder.queries(predicate)); | 712 | assertThrows(IllegalArgumentException.class, () -> queryBuilder.queries(predicate)); |
713 | } | 713 | } |
714 | 714 | ||
715 | static void compareMatchSets(Stream<TupleLike> matchSet, Set<Tuple> expected) { | 715 | private static void compareMatchSets(Cursor<TupleLike, Boolean> cursor, Set<Tuple> expected) { |
716 | Set<Tuple> translatedMatchSet = new HashSet<>(); | 716 | Set<Tuple> translatedMatchSet = new HashSet<>(); |
717 | var iterator = matchSet.iterator(); | 717 | while (cursor.move()) { |
718 | while (iterator.hasNext()) { | 718 | var element = cursor.getKey(); |
719 | var element = iterator.next(); | ||
720 | translatedMatchSet.add(element.toTuple()); | 719 | translatedMatchSet.add(element.toTuple()); |
721 | } | 720 | } |
722 | assertEquals(expected, translatedMatchSet); | 721 | assertEquals(expected, translatedMatchSet); |