You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xerces.apache.org by am...@apache.org on 2006/07/25 10:44:03 UTC
svn commit: r425332 - in /xerces/c/trunk/src/xercesc:
dom/impl/DOMCharacterDataImpl.cpp dom/impl/DOMDocumentImpl.cpp
dom/impl/DOMDocumentImpl.hpp dom/impl/DOMStringPool.hpp util/RefStackOf.c
util/RefStackOf.hpp
Author: amassari
Date: Tue Jul 25 01:44:03 2006
New Revision: 425332
URL: http://svn.apache.org/viewvc?rev=425332&view=rev
Log:
Reduce the number of allocations needed by text and attribute nodes (jira#1585)
Modified:
xerces/c/trunk/src/xercesc/dom/impl/DOMCharacterDataImpl.cpp
xerces/c/trunk/src/xercesc/dom/impl/DOMDocumentImpl.cpp
xerces/c/trunk/src/xercesc/dom/impl/DOMDocumentImpl.hpp
xerces/c/trunk/src/xercesc/dom/impl/DOMStringPool.hpp
xerces/c/trunk/src/xercesc/util/RefStackOf.c
xerces/c/trunk/src/xercesc/util/RefStackOf.hpp
Modified: xerces/c/trunk/src/xercesc/dom/impl/DOMCharacterDataImpl.cpp
URL: http://svn.apache.org/viewvc/xerces/c/trunk/src/xercesc/dom/impl/DOMCharacterDataImpl.cpp?rev=425332&r1=425331&r2=425332&view=diff
==============================================================================
--- xerces/c/trunk/src/xercesc/dom/impl/DOMCharacterDataImpl.cpp (original)
+++ xerces/c/trunk/src/xercesc/dom/impl/DOMCharacterDataImpl.cpp Tue Jul 25 01:44:03 2006
@@ -35,7 +35,7 @@
{
fDoc = (DOMDocumentImpl*)doc;
- fDataBuf = fDoc->popBuffer();
+ fDataBuf = fDoc->popBuffer(XMLString::stringLen(dat)+1);
if (!fDataBuf)
fDataBuf = new (fDoc) DOMBuffer(fDoc, dat);
else
@@ -50,7 +50,7 @@
{
fDoc = (DOMDocumentImpl*)other.fDoc;
- fDataBuf = fDoc->popBuffer();
+ fDataBuf = fDoc->popBuffer(other.getLength()+1);
if (!fDataBuf)
fDataBuf = new (fDoc) DOMBuffer(fDoc, other.fDataBuf->getRawBuffer());
else
Modified: xerces/c/trunk/src/xercesc/dom/impl/DOMDocumentImpl.cpp
URL: http://svn.apache.org/viewvc/xerces/c/trunk/src/xercesc/dom/impl/DOMDocumentImpl.cpp?rev=425332&r1=425331&r2=425332&view=diff
==============================================================================
--- xerces/c/trunk/src/xercesc/dom/impl/DOMDocumentImpl.cpp (original)
+++ xerces/c/trunk/src/xercesc/dom/impl/DOMDocumentImpl.cpp Tue Jul 25 01:44:03 2006
@@ -1414,11 +1414,15 @@
fRecycleBufferPtr->push(buffer);
}
-DOMBuffer* DOMDocumentImpl::popBuffer()
+DOMBuffer* DOMDocumentImpl::popBuffer(XMLSize_t nMinSize)
{
if (!fRecycleBufferPtr || fRecycleBufferPtr->empty())
return 0;
+ for(unsigned int index=fRecycleBufferPtr->size()-1;index>0;index--)
+ if(fRecycleBufferPtr->elementAt(index)->getCapacity()>=nMinSize)
+ return fRecycleBufferPtr->popAt(index);
+ // if we didn't find a buffer big enough, get the last one
return fRecycleBufferPtr->pop();
}
Modified: xerces/c/trunk/src/xercesc/dom/impl/DOMDocumentImpl.hpp
URL: http://svn.apache.org/viewvc/xerces/c/trunk/src/xercesc/dom/impl/DOMDocumentImpl.hpp?rev=425332&r1=425331&r2=425332&view=diff
==============================================================================
--- xerces/c/trunk/src/xercesc/dom/impl/DOMDocumentImpl.hpp (original)
+++ xerces/c/trunk/src/xercesc/dom/impl/DOMDocumentImpl.hpp Tue Jul 25 01:44:03 2006
@@ -255,7 +255,7 @@
void deleteHeap();
void releaseDocNotifyUserData(DOMNode* object);
void releaseBuffer(DOMBuffer* buffer);
- DOMBuffer* popBuffer();
+ DOMBuffer* popBuffer(XMLSize_t nMinSize);
MemoryManager* getMemoryManager() const;
// Factory methods for getting/creating node lists.
Modified: xerces/c/trunk/src/xercesc/dom/impl/DOMStringPool.hpp
URL: http://svn.apache.org/viewvc/xerces/c/trunk/src/xercesc/dom/impl/DOMStringPool.hpp?rev=425332&r1=425331&r2=425332&view=diff
==============================================================================
--- xerces/c/trunk/src/xercesc/dom/impl/DOMStringPool.hpp (original)
+++ xerces/c/trunk/src/xercesc/dom/impl/DOMStringPool.hpp Tue Jul 25 01:44:03 2006
@@ -130,6 +130,11 @@
return fIndex;
}
+ unsigned int getCapacity() const
+ {
+ return fCapacity;
+ }
+
// -----------------------------------------------------------------------
// Private helpers
// -----------------------------------------------------------------------
Modified: xerces/c/trunk/src/xercesc/util/RefStackOf.c
URL: http://svn.apache.org/viewvc/xerces/c/trunk/src/xercesc/util/RefStackOf.c?rev=425332&r1=425331&r2=425332&view=diff
==============================================================================
--- xerces/c/trunk/src/xercesc/util/RefStackOf.c (original)
+++ xerces/c/trunk/src/xercesc/util/RefStackOf.c Tue Jul 25 01:44:03 2006
@@ -51,9 +51,18 @@
template <class TElem> const TElem* RefStackOf<TElem>::
elementAt(const unsigned int index) const
{
- if (index > fVector.size())
+ if (index >= fVector.size())
ThrowXMLwithMemMgr(ArrayIndexOutOfBoundsException, XMLExcepts::Stack_BadIndex, fVector.getMemoryManager());
return fVector.elementAt(index);
+}
+
+template <class TElem> TElem* RefStackOf<TElem>::popAt(const unsigned int index)
+{
+ if (index >= fVector.size())
+ ThrowXMLwithMemMgr(ArrayIndexOutOfBoundsException, XMLExcepts::Stack_BadIndex, fVector.getMemoryManager());
+
+ // Orphan off the element from the slot in the vector
+ return fVector.orphanElementAt(index);
}
template <class TElem> void RefStackOf<TElem>::push(TElem* const toPush)
Modified: xerces/c/trunk/src/xercesc/util/RefStackOf.hpp
URL: http://svn.apache.org/viewvc/xerces/c/trunk/src/xercesc/util/RefStackOf.hpp?rev=425332&r1=425331&r2=425332&view=diff
==============================================================================
--- xerces/c/trunk/src/xercesc/util/RefStackOf.hpp (original)
+++ xerces/c/trunk/src/xercesc/util/RefStackOf.hpp Tue Jul 25 01:44:03 2006
@@ -49,6 +49,7 @@
// Element management methods
// -----------------------------------------------------------------------
const TElem* elementAt(const unsigned int index) const;
+ TElem* popAt(const unsigned int index);
void push(TElem* const toPush);
const TElem* peek() const;
TElem* pop();
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@xerces.apache.org
For additional commands, e-mail: commits-help@xerces.apache.org