package org.geogebra.common.kernel.algos; import org.geogebra.common.kernel.Construction; import org.geogebra.common.kernel.Kernel; import org.geogebra.common.kernel.arithmetic.FunctionNVar; import org.geogebra.common.kernel.arithmetic.FunctionalNVar; import org.geogebra.common.kernel.geos.GeoElement; import org.geogebra.common.kernel.geos.GeoFunction; import org.geogebra.common.kernel.geos.GeoFunctionNVar; import org.geogebra.common.plugin.GeoClass; import org.geogebra.common.plugin.Operation; /** * Sum helper for nvar functions * */ public class FunctionNvarFold implements FoldComputer { private GeoFunctionNVar result; @Override public GeoElement getTemplate(Construction cons, GeoClass listElement) { return this.result = new GeoFunctionNVar(cons); } @Override public void add(GeoElement geoElement, Operation op) { FunctionNVar fn = GeoFunction .operationSymb(op, result, (FunctionalNVar) geoElement) .deepCopy(geoElement.getKernel()); fn.setExpression(AlgoDependentFunction .expandFunctionDerivativeNodes(fn.getExpression(), true) .wrap()); result.setFunction(fn); this.result.setDefined(true); } @Override public void setFrom(GeoElement geoElement, Kernel kernel) { this.result.set(geoElement); this.result.setDefined(true); } @Override public boolean check(GeoElement geoElement) { return geoElement instanceof FunctionalNVar; } @Override public void finish() { this.result.setDefined(true); } }