JavaPatternMatching/src/typinferenz/OderConstraint.java

84 lines
2.0 KiB
Java
Raw Normal View History

2013-10-18 11:33:46 +00:00
package typinferenz;
import java.util.Vector;
import mycompiler.mytype.Pair;
import mycompiler.mytype.RefType;
import mycompiler.mytype.Type;
import mycompiler.mytype.TypePlaceholder;
public class OderConstraint{
private Vector<UndConstraint> oderConstraintPairs;
/**
* Erstellt ein neues Oder Constraint und f<EFBFBD>gt bereits ein Constraint hinzu.
* @param p1
* @param p2
*/
public OderConstraint(Type p1, Type p2){
2014-02-22 03:58:49 +00:00
if(p1 == null || p2 == null)throw new NullPointerException();
2013-10-18 11:33:46 +00:00
Pair constraintPair = new Pair(p1,p2);
oderConstraintPairs = new Vector<UndConstraint>();
this.addConstraint(constraintPair);
}
public OderConstraint(){
oderConstraintPairs = new Vector<UndConstraint>();
}
/**
* Liefert alle in diesem OderConstraint enthaltene Constraints. Dabei gehen die Verkn<EFBFBD>pfungen (Oder/Und) verloren.
* @return
*/
public Vector<Pair> getConstraintPairs(){
Vector<Pair> ret = new Vector<Pair>();
for(UndConstraint oC : this.oderConstraintPairs){
ret.addAll(oC.getConstraintPairs());
}
return ret;
}
/**
* F<EFBFBD>gt ein Pair(p1, p2) dem Constraint hinzu
* @param p1
* @param p2
*/
public void addConstraint(Type p1, Type p2){
addConstraint(new Pair(p1,p2));
}
/**
* Falls die Type des toAdd-Pairs nicht vom Typ RefType bzw. TypePlaceholder sind, so werden sie in einen RefType umgewandelt.
* @param toAdd
*/
public void addConstraint(Pair toAdd){
oderConstraintPairs.add(new SingleConstraint(toAdd.TA1, toAdd.TA2));
}
@Override
public String toString(){
String ret = "[";
2014-03-18 19:18:57 +00:00
for(UndConstraint p : this.getUndConstraints()){
ret += p.toString()+ "| ";
2013-10-18 11:33:46 +00:00
}
return ret+"]";
}
public Vector<UndConstraint> getUndConstraints() {
return this.oderConstraintPairs;
/*
Vector<UndConstraint> ret = new Vector<UndConstraint>();
for(Pair p : this.getConstraintPairs()){
ret.add(new UndConstraint(p.TA1,p.TA2));
}
return ret;
*/
}
public void addConstraint(UndConstraint methodConstraint) {
oderConstraintPairs.add(methodConstraint);
}
}