blob: 8ee540ae3c70d66ff986f4814b07b392f9b79d7c (
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
|
package org.eclipse.viatra.solver.data.query.building;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.UUID;
public class DNFPredicate {
private final String name;
private final String uniqueName;
private final List<Variable> parameters;
private final List<DNFAnd> clauses;
public DNFPredicate(String name, List<Variable> parameters, List<DNFAnd> clauses) {
this.name = name;
this.uniqueName = generateUniqueName(name,"predicate");
this.parameters = parameters;
this.clauses = clauses;
postProcess();
}
public static String generateUniqueName(String originalName, String defaultPrefix) {
UUID uuid = UUID.randomUUID();
String uniqueString = uuid.toString().replace('-', '_');
if(originalName == null) {
return defaultPrefix+uniqueString;
} else {
return originalName+uniqueString;
}
}
public String getName() {
return name;
}
public String getUniqueName() {
return uniqueName;
}
public List<Variable> getVariables() {
return parameters;
}
public List<DNFAnd> getClauses() {
return clauses;
}
public void unifyVariables() {
Map<String,Variable> uniqueVariableMap = new HashMap<>();
for(Variable parameter : this.parameters) {
if(parameter.isNamed()) {
String parameterName = parameter.getName();
if(uniqueVariableMap.containsKey(parameterName)) {
throw new IllegalArgumentException("Multiple parameters has the name "+parameterName);
} else {
uniqueVariableMap.put(parameterName, parameter);
}
}
}
for(DNFAnd clause : this.clauses) {
clause.unifyVariables(uniqueVariableMap);
}
}
public void collectQuantifiedVariables() {
for(DNFAnd clause : this.clauses) {
clause.collectQuantifiedVariables(new HashSet<>(parameters));
}
}
public void postProcess() {
unifyVariables();
collectQuantifiedVariables();
}
}
|