@Override public IntVar intVar() { if (me == null) { IntVar v = e.intVar(); switch (op) { case NEG: me = model.intMinusView(v); break; case ABS: me = model.intAbsView(v); break; case SQR: int[] bounds = VariableUtils.boundsForMultiplication(v, v); me = model.intVar(model.generateName("sqr_exp_"), bounds[0], bounds[1]); model.times(v, v, me).post(); break; default: throw new UnsupportedOperationException( "Unary arithmetic expressions does not support " + op.name()); } } return me; }
@Override public String toString() { return op.name() + "(" + e.toString() + ")"; }
@Override public int eval(int[] values, Map<IntVar, Integer> map) { return op.eval(e.eval(values, map)); }
/** * Builds a unary expression * * @param op operator * @param exp an arithmetic expression */ public UnArExpression(Operator op, ArExpression exp) { this.op = op; this.e = exp; this.model = e.getModel(); }