You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xalan.apache.org by sa...@apache.org on 2002/06/13 14:26:16 UTC

cvs commit: xml-xalan/java/src/org/apache/xalan/xsltc/dom CurrentNodeListIterator.java

santiagopg    2002/06/13 05:26:16

  Modified:    java/src/org/apache/xalan/xsltc/dom
                        CurrentNodeListIterator.java
  Log:
  Replaced eager by lazy computation of last.
  
  Revision  Changes    Path
  1.8       +32 -28    xml-xalan/java/src/org/apache/xalan/xsltc/dom/CurrentNodeListIterator.java
  
  Index: CurrentNodeListIterator.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/dom/CurrentNodeListIterator.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- CurrentNodeListIterator.java	24 Apr 2002 17:03:16 -0000	1.7
  +++ CurrentNodeListIterator.java	13 Jun 2002 12:26:16 -0000	1.8
  @@ -70,28 +70,31 @@
   import org.apache.xalan.xsltc.runtime.BasisLibrary;
   
   public final class CurrentNodeListIterator extends NodeIteratorBase {
  -    private NodeIterator _source;
  +
       private boolean _docOrder;
  +    private NodeIterator _source;
       private final CurrentNodeListFilter _filter;
       private IntegerArray _nodes = new IntegerArray();
   	
       private int _current;	// index in _nodes of the next node to try
  +    private int _last = -1;		
   	
  -    private AbstractTranslet _translet;
       private final int _currentNode;
  -    private int _last;		
  +    private AbstractTranslet _translet;
   
       public CurrentNodeListIterator(NodeIterator source, 
   				   CurrentNodeListFilter filter,
   				   int currentNode,
  -				   AbstractTranslet translet) {
  +				   AbstractTranslet translet) 
  +    {
   	this(source, !source.isReverse(), filter, currentNode, translet);
       }
   
       public CurrentNodeListIterator(NodeIterator source, boolean docOrder,
   				   CurrentNodeListFilter filter,
   				   int currentNode,
  -				   AbstractTranslet translet) {
  +				   AbstractTranslet translet) 
  +    {
   	_source = source;
   	_filter = filter;
   	_translet = translet;
  @@ -129,13 +132,13 @@
       }
   
       public int next() {
  -	final boolean docOrder = _docOrder;
   	final int last = _nodes.cardinality();
   	final int currentNode = _currentNode;
  +	final AbstractTranslet translet = _translet;
   
   	for (int index = _current; index < last; ) {
   	    final int node = _nodes.at(index++); 	// note increment
  -	    if (_filter.test(node, index, last, currentNode, _translet, this)) {
  +	    if (_filter.test(node, index, last, currentNode, translet, this)) {
   		_current = index;
   		return returnNode(node);
   	    }
  @@ -143,28 +146,12 @@
   	return END;
       }
   
  -    private int computePositionOfLast() {
  -	int lastPosition = 0;
  -	final boolean docOrder = _docOrder;
  -        final int last = _nodes.cardinality();
  -        final int currNode = _currentNode;
  -
  -	for (int index = _current; index < last; ) {
  -            int nodeIndex = _nodes.at(index++); 	// note increment
  -            if (_filter.test(nodeIndex, index, last, currNode, _translet, this)) {
  -                lastPosition++;
  -            }
  -        }
  -	return lastPosition;
  -    }
  -
       public NodeIterator setStartNode(int node) {
   	NodeIterator retval = this;
   	
   	if (_isRestartable) {
  -	    // iterator is not a clone
   	    _source.setStartNode(_startNode = node);
  -	    // including ROOT
  +
   	    _nodes.clear();
   	    while ((node = _source.next()) != END) {
   		_nodes.add(node);
  @@ -172,13 +159,14 @@
   	    _current = 0;
   	    retval = resetPosition();
   	}
  -	// compute position of _last
  -  	_last = computePositionOfLast();	
   	return retval;
       }
   	
       public int getLast() {
  -	return (_last == -1) ? computePositionOfLast() : _last;
  +	if (_last == -1) {
  +	    _last = computePositionOfLast();
  +	}
  +	return _last;
       }
   
       public void setMark() {
  @@ -190,4 +178,20 @@
   	_source.gotoMark();
   	_current = _markedNode;
       }
  +
  +    private int computePositionOfLast() {
  +        final int last = _nodes.cardinality();
  +        final int currNode = _currentNode;
  +	final AbstractTranslet translet = _translet;
  +
  +	int lastPosition = 0;
  +	for (int index = _current; index < last; ) {
  +            int nodeIndex = _nodes.at(index++); 	// note increment
  +            if (_filter.test(nodeIndex, index, last, currNode, translet, this)) {
  +                lastPosition++;
  +            }
  +        }
  +	return lastPosition;
  +    }
   }
  +
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: xalan-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xalan-cvs-help@xml.apache.org