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]