org.jaxen.util
Class PrecedingAxisIterator

java.lang.Object
  extended byorg.jaxen.util.PrecedingAxisIterator
All Implemented Interfaces:
java.util.Iterator

public class PrecedingAxisIterator
extends java.lang.Object
implements java.util.Iterator

This implementation of 'preceding' works like so: the preceding axis includes preceding-siblings of this node and their descendants. Also, for each ancestor node of this node, it includes all preceding-siblings of that ancestor, and their descendants. Finally, it includes the ancestor nodes themselves.

The reversed descendant-or-self axes that are required are calculated using a stack of reversed 'child-or-self' axes. When asked for a node, it is always taken from a child-or-self axis. If it was the last node on that axis, the node is returned. Otherwise, this axis is pushed on the stack, and the process is repeated with the child-or-self of the node. Eventually this recurses down to the last descendant of any node, then works back up to the root.

I reckon most object models could provide a faster implementation of the reversed 'children-or-self' used here.


Constructor Summary
PrecedingAxisIterator(java.lang.Object contextNode, Navigator navigator)
           
 
Method Summary
 boolean hasNext()
           
 java.lang.Object next()
           
 void remove()
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

PrecedingAxisIterator

public PrecedingAxisIterator(java.lang.Object contextNode,
                             Navigator navigator)
                      throws UnsupportedAxisException
Method Detail

hasNext

public boolean hasNext()
Specified by:
hasNext in interface java.util.Iterator

next

public java.lang.Object next()
                      throws java.util.NoSuchElementException
Specified by:
next in interface java.util.Iterator
Throws:
java.util.NoSuchElementException

remove

public void remove()
            throws java.lang.UnsupportedOperationException
Specified by:
remove in interface java.util.Iterator
Throws:
java.lang.UnsupportedOperationException


Copyright © 2001-2005 Codehaus. All Rights Reserved.