package org.geogebra.common.kernel.algos;
import org.geogebra.common.kernel.Construction;
import org.geogebra.common.kernel.Kernel;
import org.geogebra.common.kernel.geos.GeoElement;
import org.geogebra.common.kernel.geos.GeoNumberValue;
import org.geogebra.common.kernel.geos.GeoNumeric;
import org.geogebra.common.plugin.GeoClass;
import org.geogebra.common.plugin.Operation;
/**
* Helper for Sum/Product when numbers are involved
*/
public class NumberFold implements FoldComputer {
private GeoNumeric result;
private double x;
@Override
public GeoElement getTemplate(Construction cons, GeoClass listElement) {
return this.result = new GeoNumeric(cons);
}
@Override
public void add(GeoElement p, Operation op) {
if (op == Operation.MULTIPLY) {
x *= ((GeoNumberValue) p).getDouble();
} else {
x += ((GeoNumberValue) p).getDouble();
}
}
@Override
public void setFrom(GeoElement geoElement, Kernel kernel) {
x = ((GeoNumberValue) geoElement).getDouble();
}
@Override
public boolean check(GeoElement geoElement) {
return geoElement instanceof GeoNumberValue;
}
@Override
public void finish() {
result.setValue(x);
}
}