/*
GeoGebra - Dynamic Mathematics for Everyone
http://www.geogebra.org
This file is part of GeoGebra.
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation.
*/
package org.geogebra.common.kernel.arithmetic;
import org.geogebra.common.kernel.Kernel;
import org.geogebra.common.kernel.StringTemplate;
import org.geogebra.common.plugin.Operation;
/**
* @author Markus Hohenwarter
*/
public class FunctionVariable extends MyDouble {
private String varStr = "x";
/**
* Creates new function variable
*
* @param kernel
* kernel
*/
public FunctionVariable(Kernel kernel) {
super(kernel);
}
/**
* Creates new function variable
*
* @param kernel
* kernel
* @param varStr
* variable name
*/
public FunctionVariable(Kernel kernel, String varStr) {
super(kernel);
setVarString(varStr);
}
/**
* Returns true to avoid deep copies in an ExpressionNode tree.
*/
@Override
final public boolean isConstant() {
return false;
}
@Override
final public FunctionVariable deepCopy(Kernel k) {
return new FunctionVariable(k, varStr);
}
/**
* Changes variable name
*
* @param varStr
* new variable name
*/
public void setVarString(String varStr) {
this.varStr = varStr;
}
/**
* @return variable name
*/
public String getSetVarString() {
return varStr;
}
@Override
final public String toString(final StringTemplate tpl) {
return tpl.printVariableName(varStr);
}
/*
* interface NumberValue removed Michael Borcherds 2008-05-20 (see MyDouble)
*/
// final public MyDouble getNumber() {
// used in expression node tree: be careful
// return new MyDouble(this);
// }
@Override
public ExpressionValue derivative(FunctionVariable fv, Kernel kernel0) {
if (fv == this) {
return new MyDouble(kernel0, 1);
}
return new MyDouble(kernel0, 0);
}
@Override
public ExpressionValue integral(FunctionVariable fv, Kernel kernel0) {
if (fv == this) {
return new ExpressionNode(kernel0, this, Operation.POWER,
new MyDouble(kernel0, 2)).divide(2);
}
return new ExpressionNode(kernel0, this, Operation.MULTIPLY, fv);
}
@Override
/**
* checks if set to same value, not if it's the same FunctionVariable object
*/
public boolean equals(Object o) {
return super.equals(o);
}
@Override
public int hashCode() {
return super.hashCode();
}
}