org.apache.xalan.xsltc.dom
Class SortingIterator

java.lang.Object
  extended by org.apache.xml.dtm.ref.DTMAxisIteratorBase
      extended by org.apache.xalan.xsltc.dom.SortingIterator
All Implemented Interfaces:
java.lang.Cloneable, DTMAxisIterator

public final class SortingIterator
extends DTMAxisIteratorBase


Field Summary
private  int _current
           
private  NodeSortRecord[] _data
           
private  NodeSortRecordFactory _factory
           
private  int _free
           
private  DTMAxisIterator _source
           
private static int INIT_DATA_SIZE
           
 
Fields inherited from class org.apache.xml.dtm.ref.DTMAxisIteratorBase
_includeSelf, _isRestartable, _last, _markedNode, _position, _startNode
 
Fields inherited from interface org.apache.xml.dtm.DTMAxisIterator
END
 
Constructor Summary
SortingIterator(DTMAxisIterator source, NodeSortRecordFactory factory)
           
 
Method Summary
private  void addRecord(NodeSortRecord record)
           
 DTMAxisIterator cloneIterator()
          Clone a SortingIterator by cloning its source iterator and then sharing the factory and the array of NodeSortRecords.
 int getLast()
          Returns the position of the last node within the iteration, as defined by XPath.
 int getPosition()
           
 void gotoMark()
          Restores the current node remembered by setMark().
 int next()
          Get the next node in the iteration.
private  int partition(int p, int r)
           
private  void quicksort(int p, int r)
           
 void setMark()
          Remembers the current node for the next call to gotoMark().
 DTMAxisIterator setStartNode(int node)
          Set start to END should 'close' the iterator, i.e.
 
Methods inherited from class org.apache.xml.dtm.ref.DTMAxisIteratorBase
getAxis, getNodeByPosition, getStartNode, includeSelf, isDocOrdered, isReverse, reset, resetPosition, returnNode, setRestartable
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

INIT_DATA_SIZE

private static final int INIT_DATA_SIZE
See Also:
Constant Field Values

_source

private DTMAxisIterator _source

_factory

private NodeSortRecordFactory _factory

_data

private NodeSortRecord[] _data

_free

private int _free

_current

private int _current
Constructor Detail

SortingIterator

public SortingIterator(DTMAxisIterator source,
                       NodeSortRecordFactory factory)
Method Detail

next

public int next()
Description copied from interface: DTMAxisIterator
Get the next node in the iteration.

Returns:
The next node handle in the iteration, or END.

setStartNode

public DTMAxisIterator setStartNode(int node)
Description copied from interface: DTMAxisIterator
Set start to END should 'close' the iterator, i.e. subsequent call to next() should return END.

Parameters:
node - Sets the root of the iteration.
Returns:
A DTMAxisIterator set to the start of the iteration.

getPosition

public int getPosition()
Specified by:
getPosition in interface DTMAxisIterator
Overrides:
getPosition in class DTMAxisIteratorBase
Returns:
The position of the current node within the set, as defined by XPath. Note that this is one-based, not zero-based.

getLast

public int getLast()
Description copied from class: DTMAxisIteratorBase
Returns the position of the last node within the iteration, as defined by XPath. In a forward iterator, I believe this equals the number of nodes which this iterator will yield. In a reverse iterator, I believe it should return 1 (since the "last" is the first produced.) This may be an expensive operation when called the first time, since it may have to iterate through a large part of the document to produce its answer.

Specified by:
getLast in interface DTMAxisIterator
Overrides:
getLast in class DTMAxisIteratorBase
Returns:
The number of nodes in this iterator (forward) or 1 (reverse).

setMark

public void setMark()
Description copied from interface: DTMAxisIterator
Remembers the current node for the next call to gotoMark().


gotoMark

public void gotoMark()
Description copied from interface: DTMAxisIterator
Restores the current node remembered by setMark().


cloneIterator

public DTMAxisIterator cloneIterator()
Clone a SortingIterator by cloning its source iterator and then sharing the factory and the array of NodeSortRecords.

Specified by:
cloneIterator in interface DTMAxisIterator
Overrides:
cloneIterator in class DTMAxisIteratorBase
Returns:
a deep copy of this iterator.

addRecord

private void addRecord(NodeSortRecord record)

quicksort

private void quicksort(int p,
                       int r)

partition

private int partition(int p,
                      int r)