net.sf.saxon.expr

## Class ArithmeticExpression

- java.lang.Object
- - net.sf.saxon.expr.Expression
  - - net.sf.saxon.expr.BinaryExpression
    - - net.sf.saxon.expr.ArithmeticExpression

- All Implemented Interfaces:
    Serializable, SourceLocator, LocationProvider, SaxonLocator, InstructionInfo, Locator

      public class ArithmeticExpression
      extends BinaryExpression

  Arithmetic Expression: an expression using one of the operators plus, minus, multiply, div, idiv, mod. Note that this code does not handle backwards compatibility mode: see `ArithmeticExpression10`
  See Also:
    Serialized Form

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `protected boolean` | `simplified`

    - ### Fields inherited from class net.sf.saxon.expr.BinaryExpression

      `operand0, operand1, operator`

    - ### Fields inherited from class net.sf.saxon.expr.Expression

      `EFFECTIVE_BOOLEAN_VALUE, EVALUATE_METHOD, EVENT_FEED_METHOD, INHERITED_CONTEXT, INSPECTION_CONTEXT, ITEM_FEED_METHOD, ITERATE_METHOD, locationId, MAX_SEQUENCE_LENGTH, MAX_STRING_LENGTH, NAVIGATION_CONTEXT, NODE_VALUE_CONTEXT, PROCESS_METHOD, PUSH_SELECTION, staticProperties, UNBOUNDED_LOWER, UNBOUNDED_UPPER, W3C_CONSUMING, W3C_FREE_RANGING, W3C_GROUP_CONSUMING, W3C_MOTIONLESS, WATCH_METHOD`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `ArithmeticExpression(Expression p0, int operator, Expression p1)` Create an arithmetic expression

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `static AtomicValue` | `compute(AtomicValue value0, int operator, AtomicValue value1, XPathContext context)` Static method to apply arithmetic to two values
    `Expression` | `copy()` Copy an expression.
    `AtomicValue` | `evaluateItem(XPathContext context)` Evaluate the expression.
    `Calculator` | `getCalculator()` Get the calculator allocated to evaluate this expression
    `ExpressionCompiler` | `getExpressionCompiler()` Return the compiler of the Arithmetic expression
    `String` | `getExpressionName()` Get a name identifying the kind of expression, in terms meaningful to a user.
    `IntegerValue[]` | `getIntegerBounds()` For an expression that returns an integer or a sequence of integers, get a lower and upper bound on the values of the integers that may be returned, from static analysis.
    `ItemType` | `getItemType(TypeHierarchy th)` Determine the data type of the expression, insofar as this is known statically
    `static int` | `mapOpCode(int op)` Map operator codes from those in the Token class to those in the Calculator class
    `Expression` | `simplify(ExpressionVisitor visitor)` Simplify an expression
    `Expression` | `typeCheck(ExpressionVisitor visitor, ExpressionVisitor.ContextItemType contextItemType)` Type-check the expression statically.

    - ### Methods inherited from class net.sf.saxon.expr.BinaryExpression

      `computeCardinality, computeSpecialProperties, displayOperator, equals, explain, explainExtraAttributes, getArguments, getOperands, getOperator, hashCode, isAssociative, isCommutative, isInverse, iterateSubExpressionInfo, iterateSubExpressions, optimize, promote, replaceSubExpression, setFlattened, toString`

    - ### Methods inherited from class net.sf.saxon.expr.Expression

      `addToPathMap, adoptChildExpression, checkForUpdatingSubexpressions, checkPermittedContents, computeDependencies, computeStaticProperties, doPromotion, dynamicError, effectiveBooleanValue, evaluateAsString, evaluatePendingUpdates, explain, getCardinality, getColumnNumber, getColumnNumber, getConstructType, getContainer, getDependencies, getEvaluationMethod, getExecutable, getHostLanguage, getImplementationMethod, getIntrinsicDependencies, getLineNumber, getLineNumber, getLocationId, getLocationProvider, getObjectName, getProperties, getProperty, getPublicId, getSlotsUsed, getSpecialProperties, getStreamability, getStreamingAdjunct, getSystemId, getSystemId, hasVariableBinding, implementsStaticTypeCheck, isSubtreeExpression, isUpdatingExpression, isVacuousExpression, iterate, iterateEvents, markTailFunctionCalls, process, resetLocalStaticProperties, setContainer, setEvaluationMethod, setFiltered, setLocationId, staticTypeCheck, suppressValidation, toPattern, toStreamingPattern, typeError`

    - ### Methods inherited from class java.lang.Object

      `clone, finalize, getClass, notify, notifyAll, wait, wait, wait`

- - ### Field Detail

    - #### simplified

          protected boolean simplified

  - ### Constructor Detail

    - #### ArithmeticExpression

          public ArithmeticExpression(Expression p0,
                              int operator,
                              Expression p1)

      Create an arithmetic expression
      Parameters:
        `p0` - the first operand
        `operator` - the operator, for example `Token.PLUS`
        `p1` - the second operand

  - ### Method Detail

    - #### getExpressionName

          public String getExpressionName()

      Get a name identifying the kind of expression, in terms meaningful to a user.
      Overrides:
        `getExpressionName` in class `Expression`
      Returns:
        a name identifying the kind of expression, in terms meaningful to a user. The name will always be in the form of a lexical XML QName, and should match the name used in explain() output displaying the expression.

    - #### simplify

          public Expression simplify(ExpressionVisitor visitor)
                              throws XPathException

      Description copied from class: `BinaryExpression`
      Simplify an expression
      Overrides:
        `simplify` in class `BinaryExpression`
      Parameters:
        `visitor` - an expression visitor
      Returns:
        the simplified expression
      Throws:
        `XPathException` - if an error is discovered during expression rewriting

    - #### getCalculator

          public Calculator getCalculator()

      Get the calculator allocated to evaluate this expression
      Returns:
        the calculator, a helper object that does the actual calculation

    - #### typeCheck

          public Expression typeCheck(ExpressionVisitor visitor,
                             ExpressionVisitor.ContextItemType contextItemType)
                               throws XPathException

      Type-check the expression statically. We try to work out which particular arithmetic function to use if the types of operands are known an compile time.
      Overrides:
        `typeCheck` in class `BinaryExpression`
      Parameters:
        `visitor` - an expression visitor
        `contextItemType` - the static type of "." at the point where this expression is invoked. The parameter is set to null if it is known statically that the context item will be undefined. If the type of the context item is not known statically, the argument is set to `Type.ITEM_TYPE`
      Returns:
        the original expression, rewritten to perform necessary run-time type checks, and to perform other type-related optimizations
      Throws:
        `XPathException` - if an error is discovered during this phase (typically a type error)

    - #### getIntegerBounds

          public IntegerValue[] getIntegerBounds()

      For an expression that returns an integer or a sequence of integers, get a lower and upper bound on the values of the integers that may be returned, from static analysis. The default implementation returns null, meaning "unknown" or "not applicable". Other implementations return an array of two IntegerValue objects, representing the lower and upper bounds respectively. The values UNBOUNDED_LOWER and UNBOUNDED_UPPER are used by convention to indicate that the value may be arbitrarily large. The values MAX_STRING_LENGTH and MAX_SEQUENCE_LENGTH are used to indicate values limited by the size of a string or the size of a sequence.
      Overrides:
        `getIntegerBounds` in class `Expression`
      Returns:
        the lower and upper bounds of integer values in the result, or null to indicate unknown or not applicable.

    - #### copy

          public Expression copy()

      Copy an expression. This makes a deep copy.
      Specified by:
        `copy` in class `Expression`
      Returns:
        the copy of the original expression

    - #### compute

          public static AtomicValue compute(AtomicValue value0,
                            int operator,
                            AtomicValue value1,
                            XPathContext context)
                                     throws XPathException

      Static method to apply arithmetic to two values
      Parameters:
        `value0` - the first value
        `operator` - the operator as denoted in the Calculator class, for example `Calculator.PLUS`
        `value1` - the second value
        `context` - the XPath dynamic evaluation context
      Returns:
        the result of the arithmetic operation
      Throws:
        `XPathException`

    - #### mapOpCode

          public static int mapOpCode(int op)

      Map operator codes from those in the Token class to those in the Calculator class
      Parameters:
        `op` - an operator denoted by a constant in the `Token` class, for example `Token.PLUS`
      Returns:
        an operator denoted by a constant defined in the `Calculator` class, for example `Calculator.PLUS`

    - #### getItemType

          public ItemType getItemType(TypeHierarchy th)

      Determine the data type of the expression, insofar as this is known statically
      Specified by:
        `getItemType` in class `Expression`
      Parameters:
        `th` - the type hierarchy cache
      Returns:
        the atomic type of the result of this arithmetic expression

    - #### evaluateItem

          public AtomicValue evaluateItem(XPathContext context)
                                   throws XPathException

      Evaluate the expression.
      Overrides:
        `evaluateItem` in class `Expression`
      Parameters:
        `context` - The context in which the expression is to be evaluated
      Returns:
        the node or atomic value that results from evaluating the expression; or null to indicate that the result is an empty sequence
      Throws:
        `XPathException` - if any dynamic error occurs evaluating the expression

    - #### getExpressionCompiler

          public ExpressionCompiler getExpressionCompiler()

      Return the compiler of the Arithmetic expression
      Overrides:
        `getExpressionCompiler` in class `Expression`
      Returns:
        the relevant ExpressionCompiler

Copyright (c) 2004-2013 Saxonica Limited. All rights reserved.