morten 01/10/19 02:14:17
Modified: java/src/org/apache/xalan/xsltc/dom DOMImpl.java
Log:
Gave the parent/sibling stacks in the DOM builder dynamic length.
PR: bugzilla 3066
Obtained from: n/a
Submitted by: [EMAIL PROTECTED]
Reviewed by: [EMAIL PROTECTED]
Revision Changes Path
1.53 +26 -4
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.52
retrieving revision 1.53
diff -u -r1.52 -r1.53
--- DOMImpl.java 2001/10/18 17:10:45 1.52
+++ DOMImpl.java 2001/10/19 09:14:16 1.53
@@ -1,5 +1,5 @@
/*
- * @(#)$Id: DOMImpl.java,v 1.52 2001/10/18 17:10:45 morten Exp $
+ * @(#)$Id: DOMImpl.java,v 1.53 2001/10/19 09:14:16 morten Exp $
*
* The Apache Software License, Version 1.1
*
@@ -2767,12 +2767,15 @@
private final static int ATTR_ARRAY_SIZE = 32;
private final static int REUSABLE_TEXT_SIZE = 32;
+ private final static int INIT_STACK_LENGTH = 64;
+
private Hashtable _shortTexts = null;
private Hashtable _names = null;
private int _nextNameCode = NTYPES;
- private int[] _parentStack = new int[64];
- private int[] _previousSiblingStack = new int[64];
+ private int _parentStackLength = INIT_STACK_LENGTH;
+ private int[] _parentStack = new int[INIT_STACK_LENGTH];
+ private int[] _previousSiblingStack = new int[INIT_STACK_LENGTH];
private int _sp;
private int _baseOffset = 0;
private int _currentOffset = 0;
@@ -2898,6 +2901,25 @@
}
/**
+ * Sets the current parent
+ */
+ private void linkParent(final int node) {
+ if (++_sp >= _parentStackLength) {
+ int length = _parentStackLength;
+ _parentStackLength = length + INIT_STACK_LENGTH;
+
+ final int newParent[] = new int[_parentStackLength];
+ System.arraycopy(_parentStack,0,newParent,0,length);
+ _parentStack = newParent;
+
+ final int newSibling[] = new int[_parentStackLength];
+ System.arraycopy(_previousSiblingStack,0,newSibling,0,length);
+ _previousSiblingStack = newSibling;
+ }
+ _parentStack[_sp] = node;
+ }
+
+ /**
* Generate the internal type for an element's expanded QName
*/
private short makeElementNode(String uri, String localname)
@@ -3196,7 +3218,7 @@
// Get node index and setup parent/child references
final int node = nextNode();
linkChildren(node);
- _parentStack[++_sp] = node;
+ linkParent(node);
_lengthOrAttr[node] = DOM.NULL;
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]