diff --git a/src/xercesc/dom/impl/DOMCharacterDataImpl.cpp b/src/xercesc/dom/impl/DOMCharacterDataImpl.cpp index a673ac27756d2f12869368863d5e5cbd6496c72f..606910ef86cc5104ef81ec142df8a4da03b038ee 100644 --- a/src/xercesc/dom/impl/DOMCharacterDataImpl.cpp +++ b/src/xercesc/dom/impl/DOMCharacterDataImpl.cpp @@ -36,12 +36,11 @@ DOMCharacterDataImpl::DOMCharacterDataImpl(DOMDocument *doc, const XMLCh *dat) { fDoc = (DOMDocumentImpl*)doc; - fDataBuf = fDoc->popBuffer(XMLString::stringLen(dat)+1); + XMLSize_t len=XMLString::stringLen(dat); + fDataBuf = fDoc->popBuffer(len+1); if (!fDataBuf) - fDataBuf = new (fDoc) DOMBuffer(fDoc, dat); - else - fDataBuf->set(dat); - + fDataBuf = new (fDoc) DOMBuffer(fDoc, len+15); + fDataBuf->set(dat, len); } @@ -51,12 +50,11 @@ DOMCharacterDataImpl::DOMCharacterDataImpl(const DOMCharacterDataImpl &other) { fDoc = (DOMDocumentImpl*)other.fDoc; - fDataBuf = fDoc->popBuffer(other.getLength()+1); + XMLSize_t len=other.getLength(); + fDataBuf = fDoc->popBuffer(len+1); if (!fDataBuf) - fDataBuf = new (fDoc) DOMBuffer(fDoc, other.fDataBuf->getRawBuffer()); - else - fDataBuf->set(other.fDataBuf->getRawBuffer()); - + fDataBuf = new (fDoc) DOMBuffer(fDoc, len+15); + fDataBuf->set(other.fDataBuf->getRawBuffer(), len); } diff --git a/src/xercesc/dom/impl/DOMDocumentImpl.hpp b/src/xercesc/dom/impl/DOMDocumentImpl.hpp index 79f2257fcdb9f642bc6b1a97dd33136e5cfcc244..0323e668207ab8ae994553b6c437c9a3f57cb8d4 100644 --- a/src/xercesc/dom/impl/DOMDocumentImpl.hpp +++ b/src/xercesc/dom/impl/DOMDocumentImpl.hpp @@ -368,6 +368,12 @@ inline void * operator new(size_t amt, XERCES_CPP_NAMESPACE_QUALIFIER DOMDocumen return p; } +inline void * operator new(size_t amt, XERCES_CPP_NAMESPACE_QUALIFIER DOMDocumentImpl *doc) +{ + void* p = doc->allocate(amt); + return p; +} + inline void * operator new(size_t amt, XERCES_CPP_NAMESPACE_QUALIFIER DOMDocument *doc) { XERCES_CPP_NAMESPACE_QUALIFIER DOMMemoryManager* mgr=(XERCES_CPP_NAMESPACE_QUALIFIER DOMMemoryManager*)doc->getFeature(XERCES_CPP_NAMESPACE_QUALIFIER XMLUni::fgXercescInterfaceDOMMemoryManager,0); @@ -391,6 +397,11 @@ inline void operator delete(void* /*ptr*/, XERCES_CPP_NAMESPACE_QUALIFIER DOMDoc { return; } + +inline void operator delete(void* /*ptr*/, XERCES_CPP_NAMESPACE_QUALIFIER DOMDocumentImpl * /*doc*/) +{ + return; +} inline void operator delete(void* /*ptr*/, XERCES_CPP_NAMESPACE_QUALIFIER DOMDocument * /*doc*/) { return; diff --git a/src/xercesc/dom/impl/DOMElementImpl.cpp b/src/xercesc/dom/impl/DOMElementImpl.cpp index 899f5e7ef6ffd1f065c133f547f8248f9c58dc23..cfc899bb4e1abbae26c6ac591db516c597b5dd28 100644 --- a/src/xercesc/dom/impl/DOMElementImpl.cpp +++ b/src/xercesc/dom/impl/DOMElementImpl.cpp @@ -49,11 +49,11 @@ DOMElementImpl::DOMElementImpl(DOMDocument *ownerDoc, const XMLCh *eName) fName = docImpl->getPooledString(eName); setupDefaultAttributes(); if (!fDefaultAttributes) { - fDefaultAttributes = new (getOwnerDocument()) DOMAttrMapImpl(this); - fAttributes = new (getOwnerDocument()) DOMAttrMapImpl(this); + fDefaultAttributes = new (docImpl) DOMAttrMapImpl(this); + fAttributes = new (docImpl) DOMAttrMapImpl(this); } else { - fAttributes = new (getOwnerDocument()) DOMAttrMapImpl(this, fDefaultAttributes); + fAttributes = new (docImpl) DOMAttrMapImpl(this, fDefaultAttributes); } } diff --git a/src/xercesc/dom/impl/DOMStringPool.cpp b/src/xercesc/dom/impl/DOMStringPool.cpp index c317e2c9fc27f55874f191fb8f88be6448d40be1..298695b84c7c606082cd91f47e7576918983d4ee 100644 --- a/src/xercesc/dom/impl/DOMStringPool.cpp +++ b/src/xercesc/dom/impl/DOMStringPool.cpp @@ -121,25 +121,6 @@ DOMBuffer::DOMBuffer(DOMDocumentImpl *doc, XMLSize_t capacity) : fBuffer[0] = XMLCh(0); } -DOMBuffer::DOMBuffer(DOMDocumentImpl *doc, const XMLCh* string) : - fBuffer(0) - , fIndex(0) - , fCapacity(0) - , fDoc(doc) -{ - XMLSize_t actualCount = XMLString::stringLen(string); - fCapacity = actualCount + 15; - - // Buffer is one larger than capacity, to allow for zero term - fBuffer = (XMLCh*) doc->allocate((fCapacity+1)*sizeof(XMLCh)); - - memcpy(fBuffer, string, actualCount * sizeof(XMLCh)); - fIndex = actualCount; - - // Keep it null terminated - fBuffer[fIndex] = 0; -} - // --------------------------------------------------------------------------- // DOMBuffer: Buffer management // --------------------------------------------------------------------------- diff --git a/src/xercesc/dom/impl/DOMStringPool.hpp b/src/xercesc/dom/impl/DOMStringPool.hpp index 0bdbba8c78d988c53506f31d970fc345e46e8a6d..57e2ff0f87735c4d08dba43de6440b4bc616bd55 100644 --- a/src/xercesc/dom/impl/DOMStringPool.hpp +++ b/src/xercesc/dom/impl/DOMStringPool.hpp @@ -80,8 +80,6 @@ public : // ----------------------------------------------------------------------- DOMBuffer(DOMDocumentImpl *doc, XMLSize_t capacity = 31); - DOMBuffer(DOMDocumentImpl *doc, const XMLCh* string); - ~DOMBuffer() { }