Class PostfixMathCommand

java.lang.Object
com.singularsys.jep.functions.PostfixMathCommand
All Implemented Interfaces:
PostfixMathCommandI, Serializable
Direct Known Subclasses:
AbstractInc, ArrayFunctionBase, Assign, BinaryFunction, BugsTest.StackMessingFunc, Case, If, JepTest.AddFractionsStack, JepTest.Diff, JepTest.PiFun, JepTest.Product, JepTest.Square, LazyLogical, List, MacroFunction, NaryBinaryFunction, NaryFunction, NullaryFunction, NullWrappedLazyLogical, NullWrappedPfmc, OpEquals, Sum, Switch, SwitchDefault, TernaryConditional, UnaryFunction

public abstract class PostfixMathCommand extends Object implements PostfixMathCommandI
Function classes extend this class. It is an implementation of the PostfixMathCommandI interface.

It includes a numberOfParameters member, that is checked when parsing the expression. This member should be initialized to an appropriate value for all classes extending this class. If an arbitrary number of parameters should be allowed, initialize this member to -1.

The asString(int, java.lang.Object) and similar method are convenience methods for use by subclasses to ease conversion of arguments to particular types.

See Also:
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    protected int
    Number of parameters to be used for the next run() invocation.
     
    static final Double
    Double.valueOf(Double.NaN)
    protected int
    Number of parameters a function requires.
  • Constructor Summary

    Constructors
    Constructor
    Description
    Creates a new PostfixMathCommand class.
    PostfixMathCommand(int nParam)
    Creates a new PostfixMathCommand class.
  • Method Summary

    Modifier and Type
    Method
    Description
    protected Object[]
    Pop the arguments off the stack and put them in an array
    protected boolean
    asBool(int pos, Object value, boolean allowNumbers)
    Attempt to convert argument to a boolean
    protected double
    asDouble(int position, Object value)
    Converts an argument to a double, with error checking, floating point values will be rounded.
    protected int
    asInt(int position, Object value)
    Converts an argument to an int, floating point values will be rounded.
    protected long
    asLong(int position, Object value)
    Converts an argument to a long, with error checking, floating point values will be rounded.
    protected int
    asStrictInt(int position, Object value)
    Converts an argument to an int, floating point values must represent integers.
    protected String
    asString(int position, Object value)
    Converts an argument to a string, with error checking.
    boolean
    Checks the number of parameters of the function.
    The name of the function used in error messages
    int
    Return the required number of parameters.
    void
    Throws an exception because this method should never be called under normal circumstances.
    void
    Sets the number of current number of parameters used in the next call of run().
    void
    Sets the name of the function used for error messages
     
    protected String
    toString(Object... args)
    Return a string representation of the function with its arguments.

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
  • Field Details

    • NaN

      public static final Double NaN
      Double.valueOf(Double.NaN)
    • numberOfParameters

      protected int numberOfParameters
      Number of parameters a function requires. Initialize this value to -1 if any number of parameters should be allowed.
    • curNumberOfParameters

      protected transient int curNumberOfParameters
      Number of parameters to be used for the next run() invocation. Applies only if the required number of parameters is variable (numberOfParameters = -1).
    • name

      public String name
  • Constructor Details

    • PostfixMathCommand

      public PostfixMathCommand()
      Creates a new PostfixMathCommand class.
    • PostfixMathCommand

      public PostfixMathCommand(int nParam)
      Creates a new PostfixMathCommand class.
      Parameters:
      nParam - number of parameters for the function
  • Method Details

    • getName

      public String getName()
      Description copied from interface: PostfixMathCommandI
      The name of the function used in error messages
      Specified by:
      getName in interface PostfixMathCommandI
      Returns:
      the function name
    • setName

      public void setName(String name)
      Description copied from interface: PostfixMathCommandI
      Sets the name of the function used for error messages
      Specified by:
      setName in interface PostfixMathCommandI
      Parameters:
      name - the function name
    • getNumberOfParameters

      public int getNumberOfParameters()
      Return the required number of parameters.
      Specified by:
      getNumberOfParameters in interface PostfixMathCommandI
      Returns:
      allowable number of parameters, -1 if a variable number is allowed
    • setCurNumberOfParameters

      public void setCurNumberOfParameters(int n)
      Sets the number of current number of parameters used in the next call of run(). This method is only called when the reqNumberOfParameters is -1.
      Specified by:
      setCurNumberOfParameters in interface PostfixMathCommandI
      Parameters:
      n - number of parameter for next call of function
    • checkNumberOfParameters

      public boolean checkNumberOfParameters(int n)
      Checks the number of parameters of the function. Functions which set numberOfParameter=-1 should overload this method
      Specified by:
      checkNumberOfParameters in interface PostfixMathCommandI
      Parameters:
      n - number of parameters function will be called with.
      Returns:
      false if an illegal number of parameters is supplied, true otherwise.
    • run

      public void run(Stack<Object> s) throws EvaluationException
      Throws an exception because this method should never be called under normal circumstances. Each function should use its own run() method for evaluating the function. This includes popping off the parameters from the stack, and pushing the result back on the stack.
      Specified by:
      run in interface PostfixMathCommandI
      Parameters:
      s - arguments for function
      Throws:
      EvaluationException - if function cannot be evaluated
    • asString

      protected String asString(int position, Object value) throws IllegalParameterException
      Converts an argument to a string, with error checking.
      Parameters:
      position - argument number (starting from 0) used in error reporting
      value - the argument to convert
      Returns:
      value cast as a String
      Throws:
      IllegalParameterException - if the argument cannot be cast to a String
    • asInt

      protected int asInt(int position, Object value) throws IllegalParameterException
      Converts an argument to an int, floating point values will be rounded.
      Parameters:
      position - argument number (starting from 0) used in error reporting
      value - the argument to convert
      Returns:
      value as a int
      Throws:
      IllegalParameterException - if the argument cannot be cast to a Number
    • asStrictInt

      protected int asStrictInt(int position, Object value) throws IllegalParameterException
      Converts an argument to an int, floating point values must represent integers.
      Parameters:
      position - argument number (starting from 0) used in error reporting
      value - the argument to convert
      Returns:
      value as a int
      Throws:
      IllegalParameterException - if the argument cannot be cast to a Number or intValue() != doubleValue()
    • asLong

      protected long asLong(int position, Object value) throws EvaluationException
      Converts an argument to a long, with error checking, floating point values will be rounded.
      Parameters:
      position - argument number (starting from 0) used in error reporting
      value - the argument to convert
      Returns:
      value as a long
      Throws:
      IllegalParameterException - if the argument cannot be cast to a Number
      EvaluationException
    • asDouble

      protected double asDouble(int position, Object value) throws EvaluationException
      Converts an argument to a double, with error checking, floating point values will be rounded.
      Parameters:
      position - argument number (starting from 0) used in error reporting
      value - the argument to convert
      Returns:
      value as a long
      Throws:
      IllegalParameterException - if the argument cannot be cast to a Number
      EvaluationException
    • asBool

      protected boolean asBool(int pos, Object value, boolean allowNumbers) throws EvaluationException
      Attempt to convert argument to a boolean
      Parameters:
      pos - position in argument list
      value - actual value of object
      allowNumbers - if true non-zero numbers are true and zero numbers are false
      Returns:
      value as a boolean
      Throws:
      EvaluationException - if value cannot be converted to a boolean, strings, fractional numbers
    • asArray

      protected Object[] asArray(Stack<Object> stack)
      Pop the arguments off the stack and put them in an array
      Parameters:
      stack - input
      Returns:
      an array of the arguments of the function in correct order
    • toString

      protected String toString(Object... args)
      Return a string representation of the function with its arguments.
      Parameters:
      args - the arguments to the function
      Returns:
      string representation of the function with its arguments
    • toString

      public String toString()
      Overrides:
      toString in class Object