blob: 4aa7cfd00c97c5f6c2c747b0d791b1bd49533c29 (
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
|
package org.eclipse.viatra.solver.data.query.view;
import org.eclipse.viatra.solver.data.model.Model;
import org.eclipse.viatra.solver.data.model.Tuple;
import org.eclipse.viatra.solver.data.model.Tuple.Tuple1;
import org.eclipse.viatra.solver.data.model.representation.Relation;
public class FunctionalRelationView<D> extends RelationView<D> {
public FunctionalRelationView(Relation<D> representation) {
super(representation);
}
@Override
protected boolean filter(Tuple key, D value) {
return true;
}
@Override
protected Object[] forwardMap(Tuple key, D value) {
return toTuple1ArrayPlusValue(key, value);
}
@Override
public boolean get(Model model, Object[] tuple) {
int[] content = new int[tuple.length-1];
for(int i = 0; i<tuple.length-1; i++) {
content[i] =((Tuple1)tuple[i]).get(0);
}
Tuple key = Tuple.of(content);
@SuppressWarnings("unchecked")
D valueInTuple = (D) tuple[tuple.length-1];
D valueInMap = model.get(representation, key);
return valueInTuple.equals(valueInMap);
}
public static <D> Object[] toTuple1ArrayPlusValue(Tuple t, D value) {
Object[] result = new Object[t.getSize()+1];
for(int i = 0; i<t.getSize(); i++) {
result[i] = t.get(i);
}
result[t.getSize()] = value;
return result;
}
@Override
public int getArity() {
return this.representation.getArity()+1;
}
}
|