Newer
Older
package edg.slicing;
import edg.graph.EDG;
/**
* Constraind tabular algorithm with subsumption.
* It uses stack ordering to disallow insertion into pathEdge and workList if a subsuming
* stack is included in them already.
* @see ConstrainedTabularAlgorithm
*/
public class ConstrainedSubsumedTabularAlgorithm extends ConstrainedTabularAlgorithm {
public ConstrainedSubsumedTabularAlgorithm(EDG edg) {
super(edg);
}
@Override
protected void propagate(Work work) {
if (!pathEdge.contains(work)) {
if (work.current().stack().isEdgeConstraintsEmpty() || pathEdge.stream().noneMatch(work::isSubsumedBy)) {
workList.removeIf(w -> w.isSubsumedBy(work));
pathEdge.add(work);
workList.add(work);
}