mkwan       2003/02/26 13:59:41

  Modified:    java/src/org/apache/xalan/xsltc/dom Tag: XSLTC_DTM
                        SAXImpl.java
  Log:
  XSLTC_DTM performance work
  Improvement for xsl:copy-of. Instead of using the expensive 
getFirstAttribute()
  and getFirstNamespace() interfaces, increase the element id by 1 to iterate
  through all attribute and namespace nodes.
  
  Revision  Changes    Path
  No                   revision
  
  
  No                   revision
  
  
  1.1.2.34  +34 -6     
xml-xalan/java/src/org/apache/xalan/xsltc/dom/Attic/SAXImpl.java
  
  Index: SAXImpl.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/dom/Attic/SAXImpl.java,v
  retrieving revision 1.1.2.33
  retrieving revision 1.1.2.34
  diff -u -r1.1.2.33 -r1.1.2.34
  --- SAXImpl.java      25 Feb 2003 19:14:50 -0000      1.1.2.33
  +++ SAXImpl.java      26 Feb 2003 21:59:36 -0000      1.1.2.34
  @@ -1758,8 +1758,8 @@
       {
         //final int type = getNodeType(node); //_type[node];
         int nodeID = makeNodeIdentity(node);
  -      int exptype = _exptype2(nodeID);
  -      int type = _exptype2Type(exptype);
  +      int eType = _exptype2(nodeID);
  +      int type = _exptype2Type(eType);
   
         switch(type)
         {
  @@ -1800,8 +1800,34 @@
           if (type == DTM.ELEMENT_NODE) 
           {
             // Start element definition
  -          final String name = copyElement(nodeID, exptype, handler);
  +          final String name = copyElement(nodeID, eType, handler);
  +          
  +          // %OPT% Increase the element ID by 1 to iterate through all
  +          // attribute and namespace nodes.
  +          int current = nodeID;
  +          while (true)
  +          {
  +            current++;
  +            type = _type2(current);
  +            
  +            if (type == DTM.ATTRIBUTE_NODE)
  +            {
  +              final String uri = getNamespaceName(makeNodeHandle(current));
  +              if (uri.length() != 0) {
  +                final String prefix = getPrefix(makeNodeHandle(current));
  +                handler.namespace(prefix, uri);
  +              }
  +              handler.attribute(getNodeName(makeNodeHandle(current)), 
getNodeValue(makeNodeHandle(current)));            
  +            }
  +            else if (type == DTM.NAMESPACE_NODE)
  +            {
  +              handler.namespace(getNodeNameX(makeNodeHandle(current)), 
getNodeValue(makeNodeHandle(current)));            
  +            }
  +            else
  +              break;
  +          }
             // Copy element attribute
  +          /*
             for(int a=getFirstAttribute(node); a!=DTM.NULL; 
a=getNextAttribute(a))
               {
                 final String uri = getNamespaceName(a);
  @@ -1818,10 +1844,12 @@
                 handler.namespace(getNodeNameX(a),
                                   getNodeValue(a));
               }
  +          */
             
             // Copy element children
  -          for(int c=getFirstChild(node); c!=DTM.NULL; c=getNextSibling(c))
  -            copy(c, handler);
  +          for (int c = _firstch2(nodeID); c != DTM.NULL; c = _nextsib2(c))
  +            copy(makeNodeHandle(c), handler);
  +          
             // Close element definition
             handler.endElement(name);
           }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to