net.sf.saxon.sort
Class ConditionalSorter
- EvaluableItem, InstructionInfoProvider, SequenceIterable, Serializable, SourceLocator
public class ConditionalSorter
An expression that sorts an underlying sequence into document order if some condition is true, or that
returns the sequence "as is" (knowing that it doesn't need sorting) if the condition is false.
addToPathMap , adoptChildExpression , checkPermittedContents , computeCardinality , computeDependencies , computeSpecialProperties , computeStaticProperties , copy , display , doPromotion , dynamicError , effectiveBooleanValue , evaluateAsString , evaluateItem , explain , explain , findParentOf , getCardinality , getColumnNumber , getConstructType , getContainer , getDependencies , getExecutable , getHostLanguage , getImplementationMethod , getInstructionInfo , getIntrinsicDependencies , getItemType , getLineNumber , getLocationId , getLocationProvider , getPublicId , getSlotsUsed , getSpecialProperties , getSystemId , hasLoopingSubexpression , implementsStaticTypeCheck , iterate , iterateEvents , iterateSubExpressions , markTailFunctionCalls , optimize , process , promote , replaceSubExpression , resetLocalStaticProperties , setContainer , setFiltered , setFlattened , setLocationId , simplify , staticTypeCheck , suppressValidation , toString , typeCheck , typeError |
ConditionalSorter
public ConditionalSorter(Expression condition,
DocumentSorter sorter)
Create a conditional document sorter
condition
- the conditional expressionsorter
- the sorting expression
computeCardinality
protected int computeCardinality()
Compute the static cardinality of this expression
- computeCardinality in interface Expression
copy
public Expression copy()
Copy an expression. This makes a deep copy.
- copy in interface Expression
- the copy of the original expression
explain
public void explain(ExpressionPresenter out)
Diagnostic print of expression structure. The abstract expression tree
is written to the supplied output destination.
- explain in interface Expression
out
- the expression presenter used to display the structure
getCardinality
public int getCardinality()
Determine the static cardinality of the expression. This establishes how many items
there will be in the result of the expression, at compile time (i.e., without
actually evaluating the result.
- getCardinality in interface Expression
- one of the values Cardinality.ONE_OR_MORE,
Cardinality.ZERO_OR_MORE, Cardinality.EXACTLY_ONE,
Cardinality.ZERO_OR_ONE, Cardinality.EMPTY. This default
implementation returns ZERO_OR_MORE (which effectively gives no
information).
getCondition
public Expression getCondition()
Get the condition under which the nodes need to be sorted
- the condition (an expression)
getDocumentSorter
public DocumentSorter getDocumentSorter()
Get the document sorter, which sorts the nodes if the condition is true
getImplementationMethod
public int getImplementationMethod()
An implementation of Expression must provide at least one of the methods evaluateItem(), iterate(), or process().
This method indicates which of these methods is provided directly. The other methods will always be available
indirectly, using an implementation that relies on one of the other methods.
- getImplementationMethod in interface Expression
getItemType
public ItemType getItemType(TypeHierarchy th)
Determine the data type of the expression, if possible. All expression return
sequences, in general; this method determines the type of the items within the
sequence, assuming that (a) this is known in advance, and (b) it is the same for
all items in the sequence.
This method should always return a result, though it may be the best approximation
that is available at the time.
- getItemType in interface Expression
th
- the type hierarchy cache
- a value such as Type.STRING, Type.BOOLEAN, Type.NUMBER,
Type.NODE, or Type.ITEM (meaning not known at compile time)
iterate
public SequenceIterator iterate(XPathContext context)
throws XPathException
Return an Iterator to iterate over the values of a sequence. The value of every
expression can be regarded as a sequence, so this method is supported for all
expressions. This default implementation handles iteration for expressions that
return singleton values: for non-singleton expressions, the subclass must
provide its own implementation.
- iterate in interface SequenceIterable
- iterate in interface Expression
context
- supplies the context for evaluation
- a SequenceIterator that can be used to iterate over the result
of the expression
XPathException
- if any dynamic error occurs evaluating the
expression
iterateSubExpressions
public Iterator iterateSubExpressions()
Get the immediate sub-expressions of this expression. Default implementation
returns a zero-length array, appropriate for an expression that has no
sub-expressions.
- iterateSubExpressions in interface Expression
- an iterator containing the sub-expressions of this expression
promote
public Expression promote(PromotionOffer offer)
throws XPathException
Offer promotion for this subexpression. The offer will be accepted if the subexpression
is not dependent on the factors (e.g. the context item) identified in the PromotionOffer.
By default the offer is not accepted - this is appropriate in the case of simple expressions
such as constant values and variable references where promotion would give no performance
advantage. This method is always called at compile time.
- promote in interface Expression
offer
- details of the offer, for example the offer to move
expressions that don't depend on the context to an outer level in
the containing expression
- if the offer is not accepted, return this expression unchanged.
Otherwise return the result of rewriting the expression to promote
this subexpression
replaceSubExpression
public boolean replaceSubExpression(Expression original,
Expression replacement)
Replace one subexpression by a replacement subexpression
- replaceSubExpression in interface Expression
original
- the original subexpressionreplacement
- the replacement subexpression
- true if the original subexpression is found