You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xalan.apache.org by tm...@apache.org on 2002/03/04 15:41:00 UTC

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

tmiller     02/03/04 06:41:00

  Modified:    java/src/org/apache/xalan/xsltc/dom SortingIterator.java
  Log:
  bug 6693- fix by Santiago Pericas, implement a
  iterator clone method.
  
  Revision  Changes    Path
  1.2       +27 -3     xml-xalan/java/src/org/apache/xalan/xsltc/dom/SortingIterator.java
  
  Index: SortingIterator.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/dom/SortingIterator.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- SortingIterator.java	17 Apr 2001 18:52:36 -0000	1.1
  +++ SortingIterator.java	4 Mar 2002 14:41:00 -0000	1.2
  @@ -1,5 +1,5 @@
   /*
  - * @(#)$Id: SortingIterator.java,v 1.1 2001/04/17 18:52:36 sboag Exp $
  + * @(#)$Id: SortingIterator.java,v 1.2 2002/03/04 14:41:00 tmiller Exp $
    *
    * The Apache Software License, Version 1.1
    *
  @@ -66,11 +66,12 @@
   
   import org.apache.xalan.xsltc.NodeIterator;
   import org.apache.xalan.xsltc.TransletException;
  +import org.apache.xalan.xsltc.runtime.BasisLibrary;
   
   public final class SortingIterator extends NodeIteratorBase {
       private final static int INIT_DATA_SIZE = 16;
  -    private final NodeIterator _source;
  -    private final NodeSortRecordFactory _factory;
  +    private NodeIterator _source;
  +    private NodeSortRecordFactory _factory;
       private NodeSortRecord[] _data;
       private int _free = 0;
       private int _current;	// index in _nodes of the next node to try
  @@ -124,6 +125,29 @@
   	_current = _markedNode;
       }
       
  +    /**
  +     * Clone a <code>SortingIterator</code> by cloning its source
  +     * iterator and then sharing the factory and the array of
  +     * <code>NodeSortRecords</code>.
  +     */
  +    public NodeIterator cloneIterator() {
  +	try {
  +	    final SortingIterator clone = (SortingIterator) super.clone();
  +	    clone._source = _source.cloneIterator();  
  +	    clone._factory = _factory;		// shared between clones
  +	    clone._data = _data;		// shared between clones
  +	    clone._free = _free;
  +	    clone._current = _current;
  +	    clone.setRestartable(false);
  +	    return clone.reset();
  +	}
  +	catch (CloneNotSupportedException e) {
  +	    BasisLibrary.runTimeError(BasisLibrary.ITERATOR_CLONE_ERR,
  +				      e.toString());
  +	    return null;
  +	}
  +    }
  +
       private void addRecord(NodeSortRecord record) {
   	if (_free == _data.length) {
   	    NodeSortRecord[] newArray = new NodeSortRecord[_data.length * 2];
  
  
  

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