You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xalan.apache.org by mo...@apache.org on 2001/11/27 09:40:28 UTC
cvs commit: xml-xalan/java/src/org/apache/xalan/xsltc/dom DOMImpl.java FilteredStepIterator.java StepIterator.java UnionIterator.java
morten 01/11/27 00:40:28
Modified: java/src/org/apache/xalan/xsltc/dom DOMImpl.java
FilteredStepIterator.java StepIterator.java
UnionIterator.java
Log:
Updated the StepIterator and FilteredStepIterator's cloneIterator() and
reset() methods so that the _isRestartable flag is set correctly.
PR: bugzilla 4905
Obtained from: n/a
Submitted by: morten@xml.apache.org
Reviewed by: morten@xml.apache.org
Revision Changes Path
1.62 +2 -2 xml-xalan/java/src/org/apache/xalan/xsltc/dom/DOMImpl.java
Index: DOMImpl.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/dom/DOMImpl.java,v
retrieving revision 1.61
retrieving revision 1.62
diff -u -r1.61 -r1.62
--- DOMImpl.java 2001/11/26 14:03:09 1.61
+++ DOMImpl.java 2001/11/27 08:40:28 1.62
@@ -1,5 +1,5 @@
/*
- * @(#)$Id: DOMImpl.java,v 1.61 2001/11/26 14:03:09 morten Exp $
+ * @(#)$Id: DOMImpl.java,v 1.62 2001/11/27 08:40:28 morten Exp $
*
* The Apache Software License, Version 1.1
*
@@ -743,7 +743,7 @@
_currentChild = _offsetOrChild[_startNode];
else
_currentChild = END;
- return this;
+ return resetPosition();
}
public int next() {
1.3 +15 -47 xml-xalan/java/src/org/apache/xalan/xsltc/dom/FilteredStepIterator.java
Index: FilteredStepIterator.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/dom/FilteredStepIterator.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- FilteredStepIterator.java 2001/10/30 15:49:32 1.2
+++ FilteredStepIterator.java 2001/11/27 08:40:28 1.3
@@ -1,5 +1,5 @@
/*
- * @(#)$Id: FilteredStepIterator.java,v 1.2 2001/10/30 15:49:32 morten Exp $
+ * @(#)$Id: FilteredStepIterator.java,v 1.3 2001/11/27 08:40:28 morten Exp $
*
* The Apache Software License, Version 1.1
*
@@ -58,6 +58,7 @@
*
* @author Jacek Ambroziak
* @author Santiago Pericas-Geertsen
+ * @author Morten Jorgensen
*
*/
@@ -66,28 +67,26 @@
import org.apache.xalan.xsltc.NodeIterator;
import org.apache.xalan.xsltc.runtime.BasisLibrary;
-public final class FilteredStepIterator extends NodeIteratorBase {
- private NodeIterator _source;
- private NodeIterator _iterator;
- private final Filter _filter;
+public final class FilteredStepIterator extends StepIterator {
+
+ private Filter _filter;
public FilteredStepIterator(NodeIterator source,
NodeIterator iterator,
Filter filter) {
- _source = source;
- _iterator = iterator;
+ super(source, iterator);
_filter = filter;
}
public NodeIterator cloneIterator() {
+ setNotRestartable();
try {
final FilteredStepIterator clone =
(FilteredStepIterator)super.clone();
- clone._isRestartable = false;
clone._source = _source.cloneIterator();
- clone._iterator = _iterator.cloneIterator()
- .setStartNode(_source.next());
- return clone.resetPosition();
+ clone._iterator = _iterator.cloneIterator();
+ clone._filter = _filter;
+ return clone.reset();
}
catch (CloneNotSupportedException e) {
BasisLibrary.runTimeError(BasisLibrary.ITERATOR_CLONE_ERR,
@@ -95,45 +94,14 @@
return null;
}
}
-
- public NodeIterator setStartNode(int node) {
- if (_isRestartable) {
- // iterator is not a clone
- _source.setStartNode(_startNode = node);
- _iterator.setStartNode(_source.next());
- return resetPosition();
- }
- return this;
- }
- public NodeIterator reset() {
- _source.reset();
- _iterator.setStartNode(_source.next());
- return resetPosition();
- }
-
public int next() {
- for (int node;;) {
- while ((node = _iterator.next()) != END)
- if (_filter.test(node)) {
- return returnNode(node);
- }
- // local iterator ran out of nodes
- // try to get new start node from source
- if ((node = _source.next()) == END)
- return END;
- else
- _iterator.setStartNode(node);
+ int node;
+ while ((node = super.next()) != END) {
+ if (_filter.test(node))
+ return returnNode(node);
}
- }
-
- public void setMark() {
- _source.setMark();
- _iterator.setMark();
+ return(node);
}
- public void gotoMark() {
- _source.gotoMark();
- _iterator.gotoMark();
- }
}
1.8 +23 -9 xml-xalan/java/src/org/apache/xalan/xsltc/dom/StepIterator.java
Index: StepIterator.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/dom/StepIterator.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- StepIterator.java 2001/10/30 15:49:32 1.7
+++ StepIterator.java 2001/11/27 08:40:28 1.8
@@ -1,5 +1,5 @@
/*
- * @(#)$Id: StepIterator.java,v 1.7 2001/10/30 15:49:32 morten Exp $
+ * @(#)$Id: StepIterator.java,v 1.8 2001/11/27 08:40:28 morten Exp $
*
* The Apache Software License, Version 1.1
*
@@ -59,6 +59,7 @@
* @author Jacek Ambroziak
* @author Santiago Pericas-Geertsen
* @author Erwin Bolwidt <ej...@klomp.org>
+ * @author Morten Jorgensen
*
*/
@@ -67,25 +68,38 @@
import org.apache.xalan.xsltc.NodeIterator;
import org.apache.xalan.xsltc.runtime.BasisLibrary;
-public final class StepIterator extends NodeIteratorBase {
- private NodeIterator _source;
- private NodeIterator _iterator;
+public class StepIterator extends NodeIteratorBase {
+ protected NodeIterator _source;
+ protected NodeIterator _iterator;
+
public StepIterator(NodeIterator source, NodeIterator iterator) {
_source = source;
_iterator = iterator;
}
+ protected void setNotRestartable() {
+ if (_source instanceof StepIterator) {
+ _isRestartable = true;
+ if (_iterator instanceof NodeIteratorBase)
+ ((NodeIteratorBase)_iterator)._isRestartable = true;
+ ((StepIterator)_source).setNotRestartable();
+ }
+ else {
+ _isRestartable = false;
+ if (_source instanceof NodeIteratorBase)
+ ((NodeIteratorBase)_source)._isRestartable = false;
+ if (_iterator instanceof NodeIteratorBase)
+ ((NodeIteratorBase)_iterator)._isRestartable = true;
+ }
+ }
+
public NodeIterator cloneIterator() {
- _isRestartable = false;
+ setNotRestartable();
try {
final StepIterator clone = (StepIterator)super.clone();
clone._source = _source.cloneIterator();
clone._iterator = _iterator.cloneIterator();
- // Special case -> _iterator must be restartable
- if (clone._iterator instanceof NodeIteratorBase) {
- ((NodeIteratorBase)(clone._iterator))._isRestartable = true;
- }
return clone.reset();
}
catch (CloneNotSupportedException e) {
1.8 +2 -2 xml-xalan/java/src/org/apache/xalan/xsltc/dom/UnionIterator.java
Index: UnionIterator.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/dom/UnionIterator.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- UnionIterator.java 2001/10/30 15:49:32 1.7
+++ UnionIterator.java 2001/11/27 08:40:28 1.8
@@ -1,5 +1,5 @@
/*
- * @(#)$Id: UnionIterator.java,v 1.7 2001/10/30 15:49:32 morten Exp $
+ * @(#)$Id: UnionIterator.java,v 1.8 2001/11/27 08:40:28 morten Exp $
*
* The Apache Software License, Version 1.1
*
@@ -227,7 +227,7 @@
for (int i = 0; i < _free; i++) {
_heap[i].iterator.reset();
}
- return(this);
+ return resetPosition();
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: xalan-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xalan-cvs-help@xml.apache.org