Newer
Older
DesignCraft / src / main / java / models / deltaAlgebra / DeltaSimplex.java
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() + ")";
    }
}