Package 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
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:
-
Field Summary
FieldsFields 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
ConstructorsConstructorDescriptionArithmeticExpression
(Expression p0, int operator, Expression p1) Create an arithmetic expression -
Method Summary
Modifier and TypeMethodDescriptionstatic AtomicValue
compute
(AtomicValue value0, int operator, AtomicValue value1, XPathContext context) Static method to apply arithmetic to two valuescopy()
Copy an expression.evaluateItem
(XPathContext context) Evaluate the expression.Get the calculator allocated to evaluate this expressionGet a name identifying the kind of expression, in terms meaningful to a user.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.Determine the data type of the expression, insofar as this is known staticallystatic int
mapOpCode
(int op) Map operator codes from those in the Token class to those in the Calculator classsimplify
(ExpressionVisitor visitor) Simplify an expressiontypeCheck
(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
-
Field Details
-
simplified
protected boolean simplified
-
-
Constructor Details
-
ArithmeticExpression
Create an arithmetic expression- Parameters:
p0
- the first operandoperator
- the operator, for exampleToken.PLUS
p1
- the second operand
-
-
Method Details
-
getExpressionName
Get a name identifying the kind of expression, in terms meaningful to a user.- Overrides:
getExpressionName
in classExpression
- 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
Description copied from class:BinaryExpression
Simplify an expression- Overrides:
simplify
in classBinaryExpression
- Parameters:
visitor
- an expression visitor- Returns:
- the simplified expression
- Throws:
XPathException
- if an error is discovered during expression rewriting
-
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 classBinaryExpression
- Parameters:
visitor
- an expression visitorcontextItemType
- 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 toType.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
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 classExpression
- Returns:
- the lower and upper bounds of integer values in the result, or null to indicate unknown or not applicable.
-
copy
Copy an expression. This makes a deep copy.- Specified by:
copy
in classExpression
- 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 valueoperator
- the operator as denoted in the Calculator class, for exampleCalculator.PLUS
value1
- the second valuecontext
- 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 theToken
class, for exampleToken.PLUS
- Returns:
- an operator denoted by a constant defined in the
Calculator
class, for exampleCalculator.PLUS
-
getItemType
Determine the data type of the expression, insofar as this is known statically- Specified by:
getItemType
in classExpression
- Parameters:
th
- the type hierarchy cache- Returns:
- the atomic type of the result of this arithmetic expression
-
evaluateItem
Evaluate the expression.- Overrides:
evaluateItem
in classExpression
- 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
-