protected final void compute() { // Sum[{x^2,x^3}] int n = truncate == null ? geoList.size() : (int) truncate.getDouble(); if (n == 0 || n > geoList.size()) { resultFun.setUndefined(); return; } else if (n == 1) { if (!geoList.get(0).isGeoFunctionable()) { resultFun.setUndefined(); return; } GeoFunction fun1 = ((GeoFunctionable) geoList.get(0)).getGeoFunction(); FunctionVariable x1 = fun1.getFunction().getFunctionVariable(); FunctionVariable x = new FunctionVariable(kernel); ExpressionNode left = fun1.getFunctionExpression().getCopy(fun1.getKernel()); Function f = new Function(left.replace(x1, x), x); resultFun.setFunction(f); resultFun.setDefined(true); return; } if (!geoList.get(0).isGeoFunctionable() || !geoList.get(1).isGeoFunctionable()) { resultFun.setUndefined(); return; } // add first two: resultFun = GeoFunction.add( resultFun, ((GeoFunctionable) geoList.get(0)).getGeoFunction(), ((GeoFunctionable) geoList.get(1)).getGeoFunction()); if (n == 2) return; for (int i = 2; i < n; i++) { if (!geoList.get(i).isGeoFunctionable()) { resultFun.setUndefined(); return; } resultFun = GeoFunction.add( resultFun, resultFun, ((GeoFunctionable) geoList.get(i)).getGeoFunction()); } }
private boolean hasEqualExpressions(GeoFunction f, GeoFunction g) { boolean equal; if (f.isGeoFunctionConditional()) { GeoFunctionConditional geoFun = (GeoFunctionConditional) f; ExpressionNode en2 = null; ExpressionNode en = geoFun.getIfFunction().getFunctionExpression(); equal = exp == en; exp = en; if (geoFun.getElseFunction() != null) { en2 = geoFun.getElseFunction().getFunctionExpression(); equal = equal && exp2 == en2; exp2 = en2; } } else { ExpressionNode en = f.getFunctionExpression(); equal = exp == en; exp = en; } return equal; }