Package net.sf.saxon.value
Class SingletonClosure
java.lang.Object
net.sf.saxon.value.Closure
net.sf.saxon.value.SingletonClosure
- All Implemented Interfaces:
ContextOriginator
,Sequence
A SingletonClosure represents a value that has not yet been evaluated: the value is represented
by an expression, together with saved values of all the context variables that the
expression depends on. The value of a SingletonClosure is always either a single item
or an empty sequence.
The expression may depend on local variables and on the context item; these values are held in the saved XPathContext object that is kept as part of the Closure, and they will always be read from that object. The expression may also depend on global variables; these are unchanging, so they can be read from the Bindery in the normal way. Expressions that depend on other contextual information, for example the values of position(), last(), current(), current-group(), should not be evaluated using this mechanism: they should always be evaluated eagerly. This means that the Closure does not need to keep a copy of these context variables.
-
Field Summary
Fields inherited from class net.sf.saxon.value.Closure
depth, expression, inputIterator, savedXPathContext
-
Constructor Summary
ConstructorsConstructorDescriptionSingletonClosure
(Expression exp, XPathContext context) Constructor should not be called directly, instances should be made using the make() method. -
Method Summary
Modifier and TypeMethodDescriptionasItem()
Return the value in the form of an Itemint
Get the length of the sequenceitemAt
(int n) Get the n'th item in the sequence (starting from 0).iterate()
Evaluate the expression in a given context to return an iterator over a sequenceEnsure that the sequence is in a form where it can be evaluated more than once.Return a value containing all the items in the sequence returned by this SequenceIteratorMethods inherited from class net.sf.saxon.value.Closure
getExpression, getSavedXPathContext, head, make, reduce, saveContext, setExpression, setSavedXPathContext
-
Constructor Details
-
SingletonClosure
Constructor should not be called directly, instances should be made using the make() method.- Parameters:
exp
- the expression to be lazily evaluatedcontext
- the context in which the expression should be evaluated- Throws:
XPathException
- if an error occurs saving the dynamic context
-
-
Method Details
-
iterate
Evaluate the expression in a given context to return an iterator over a sequence- Specified by:
iterate
in interfaceSequence
- Overrides:
iterate
in classClosure
- Returns:
- an iterator (specifically, a Saxon
SequenceIterator
, which is not aIterator
) over all the items - Throws:
XPathException
- in the situation where the sequence is evaluated lazily, and constructing an iterator over the items causes a dynamic error.
-
asItem
Return the value in the form of an Item- Returns:
- the value in the form of an Item
- Throws:
XPathException
-
itemAt
Get the n'th item in the sequence (starting from 0). This is defined for all SequenceValues, but its real benefits come for a SequenceValue stored extensionally- Throws:
XPathException
-
getLength
Get the length of the sequence- Throws:
XPathException
-
materialize
Return a value containing all the items in the sequence returned by this SequenceIterator- Specified by:
materialize
in interfaceSequence
- Returns:
- the corresponding value
- Throws:
XPathException
- if evaluating the contents of the sequence fails with a dynamic error.
-
makeRepeatable
Description copied from interface:Sequence
Ensure that the sequence is in a form where it can be evaluated more than once. Some sequences (for exampleLazySequence
andClosure
can only be evaluated once, and this operation causes these to be grounded. However, making it repeatable is not the same as making it grounded; it does not flush out all errors. Indeed, lazy evaluation relies on this property, because an expression that has been lifted out of a loop must not be evaluated unless the loop is executed at least once, to prevent spurious errors.- Specified by:
makeRepeatable
in interfaceSequence
- Overrides:
makeRepeatable
in classClosure
- Returns:
- An equivalent sequence that can be repeatedly evaluated
-