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]