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]

Reply via email to