package gve.calc.formula; public class OperatorPlus extends InfixBinaryOp { public String getName() { return "+"; } public int getPri() { return 1800; } public OperatorPlus(Part l,Part r) { super(l,r); } public boolean same(Object o) { o = Brackets.unbracket(o); if (o instanceof OperatorPlus) { OperatorPlus plus = (OperatorPlus)o; return left.same(plus.left) && right.same(plus.right); } return false; } public Part evaluate(Evaluator ev) { Part l = left.evaluate(ev); Part r = right.evaluate(ev); if (l instanceof Real && r instanceof Real) { return new Real(((Real)l).doubleValue + ((Real)r).doubleValue); } else if (l instanceof Real && r instanceof Interval) { Interval inter = (Interval)r; double left = ((Real)l).doubleValue; return new Interval(inter.low+left,inter.high+left,inter.openLow,inter.openHigh); } else if (l instanceof Interval && r instanceof Real) { Interval inter = (Interval)l; double right = ((Real)r).doubleValue; return new Interval(inter.low+right,inter.high+right,inter.openLow,inter.openHigh); } else if (l instanceof Interval && r instanceof Interval) { Interval left = (Interval)l; Interval right = (Interval)r; return new Interval(left.low+right.low,left.high+right.high, left.openLow||right.openLow,left.openHigh||right.openHigh); } System.out.println("cannot evaluate "+l+" + "+r); return new OperatorPlus((Part)l.clone(),(Part)r.clone()); } public static Part read(java.io.BufferedReader r) throws java.io.IOException, ClassNotFoundException,NoSuchMethodException, java.lang.reflect.InvocationTargetException,IllegalAccessException{ Part left = Part.read(r); Part right = Part.read(r); return new OperatorPlus(left,right); } }