net.sf.saxon.value
Class SequenceExtent<T extends Item>

java.lang.Object
  extended by net.sf.saxon.value.Value<T>
      extended by net.sf.saxon.value.SequenceExtent<T>
All Implemented Interfaces:
GroundedValue<T>, ValueRepresentation<T>

public final class SequenceExtent<T extends Item>
extends Value<T>
implements GroundedValue<T>

A sequence value implemented extensionally. That is, this class represents a sequence by allocating memory to each item in the sequence.


Field Summary
 
Fields inherited from class net.sf.saxon.value.Value
INDETERMINATE_ORDERING
 
Fields inherited from interface net.sf.saxon.om.ValueRepresentation
EMPTY_VALUE_ARRAY
 
Constructor Summary
SequenceExtent(List<? extends T> list)
          Construct a SequenceExtent from a List.
SequenceExtent(SequenceExtent<T> ext, int start, int length)
          Construct a SequenceExtent as a view of another SequenceExtent
SequenceExtent(SequenceIterator<T> iter)
          Construct a sequence containing all the items in a SequenceIterator.
SequenceExtent(T[] items)
          Construct an sequence from an array of items.
SequenceExtent(T[] value, int start, int length)
          Construct a SequenceExtent from part of an array of items
 
Method Summary
 boolean effectiveBooleanValue()
          Get the effective boolean value
 int getCardinality()
          Determine the cardinality
 ItemType getItemType(TypeHierarchy th)
          Get the (lowest common) item type
 int getLength()
          Get the number of items in the sequence
 T itemAt(int n)
          Get the n'th item in the sequence (starting with 0 as the first item)
 ArrayIterator<T> iterate()
          Return an iterator over this sequence.
static
<T extends Item>
ValueRepresentation
makeSequenceExtent(List<T> input)
          Factory method to make a Value holding the contents of any List of items
static
<T extends Item>
ValueRepresentation<T>
makeSequenceExtent(SequenceIterator<T> iter)
          Factory method to make a Value holding the contents of any SequenceIterator
 Value<T> reduce()
          Reduce a value to its simplest form.
 UnfailingIterator<T> reverseIterate()
          Return an enumeration of this sequence in reverse order (used for reverse axes)
 Value<T> simplify()
          Simplify this SequenceExtent
 GroundedValue<T> subsequence(int start, int length)
          Get a subsequence of the value
 void swap(int a, int b)
          Swap two items (needed to support sorting)
 String toString()
           
 
Methods inherited from class net.sf.saxon.value.Value
asItem, asItem, asIterator, asValue, checkPermittedContents, convertToJava, equals, fromItem, getCanonicalLexicalRepresentation, getIterator, getSchemaComparable, getSequenceLength, getStringValue, getStringValueCS, hashCode, isIdentical, process
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface net.sf.saxon.om.ValueRepresentation
getStringValue, getStringValueCS
 

Constructor Detail

SequenceExtent

public SequenceExtent(T[] items)
Construct an sequence from an array of items. Note, the array of items is used as is, which means the caller must not subsequently change its contents.

Parameters:
items - the array of items to be included in the sequence

SequenceExtent

public SequenceExtent(T[] value,
                      int start,
                      int length)
Construct a SequenceExtent from part of an array of items

Parameters:
value - The array
start - zero-based offset of the first item in the array that is to be included in the new SequenceExtent
length - The number of items in the new SequenceExtent

SequenceExtent

public SequenceExtent(SequenceExtent<T> ext,
                      int start,
                      int length)
Construct a SequenceExtent as a view of another SequenceExtent

Parameters:
ext - The existing SequenceExtent
start - zero-based offset of the first item in the existing SequenceExtent that is to be included in the new SequenceExtent
length - The number of items in the new SequenceExtent

SequenceExtent

public SequenceExtent(List<? extends T> list)
Construct a SequenceExtent from a List. The members of the list must all be Items

Parameters:
list - the list of items to be included in the sequence

SequenceExtent

public SequenceExtent(SequenceIterator<T> iter)
               throws XPathException
Construct a sequence containing all the items in a SequenceIterator.

Parameters:
iter - The supplied sequence of items. This must be positioned at the start, so that hasNext() returns true if there are any nodes in the node-set, and next() returns the first node.
Throws:
XPathException - if reading the items using the SequenceIterator raises an error
Method Detail

makeSequenceExtent

public static <T extends Item> ValueRepresentation<T> makeSequenceExtent(SequenceIterator<T> iter)
                                                              throws XPathException
Factory method to make a Value holding the contents of any SequenceIterator

Parameters:
iter - a Sequence iterator that will be consumed to deliver the items in the sequence
Returns:
a ValueRepresentation holding the items delivered by the SequenceIterator. If the sequence is empty the result will be an instance of EmptySequence. If it is of length one, the result will be an Item. In all other cases, it will be an instance of SequenceExtent.
Throws:
XPathException - if an error occurs processing the values from the iterator.

makeSequenceExtent

public static <T extends Item> ValueRepresentation makeSequenceExtent(List<T> input)
Factory method to make a Value holding the contents of any List of items

Parameters:
input - a List containing the items in the sequence
Returns:
a ValueRepresentation holding the items in the list. If the sequence is empty the result will be an instance of EmptySequence. If it is of length one, the result will be an Item. In all other cases, it will be an instance of SequenceExtent.

simplify

public Value<T> simplify()
Simplify this SequenceExtent

Returns:
a Value holding the items delivered by the SequenceIterator. If the sequence is empty the result will be an instance of EmptySequence. If it is of length one, the result will be an AtomicValue or a SingletonItem. In all other cases, the SequenceExtent will be returned unchanged.

reduce

public Value<T> reduce()
Reduce a value to its simplest form. If the value is a closure or some other form of deferred value such as a FunctionCallPackage, then it is reduced to a SequenceExtent. If it is a SequenceExtent containing a single item, then it is reduced to that item. One consequence that is exploited by class FilterExpression is that if the value is a singleton numeric value, then the result will be an instance of NumericValue

Overrides:
reduce in class Value<T extends Item>
Returns:
the value in simplified form

getLength

public int getLength()
Get the number of items in the sequence

Specified by:
getLength in interface GroundedValue<T extends Item>
Overrides:
getLength in class Value<T extends Item>
Returns:
the number of items in the sequence

getCardinality

public int getCardinality()
Determine the cardinality

Overrides:
getCardinality in class Value<T extends Item>
Returns:
the cardinality of the sequence, using the constants defined in net.sf.saxon.value.Cardinality
See Also:
Cardinality

getItemType

public ItemType getItemType(TypeHierarchy th)
Get the (lowest common) item type

Overrides:
getItemType in class Value<T extends Item>
Parameters:
th - the type hierarchy cache. If null, the returned value may be less precise
Returns:
integer identifying an item type to which all the items in this sequence conform

itemAt

public T itemAt(int n)
Get the n'th item in the sequence (starting with 0 as the first item)

Specified by:
itemAt in interface GroundedValue<T extends Item>
Overrides:
itemAt in class Value<T extends Item>
Parameters:
n - the position of the required item
Returns:
the n'th item in the sequence

swap

public void swap(int a,
                 int b)
Swap two items (needed to support sorting)

Parameters:
a - the position of the first item to be swapped
b - the position of the second item to be swapped

iterate

public ArrayIterator<T> iterate()
Return an iterator over this sequence.

Specified by:
iterate in class Value<T extends Item>
Returns:
the required SequenceIterator, positioned at the start of the sequence

reverseIterate

public UnfailingIterator<T> reverseIterate()
Return an enumeration of this sequence in reverse order (used for reverse axes)

Returns:
an AxisIterator that processes the items in reverse order

effectiveBooleanValue

public boolean effectiveBooleanValue()
                              throws XPathException
Get the effective boolean value

Overrides:
effectiveBooleanValue in class Value<T extends Item>
Returns:
the effective boolean value
Throws:
XPathException - if any dynamic error occurs evaluating the expression

subsequence

public GroundedValue<T> subsequence(int start,
                                    int length)
Get a subsequence of the value

Specified by:
subsequence in interface GroundedValue<T extends Item>
Parameters:
start - the index of the first item to be included in the result, counting from zero. A negative value is taken as zero. If the value is beyond the end of the sequence, an empty sequence is returned
length - the number of items to be included in the result. Specify Integer.MAX_VALUE to get the subsequence up to the end of the base sequence. If the value is negative, an empty sequence is returned. If the value goes off the end of the sequence, the result returns items up to the end of the sequence
Returns:
the required subsequence. If min is

toString

public String toString()
Overrides:
toString in class Object


Copyright (c) 2004-2011 Saxonica Limited. All rights reserved.