/*
* This file is part or JMathLib
*
* Check it out at http://www.jmathlib.de
*
* Author: Stefan Mueller (stefan@held-mueller.de)
* (c) 2008, 2009
*/
package jmathlib.core.functions;
import jmathlib.core.interpreter.GlobalValues;
import jmathlib.core.tokens.numbertokens.DoubleNumberToken;
import jmathlib.core.tokens.OperandToken;
import jmathlib.core.tokens.Token;
/**Base class for all external function classes which work element wise*/
abstract public class ExternalElementWiseFunction extends ExternalFunction
{
/**
* standard function for evaluation of general external functions
* @param operands
* @param pointer to the global values (interpreter, function manager, graphics,...)
* @return
*/
public OperandToken evaluate(Token[] operands, GlobalValues globals)
{
// function works for one argument only
if (getNArgIn(operands)!=1)
throwMathLibException(name + " number of arguments < 1");
// works on numbers only
if (!(operands[0] instanceof DoubleNumberToken))
throwMathLibException(name + " only works on numbers");
// get number token
DoubleNumberToken numOp = (DoubleNumberToken)operands[0];
// get dimension of number token (2dimensional, 3dim, ....)
int[] dim = numOp.getSize();
// ceate array of correct size with dimensions "dim"
DoubleNumberToken num = new DoubleNumberToken(dim, null, null);
// call element evaluation for all values inside the DoubleNumberToken
for (int i=0; i< numOp.getNumberOfElements(); i++)
{
num.setValueComplex(i, evaluateValue( numOp.getValueComplex(i) ));
}
return num;
} // end evaluate
// all subclasses of this cluss MUST implement the method below
//abstract public double[] evaluateValue(double[] complex);
abstract public double[] evaluateValue(double[] complex);
}