-
Notifications
You must be signed in to change notification settings - Fork 6
Expand file tree
/
Copy pathMultiOrConstraint.java
More file actions
99 lines (85 loc) · 2.78 KB
/
MultiOrConstraint.java
File metadata and controls
99 lines (85 loc) · 2.78 KB
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
package de.vill.model.constraint;
import de.vill.model.building.AutomaticBrackets;
import de.vill.model.building.VariableReference;
import de.vill.util.ConstantSymbols;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
public class MultiOrConstraint extends Constraint{
private List<Constraint> sub_parts;
public MultiOrConstraint() {
sub_parts = new LinkedList<>();
}
@Override
public String toString(boolean withSubmodels, String currentAlias) {
StringBuilder result = new StringBuilder();
for (Constraint part : sub_parts) {
result.append(AutomaticBrackets.enforceConstraintBracketsIfNecessary(this, part, withSubmodels, currentAlias));
result.append(" "+ ConstantSymbols.OR + " ");
}
result.delete(result.length() -3, result.length());
return result.toString();
}
@Override
public List<Constraint> getConstraintSubParts() {
return sub_parts;
}
public void add_sub_part(Constraint constraint) {
sub_parts.add(constraint);
}
@Override
public void replaceConstraintSubPart(Constraint oldSubConstraint, Constraint newSubConstraint) {
for (int i=0;i<sub_parts.size();i++) {
if (sub_parts.get(i) == oldSubConstraint) {
sub_parts.set(i, newSubConstraint);
break;
}
}
}
@Override
public Constraint clone() {
MultiOrConstraint multiOrConstraint = new MultiOrConstraint();
for (Constraint part : sub_parts) {
multiOrConstraint.add_sub_part(part.clone());
}
return multiOrConstraint;
}
@Override
public int hashCode(int level) {
final int prime = 31;
int result = 1;
for (Constraint part : sub_parts) {
result = prime * result + part.hashCode(1 + level);
}
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null || getClass() != obj.getClass()) {
return false;
}
MultiOrConstraint other = (MultiOrConstraint) obj;
if (this.sub_parts.size() != other.sub_parts.size()) {
return false;
}
boolean same = true;
for (int i=0;i<sub_parts.size();i++) {
if (sub_parts.get(i) != other.sub_parts.get(i)) {
same = false;
break;
}
}
return same;
}
@Override
public List<VariableReference> getReferences() {
List<VariableReference> references = new ArrayList<>();
for (int i=0;i<sub_parts.size();i++) {
references.addAll(sub_parts.get(i).getReferences());
}
return references;
}
}