diff options
Diffstat (limited to 'subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/pquery/StatefulMultisetAggregator.java')
-rw-r--r-- | subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/pquery/StatefulMultisetAggregator.java | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/pquery/StatefulMultisetAggregator.java b/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/pquery/StatefulMultisetAggregator.java new file mode 100644 index 00000000..2798a252 --- /dev/null +++ b/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/pquery/StatefulMultisetAggregator.java | |||
@@ -0,0 +1,60 @@ | |||
1 | package tools.refinery.store.query.viatra.internal.pquery; | ||
2 | |||
3 | import org.eclipse.viatra.query.runtime.matchers.psystem.aggregations.IMultisetAggregationOperator; | ||
4 | import tools.refinery.store.query.term.StatefulAggregate; | ||
5 | import tools.refinery.store.query.term.StatefulAggregator; | ||
6 | |||
7 | import java.util.stream.Stream; | ||
8 | |||
9 | record StatefulMultisetAggregator<R, T>(StatefulAggregator<R, T> aggregator) | ||
10 | implements IMultisetAggregationOperator<T, StatefulAggregate<R, T>, R> { | ||
11 | @Override | ||
12 | public String getShortDescription() { | ||
13 | return getName(); | ||
14 | } | ||
15 | |||
16 | @Override | ||
17 | public String getName() { | ||
18 | return aggregator.toString(); | ||
19 | } | ||
20 | |||
21 | @Override | ||
22 | public StatefulAggregate<R, T> createNeutral() { | ||
23 | return aggregator.createEmptyAggregate(); | ||
24 | } | ||
25 | |||
26 | @Override | ||
27 | public boolean isNeutral(StatefulAggregate<R, T> result) { | ||
28 | return result.isEmpty(); | ||
29 | } | ||
30 | |||
31 | @Override | ||
32 | public StatefulAggregate<R, T> update(StatefulAggregate<R, T> oldResult, T updateValue, boolean isInsertion) { | ||
33 | if (isInsertion) { | ||
34 | oldResult.add(updateValue); | ||
35 | } else { | ||
36 | oldResult.remove(updateValue); | ||
37 | } | ||
38 | return oldResult; | ||
39 | } | ||
40 | |||
41 | @Override | ||
42 | public R getAggregate(StatefulAggregate<R, T> result) { | ||
43 | return result.getResult(); | ||
44 | } | ||
45 | |||
46 | @Override | ||
47 | public R aggregateStream(Stream<T> stream) { | ||
48 | return aggregator.aggregateStream(stream); | ||
49 | } | ||
50 | |||
51 | @Override | ||
52 | public StatefulAggregate<R, T> clone(StatefulAggregate<R, T> original) { | ||
53 | return original.deepCopy(); | ||
54 | } | ||
55 | |||
56 | @Override | ||
57 | public boolean contains(T value, StatefulAggregate<R, T> accumulator) { | ||
58 | return accumulator.contains(value); | ||
59 | } | ||
60 | } | ||