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]

Reply via email to