org.apache.xalan.xsltc.dom

Class MultiValuedNodeHeapIterator

Implemented Interfaces:
Cloneable, DTMAxisIterator
Known Direct Subclasses:
KeyIndex.KeyIndexIterator, UnionIterator

public abstract class MultiValuedNodeHeapIterator
extends DTMAxisIteratorBase

MultiValuedNodeHeapIterator takes a set of multi-valued heap nodes and produces a merged NodeSet in document order with duplicates removed.

Each multi-valued heap node (which might be a DTMAxisIterator, but that's not necessary) generates DTM node handles in document order. The class maintains the multi-valued heap nodes in a heap, not surprisingly, sorted by the next DTM node handle available form the heap node.

After a DTM node is pulled from the heap node that's at the top of the heap, the heap node is advanced to the next DTM node handle it makes available, and the heap nature of the heap is restored to ensure the next DTM node handle pulled is next in document order overall.

Authors:
Jacek Ambroziak
Santiago Pericas-Geertsen

Nested Class Summary

abstract class
MultiValuedNodeHeapIterator.HeapNode
An abstract representation of a set of nodes that will be retrieved in document order.

Fields inherited from interface org.apache.xml.dtm.DTMAxisIterator

END

Method Summary

DTMAxisIterator
cloneIterator()
void
gotoMark()
Restores the current node remembered by setMark().
int
next()
Get the next node in the iteration.
DTMAxisIterator
reset()
Resets the iterator to the last start node.
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. subsequent call to next() should return END.

Methods inherited from class org.apache.xml.dtm.ref.DTMAxisIteratorBase

cloneIterator, getAxis, getLast, getNodeByPosition, getPosition, getStartNode, includeSelf, isDocOrdered, isReverse, reset, setRestartable

Method Details

cloneIterator

public DTMAxisIterator cloneIterator()
Specified by:
cloneIterator in interface DTMAxisIterator
Overrides:
cloneIterator in interface DTMAxisIteratorBase
Returns:
a deep copy of this iterator. The clone should not be reset from its current position.

gotoMark

public void gotoMark()
Restores the current node remembered by setMark().
Specified by:
gotoMark in interface DTMAxisIterator

next

public int next()
Get the next node in the iteration.
Specified by:
next in interface DTMAxisIterator
Returns:
The next node handle in the iteration, or END.

reset

public DTMAxisIterator reset()
Resets the iterator to the last start node.
Specified by:
reset in interface DTMAxisIterator
Overrides:
reset in interface DTMAxisIteratorBase
Returns:
A DTMAxisIterator, which may or may not be the same as this iterator.

setMark

public void setMark()
Remembers the current node for the next call to gotoMark().
Specified by:
setMark in interface DTMAxisIterator

setStartNode

public DTMAxisIterator setStartNode(int node)
Set start to END should 'close' the iterator, i.e. subsequent call to next() should return END.
Specified by:
setStartNode in interface DTMAxisIterator
Parameters:
node - Sets the root of the iteration.
Returns:
A DTMAxisIterator set to the start of the iteration.

Copyright © 2006 Apache XML Project. All Rights Reserved.