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/12/04 11:30:08 UTC
cvs commit: xml-xalan/java/src/org/apache/xalan/xsltc/dom AbsoluteIterator.java CurrentNodeListIterator.java DOMImpl.java FilterIterator.java FilteredStepIterator.java KeyIndex.java MatchingIterator.java MultiDOM.java NodeIteratorBase.java NthIterator.java StepIterator.java UnionIterator.java
morten 01/12/04 02:30:08
Modified: java/src/org/apache/xalan/xsltc NodeIterator.java
java/src/org/apache/xalan/xsltc/dom AbsoluteIterator.java
CurrentNodeListIterator.java DOMImpl.java
FilterIterator.java FilteredStepIterator.java
KeyIndex.java MatchingIterator.java MultiDOM.java
NodeIteratorBase.java NthIterator.java
StepIterator.java UnionIterator.java
Log:
A fix for the various node iterators cloneIterator() method. This method
should clear the _isRestartable flag to prevent iterators contained within
variables and parameters from changing their value. This flag is now wrapped
inside a setRestartable(boolean flag) method so that the call can be
propagated down a stack of iterators. This seems to solve many of our
iterator problems.
PR: n/a
Obtained from: n/a
Submitted by: morten@xml.apache.org
Reviewed by: morten@xml.apaceh.org
Revision Changes Path
1.2 +6 -1 xml-xalan/java/src/org/apache/xalan/xsltc/NodeIterator.java
Index: NodeIterator.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/NodeIterator.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- NodeIterator.java 2001/04/17 18:51:13 1.1
+++ NodeIterator.java 2001/12/04 10:30:07 1.2
@@ -1,5 +1,5 @@
/*
- * @(#)$Id: NodeIterator.java,v 1.1 2001/04/17 18:51:13 sboag Exp $
+ * @(#)$Id: NodeIterator.java,v 1.2 2001/12/04 10:30:07 morten Exp $
*
* The Apache Software License, Version 1.1
*
@@ -111,5 +111,10 @@
* Returns a deep copy of this iterator.
*/
public NodeIterator cloneIterator();
+
+ /**
+ * Prevents or allows iterator restarts.
+ */
+ public void setRestartable(boolean isRestartable);
}
1.6 +7 -2 xml-xalan/java/src/org/apache/xalan/xsltc/dom/AbsoluteIterator.java
Index: AbsoluteIterator.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/dom/AbsoluteIterator.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- AbsoluteIterator.java 2001/10/30 15:49:31 1.5
+++ AbsoluteIterator.java 2001/12/04 10:30:07 1.6
@@ -1,5 +1,5 @@
/*
- * @(#)$Id: AbsoluteIterator.java,v 1.5 2001/10/30 15:49:31 morten Exp $
+ * @(#)$Id: AbsoluteIterator.java,v 1.6 2001/12/04 10:30:07 morten Exp $
*
* The Apache Software License, Version 1.1
*
@@ -77,6 +77,11 @@
public int next() {
return returnNode(_source.next());
}
+
+ public void setRestartable(boolean isRestartable) {
+ _isRestartable = isRestartable;
+ _source.setRestartable(isRestartable);
+ }
public NodeIterator setStartNode(int node) {
_startNode = DOM.ROOTNODE;
@@ -90,7 +95,7 @@
public NodeIterator cloneIterator() {
try {
final AbsoluteIterator clone = (AbsoluteIterator)super.clone();
- clone._isRestartable = false;
+ clone.setRestartable(false);
clone._source = _source.cloneIterator();
return clone.reset();
}
1.5 +7 -2 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.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- CurrentNodeListIterator.java 2001/11/27 15:20:55 1.4
+++ CurrentNodeListIterator.java 2001/12/04 10:30:07 1.5
@@ -1,5 +1,5 @@
/*
- * @(#)$Id: CurrentNodeListIterator.java,v 1.4 2001/11/27 15:20:55 morten Exp $
+ * @(#)$Id: CurrentNodeListIterator.java,v 1.5 2001/12/04 10:30:07 morten Exp $
*
* The Apache Software License, Version 1.1
*
@@ -104,6 +104,11 @@
return this;
}
+ public void setRestartable(boolean isRestartable) {
+ _isRestartable = isRestartable;
+ _source.setRestartable(isRestartable);
+ }
+
public boolean isReverse() {
return !_docOrder;
}
@@ -113,7 +118,7 @@
final CurrentNodeListIterator clone =
(CurrentNodeListIterator)super.clone();
clone._nodes = (IntegerArray)_nodes.clone();
- clone._isRestartable = false;
+ clone.setRestartable(false);
return clone.reset();
}
catch (CloneNotSupportedException e) {
1.65 +24 -14 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.64
retrieving revision 1.65
diff -u -r1.64 -r1.65
--- DOMImpl.java 2001/11/29 11:33:09 1.64
+++ DOMImpl.java 2001/12/04 10:30:07 1.65
@@ -1,5 +1,5 @@
/*
- * @(#)$Id: DOMImpl.java,v 1.64 2001/11/29 11:33:09 morten Exp $
+ * @(#)$Id: DOMImpl.java,v 1.65 2001/12/04 10:30:07 morten Exp $
*
* The Apache Software License, Version 1.1
*
@@ -105,6 +105,7 @@
public boolean isReverse() { return false; }
public NodeIterator resetOnce() { return this; }
public NodeIterator includeSelf() { return this; }
+ public void setRestartable(boolean isRestartable) { }
};
// Contains the number of nodes and attribute nodes in the tree
@@ -743,7 +744,7 @@
final TypedChildrenIterator clone =
(TypedChildrenIterator)super.clone();
clone._nodeType = _nodeType;
- clone._isRestartable = false;
+ clone.setRestartable(false);
return clone.reset();
}
catch (CloneNotSupportedException e) {
@@ -1201,7 +1202,7 @@
try {
final PrecedingIterator clone =
(PrecedingIterator)super.clone();
- clone._isRestartable = false;
+ clone.setRestartable(false);
return clone.reset();
}
catch (CloneNotSupportedException e) {
@@ -1361,7 +1362,7 @@
public NodeIterator cloneIterator() {
try {
final AncestorIterator clone = (AncestorIterator)super.clone();
- clone._isRestartable = false; // must set to false for any clone
+ clone.setRestartable(false); // must set to false for any clone
clone._startNode = _startNode;
return clone.reset();
}
@@ -1537,6 +1538,11 @@
_pos = pos;
}
+ public void setRestartable(boolean isRestartable) {
+ _isRestartable = isRestartable;
+ _source.setRestartable(isRestartable);
+ }
+
// The start node of this iterator is always the root!!!
public NodeIterator setStartNode(int node) {
_source.setStartNode(node);
@@ -1625,6 +1631,11 @@
}
}
+ public void setRestartable(boolean isRestartable) {
+ _isRestartable = isRestartable;
+ _source.setRestartable(isRestartable);
+ }
+
public NodeIterator setStartNode(int node) {
if (_children) {
if (_filter.stripSpace((DOM)DOMImpl.this, node,
@@ -1724,6 +1735,7 @@
private boolean _op;
private final boolean _isReverse;
private int _returnType = RETURN_PARENT;
+ private int _pos;
public NodeValueIterator(NodeIterator source, int returnType,
String value, boolean op) {
@@ -1738,20 +1750,16 @@
return _isReverse;
}
+ public void setRestartable(boolean isRestartable) {
+ _isRestartable = isRestartable;
+ _source.setRestartable(isRestartable);
+ }
+
public NodeIterator cloneIterator() {
try {
NodeValueIterator clone = (NodeValueIterator)super.clone();
clone._source = _source.cloneIterator();
- if (_source instanceof StepIterator) {
- StepIterator source = (StepIterator)clone._source;
- source.setRestartable();
- }
- else if (_source instanceof NodeIteratorBase) {
- NodeIteratorBase source = (NodeIteratorBase)clone._source;
- source._isRestartable = true;
- }
- clone._value = _value;
- clone._op = _op;
+ clone.setRestartable(false);
return clone.reset();
}
catch (CloneNotSupportedException e) {
@@ -1791,10 +1799,12 @@
public void setMark() {
_source.setMark();
+ _pos = _position;
}
public void gotoMark() {
_source.gotoMark();
+ _position = _pos;
}
}
1.4 +8 -3 xml-xalan/java/src/org/apache/xalan/xsltc/dom/FilterIterator.java
Index: FilterIterator.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/dom/FilterIterator.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- FilterIterator.java 2001/10/30 15:49:32 1.3
+++ FilterIterator.java 2001/12/04 10:30:07 1.4
@@ -1,5 +1,5 @@
/*
- * @(#)$Id: FilterIterator.java,v 1.3 2001/10/30 15:49:32 morten Exp $
+ * @(#)$Id: FilterIterator.java,v 1.4 2001/12/04 10:30:07 morten Exp $
*
* The Apache Software License, Version 1.1
*
@@ -80,11 +80,16 @@
public boolean isReverse() {
return _isReverse;
}
-
+
+ public void setRestartable(boolean isRestartable) {
+ _isRestartable = isRestartable;
+ _source.setRestartable(isRestartable);
+ }
+
public NodeIterator cloneIterator() {
try {
final FilterIterator clone = (FilterIterator)super.clone();
- clone._isRestartable = false;
+ clone.setRestartable(false);
clone._source = _source.cloneIterator();
return clone.reset();
}
1.5 +2 -2 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.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- FilteredStepIterator.java 2001/11/27 15:20:55 1.4
+++ FilteredStepIterator.java 2001/12/04 10:30:07 1.5
@@ -1,5 +1,5 @@
/*
- * @(#)$Id: FilteredStepIterator.java,v 1.4 2001/11/27 15:20:55 morten Exp $
+ * @(#)$Id: FilteredStepIterator.java,v 1.5 2001/12/04 10:30:07 morten Exp $
*
* The Apache Software License, Version 1.1
*
@@ -85,7 +85,7 @@
clone._source = _source.cloneIterator();
clone._iterator = _iterator.cloneIterator();
clone._filter = _filter;
- clone.setNotRestartable();
+ clone.setRestartable(false);
return clone.reset();
}
catch (CloneNotSupportedException e) {
1.7 +5 -1 xml-xalan/java/src/org/apache/xalan/xsltc/dom/KeyIndex.java
Index: KeyIndex.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/dom/KeyIndex.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- KeyIndex.java 2001/11/27 15:20:55 1.6
+++ KeyIndex.java 2001/12/04 10:30:07 1.7
@@ -1,5 +1,5 @@
/*
- * @(#)$Id: KeyIndex.java,v 1.6 2001/11/27 15:20:55 morten Exp $
+ * @(#)$Id: KeyIndex.java,v 1.7 2001/12/04 10:30:07 morten Exp $
*
* The Apache Software License, Version 1.1
*
@@ -85,6 +85,10 @@
*/
public KeyIndex(int size) {
_arraySize = size;
+ }
+
+ public void setRestartable(boolean flag) {
+
}
/**
1.6 +7 -2 xml-xalan/java/src/org/apache/xalan/xsltc/dom/MatchingIterator.java
Index: MatchingIterator.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/dom/MatchingIterator.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- MatchingIterator.java 2001/11/27 15:20:55 1.5
+++ MatchingIterator.java 2001/12/04 10:30:07 1.6
@@ -1,5 +1,5 @@
/*
- * @(#)$Id: MatchingIterator.java,v 1.5 2001/11/27 15:20:55 morten Exp $
+ * @(#)$Id: MatchingIterator.java,v 1.6 2001/12/04 10:30:07 morten Exp $
*
* The Apache Software License, Version 1.1
*
@@ -76,11 +76,16 @@
_match = match;
}
+ public void setRestartable(boolean isRestartable) {
+ _isRestartable = isRestartable;
+ _source.setRestartable(isRestartable);
+ }
+
public NodeIterator cloneIterator() {
try {
final MatchingIterator clone = (MatchingIterator)super.clone();
clone._source = _source.cloneIterator();
- clone._isRestartable = false;
+ clone.setRestartable(false);
return clone;
}
catch (CloneNotSupportedException e) {
1.16 +13 -6 xml-xalan/java/src/org/apache/xalan/xsltc/dom/MultiDOM.java
Index: MultiDOM.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/dom/MultiDOM.java,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -r1.15 -r1.16
--- MultiDOM.java 2001/11/27 15:20:55 1.15
+++ MultiDOM.java 2001/12/04 10:30:07 1.16
@@ -1,5 +1,5 @@
/*
- * @(#)$Id: MultiDOM.java,v 1.15 2001/11/27 15:20:55 morten Exp $
+ * @(#)$Id: MultiDOM.java,v 1.16 2001/12/04 10:30:07 morten Exp $
*
* The Apache Software License, Version 1.1
*
@@ -107,6 +107,10 @@
return node != END ? (node | _mask) : END;
}
+ public void setRestartable(boolean flag) {
+ _source.setRestartable(flag);
+ }
+
public NodeIterator setStartNode(final int node) {
_mask = node & SET;
int dom = node >>> 24;
@@ -155,7 +159,7 @@
public NodeIterator cloneIterator() {
final AxisIterator clone = new AxisIterator(_axis, _type);
clone._source = _source.cloneIterator();
- clone._mask = _mask;
+ clone._mask = _mask;
return clone;
}
@@ -191,9 +195,7 @@
try {
NodeValueIterator clone = (NodeValueIterator)super.clone();
clone._source = _source.cloneIterator();
- clone._value = _value;
- clone._op = _op;
- _isRestartable = false;
+ clone.setRestartable(false);
return clone.reset();
}
catch (CloneNotSupportedException e) {
@@ -202,7 +204,12 @@
return null;
}
}
-
+
+ public void setRestartable(boolean isRestartable) {
+ _isRestartable = isRestartable;
+ _source.setRestartable(isRestartable);
+ }
+
public NodeIterator reset() {
_source.reset();
return resetPosition();
1.6 +6 -1 xml-xalan/java/src/org/apache/xalan/xsltc/dom/NodeIteratorBase.java
Index: NodeIteratorBase.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/dom/NodeIteratorBase.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- NodeIteratorBase.java 2001/10/30 15:49:32 1.5
+++ NodeIteratorBase.java 2001/12/04 10:30:07 1.6
@@ -1,5 +1,5 @@
/*
- * @(#)$Id: NodeIteratorBase.java,v 1.5 2001/10/30 15:49:32 morten Exp $
+ * @(#)$Id: NodeIteratorBase.java,v 1.6 2001/12/04 10:30:07 morten Exp $
*
* The Apache Software License, Version 1.1
*
@@ -58,6 +58,7 @@
*
* @author Jacek Ambroziak
* @author Santiago Pericas-Geertsen
+ * @author Morten Jorgensen
*
*/
@@ -74,6 +75,10 @@
protected int _startNode = NodeIterator.END;
protected boolean _includeSelf = false;
protected boolean _isRestartable = true;
+
+ public void setRestartable(boolean isRestartable) {
+ _isRestartable = isRestartable;
+ }
public NodeIterator reset() {
final boolean temp = _isRestartable;
1.9 +11 -5 xml-xalan/java/src/org/apache/xalan/xsltc/dom/NthIterator.java
Index: NthIterator.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/dom/NthIterator.java,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- NthIterator.java 2001/11/27 15:20:55 1.8
+++ NthIterator.java 2001/12/04 10:30:07 1.9
@@ -1,5 +1,5 @@
/*
- * @(#)$Id: NthIterator.java,v 1.8 2001/11/27 15:20:55 morten Exp $
+ * @(#)$Id: NthIterator.java,v 1.9 2001/12/04 10:30:07 morten Exp $
*
* The Apache Software License, Version 1.1
*
@@ -77,6 +77,11 @@
_source = source;
_position = n;
}
+
+ public void setRestartable(boolean isRestartable) {
+ _isRestartable = isRestartable;
+ _source.setRestartable(isRestartable);
+ }
public int next() {
if (_ready && _position > 0) {
@@ -94,8 +99,10 @@
}
public NodeIterator setStartNode(final int node) {
- _source.setStartNode(node);
- _ready = true;
+ if (_isRestartable) {
+ _source.setStartNode(node);
+ _ready = true;
+ }
return this;
}
@@ -127,9 +134,8 @@
public NodeIterator cloneIterator() {
NodeIterator clone = _source.cloneIterator();
- ((NodeIteratorBase)clone)._isRestartable = true;
NthIterator other = new NthIterator(clone, _position);
- other._isRestartable = false;
+ other.setRestartable(false);
return other.reset();
}
}
1.11 +6 -24 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.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- StepIterator.java 2001/11/29 11:33:09 1.10
+++ StepIterator.java 2001/12/04 10:30:07 1.11
@@ -1,5 +1,5 @@
/*
- * @(#)$Id: StepIterator.java,v 1.10 2001/11/29 11:33:09 morten Exp $
+ * @(#)$Id: StepIterator.java,v 1.11 2001/12/04 10:30:07 morten Exp $
*
* The Apache Software License, Version 1.1
*
@@ -79,36 +79,18 @@
_iterator = iterator;
}
- protected void setRestartable() {
- _isRestartable = true;
- if (_source instanceof StepIterator) {
- ((StepIterator)_source).setRestartable();
- }
- else if (_source instanceof NodeIteratorBase) {
- ((NodeIteratorBase)_source)._isRestartable = true;
- }
- if (_iterator instanceof NodeIteratorBase)
- ((NodeIteratorBase)_iterator)._isRestartable = true;
+ public void setRestartable(boolean isRestartable) {
+ _isRestartable = isRestartable;
+ _source.setRestartable(isRestartable);
+ _iterator.setRestartable(true); // must _always_ be restartable
}
- protected void setNotRestartable() {
- _isRestartable = false;
- if (_source instanceof StepIterator) {
- ((StepIterator)_source).setNotRestartable();
- }
- else if (_source instanceof NodeIteratorBase) {
- ((NodeIteratorBase)_source)._isRestartable = false;
- }
- if (_iterator instanceof NodeIteratorBase)
- ((NodeIteratorBase)_iterator)._isRestartable = true;
- }
-
public NodeIterator cloneIterator() {
try {
final StepIterator clone = (StepIterator)super.clone();
clone._source = _source.cloneIterator();
clone._iterator = _iterator.cloneIterator();
- clone.setNotRestartable();
+ clone.setRestartable(false);
return clone.reset();
}
catch (CloneNotSupportedException e) {
1.10 +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.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- UnionIterator.java 2001/11/27 15:20:55 1.9
+++ UnionIterator.java 2001/12/04 10:30:07 1.10
@@ -1,5 +1,5 @@
/*
- * @(#)$Id: UnionIterator.java,v 1.9 2001/11/27 15:20:55 morten Exp $
+ * @(#)$Id: UnionIterator.java,v 1.10 2001/12/04 10:30:07 morten Exp $
*
* The Apache Software License, Version 1.1
*
@@ -125,7 +125,7 @@
try {
final UnionIterator clone = (UnionIterator)super.clone();
System.arraycopy(_heap, 0, heapCopy, 0, _heap.length);
- clone._isRestartable = false;
+ clone.setRestartable(false);
clone._heap = heapCopy;
return clone.reset();
}
---------------------------------------------------------------------
To unsubscribe, e-mail: xalan-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xalan-cvs-help@xml.apache.org