From 981057eec3115952def685e02c1d01653bcb1aac Mon Sep 17 00:00:00 2001
From: Alberto Massari <amassari@apache.org>
Date: Mon, 16 Oct 2006 06:29:51 +0000
Subject: [PATCH] Allow the user to specify the memory manager used by
 LSSerializer::writeToString

git-svn-id: https://svn.apache.org/repos/asf/xerces/c/trunk@464394 13f79535-47bb-0310-9956-ffa450edef68
---
 doc/html/ApacheDOMC++BindingL3.html          |  2 +-
 src/xercesc/dom/DOMLSSerializer.hpp          |  5 ++++-
 src/xercesc/dom/impl/DOMLSSerializerImpl.cpp | 10 ++++++----
 src/xercesc/dom/impl/DOMLSSerializerImpl.hpp |  2 +-
 4 files changed, 12 insertions(+), 7 deletions(-)

diff --git a/doc/html/ApacheDOMC++BindingL3.html b/doc/html/ApacheDOMC++BindingL3.html
index 9db96d5fa..72dda713c 100644
--- a/doc/html/ApacheDOMC++BindingL3.html
+++ b/doc/html/ApacheDOMC++BindingL3.html
@@ -4631,7 +4631,7 @@ DOMLSSerializer
 
 <td><font face="Courier New,Courier"><font size=-1>XMLCh*</font></font></td>
 
-<td><font face="Courier New,Courier"><font size=-1>writeToString(const DOMNode* nodeToWrite) = 0;</font></font></td>
+<td><font face="Courier New,Courier"><font size=-1>writeToString(const DOMNode* nodeToWrite, MemoryManager* manager = NULL) = 0;</font></font></td>
 </tr>
 
 <tr ALIGN=LEFT VALIGN=TOP>
diff --git a/src/xercesc/dom/DOMLSSerializer.hpp b/src/xercesc/dom/DOMLSSerializer.hpp
index 4b1041038..a763d4e94 100644
--- a/src/xercesc/dom/DOMLSSerializer.hpp
+++ b/src/xercesc/dom/DOMLSSerializer.hpp
@@ -506,13 +506,16 @@ public:
      * diagnostic purposes.
      *
      * @param nodeToWrite  The node to be written.
+     * @param manager  The memory manager to be used to allocate the result string.
+     *   If NULL is used, the memory manager used to construct the serializer will
+     *   be used.
      * @return  Returns the serialized data, or <code>null</code> in case a
      *   failure occured and the failure wasn't canceled by the error
      *   handler.   The returned string is always in UTF-16.
      *   The encoding information available in DOMLSSerializer is ignored in writeToString().
      * @since DOM Level 3
      */
-    virtual XMLCh*     writeToString(const DOMNode* nodeToWrite) = 0;
+    virtual XMLCh*     writeToString(const DOMNode* nodeToWrite, MemoryManager* manager = NULL) = 0;
 
     //@}
 
diff --git a/src/xercesc/dom/impl/DOMLSSerializerImpl.cpp b/src/xercesc/dom/impl/DOMLSSerializerImpl.cpp
index 8e17c728d..d762084c7 100644
--- a/src/xercesc/dom/impl/DOMLSSerializerImpl.cpp
+++ b/src/xercesc/dom/impl/DOMLSSerializerImpl.cpp
@@ -561,16 +561,18 @@ bool DOMLSSerializerImpl::writeToURI(const DOMNode* nodeToWrite, const XMLCh* ur
 // We don't throw DOMSTRING_SIZE_ERR since we are no longer
 // using DOMString.
 //
-XMLCh* DOMLSSerializerImpl::writeToString(const DOMNode* nodeToWrite)
+XMLCh* DOMLSSerializerImpl::writeToString(const DOMNode* nodeToWrite, MemoryManager* manager /*= NULL*/)
 {
-    MemBufFormatTarget  destination(1023, fMemoryManager);
+    if(manager==NULL)
+        manager = fMemoryManager;
+    MemBufFormatTarget  destination(1023, manager);
     bool retVal;
 
     bool bBOMFlag=getFeature(BYTE_ORDER_MARK_ID);
     setFeature(BYTE_ORDER_MARK_ID, false);
     try
     {
-        DOMLSOutputImpl output(fMemoryManager);
+        DOMLSOutputImpl output(manager);
         output.setByteStream(&destination);
         output.setEncoding(XMLUni::fgUTF16EncodingString);
         retVal = write(nodeToWrite, &output);
@@ -590,7 +592,7 @@ XMLCh* DOMLSSerializerImpl::writeToString(const DOMNode* nodeToWrite)
     }
 
     setFeature(BYTE_ORDER_MARK_ID, bBOMFlag);
-    return (retVal ? XMLString::replicate((XMLCh*) destination.getRawBuffer(), fMemoryManager) : 0);
+    return (retVal ? XMLString::replicate((XMLCh*) destination.getRawBuffer(), manager) : 0);
 }
 
 //
diff --git a/src/xercesc/dom/impl/DOMLSSerializerImpl.hpp b/src/xercesc/dom/impl/DOMLSSerializerImpl.hpp
index 77c55e245..ed110e2d1 100644
--- a/src/xercesc/dom/impl/DOMLSSerializerImpl.hpp
+++ b/src/xercesc/dom/impl/DOMLSSerializerImpl.hpp
@@ -72,7 +72,7 @@ public:
     /**
 	  *  The caller is responsible for the release of the returned string
 	  */
-    virtual XMLCh*                  writeToString(const DOMNode* nodeToWrite);
+    virtual XMLCh*                  writeToString(const DOMNode* nodeToWrite, MemoryManager* manager = NULL);
     virtual void                    release();
 
     //@}
-- 
GitLab