package gve.calc.formula; public class OperatorEquality extends InfixBinaryOp { /* = != */ private String opname; public OperatorEquality(String nam,Part l,Part r) { super(l,r); opname = nam; } public String getName() { return opname; } public int getPri() { return 1600; } public boolean same(Object o) { o = Brackets.unbracket(o); if (o instanceof OperatorEquality) { OperatorEquality eq = (OperatorEquality)o; return opname.equals(eq.opname) && left.same(eq.left) && right.same(eq.right); } return false; } public Part evaluate(Evaluator ev) { boolean result = opname.equals("="); // Some tricks: "x+y>0 = subst(x+y,x,x>0)" must return true // if we evaluate() left, we get "x+y>0.0" // and the right side evaluates to "x+y>0" ... if (left.same(right)) return new Boolean(result); Part rightEval = right.evaluate(ev); if (left.same(rightEval)) return new Boolean(result); Part leftEval = left.evaluate(ev); if (leftEval.same(right)) return new Boolean(result); if (leftEval.same(rightEval)) return new Boolean(result); // boolean gelijk = left.evaluate(ev).same(right.evaluate(ev)); // if (opname.equals("!=")) gelijk = !gelijk; return new Boolean(!result); } public void write(java.io.Writer w) throws java.io.IOException { super.write(w); w.write(opname+"\n"); } 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 OperatorEquality(r.readLine(),left,right); } }