tng 2002/12/30 10:32:48 Modified: c/src/xercesc/parsers DOMBuilderImpl.cpp DOMBuilderImpl.hpp Log: The state of adopt feature should not be changed implicitly in every parse. Revision Changes Path 1.18 +19 -9 xml-xerces/c/src/xercesc/parsers/DOMBuilderImpl.cpp Index: DOMBuilderImpl.cpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/parsers/DOMBuilderImpl.cpp,v retrieving revision 1.17 retrieving revision 1.18 diff -u -r1.17 -r1.18 --- DOMBuilderImpl.cpp 30 Dec 2002 14:44:51 -0000 1.17 +++ DOMBuilderImpl.cpp 30 Dec 2002 18:32:48 -0000 1.18 @@ -96,6 +96,7 @@ , fEntityResolver(0) , fFilter(0) , fCharsetOverridesXMLEncoding(true) +, fUserAdoptsDocument(false) { // dom spec has different default from scanner's default, so set explicitly getScanner()->setNormalizeData(false); @@ -207,9 +208,9 @@ else if (XMLString::compareIString(name, XMLUni::fgXercesUserAdoptsDOMDocument) == 0) { if(state) - adoptDocument(); + fUserAdoptsDocument = true; else - throw DOMException(DOMException::NOT_SUPPORTED_ERR, 0); + fUserAdoptsDocument = false; } else if (XMLString::compareIString(name, XMLUni::fgXercesLoadExternalDTD) == 0) @@ -317,7 +318,7 @@ return getScanner()->getCalculateSrcOfs(); } else if(XMLString::compareIString(name, XMLUni::fgXercesUserAdoptsDOMDocument) == 0) { - return isDocumentAdopted(); + return fUserAdoptsDocument; } else { throw DOMException(DOMException::NOT_FOUND_ERR, 0); @@ -336,6 +337,7 @@ (XMLString::compareIString(name, XMLUni::fgDOMValidateIfSchema) == 0) || (XMLString::compareIString(name, XMLUni::fgDOMCharsetOverridesXMLEncoding) == 0) || (XMLString::compareIString(name, XMLUni::fgDOMWhitespaceInElementContent) == 0) || + (XMLString::compareIString(name, XMLUni::fgXercesUserAdoptsDOMDocument) == 0) || (XMLString::compareIString(name, XMLUni::fgXercesCalculateSrcOfs) == 0)) { return true; } @@ -347,8 +349,7 @@ return true; } else if (XMLString::compareIString(name, XMLUni::fgDOMNamespaceDeclarations) == 0 || - XMLString::compareIString(name, XMLUni::fgDOMCDATASections) == 0 || - XMLString::compareIString(name, XMLUni::fgXercesUserAdoptsDOMDocument) == 0) { + XMLString::compareIString(name, XMLUni::fgDOMCDATASections) == 0 ) { if (state) return true; } @@ -420,19 +421,28 @@ Wrapper4DOMInputSource isWrapper((DOMInputSource*) &source, false); AbstractDOMParser::parse(isWrapper); - return getDocument(); + if (fUserAdoptsDocument) + return adoptDocument(); + else + return getDocument(); } DOMDocument* DOMBuilderImpl::parseURI(const XMLCh* const systemId) { AbstractDOMParser::parse(systemId); - return getDocument(); + if (fUserAdoptsDocument) + return adoptDocument(); + else + return getDocument(); } DOMDocument* DOMBuilderImpl::parseURI(const char* const systemId) { AbstractDOMParser::parse(systemId); - return getDocument(); + if (fUserAdoptsDocument) + return adoptDocument(); + else + return getDocument(); } void DOMBuilderImpl::parseWithContext(const DOMInputSource& source, 1.12 +7 -1 xml-xerces/c/src/xercesc/parsers/DOMBuilderImpl.hpp Index: DOMBuilderImpl.hpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/parsers/DOMBuilderImpl.hpp,v retrieving revision 1.11 retrieving revision 1.12 diff -u -r1.11 -r1.12 --- DOMBuilderImpl.hpp 23 Dec 2002 15:23:18 -0000 1.11 +++ DOMBuilderImpl.hpp 30 Dec 2002 18:32:48 -0000 1.12 @@ -814,6 +814,11 @@ // // fCharsetOverridesXMLEncoding // Indicates if the "charset-overrides-xml-encoding" is set or not + // + // fUserAdoptsDocument + // The DOMDocument ownership has been transferred to application + // If set to true, the parser does not own the document anymore + // and thus will not release its memory. //----------------------------------------------------------------------- bool fAutoValidation; bool fValidation; @@ -821,6 +826,7 @@ DOMErrorHandler* fErrorHandler; DOMBuilderFilter* fFilter; bool fCharsetOverridesXMLEncoding; + bool fUserAdoptsDocument; };
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]