net.sf.saxon.expr
Class SingletonComparison

java.lang.Object
  extended by net.sf.saxon.expr.Expression
      extended by net.sf.saxon.expr.BinaryExpression
          extended by net.sf.saxon.expr.SingletonComparison
All Implemented Interfaces:
Serializable, SourceLocator, LocationProvider, SaxonLocator, ComparisonExpression, EvaluableItem, SequenceIterable, InstructionInfo, Locator

public class SingletonComparison
extends BinaryExpression
implements ComparisonExpression

Class to handle comparisons of singletons. Unlike ValueComparison, this class converts untyped atomic values to the type of the other argument, and returns false (rather than ()) if either operand is ().

See Also:
Serialized Form

Field Summary
 
Fields inherited from class net.sf.saxon.expr.BinaryExpression
operand0, operand1, operator
 
Fields inherited from class net.sf.saxon.expr.Expression
EVALUATE_METHOD, ITERATE_METHOD, locationId, PROCESS_METHOD, staticProperties
 
Constructor Summary
SingletonComparison(Expression p1, int operator, Expression p2, boolean checkTypes)
          Create a singleton comparison - that is, a comparison between two singleton (0:1) sequences using the general comparison semantics
 
Method Summary
 int computeCardinality()
          Determine the static cardinality.
 boolean convertsUntypedToOther()
          Determine whether untyped atomic values should be converted to the type of the other operand
 Expression copy()
          Copy an expression.
 boolean effectiveBooleanValue(XPathContext context)
          Evaluate the expression in a boolean context
 Item evaluateItem(XPathContext context)
          Evaluate the expression in a given context
protected  void explainExtraAttributes(ExpressionPresenter out)
          Add subclass-specific attributes to the expression tree explanation.
 AtomicComparer getAtomicComparer()
          Get the AtomicComparer used to compare atomic values.
 ItemType getItemType(TypeHierarchy th)
          Determine the data type of the expression
 int getSingletonOperator()
          Get the primitive (singleton) operator used: one of Token.FEQ, Token.FNE, Token.FLT, Token.FGT, Token.FLE, Token.FGE
 boolean needsRuntimeComparabilityCheck()
          Determine whether a run-time check is needed to check that the types of the arguments are comparable
 void setAtomicComparer(AtomicComparer comp)
           
 
Methods inherited from class net.sf.saxon.expr.BinaryExpression
computeSpecialProperties, displayOperator, equals, explain, getOperands, getOperator, hashCode, isAssociative, isCommutative, isInverse, iterateSubExpressions, optimize, promote, replaceSubExpression, setFlattened, simplify, toString, typeCheck
 
Methods inherited from class net.sf.saxon.expr.Expression
addToPathMap, adoptChildExpression, checkForUpdatingSubexpressions, checkPermittedContents, computeDependencies, computeStaticProperties, doPromotion, dynamicError, evaluateAsString, evaluatePendingUpdates, explain, getCardinality, getColumnNumber, getColumnNumber, getConstructType, getContainer, getDependencies, 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, setFiltered, setLocationId, staticTypeCheck, suppressValidation, typeError
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface net.sf.saxon.expr.ComparisonExpression
getOperands
 

Constructor Detail

SingletonComparison

public SingletonComparison(Expression p1,
                           int operator,
                           Expression p2,
                           boolean checkTypes)
Create a singleton comparison - that is, a comparison between two singleton (0:1) sequences using the general comparison semantics

Parameters:
p1 - the first operand
operator - the operator
p2 - the second operand
checkTypes - true if a run-time check for comparability of the operand types is needed
Method Detail

setAtomicComparer

public void setAtomicComparer(AtomicComparer comp)

getAtomicComparer

public AtomicComparer getAtomicComparer()
Description copied from interface: ComparisonExpression
Get the AtomicComparer used to compare atomic values. This encapsulates any collation that is used

Specified by:
getAtomicComparer in interface ComparisonExpression

getSingletonOperator

public int getSingletonOperator()
Description copied from interface: ComparisonExpression
Get the primitive (singleton) operator used: one of Token.FEQ, Token.FNE, Token.FLT, Token.FGT, Token.FLE, Token.FGE

Specified by:
getSingletonOperator in interface ComparisonExpression

convertsUntypedToOther

public boolean convertsUntypedToOther()
Determine whether untyped atomic values should be converted to the type of the other operand

Specified by:
convertsUntypedToOther in interface ComparisonExpression
Returns:
true if untyped values should be converted to the type of the other operand, false if they should be converted to strings.

computeCardinality

public int computeCardinality()
Determine the static cardinality. Returns [1..1]

Overrides:
computeCardinality in class BinaryExpression
Returns:
the computed cardinality, as one of the values StaticProperty.ALLOWS_ZERO_OR_ONE, StaticProperty.EXACTLY_ONE, StaticProperty.ALLOWS_ONE_OR_MORE, StaticProperty.ALLOWS_ZERO_OR_MORE

getItemType

public ItemType getItemType(TypeHierarchy th)
Determine the data type of the expression

Specified by:
getItemType in class Expression
Parameters:
th - the type hierarchy cache
Returns:
Type.BOOLEAN

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

needsRuntimeComparabilityCheck

public boolean needsRuntimeComparabilityCheck()
Determine whether a run-time check is needed to check that the types of the arguments are comparable

Returns:
true if a run-time check is needed

evaluateItem

public Item evaluateItem(XPathContext context)
                  throws XPathException
Evaluate the expression in a given context

Specified by:
evaluateItem in interface EvaluableItem
Overrides:
evaluateItem in class Expression
Parameters:
context - the given context for evaluation
Returns:
a BooleanValue representing the result of the numeric comparison of the two operands
Throws:
XPathException - if any dynamic error occurs evaluating the expression

effectiveBooleanValue

public boolean effectiveBooleanValue(XPathContext context)
                              throws XPathException
Evaluate the expression in a boolean context

Overrides:
effectiveBooleanValue in class Expression
Parameters:
context - the given context for evaluation
Returns:
a boolean representing the result of the numeric comparison of the two operands
Throws:
XPathException - if any dynamic error occurs evaluating the expression

explainExtraAttributes

protected void explainExtraAttributes(ExpressionPresenter out)
Description copied from class: BinaryExpression
Add subclass-specific attributes to the expression tree explanation. Default implementation does nothing; this is provided for subclasses to override.

Overrides:
explainExtraAttributes in class BinaryExpression
Parameters:
out - the output destination for the displayed expression tree


Copyright (c) Saxonica Limited. All rights reserved.