FileDocCategorySizeDatePackage
MatchingIterator.javaAPI DocJava SE 6 API3619Tue Jun 10 00:22:32 BST 2008com.sun.org.apache.xalan.internal.xsltc.dom

MatchingIterator

public final class MatchingIterator extends DTMAxisIteratorBase
This is a special kind of iterator that takes a source iterator and a node N. If initialized with a node M (the parent of N) it computes the position of N amongst the children of M. This position can be obtained by calling getPosition(). It is an iterator even though next() will never be called. It is used to match patterns with a single predicate like: BOOK[position() = last()] In this example, the source iterator will return elements of type BOOK, a call to position() will return the position of N. Notice that because of the way the pattern matching is implemented, N will always be a node in the source since (i) it is a BOOK or the test sequence would not be considered and (ii) the source iterator is initialized with M which is the parent of N. Also, and still in this example, a call to last() will return the number of elements in the source (i.e. the number of BOOKs).
author
Jacek Ambroziak
author
Santiago Pericas-Geertsen

Fields Summary
private DTMAxisIterator
_source
A reference to a source iterator.
private final int
_match
The node to match.
Constructors Summary
public MatchingIterator(int match, DTMAxisIterator source)

	_source = source;
	_match = match;
    
Methods Summary
public com.sun.org.apache.xml.internal.dtm.DTMAxisIteratorcloneIterator()


	try {
	    final MatchingIterator clone = (MatchingIterator) super.clone();
	    clone._source = _source.cloneIterator();
	    clone._isRestartable = false;
	    return clone.reset();
	}
	catch (CloneNotSupportedException e) {
	    BasisLibrary.runTimeError(BasisLibrary.ITERATOR_CLONE_ERR,
				      e.toString());
	    return null;
	}
    
public intgetLast()

        if (_last == -1) {
            _last = _source.getLast();
        }
        return _last;
    
public intgetPosition()

	return _position;
    
public voidgotoMark()

	_source.gotoMark();
    
public intnext()

	return _source.next();
    
public com.sun.org.apache.xml.internal.dtm.DTMAxisIteratorreset()

	_source.reset();
	return resetPosition();
    
public voidsetMark()

	_source.setMark();
    
public voidsetRestartable(boolean isRestartable)

	_isRestartable = isRestartable;
	_source.setRestartable(isRestartable);
    
public com.sun.org.apache.xml.internal.dtm.DTMAxisIteratorsetStartNode(int node)

	if (_isRestartable) {
	    // iterator is not a clone
	    _source.setStartNode(node);

	    // Calculate the position of the node in the set
	    _position = 1;
	    while ((node = _source.next()) != END && node != _match) {
		_position++;
	    }
	}
	return this;