package hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.interval; import java.util.function.BinaryOperator; public enum IntervalAggregationMode implements BinaryOperator { SUM("intervalSum", "Sum a set of intervals") { @Override public IntervalRedBlackNode createNode(Interval interval) { return new IntervalRedBlackNode(interval) { public boolean isMultiplicitySensitive() { return true; } public Interval multiply(Interval interval, int count) { return interval.operator_multiply(count); }; @Override public Interval op(Interval left, Interval right) { return left.operator_plus(right); } }; } }, JOIN("intervalJoin", "Calculate the smallest interval containing all the intervals in a set") { @Override public IntervalRedBlackNode createNode(Interval interval) { return new IntervalRedBlackNode(interval) { @Override public Interval op(Interval left, Interval right) { return left.join(right); } }; } }; private final String modeName; private final String description; private final IntervalRedBlackNode empty; IntervalAggregationMode(String modeName, String description) { this.modeName = modeName; this.description = description; empty = createNode(null); } public String getModeName() { return modeName; } public String getDescription() { return description; } public IntervalRedBlackNode getEmpty() { return empty; } @Override public Interval apply(Interval left, Interval right) { return empty.op(left, right); } public abstract IntervalRedBlackNode createNode(Interval interval); }