package models.deltaAlgebra;
import java.util.List;
/**
* A composed closed delta
*
* @author Nitta
*
*/public class DeltaSimplex extends DeltaExpression {
private Delta delta;
public DeltaSimplex(Delta delta) {
this.delta = delta;
}
public DeltaSum add(DeltaExpression expression) {
return new DeltaSum(this, expression);
}
public DeltaProduct mul(DeltaExpression expression) {
return new DeltaProduct(this, expression);
}
/**
* if this = d1 o d2 o ... o dn
*
* @return d1 | d2 | ... | dn
**/
public DeltaComplex flatten() {
DeltaComplex flattenComplex = null;
for (PrimitiveDelta primDelta: delta.split().reversed()) {
flattenComplex = new DeltaComplex(new Delta(primDelta), flattenComplex);
}
return flattenComplex;
}
@Override
public List<Delta> decompose() {
return List.of(delta);
}
@Override
public DeltaSimplex copy() {
return new DeltaSimplex(delta.copy());
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || !(o instanceof DeltaSimplex)) return false;
DeltaSimplex another = (DeltaSimplex) o;
return delta.equals(another.delta);
}
@Override
public int hashCode() {
return delta.hashCode();
}
public String toString() {
return "tau_C(" + delta.toString() + ")";
}
}