## 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, EvaluableItem, SequenceIterable, 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
`protected boolean` `simplified`

Fields inherited from class net.sf.saxon.expr.BinaryExpression
`operand0, operand1, operator`

Fields inherited from class net.sf.saxon.expr.Expression
`EVALUATE_METHOD, EVENT_FEED_METHOD, ITEM_FEED_METHOD, ITERATE_METHOD, locationId, PROCESS_METHOD, PUSH_SELECTION, staticProperties, WATCH_METHOD`

Constructor Summary
`ArithmeticExpression(Expression p0, int operator, Expression p1)` Create an arithmetic expression

Method Summary
`static AtomicValue` `compute(AtomicValue value0, int operator, AtomicValue value1, XPathContext context)` Static method to apply arithmetic to two values
`Expression` `copy()` Copy an expression.
`Item` `evaluateItem(XPathContext context)` Evaluate the expression.
`Calculator` `getCalculator()` Get the calculator allocated to evaluate this expression
`String` `getExpressionName()` Get a name identifying the kind of expression, in terms meaningful to a user.
`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, ItemType contextItemType)` Type-check the expression statically.

Methods inherited from class net.sf.saxon.expr.BinaryExpression
`computeCardinality, computeSpecialProperties, displayOperator, equals, explain, explainExtraAttributes, getOperands, getOperator, hashCode, isAssociative, isCommutative, isInverse, 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, getSystemId, getSystemId, hasLoopingSubexpression, implementsStaticTypeCheck, isSubtreeExpression, isUpdatingExpression, isVacuousExpression, iterate, iterateEvents, iterateSameFocusSubExpressions, markTailFunctionCalls, process, resetLocalStaticProperties, setContainer, setEvaluationMethod, setFiltered, setLocationId, staticTypeCheck, suppressValidation, 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,
                                ItemType 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)

### 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 Item evaluateItem(XPathContext context)
                      throws XPathException

  Evaluate the expression.

  Specified by:
    `evaluateItem` in interface `EvaluableItem`
  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

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