Package edu.hws.jcm.data

# Interface ExpressionCommand

All Superinterfaces:
  `Serializable`

All Known Implementing Classes:
  `ConditionalExpression`, `Constant`, `ExpressionFunction`, `FunctionParserExtension`, `TableFunction`, `Variable`, `WrapperFunction`

public interface ExpressionCommand extends Serializable
An ExpressionCommand can occur as a command in an ExpressionProgram. ExpressionCommands exists so that ExprssionPrograms can be extened to include new types of operations beyond the basic operations (such as PLUS and SIN) which are represented by constants in the ExpressionProgram class. Examples include ConditionalExpressions and user-defined functions. This interface is not meant for casual programmers. It is for programmers who want to extend the notion of Expression in an orginal way.

## Method Summary

Modifier and Type
Method
Description
`void`
`appendOutputString(ExpressionProgram prog, int myIndex, StringBuffer buffer)`
The ExpressionCommand occurs in the program prog at the index indicated by myIndex.
`void`
`apply(StackOfDouble stack, Cases cases)`
This routine is called when an ExpressionCommand object is encountered during the evaluation of an ExpressionProgram.
`void`
`compileDerivative(ExpressionProgram prog, int myIndex, ExpressionProgram deriv, Variable wrt)`
The ExpressionCommand occurs in the program prog at the index indicated by myIndex.
`boolean`
`dependsOn(Variable x)`
Return true if this command depends on the value of x, false otherwise.
`int`
`extent(ExpressionProgram prog, int myIndex)`
The ExpressionCommand occurs in the program prog at the index indicated by myIndex.

## Method Details

### apply

void apply(StackOfDouble stack, Cases cases)
This routine is called when an ExpressionCommand object is encountered during the evaluation of an ExpressionProgram. The stack may contain results of previous commands in the program. For example, for a ConditionalExpression, it contains the value of the boolean condition, and for a user-defined function, it contains the values of the arguments of the function. When apply() is called, the ExpressionCommand should perform any stack operations that are necessary to evaluate itself. For example, a user-defined function would remove its arguments from the stack and replace them with the value of the function at those arguments. If cases is non-null, then any case information generated during the evaluation should be recorded in cases. (See the Cases class for more information.)

Parameters:
  `stack` - contains results of previous commands in the program.
  `cases` - if non-null, any case information generated during evaluation should be recorded here.

### compileDerivative

void compileDerivative(ExpressionProgram prog, int myIndex, ExpressionProgram deriv, Variable wrt)
The ExpressionCommand occurs in the program prog at the index indicated by myIndex. Add commands to deriv that will evaluate the derivative of this command with respect to the variable wrt. prog and myIndex are provided so that this routine will have access to any commands in prog that generate data used by this command (for example, the commands that evaluate the arguments of a user-defined function).

Parameters:
  `prog` - program in which ExpressionCommand occurs.
  `myIndex` - point at which ExpressionCommand occurs in the ExpressionProgram.
  `deriv` - the derivative of the ExpressionPorgram prog, which is in the process of being computed. Commands should added to deriv that will compute the derivative of this ExpressionCommand.
  `wrt` - commands are added to deriv with respect to this Variable.

### extent

int extent(ExpressionProgram prog, int myIndex)
The ExpressionCommand occurs in the program prog at the index indicated by myIndex. Return the total number of indices in prog occupied by this command and the commands that generate data used by this command.

Parameters:
  `prog` - ExpressionProgram in which this ExpressionCommand occurs.
  `myIndex` - index at which ExpressionCommand occurs in prog.
Returns:
  total number of indices in prog occupied by this command and commands that generate data used by this command.

### dependsOn

boolean dependsOn(Variable x)
Return true if this command depends on the value of x, false otherwise. That is, when apply() is called, can the result depend on the value of x?

### appendOutputString

void appendOutputString(ExpressionProgram prog, int myIndex, StringBuffer buffer)
The ExpressionCommand occurs in the program prog at the index indicated by myIndex. Add a print string representation of the sub-expression represented by this command (including any previous commands in the program that generate data used by this command).