Author: amassari
Date: Fri Apr 18 08:15:54 2008
New Revision: 649566

URL: http://svn.apache.org/viewvc?rev=649566&view=rev
Log:
Performance improvements

Modified:
    xerces/c/trunk/src/xercesc/parsers/SAX2XMLReaderImpl.cpp
    xerces/c/trunk/src/xercesc/parsers/SAX2XMLReaderImpl.hpp
    xerces/c/trunk/src/xercesc/util/ValueVectorOf.c

Modified: xerces/c/trunk/src/xercesc/parsers/SAX2XMLReaderImpl.cpp
URL: 
http://svn.apache.org/viewvc/xerces/c/trunk/src/xercesc/parsers/SAX2XMLReaderImpl.cpp?rev=649566&r1=649565&r2=649566&view=diff
==============================================================================
--- xerces/c/trunk/src/xercesc/parsers/SAX2XMLReaderImpl.cpp (original)
+++ xerces/c/trunk/src/xercesc/parsers/SAX2XMLReaderImpl.cpp Fri Apr 18 
08:15:54 2008
@@ -79,6 +79,7 @@
     , fPrefixesStorage(0)
     , fPrefixes(0)
     , fPrefixCounts(0)
+    , fTempQName(0)
     , fDTDHandler(0)
     , fEntityResolver(0)
     , fXMLEntityResolver(0)
@@ -145,9 +146,10 @@
        setDoSchema(true);
        
     fPrefixesStorage = new (fMemoryManager) XMLStringPool(109, fMemoryManager) 
;
-       fPrefixes    = new (fMemoryManager) ValueStackOf<unsigned int> (30, 
fMemoryManager) ;
-       fTempAttrVec  = new (fMemoryManager) RefVectorOf<XMLAttr>  (10, false, 
fMemoryManager) ;
-       fPrefixCounts = new (fMemoryManager) ValueStackOf<unsigned int>(10, 
fMemoryManager) ;
+       fPrefixes        = new (fMemoryManager) ValueStackOf<unsigned int> (30, 
fMemoryManager) ;
+       fTempAttrVec     = new (fMemoryManager) RefVectorOf<XMLAttr>  (10, 
false, fMemoryManager) ;
+       fPrefixCounts    = new (fMemoryManager) ValueStackOf<unsigned int>(10, 
fMemoryManager) ;
+    fTempQName       = new XMLBuffer(32, fMemoryManager);
 }
 
 
@@ -160,6 +162,7 @@
     delete fTempAttrVec;
     delete fPrefixCounts;
     delete fGrammarResolver;
+    delete fTempQName;
     // grammar pool must do this
     //delete fURIStringPool;
 }
@@ -693,42 +696,37 @@
 
     if (fDocHandler)
     {
-        ArrayJanitor<XMLCh> janElemName(NULL);
-        XMLCh* elemQName = NULL;
+        const QName* qName=elemDecl.getElementName();
+        const XMLCh* baseName=qName->getLocalPart();
+        XMLCh* elemQName = 0;
         if(elemPrefix==0 || *elemPrefix==0)
-            elemQName=(XMLCh*)elemDecl.getBaseName();
-        else if(XMLString::equals(elemPrefix, 
elemDecl.getElementName()->getPrefix()))
-            elemQName=(XMLCh*)elemDecl.getElementName()->getRawName();
+            elemQName=(XMLCh*)baseName;
+        else if(XMLString::equals(elemPrefix, qName->getPrefix()))
+            elemQName=(XMLCh*)qName->getRawName();
         else
         {
-            XMLSize_t prefixLen=XMLString::stringLen(elemPrefix);
-            
elemQName=(XMLCh*)fMemoryManager->allocate((prefixLen+1+XMLString::stringLen(elemDecl.getBaseName())+1)*sizeof(XMLCh));
-            XMLString::moveChars(elemQName, elemPrefix, prefixLen);
-            elemQName[prefixLen] = chColon;
-            XMLString::copyString(&elemQName[prefixLen+1], 
elemDecl.getBaseName());
-            janElemName.reset(elemQName, fMemoryManager);
+            fTempQName->set(elemPrefix);
+            fTempQName->append(chColon);
+            fTempQName->append(baseName);
+            elemQName=fTempQName->getRawBuffer();
         }
 
         if (getDoNamespaces())
         {
             unsigned int numPrefix = 0;
-            const XMLCh*   nsString = XMLUni::fgXMLNSString;
-            const XMLAttr* tempAttr = 0;
 
             if (!fNamespacePrefix)
-            {
                 fTempAttrVec->removeAllElements();
-            }
 
             for (unsigned int i = 0; i < attrCount; i++)
             {
                 const XMLCh*   nsPrefix = 0;
                 const XMLCh*   nsURI    = 0;
 
-                tempAttr = attrList.elementAt(i);
-                if (XMLString::equals(tempAttr->getQName(), nsString))
+                const XMLAttr* tempAttr = attrList.elementAt(i);
+                if (XMLString::equals(tempAttr->getQName(), 
XMLUni::fgXMLNSString))
                     nsURI = tempAttr->getValue();
-                if (XMLString::equals(tempAttr->getPrefix(), nsString))
+                if (XMLString::equals(tempAttr->getPrefix(), 
XMLUni::fgXMLNSString))
                 {
                     nsPrefix = tempAttr->getName();
                     nsURI = tempAttr->getValue();
@@ -761,7 +759,7 @@
                 fDocHandler->startElement
                 (
                     fScanner->getURIText(elemURLId)
-                    , elemDecl.getBaseName()
+                    , baseName
                     , elemQName
                     , fAttrList
                 );
@@ -773,7 +771,7 @@
             if(fDocHandler)
             {
                 fDocHandler->startElement(XMLUni::fgZeroLenString,
-                                          elemDecl.getBaseName(),
+                                          baseName,
                                           elemQName,
                                           fAttrList);
             }
@@ -791,7 +789,7 @@
                     fDocHandler->endElement
                     (
                         fScanner->getURIText(elemURLId)
-                        , elemDecl.getBaseName()
+                        , baseName
                         , elemQName
                     );
                 }
@@ -809,7 +807,7 @@
                 if(fDocHandler)
                 {
                     fDocHandler->endElement(XMLUni::fgZeroLenString,
-                                    elemDecl.getBaseName(),
+                                    baseName,
                                     elemQName);
                 }
             }
@@ -843,20 +841,19 @@
     // Just map to the SAX document handler
     if (fDocHandler)
     {
-        ArrayJanitor<XMLCh> janElemName(NULL);
-        XMLCh* elemQName = NULL;
+        const QName* qName=elemDecl.getElementName();
+        const XMLCh* baseName=qName->getLocalPart();
+        XMLCh* elemQName = 0;
         if(elemPrefix==0 || *elemPrefix==0)
-            elemQName=(XMLCh*)elemDecl.getBaseName();
-        else if(XMLString::equals(elemPrefix, 
elemDecl.getElementName()->getPrefix()))
-            elemQName=(XMLCh*)elemDecl.getElementName()->getRawName();
+            elemQName=(XMLCh*)baseName;
+        else if(XMLString::equals(elemPrefix, qName->getPrefix()))
+            elemQName=(XMLCh*)qName->getRawName();
         else
         {
-            XMLSize_t prefixLen=XMLString::stringLen(elemPrefix);
-            
elemQName=(XMLCh*)fMemoryManager->allocate((prefixLen+1+XMLString::stringLen(elemDecl.getBaseName())+1)*sizeof(XMLCh));
-            XMLString::moveChars(elemQName, elemPrefix, prefixLen);
-            elemQName[prefixLen] = chColon;
-            XMLString::copyString(&elemQName[prefixLen+1], 
elemDecl.getBaseName());
-            janElemName.reset(elemQName, fMemoryManager);
+            fTempQName->set(elemPrefix);
+            fTempQName->append(chColon);
+            fTempQName->append(baseName);
+            elemQName=fTempQName->getRawBuffer();
         }
 
         if (getDoNamespaces())
@@ -866,7 +863,7 @@
                 fDocHandler->endElement
                 (
                     fScanner->getURIText(uriId)
-                    , elemDecl.getBaseName()
+                    , baseName
                     , elemQName
                 );
             }
@@ -887,7 +884,7 @@
                 fDocHandler->endElement
                 (
                     XMLUni::fgZeroLenString,
-                    elemDecl.getBaseName(),
+                    baseName,
                     elemQName 
                 );
             }

Modified: xerces/c/trunk/src/xercesc/parsers/SAX2XMLReaderImpl.hpp
URL: 
http://svn.apache.org/viewvc/xerces/c/trunk/src/xercesc/parsers/SAX2XMLReaderImpl.hpp?rev=649566&r1=649565&r2=649566&view=diff
==============================================================================
--- xerces/c/trunk/src/xercesc/parsers/SAX2XMLReaderImpl.hpp (original)
+++ xerces/c/trunk/src/xercesc/parsers/SAX2XMLReaderImpl.hpp Fri Apr 18 
08:15:54 2008
@@ -1652,6 +1652,7 @@
     XMLStringPool*              fPrefixesStorage ;
     ValueStackOf<unsigned int>* fPrefixes ;
     ValueStackOf<unsigned int>* fPrefixCounts ;
+    XMLBuffer*                  fTempQName;
     DTDHandler*                 fDTDHandler;
     EntityResolver*             fEntityResolver;
     XMLEntityResolver*          fXMLEntityResolver;

Modified: xerces/c/trunk/src/xercesc/util/ValueVectorOf.c
URL: 
http://svn.apache.org/viewvc/xerces/c/trunk/src/xercesc/util/ValueVectorOf.c?rev=649566&r1=649565&r2=649566&view=diff
==============================================================================
--- xerces/c/trunk/src/xercesc/util/ValueVectorOf.c (original)
+++ xerces/c/trunk/src/xercesc/util/ValueVectorOf.c Fri Apr 18 08:15:54 2008
@@ -116,8 +116,7 @@
 template <class TElem> void ValueVectorOf<TElem>::addElement(const TElem& 
toAdd)
 {
     ensureExtraCapacity(1);
-    fElemList[fCurCount] = toAdd;
-    fCurCount++;
+    fElemList[fCurCount++] = toAdd;
 }
 
 template <class TElem> void ValueVectorOf<TElem>::
@@ -156,12 +155,6 @@
     if (removeAt >= fCurCount)
         ThrowXMLwithMemMgr(ArrayIndexOutOfBoundsException, 
XMLExcepts::Vector_BadIndex, fMemoryManager);
 
-    if (removeAt == fCurCount-1)
-    {
-        fCurCount--;
-        return;
-    }
-
     // Copy down every element above remove point
     for (unsigned int index = removeAt; index < fCurCount-1; index++)
         fElemList[index] = fElemList[index+1];
@@ -232,24 +225,24 @@
 {
     unsigned int newMax = fCurCount + length;
 
-    if (newMax <= fMaxCount)
-        return;
-
-    // Avoid too many reallocations by expanding by a percentage
-    unsigned int minNewMax = (unsigned int)((double)fCurCount * 1.25);
-    if (newMax < minNewMax)
-        newMax = minNewMax;
-
-    TElem* newList = (TElem*) fMemoryManager->allocate
-    (
-        newMax * sizeof(TElem)
-    ); //new TElem[newMax];
-    for (unsigned int index = 0; index < fCurCount; index++)
-        newList[index] = fElemList[index];
-
-    fMemoryManager->deallocate(fElemList); //delete [] fElemList;
-    fElemList = newList;
-    fMaxCount = newMax;
+    if (newMax > fMaxCount)
+    {
+        // Avoid too many reallocations by expanding by a percentage
+        unsigned int minNewMax = (unsigned int)((double)fCurCount * 1.25);
+        if (newMax < minNewMax)
+            newMax = minNewMax;
+
+        TElem* newList = (TElem*) fMemoryManager->allocate
+        (
+            newMax * sizeof(TElem)
+        ); //new TElem[newMax];
+        for (unsigned int index = 0; index < fCurCount; index++)
+            newList[index] = fElemList[index];
+
+        fMemoryManager->deallocate(fElemList); //delete [] fElemList;
+        fElemList = newList;
+        fMaxCount = newMax;
+    }
 }
 
 template <class TElem> const TElem* ValueVectorOf<TElem>::rawData() const



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

Reply via email to