package net.ion.craken.expression; import java.util.Collections; import java.util.List; import net.ion.craken.node.NodeCommonMap; import net.ion.rosetta.functors.Pair; public final class SimpleCaseExpression extends ValueObject implements Expression { public final Expression condition; public final List<Pair<Expression, Expression>> cases; public final Expression defaultValue; // null if no default public SimpleCaseExpression(Expression condition, List<Pair<Expression, Expression>> cases, Expression defaultValue) { this.condition = condition; this.cases = Collections.unmodifiableList(cases); this.defaultValue = defaultValue; } @Override public Comparable value(NodeCommonMap node) { Comparable conditionValue = condition.value(node); for (Pair<Expression, Expression> pair : cases) { if (conditionValue.equals(pair.a.value(node))) return pair.b.value(node) ; } return defaultValue.value(node); } }