Package net.sf.saxon.expr
Class Calculator
- java.lang.Object
-
- net.sf.saxon.expr.Calculator
-
- Direct Known Subclasses:
Calculator.AnyDivAny,Calculator.AnyIdivAny,Calculator.AnyMinusAny,Calculator.AnyModAny,Calculator.AnyPlusAny,Calculator.AnyTimesAny,Calculator.DecimalDivDecimal,Calculator.DecimalIdivDecimal,Calculator.DecimalMinusDecimal,Calculator.DecimalModDecimal,Calculator.DecimalPlusDecimal,Calculator.DecimalTimesDecimal,Calculator.DoubleDivDouble,Calculator.DoubleMinusDouble,Calculator.DoubleModDouble,Calculator.DoublePlusDouble,Calculator.DoubleTimesDouble,Calculator.FloatDivFloat,Calculator.FloatIdivFloat,Calculator.FloatMinusFloat,Calculator.FloatModFloat,Calculator.FloatPlusFloat,Calculator.FloatTimesFloat,Calculator.IntegerDivInteger,Calculator.IntegerIdivInteger,Calculator.IntegerMinusInteger,Calculator.IntegerModInteger,Calculator.IntegerPlusInteger,Calculator.IntegerTimesInteger
public abstract class Calculator extends java.lang.ObjectThis class evaluates arithmetic expressions; it acts as a helper class to the ArithmeticExpression class. There are many subclasses for the different kinds of arithmetic expression, and static methods that allow the right subclass to be selected, either at compile time or at run time.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static classCalculator.AnyDivAnyArithmetic: anyAtomicType div AnyAtomicTypestatic classCalculator.AnyIdivAnyArithmetic: anyAtomicType idiv AnyAtomicTypestatic classCalculator.AnyMinusAnyArithmetic: anyAtomicType - AnyAtomicTypestatic classCalculator.AnyModAnyArithmetic: anyAtomicType mod AnyAtomicTypestatic classCalculator.AnyPlusAnyArithmetic: anyAtomicType + AnyAtomicTypestatic classCalculator.AnyTimesAnyArithmetic: anyAtomicType * AnyAtomicTypestatic classCalculator.DecimalDivDecimalArithmetic: decimal div decimal (including types that promote to decimal, that is, integer)static classCalculator.DecimalIdivDecimalArithmetic: decimal idiv decimal (including types that promote to decimal, that is, integer)static classCalculator.DecimalMinusDecimalArithmetic: decimal - decimal (including types that promote to decimal, that is, integer)static classCalculator.DecimalModDecimalArithmetic: decimal mod decimal (including types that promote to decimal, that is, integer)static classCalculator.DecimalPlusDecimalArithmetic: decimal + decimal (including types that promote to decimal, that is, integer)static classCalculator.DecimalTimesDecimalArithmetic: decimal * decimal (including types that promote to decimal, that is, integer)static classCalculator.DoubleDivDoubleArithmetic: double div double (including types that promote to double)static classCalculator.DoubleMinusDoubleArithmetic: double - double (including types that promote to double)static classCalculator.DoubleModDoubleArithmetic: double mod double (including types that promote to double)static classCalculator.DoublePlusDoubleArithmetic: double + double (including types that promote to double)static classCalculator.DoubleTimesDoubleArithmetic: double * double (including types that promote to double)static classCalculator.FloatDivFloatArithmetic: float div float (including types that promote to float)static classCalculator.FloatIdivFloatArithmetic: float idiv float (including types that promote to float)static classCalculator.FloatMinusFloatArithmetic: float - float (including types that promote to float)static classCalculator.FloatModFloatArithmetic: float mod float (including types that promote to float)static classCalculator.FloatPlusFloatArithmetic: float + float (including types that promote to float)static classCalculator.FloatTimesFloatArithmetic: float * float (including types that promote to float)static classCalculator.IntegerDivIntegerArithmetic: integer div integerstatic classCalculator.IntegerIdivIntegerArithmetic: integer idiv integerstatic classCalculator.IntegerMinusIntegerArithmetic: integer - integerstatic classCalculator.IntegerModIntegerArithmetic: integer mod integerstatic classCalculator.IntegerPlusIntegerArithmetic: integer + integerstatic classCalculator.IntegerTimesIntegerArithmetic: integer * integer
-
Field Summary
Fields Modifier and Type Field Description static Calculator[]ANY_ANYCalculators used for the six operators when the static type information does not allow a more specific calculator to be chosenstatic Calculator[]DATETIME_DATETIMECalculators used when both operands are xs:dateTime, xs:date, or xs:timestatic Calculator[]DATETIME_DURATIONCalculators used when the first operand is xs:dateTime, xs:date, or xs:time, and the second is a durationstatic Calculator[]DECIMAL_DECIMALstatic Calculator[]DECIMAL_DOUBLECalculators used when the first operand is a decimalstatic Calculator[]DECIMAL_FLOATstatic Calculator[]DECIMAL_INTEGERstatic intDIVstatic Calculator[]DOUBLE_DECIMALstatic Calculator[]DOUBLE_DOUBLECalculators used when the first operand is a doublestatic Calculator[]DOUBLE_FLOATstatic Calculator[]DOUBLE_INTEGERstatic Calculator[]DURATION_DATETIMECalculators used when the second operand is xs:dateTime, xs:date, or xs:time, and the first is a durationstatic Calculator[]DURATION_DURATIONCalculators used when the both operands are durationsstatic Calculator[]DURATION_NUMERICCalculators used when the first operand is a duration and the second is numericstatic Calculator[]FLOAT_DECIMALstatic Calculator[]FLOAT_DOUBLECalculators used when the first operand is a floatstatic Calculator[]FLOAT_FLOATstatic Calculator[]FLOAT_INTEGERstatic intIDIVstatic Calculator[]INTEGER_DECIMALstatic Calculator[]INTEGER_DOUBLECalculators used when the first operand is an integerstatic Calculator[]INTEGER_FLOATstatic Calculator[]INTEGER_INTEGERstatic intMINUSstatic intMODstatic Calculator[]NUMERIC_DURATIONCalculators used when the second operand is a duration and the first is numericstatic intPLUSstatic intTIMES
-
Constructor Summary
Constructors Constructor Description Calculator()
-
Method Summary
All Methods Static Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description java.lang.Stringcode()Get a short code to identify the calculator in expression export filesabstract AtomicValuecompute(AtomicValue a, AtomicValue b, XPathContext c)Perform an arithmetic operationstatic BigDecimalValuedecimalDivide(NumericValue a, NumericValue b)static CalculatorgetCalculator(int typeA, int typeB, int operator, boolean mustResolve)Factory method to get a calculator for a given combination of typesstatic java.lang.StringgetCalculatorSetName(int typeA, int typeB)Get the name of the calculator set for a given combination of typesabstract AtomicTypegetResultType(AtomicType typeA, AtomicType typeB)Get the type of the result of the calculator, given arguments types typeA and typeBstatic intgetTokenFromOperator(int operator)Get the token number corresponding to the operator numberstatic intoperatorFromCode(char code)static CalculatorreconstructCalculator(java.lang.String code)Get a calculator given the short code used in the exported expression tree
-
-
-
Field Detail
-
PLUS
public static final int PLUS
- See Also:
- Constant Field Values
-
MINUS
public static final int MINUS
- See Also:
- Constant Field Values
-
TIMES
public static final int TIMES
- See Also:
- Constant Field Values
-
DIV
public static final int DIV
- See Also:
- Constant Field Values
-
MOD
public static final int MOD
- See Also:
- Constant Field Values
-
IDIV
public static final int IDIV
- See Also:
- Constant Field Values
-
ANY_ANY
public static final Calculator[] ANY_ANY
Calculators used for the six operators when the static type information does not allow a more specific calculator to be chosen
-
DOUBLE_DOUBLE
public static final Calculator[] DOUBLE_DOUBLE
Calculators used when the first operand is a double
-
DOUBLE_FLOAT
public static final Calculator[] DOUBLE_FLOAT
-
DOUBLE_DECIMAL
public static final Calculator[] DOUBLE_DECIMAL
-
DOUBLE_INTEGER
public static final Calculator[] DOUBLE_INTEGER
-
FLOAT_DOUBLE
public static final Calculator[] FLOAT_DOUBLE
Calculators used when the first operand is a float
-
FLOAT_FLOAT
public static final Calculator[] FLOAT_FLOAT
-
FLOAT_DECIMAL
public static final Calculator[] FLOAT_DECIMAL
-
FLOAT_INTEGER
public static final Calculator[] FLOAT_INTEGER
-
DECIMAL_DOUBLE
public static final Calculator[] DECIMAL_DOUBLE
Calculators used when the first operand is a decimal
-
DECIMAL_FLOAT
public static final Calculator[] DECIMAL_FLOAT
-
DECIMAL_DECIMAL
public static final Calculator[] DECIMAL_DECIMAL
-
DECIMAL_INTEGER
public static final Calculator[] DECIMAL_INTEGER
-
INTEGER_DOUBLE
public static final Calculator[] INTEGER_DOUBLE
Calculators used when the first operand is an integer
-
INTEGER_FLOAT
public static final Calculator[] INTEGER_FLOAT
-
INTEGER_DECIMAL
public static final Calculator[] INTEGER_DECIMAL
-
INTEGER_INTEGER
public static final Calculator[] INTEGER_INTEGER
-
DATETIME_DATETIME
public static final Calculator[] DATETIME_DATETIME
Calculators used when both operands are xs:dateTime, xs:date, or xs:time
-
DATETIME_DURATION
public static final Calculator[] DATETIME_DURATION
Calculators used when the first operand is xs:dateTime, xs:date, or xs:time, and the second is a duration
-
DURATION_DATETIME
public static final Calculator[] DURATION_DATETIME
Calculators used when the second operand is xs:dateTime, xs:date, or xs:time, and the first is a duration
-
DURATION_DURATION
public static final Calculator[] DURATION_DURATION
Calculators used when the both operands are durations
-
DURATION_NUMERIC
public static final Calculator[] DURATION_NUMERIC
Calculators used when the first operand is a duration and the second is numeric
-
NUMERIC_DURATION
public static final Calculator[] NUMERIC_DURATION
Calculators used when the second operand is a duration and the first is numeric
-
-
Method Detail
-
getTokenFromOperator
public static int getTokenFromOperator(int operator)
Get the token number corresponding to the operator number- Parameters:
operator- the Calculator operator code- Returns:
- the corresponding token
-
code
public java.lang.String code()
Get a short code to identify the calculator in expression export files- Returns:
- a short identifying code that can be used to reconstruct the calculator
-
getCalculator
public static Calculator getCalculator(int typeA, int typeB, int operator, boolean mustResolve)
Factory method to get a calculator for a given combination of types- Parameters:
typeA- fingerprint of the primitive type of the first operandtypeB- fingerprint of the primitive type of the second operandoperator- the arithmetic operator in usemustResolve- indicates that a concrete Calculator is required (rather than an ANY_ANY calculator which needs to be further resolved at run-time)- Returns:
- null if no suitable Calculator can be found.
-
reconstructCalculator
public static Calculator reconstructCalculator(java.lang.String code)
Get a calculator given the short code used in the exported expression tree- Parameters:
code- the short code, e.g. i+i for IntegerPlusInteger- Returns:
- the appropriate Calculator
-
operatorFromCode
public static int operatorFromCode(char code)
-
getCalculatorSetName
public static java.lang.String getCalculatorSetName(int typeA, int typeB)Get the name of the calculator set for a given combination of types- Parameters:
typeA- the fingerprint of the primitive type of the first operandtypeB- the fingerprint of the primitive type of the second operand- Returns:
- null if no suitable Calculator can be found.
-
compute
public abstract AtomicValue compute(AtomicValue a, AtomicValue b, XPathContext c) throws XPathException
Perform an arithmetic operation- Parameters:
a- the first operand. Must not be null, and must be an instance of the type implied by the class name.b- the second operand. Must not be null, and must be an instance of the type implied by the class name.c- the XPath dynamic evaluation context- Returns:
- the result of the computation, as a value of the correct primitive type
- Throws:
XPathException- in the event of an arithmetic error
-
getResultType
public abstract AtomicType getResultType(AtomicType typeA, AtomicType typeB)
Get the type of the result of the calculator, given arguments types typeA and typeB- Parameters:
typeA- the type of the first operandtypeB- the type of the second operand- Returns:
- the type of the result
-
decimalDivide
public static BigDecimalValue decimalDivide(NumericValue a, NumericValue b) throws XPathException
- Throws:
XPathException
-
-