mkwan       2003/03/21 10:37:54

  Modified:    java/src/org/apache/xalan/xsltc/dom Tag: XSLTC_DTM
                        SAXImpl.java
               java/src/org/apache/xml/dtm/ref/sax2dtm Tag: XSLTC_DTM
                        SAX2DTM2.java
  Log:
  XSLTC_DTM performance work
  Introduce a copyAttribute() method in SAXImpl to speed up
  attribute copying.
  
  Revision  Changes    Path
  No                   revision
  
  
  No                   revision
  
  
  1.1.2.45  +46 -20    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.44
  retrieving revision 1.1.2.45
  diff -u -r1.1.2.44 -r1.1.2.45
  --- SAXImpl.java      18 Mar 2003 16:24:32 -0000      1.1.2.44
  +++ SAXImpl.java      21 Mar 2003 18:37:54 -0000      1.1.2.45
  @@ -1905,12 +1905,7 @@
             }
             break;
           case DTM.ATTRIBUTE_NODE:
  -          final String attrURI = getNamespaceName(node);
  -          if (attrURI.length() != 0) {
  -            final String prefix = getPrefix(node);
  -            handler.namespace(prefix, attrURI);
  -          }
  -          handler.attribute(getNodeName(node), getNodeValue(node));
  +          copyAttribute(nodeID, eType, handler);
             break;
           case DTM.NAMESPACE_NODE:
             handler.namespace(getNodeNameX(node), getNodeValue(node));
  @@ -1927,16 +1922,12 @@
             while (true)
             {
               current++;
  -            type = _type2(current);
  +            eType = _exptype2(current);
  +            type = _exptype2Type(eType);
               
               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)));            
  +              copyAttribute(current, eType, handler);
               }
               else if (type == DTM.NAMESPACE_NODE)
               {
  @@ -2024,12 +2015,7 @@
                             getNodeValue(node)); //makeStringValue(node));
           return null;
         case DTM.ATTRIBUTE_NODE:
  -        final String uri = getNamespaceName(node);
  -        if (uri.length() != 0) {
  -            final String prefix = getPrefix(node); // _prefixArray[_prefix[node]];
  -            handler.namespace(prefix, uri);
  -        }
  -        handler.attribute(getNodeName(node), getNodeValue(node)); 
//makeStringValue(node));
  +        copyAttribute(nodeID, exptype, handler);
           return null;  
         default:
             final String uri1 = getNamespaceName(node);
  @@ -2086,6 +2072,46 @@
           handler.namespace(prefix, uri);
           return qName;
         }      
  +    }
  +    
  +    // %REVISIT% This interface can be moved to SAX2DTM2 with the new serializer.
  +    private void copyAttribute(int nodeID, int exptype, 
  +        TransletOutputHandler handler)
  +        throws TransletException
  +    {
  +        /*
  +          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)));            
  +        */
  +        final ExtendedType extType = m_extendedTypes[exptype];
  +        final String uri = extType.getNamespace();
  +        final String localName = extType.getLocalName();
  +        
  +        String prefix = null;
  +        String qname = null;
  +        int dataIndex = _dataOrQName(nodeID);
  +        int valueIndex = dataIndex;
  +        if (uri.length() != 0) {
  +            if (dataIndex <= 0) {
  +                int prefixIndex = m_data.elementAt(-dataIndex);
  +                valueIndex = m_data.elementAt(-dataIndex+1);
  +                qname = m_valuesOrPrefixes.indexToString(prefixIndex);
  +                int colonIndex = qname.indexOf(':');
  +                if (colonIndex > 0) {
  +                    prefix = qname.substring(0, colonIndex);
  +                }
  +            }
  +            handler.namespace(prefix, uri);           
  +        }
  +        
  +        String nodeName = (prefix != null) ? qname : localName;
  +        String nodeValue = (String)m_values.elementAt(valueIndex);
  +        
  +        handler.attribute(nodeName, nodeValue);
       }
   
       /**
  
  
  
  No                   revision
  
  
  No                   revision
  
  
  1.1.2.30  +1 -1      
xml-xalan/java/src/org/apache/xml/dtm/ref/sax2dtm/Attic/SAX2DTM2.java
  
  Index: SAX2DTM2.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xml/dtm/ref/sax2dtm/Attic/SAX2DTM2.java,v
  retrieving revision 1.1.2.29
  retrieving revision 1.1.2.30
  diff -u -r1.1.2.29 -r1.1.2.30
  --- SAX2DTM2.java     21 Mar 2003 16:51:50 -0000      1.1.2.29
  +++ SAX2DTM2.java     21 Mar 2003 18:37:54 -0000      1.1.2.30
  @@ -1820,7 +1820,7 @@
     // DTMStringPool because we can save the cost for hash calculation.
     //
     // %REVISIT% Do we need a custom class (e.g. StringVector) here?
  -  private Vector m_values;
  +  protected Vector m_values;
     
     // The current index into the m_values Vector.
     private int m_valueIndex = 0;
  
  
  

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

Reply via email to