mkwan       2003/02/21 14:20:28

  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
  Small improvement to SAXImpl.copyElement().
  Move the getStringValue() method from SAXImpl to SAX2DTM2.
  Remove the SAXImpl.stringValueAux() method.
  
  Revision  Changes    Path
  No                   revision
  
  
  No                   revision
  
  
  1.1.2.32  +58 -28    
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.31
  retrieving revision 1.1.2.32
  diff -u -r1.1.2.31 -r1.1.2.32
  --- SAXImpl.java      19 Feb 2003 18:15:46 -0000      1.1.2.31
  +++ SAXImpl.java      21 Feb 2003 22:20:27 -0000      1.1.2.32
  @@ -65,9 +65,6 @@
   
   package org.apache.xalan.xsltc.dom;
   
  -import java.io.IOException;
  -import java.io.ObjectInput;
  -import java.io.ObjectOutput;
   import java.util.Enumeration;
   
   import javax.xml.transform.Source;
  @@ -1759,7 +1756,10 @@
       public void copy(final int node, TransletOutputHandler handler)
        throws TransletException
       {
  -      final int type = getNodeType(node); //_type[node];
  +      //final int type = getNodeType(node); //_type[node];
  +      int nodeID = makeNodeIdentity(node);
  +      int exptype = _exptype2(nodeID);
  +      int type = _exptype2Type(exptype);
   
         switch(type)
         {
  @@ -1797,10 +1797,10 @@
           shallowCopy(node, handler);
           break;
         default:
  -        if (isElement(node)) 
  +        if (type == DTM.ELEMENT_NODE) 
           {
             // Start element definition
  -          final String name = copyElement(node, type, handler);
  +          final String name = copyElement(nodeID, exptype, handler);
             // Copy element attribute
             for(int a=getFirstAttribute(node); a!=DTM.NULL; 
a=getNextAttribute(a))
               {
  @@ -1869,11 +1869,17 @@
         throws TransletException
       {
   
  -      final int type = getNodeType(node);
  +      //final int type = getNodeType(node);
  +      int nodeID = makeNodeIdentity(node);
  +      int exptype = _exptype2(nodeID);
  +      int type = _exptype2Type(exptype);
  +      
         switch(type)
         {
  +      case DTM.ELEMENT_NODE:
  +        return(copyElement(nodeID, exptype, handler));
         case DTM.ROOT_NODE: // do nothing
  -     case DTM.DOCUMENT_NODE:
  +      case DTM.DOCUMENT_NODE:
           return EMPTYSTRING;
         case DTM.TEXT_NODE:
           characters(node, handler);      
  @@ -1897,12 +1903,6 @@
         handler.attribute(getNodeName(node), getNodeValue(node)); 
//makeStringValue(node));
             return null;  
         default:
  -        if (type == DTM.ELEMENT_NODE) //isElement(node))
  -        {
  -          return(copyElement(node, type, handler));
  -        }
  -        else
  -        {
             final String uri1 = getNamespaceName(node);
             if (uri1.length() != 0) {
               final String prefix = getPrefix(node); // 
_prefixArray[_prefix[node]];
  @@ -1910,32 +1910,59 @@
             }
             handler.attribute(getNodeName(node), getNodeValue(node)); 
//makeStringValue(node));
             return null;
  -        }
         }
       }
   
  -    private String copyElement(int node, int type,
  +    // %REVISIT% We can move this interface into SAX2DTM2 with the 
serializer changes.
  +    private String copyElement(int nodeID, int exptype,
                                  TransletOutputHandler handler)
         throws TransletException
       {
  -      final String name = getNodeName(node);
  -      final String localName = getLocalName(node);
  -      final String uri = getNamespaceName(node);
  -
  -      handler.startElement(name);
  -
  -      if (name.length() != localName.length()) {
  -        handler.namespace(getPrefix(node), uri);
  -      } else if (uri.length() != 0) {
  -        handler.namespace(EMPTYSTRING, uri);
  +      final ExtendedType extType = m_extendedTypes[exptype];
  +      String uri = extType.getNamespace();
  +      String name = extType.getLocalName();
  +      
  +      if (uri.length() == 0)
  +      {
  +             handler.startElement(name);
  +             return name;
         }
  +      else
  +      {
  +        int qnameIndex = m_dataOrQName.elementAt(nodeID);
   
  -      return name;
  +        if (qnameIndex == 0)
  +        {
  +          handler.startElement(name);
  +          handler.namespace(EMPTYSTRING, uri);
  +          return name;
  +        }
  +      
  +        if (qnameIndex < 0)
  +        {
  +       qnameIndex = -qnameIndex;
  +       qnameIndex = m_data.elementAt(qnameIndex);
  +        }
  +
  +        String qName = m_valuesOrPrefixes.indexToString(qnameIndex);
  +        handler.startElement(qName);
  +        
  +        int prefixIndex = qName.indexOf(':');
  +        String prefix;
  +        if (prefixIndex > 0)
  +          prefix = qName.substring(0, prefixIndex);
  +        else
  +          prefix = null;
  +        
  +        handler.namespace(prefix, uri);
  +        return qName;
  +      }      
       }
   
       /**
        * Returns the string value of the entire tree
        */
  +    /*
       public String getStringValue()
       {
         final int doc = getDocument();
  @@ -1948,6 +1975,7 @@
         else
           return stringValueAux(new StringBuffer(), doc).toString();
       }
  +    */
   
       /**
        * Returns the string value of any element
  @@ -1964,6 +1992,7 @@
       /**
        * Helper to getStringValue() above
        */
  +    /*
       private StringBuffer stringValueAux(StringBuffer buffer, final int 
element)
       {
         for (int child = getFirstChild(element);
  @@ -1984,6 +2013,7 @@
         }
         return buffer;
       }
  +    */
       
       public String getTreeString() {
        StringBuffer buf = new StringBuffer();
  
  
  
  No                   revision
  
  
  No                   revision
  
  
  1.1.2.17  +38 -7     
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.16
  retrieving revision 1.1.2.17
  diff -u -r1.1.2.16 -r1.1.2.17
  --- SAX2DTM2.java     20 Feb 2003 16:44:35 -0000      1.1.2.16
  +++ SAX2DTM2.java     21 Feb 2003 22:20:28 -0000      1.1.2.17
  @@ -1727,7 +1727,7 @@
     private int[][] m_parent_map;
   
     // %OPT% Cache the array of extended types in this class
  -  private ExtendedType[] m_extendedTypes;
  +  protected ExtendedType[] m_extendedTypes;
     
     // Cache the shift and mask values for the SuballocatedIntVectors.
     protected int m_SHIFT;
  @@ -1853,6 +1853,17 @@
       else
         return NULL;
     }
  +  
  +  /**
  +   * Return the node type from the expanded type
  +   */
  +  public final int _exptype2Type(int exptype)
  +  {
  +    if (NULL != exptype)
  +      return m_extendedTypes[exptype].getNodeType();
  +    else
  +      return NULL;    
  +  }
   
     /**
      * Given a node identity and an expanded type, return a node in the
  @@ -2659,7 +2670,7 @@
   
          if (type == DTM.TEXT_NODE || type == DTM.CDATA_SECTION_NODE)
          {
  -         int dataIndex = _dataOrQName(identity);
  +         int dataIndex = m_dataOrQName.elementAt(identity);
   
            if (-1 == offset)
            {
  @@ -2684,7 +2695,7 @@
       } 
       else if (DTM.TEXT_NODE == type || DTM.CDATA_SECTION_NODE == type)
       {
  -      int dataIndex = _dataOrQName(identity);
  +      int dataIndex = m_dataOrQName.elementAt(identity);
         int offset = m_data.elementAt(dataIndex);
         int length = m_data.elementAt(dataIndex + 1);
   
  @@ -2692,7 +2703,7 @@
       }
       else
       {
  -      int dataIndex = _dataOrQName(identity);
  +      int dataIndex = m_dataOrQName.elementAt(identity);
   
         if (dataIndex < 0)
         {
  @@ -2704,6 +2715,26 @@
     }
   
     /**
  +   * Returns the string value of the entire tree
  +   */
  +  public String getStringValue()
  +  {
  +    int child = _firstch2(ROOTNODE);
  +    if (child == DTM.NULL) return EMPTY_STR;
  +      
  +    // optimization: only create StringBuffer if > 1 child      
  +    if ((_exptype2(child) == DTM.TEXT_NODE) && (_nextsib2(child) == 
DTM.NULL))
  +    {
  +      int dataIndex = m_dataOrQName.elementAt(child);
  +      return m_chars.getString(m_data.elementAt(dataIndex), 
  +                               m_data.elementAt(dataIndex + 1));      
  +    }
  +    else
  +      return getStringValueX(getDocument());
  +    
  +  }
  +
  +  /**
      * The optimized version of SAX2DTM.dispatchCharactersEvents(int, 
ContentHandler, boolean).
      * This one does not have the third boolean parameter.
      *
  @@ -2751,7 +2782,7 @@
   
          if (type == DTM.TEXT_NODE || type == DTM.CDATA_SECTION_NODE)
          {
  -         int dataIndex = _dataOrQName(identity);
  +         int dataIndex = m_dataOrQName.elementAt(identity);
   
            if (-1 == offset)
            {
  @@ -2772,14 +2803,14 @@
       } 
       else if (DTM.TEXT_NODE == type || DTM.CDATA_SECTION_NODE == type)
       {
  -      int dataIndex = _dataOrQName(identity);
  +      int dataIndex = m_dataOrQName.elementAt(identity);
   
         m_chars.sendSAXcharacters(ch, m_data.elementAt(dataIndex), 
                                   m_data.elementAt(dataIndex + 1));
       }
       else
       {
  -      int dataIndex = _dataOrQName(identity);
  +      int dataIndex = m_dataOrQName.elementAt(identity);
   
         if (dataIndex < 0)
         {
  
  
  

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

Reply via email to