net.sourceforge.webcompmath.data
Class ConditionalExpression

java.lang.Object
  extended by net.sourceforge.webcompmath.data.ConditionalExpression
All Implemented Interfaces:
java.io.Serializable, ExpressionCommand

public class ConditionalExpression
extends java.lang.Object
implements ExpressionCommand

A "conditional expression" is an expression using the ? operator. An example is "(x > 0)? x : -x" or "x <>3 ? 1 / (x - 3)". Note that the second case, which follows the ":", is optional. If not present, the expression has the value Double.NaN when the boolean condition evaluates to false. A ConditionalExpression object is generated by a parser when it encounters a "?" operator in the string it is parsing (provided the BOOLEANS option is turned on in that parser).

A ConditionalExpression object holds the two expressions that are the cases in a conditional expression. Note that the boolean condition is NOT stored in the ConditionalExpression object; it is part of the ExpressionProgram for the expression in which the conditional expression occurs. A ConditionalExpression is an ExpressionCommand, meaning that it can occur in an ExpressionProgram. When the apply() method in this class is called, the boolean condition has already been evaluated, and the result is on the top of the stack. The ConditionalExpression will look at this result and replace it with the value of one of the two expressions that it contains.

It is unlikely that there will be any reason for anyone to use or understand this class, except possibly as an example of an ExpressionCommand.

See Also:
Serialized Form

Constructor Summary
ConditionalExpression(ExpressionProgram trueCase, ExpressionProgram falseCase)
          Create a ConditionalExpression object containing the two given expressions.
 
Method Summary
 void appendOutputString(ExpressionProgram prog, int myIndex, java.lang.StringBuffer buffer)
          Append the string representation of the expression (including the boolean condition) to the buffer.
 void apply(StackOfDouble stack, Cases cases)
          Apply this ConditionalExpression to the stack.
 void compileDerivative(ExpressionProgram prog, int myIndex, ExpressionProgram deriv, Variable wrt)
          Add commands to deriv that evaluate the derivative of this conditional expression with respect to the variable wrt.
 boolean dependsOn(Variable x)
          Returns true if x occurs in either the trueCase or the falseCase expression.
 int extent(ExpressionProgram prog, int myIndex)
          Assume that this ConditionalExpression object occurs in prog at index myIndex.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ConditionalExpression

public ConditionalExpression(ExpressionProgram trueCase,
                             ExpressionProgram falseCase)
Create a ConditionalExpression object containing the two given expressions. Parameter trueCase must not be null, but falseCase can be null.

Parameters:
trueCase - the true case to use
falseCase - the false case to use, or null
Method Detail

apply

public void apply(StackOfDouble stack,
                  Cases cases)
Apply this ConditionalExpression to the stack. (Get the top item from the stack. If it is non-zero (representing a boolean value of true), evaluate trueCase and put it's value on the stack. Otherwise, evaluate falseCase and put its value on the stack. If cases is non-null, record case values for the boolean condition and for the expression that is evaluated.)

Specified by:
apply in interface ExpressionCommand
Parameters:
stack - the stack to use
cases - the cases to use

compileDerivative

public void compileDerivative(ExpressionProgram prog,
                              int myIndex,
                              ExpressionProgram deriv,
                              Variable wrt)
Add commands to deriv that evaluate the derivative of this conditional expression with respect to the variable wrt. Assume that the ConditionalExpression Object occurs in the program prog at index myIndex. (The derivative of a conditional expression is another conditional expression. The boolean test for the derivative is the same as the test for this expression, so copy that test onto deriv. Than add a new ConditionalExpression object to deriv whose trueCase is the derivative of this.trueCase and whose falseCase is the derivative of this.falseCase.)

Specified by:
compileDerivative in interface ExpressionCommand
Parameters:
prog - program containing the cond. expr.
myIndex - location of the cond. expr.
deriv - derivative expression program
wrt - variable with respect to

extent

public int extent(ExpressionProgram prog,
                  int myIndex)
Assume that this ConditionalExpression object occurs in prog at index myIndex. Compute the total number of commands in prog used by the conditional expression, including the boolean test, which occurs in prog at position myIndex-1. (The number of commands in prog used by the conditional expression is 1 (for the ConditionalExpression object itself) plus the number of commands in the boolean condition.)

Specified by:
extent in interface ExpressionCommand
Parameters:
prog - program containing the cond. expr.
myIndex - location of the cond. expr.
Returns:
number of commands

dependsOn

public boolean dependsOn(Variable x)
Returns true if x occurs in either the trueCase or the falseCase expression.

Specified by:
dependsOn in interface ExpressionCommand
Parameters:
x - variable to check for
Returns:
true or false

appendOutputString

public void appendOutputString(ExpressionProgram prog,
                               int myIndex,
                               java.lang.StringBuffer buffer)
Append the string representation of the expression (including the boolean condition) to the buffer. Assume that this ConditionalExpression occurs as a command in prog at index myIndex (so the boolean condition starts at index myIndex-1).

Specified by:
appendOutputString in interface ExpressionCommand
Parameters:
prog - program containing the cond. expr.
myIndex - location of the cond. expr.
buffer - string to append