aboutsummaryrefslogtreecommitdiffstats
path: root/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/interval/aggregators/intervalHull.xtend
blob: 72605f572a49ea1ac04027884cd9eb047cc04fab (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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
package hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.interval.aggregators

import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.interval.Interval
import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.interval.IntervalHullAggregatorOperator
import java.math.BigDecimal
import java.math.BigInteger
import java.math.MathContext
import org.eclipse.viatra.query.runtime.matchers.psystem.aggregations.AggregatorType
import org.eclipse.viatra.query.runtime.matchers.psystem.aggregations.BoundAggregator
import org.eclipse.viatra.query.runtime.matchers.psystem.aggregations.IAggregatorFactory

@AggregatorType(parameterTypes=#[BigDecimal, BigInteger, Byte, Double, Float, Integer, Long, Short], returnTypes=#[
	Interval, Interval, Interval, Interval, Interval, Interval, Interval, Interval])
class intervalHull implements IAggregatorFactory {

	override getAggregatorLogic(Class<?> domainClass) {
		new BoundAggregator(getAggregationOperator(domainClass), domainClass, Interval)
	}

	private def getAggregationOperator(Class<?> domainClass) {
		switch (domainClass) {
			case BigDecimal:
				new IntervalHullAggregatorOperator<BigDecimal>() {
					override protected toBigDecimal(BigDecimal value, MathContext mc) {
						value.round(mc)
					}
				}
			case BigInteger:
				new IntervalHullAggregatorOperator<BigInteger>() {
					override protected toBigDecimal(BigInteger value, MathContext mc) {
						new BigDecimal(value, mc)
					}
				}
			case Byte:
				new IntervalHullAggregatorOperator<Byte>() {
					override protected toBigDecimal(Byte value, MathContext mc) {
						new BigDecimal(value, mc)
					}
				}
			case Double:
				new IntervalHullAggregatorOperator<Double>() {
					override protected toBigDecimal(Double value, MathContext mc) {
						new BigDecimal(value, mc)
					}
				}
			case Float:
				new IntervalHullAggregatorOperator<Float>() {
					override protected toBigDecimal(Float value, MathContext mc) {
						new BigDecimal(value, mc)
					}
				}
			case Integer:
				new IntervalHullAggregatorOperator<Integer>() {
					override protected toBigDecimal(Integer value, MathContext mc) {
						new BigDecimal(value, mc)
					}
				}
			case Long:
				new IntervalHullAggregatorOperator<Long>() {
					override protected toBigDecimal(Long value, MathContext mc) {
						new BigDecimal(value, mc)
					}
				}
			case Short:
				new IntervalHullAggregatorOperator<Short>() {
					override protected toBigDecimal(Short value, MathContext mc) {
						new BigDecimal(value, mc)
					}
				}
			default:
				throw new IllegalArgumentException("Unknown domain class: " + domainClass)
		}
	}
}