net.sf.saxon.expr
Class ArithmeticExpression

java.lang.Object
  extended by net.sf.saxon.expr.Expression
      extended by net.sf.saxon.expr.BinaryExpression
          extended by 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
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, ITEM_FEED_METHOD, ITERATE_METHOD, locationId, MAX_SEQUENCE_LENGTH, MAX_STRING_LENGTH, PROCESS_METHOD, PUSH_SELECTION, staticProperties, UNBOUNDED_LOWER, UNBOUNDED_UPPER, 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.
 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, 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, hasVariableBinding, 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,
                            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 Item 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


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