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/09/26 15:26:25 UTC
cvs commit: xml-xalan/java/src/org/apache/xalan/xsltc/dom DupFilterIterator.java
morten 01/09/26 06:26:25
Modified: java/src/org/apache/xalan/xsltc/dom DupFilterIterator.java
Log:
Modified the DupFilterIterator so that it also orders nodes.
PR: bugzilla 3466
Obtained from: n/a
Submitted by: morten@xml.apache.org
Reviewed by: morten@xml.apache.org
Revision Changes Path
1.8 +20 -18 xml-xalan/java/src/org/apache/xalan/xsltc/dom/DupFilterIterator.java
Index: DupFilterIterator.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/dom/DupFilterIterator.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- DupFilterIterator.java 2001/09/19 15:53:42 1.7
+++ DupFilterIterator.java 2001/09/26 13:26:25 1.8
@@ -1,5 +1,5 @@
/*
- * @(#)$Id: DupFilterIterator.java,v 1.7 2001/09/19 15:53:42 morten Exp $
+ * @(#)$Id: DupFilterIterator.java,v 1.8 2001/09/26 13:26:25 morten Exp $
*
* The Apache Software License, Version 1.1
*
@@ -107,6 +107,9 @@
* @return A reference to this node iterator
*/
public NodeIterator setStartNode(int node) {
+
+ int i, j; // loop variables declared first for speed - don't move!!!
+
// KeyIndex iterators are always relative to the root node, so there
// is never any point in re-reading the iterator (and we SHOULD NOT).
if ((_source instanceof KeyIndex) && (_data != null)) return this;
@@ -127,28 +130,27 @@
System.arraycopy(_data, 0, newArray, 0, _last);
_data = newArray;
}
- if (!isDup(node)) _data[_last++] = node;
+
+ // Go through all nodes in turn
+ for (i=0; i<_last; i++) {
+ // Is this a duplicate of the new node
+ if (_data[i] == node) {
+ break;
+ }
+ // Should the new node be inserted at this position?
+ else if (_data[i] > node) {
+ for (j = _last++; j>i; j--)
+ _data[j] = _data[j-1];
+ _data[i] = node;
+ break;
+ }
+ }
+ if (i == _last) _data[_last++] = node;
}
}
_current = 0; // set to beginning
return this;
- }
-
- /**
- * Check if a node is already in the _data array. The nodes should be in
- * document order or reverse document order, so we may be able to use
- * binary search here.
- */
- private boolean isDup(int node) {
- boolean retval = false;
- int size = _data.length;
- for (int i=0; i<size; i++) {
- if (_data[i] == node) {
- retval = true; break;
- }
- }
- return retval;
}
/**
---------------------------------------------------------------------
To unsubscribe, e-mail: xalan-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xalan-cvs-help@xml.apache.org