blob: 940c71bb786017042fcf47711cc648bd4bfcc11c (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
package hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.interval
import java.util.stream.Stream
import org.eclipse.viatra.query.runtime.matchers.psystem.aggregations.IMultisetAggregationOperator
import org.eclipse.xtend.lib.annotations.Accessors
import org.eclipse.xtend.lib.annotations.FinalFieldsConstructor
@FinalFieldsConstructor
class IntervalAggregationOperator implements IMultisetAggregationOperator<Interval, IntervalRedBlackNode, Interval> {
@Accessors val IntervalAggregationMode mode
override getName() {
mode.modeName
}
override getShortDescription() {
mode.description
}
override createNeutral() {
mode.empty
}
override isNeutral(IntervalRedBlackNode result) {
result.leaf
}
override update(IntervalRedBlackNode oldResult, Interval updateValue, boolean isInsertion) {
if (isInsertion) {
val newNode = mode.createNode(updateValue)
oldResult.add(newNode)
} else {
oldResult.remove(updateValue)
}
}
override getAggregate(IntervalRedBlackNode result) {
if (result.leaf) {
null
} else {
result.result
}
}
override aggregateStream(Stream<Interval> stream) {
stream.reduce(mode).orElse(null)
}
}
|