net.sf.saxon.expr
public abstract class Calculator extends Object implements Serializable
Field Summary | |
---|---|
static Calculator[] | ANY_ANY
Calculators used for the six operators when the static type information does not allow
a more specific calculator to be chosen |
static Calculator[] | DATETIME_DATETIME
Calculators used when both operands are xs:dateTime, xs:date, or xs:time |
static Calculator[] | DATETIME_DURATION
Calculators used when the first operand is xs:dateTime, xs:date, or xs:time,
and the second is a duration |
static Calculator[] | DECIMAL_DECIMAL |
static Calculator[] | DECIMAL_DOUBLE
Calculators used when the first operand is a decimal |
static Calculator[] | DECIMAL_FLOAT |
static Calculator[] | DECIMAL_INTEGER |
static int | DIV |
static Calculator[] | DOUBLE_DECIMAL |
static Calculator[] | DOUBLE_DOUBLE
Calculators used when the first operand is a double |
static Calculator[] | DOUBLE_FLOAT |
static Calculator[] | DOUBLE_INTEGER |
static Calculator[] | DURATION_DATETIME
Calculators used when the second operand is xs:dateTime, xs:date, or xs:time,
and the first is a duration |
static Calculator[] | DURATION_DURATION
Calculators used when the both operands are durations |
static Calculator[] | DURATION_NUMERIC
Calculators used when the first operand is a duration and the second is numeric |
static Calculator[] | FLOAT_DECIMAL |
static Calculator[] | FLOAT_DOUBLE
Calculators used when the first operand is a float |
static Calculator[] | FLOAT_FLOAT |
static Calculator[] | FLOAT_INTEGER |
static int | IDIV |
static Calculator[] | INTEGER_DECIMAL |
static Calculator[] | INTEGER_DOUBLE
Calculators used when the first operand is an integer |
static Calculator[] | INTEGER_FLOAT |
static Calculator[] | INTEGER_INTEGER |
static int | MINUS |
static int | MOD |
static Calculator[] | NUMERIC_DURATION
Calculators used when the second operand is a duration and the first is numeric |
static int | PLUS |
static int | TIMES |
Method Summary | |
---|---|
abstract AtomicValue | compute(AtomicValue a, AtomicValue b, XPathContext c)
Perform an arithmetic operation |
static Calculator | getCalculator(int typeA, int typeB, int operator, boolean mustResolve)
Factory method to get a calculator for a given combination of types |
static String | getCalculatorSetName(int typeA, int typeB)
Get the name of the calculator set for a given combination of types |
abstract AtomicType | getResultType(AtomicType typeA, AtomicType typeB)
Get the type of the result of the calculator, given arguments types typeA and typeB |
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
Parameters: typeA fingerprint of the primitive type of the first operand typeB fingerprint of the primitive type of the second operand operator the arithmetic operator in use mustResolve 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.
Parameters: typeA the fingerprint of the primitive type of the first operand typeB the fingerprint of the primitive type of the second operand
Returns: null if no suitable Calculator can be found.
Parameters: typeA the type of the first operand typeB the type of the second operand
Returns: the type of the result