dmitryh     2004/11/08 11:20:06

  Modified:    c/src/xalanc/XalanTransformer XalanCAPI.cpp XalanCAPI.h
                        XalanCompiledStylesheetDefault.cpp
                        XalanCompiledStylesheetDefault.hpp
                        XalanDefaultDocumentBuilder.cpp
                        XalanDefaultDocumentBuilder.hpp
                        XalanDefaultParsedSource.cpp
                        XalanDefaultParsedSource.hpp
                        XalanDocumentBuilder.hpp XalanParsedSource.hpp
                        XalanSourceTreeWrapperParsedSource.cpp
                        XalanSourceTreeWrapperParsedSource.hpp
                        XalanTransformer.cpp XalanTransformer.hpp
                        XalanTransformerOutputStream.cpp
                        XalanTransformerOutputStream.hpp
                        XalanTransformerProblemListener.cpp
                        XalanTransformerProblemListener.hpp
                        XercesDOMParsedSource.cpp XercesDOMParsedSource.hpp
                        XercesDOMWrapperParsedSource.cpp
                        XercesDOMWrapperParsedSource.hpp
  Log:
  Initial implementation on the pluggable memory management
  
  Revision  Changes    Path
  1.5       +35 -12    xml-xalan/c/src/xalanc/XalanTransformer/XalanCAPI.cpp
  
  Index: XalanCAPI.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/xalanc/XalanTransformer/XalanCAPI.cpp,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- XalanCAPI.cpp     26 Feb 2004 23:07:13 -0000      1.4
  +++ XalanCAPI.cpp     8 Nov 2004 19:20:04 -0000       1.5
  @@ -33,6 +33,7 @@
   #include "XalanCAPI.h"
   #include "XalanTransformer.hpp"
   
  +#include <xalanc/Include/XalanMemMgrAutoPtr.hpp>
   
   
   XALAN_USING_STD(istrstream)
  @@ -42,8 +43,11 @@
   XALAN_USING_XALAN(XalanParsedSource)
   XALAN_USING_XALAN(XalanTransformer)
   XALAN_USING_XERCES(XMLPlatformUtils)
  +XALAN_USING_XALAN(MemoryManagerType)
   
  -
  +XALAN_USING_XALAN(XalanMemMgrAutoPtr)
  +XALAN_USING_XALAN(XalanMemMgrs)
  +XALAN_USING_XALAN(XSLTResultTarget)
   
   static bool  fInitialized = false;
   
  @@ -58,7 +62,7 @@
                XMLPlatformUtils::Initialize();
   
                // Initialize Xalan.
  -             XalanTransformer::initialize();
  +             
XalanTransformer::initialize(XalanMemMgrs::getDefaultXercesMemMgr());
   
                fInitialized = true;
        }
  @@ -93,8 +97,20 @@
   XALAN_TRANSFORMER_EXPORT_FUNCTION(XalanHandle)
   CreateXalanTransformer()
   {    
  +    MemoryManagerType& theManager = XalanMemMgrs::getDefaultXercesMemMgr();
        // Create a XalanTransformer object.
  -     return new XalanTransformer();
  +    typedef XalanTransformer ThisType;
  +
  +    XalanMemMgrAutoPtr<ThisType, false> theGuard( theManager , 
(ThisType*)theManager.allocate(sizeof(ThisType)));
  +
  +    ThisType* theResult = theGuard.get();
  +
  +    new (theResult) ThisType(theManager);
  +
  +     theGuard.release();
  +
  +    return (XalanHandle)theResult;
  +
   }
   
   
  @@ -145,7 +161,14 @@
   DeleteXalanTransformer(XalanHandle theXalanHandle)
   {
        // Delete a XalanTransformer object.
  -     delete getTransformer(theXalanHandle);
  +    
  +    XalanTransformer* transformer = getTransformer(theXalanHandle);
  +
  +     transformer->~XalanTransformer();
  +
  +    XalanMemMgrs::getDefaultXercesMemMgr().deallocate(transformer);
  +
  +
   }
   
   
  @@ -161,14 +184,14 @@
        {
                return getTransformer(theXalanHandle)->transform(
                        theXMLFileName,
  -                     theOutFileName);
  +                     XSLTResultTarget(theOutFileName, 
XalanMemMgrs::getDefaultXercesMemMgr()));
        }
        else
        {
                return getTransformer(theXalanHandle)->transform(
                        theXMLFileName,
                        theXSLFileName,
  -                     theOutFileName);
  +                     XSLTResultTarget(theOutFileName, 
XalanMemMgrs::getDefaultXercesMemMgr()));
        }
   }
   
  @@ -185,7 +208,7 @@
        return getTransformer(theXalanHandle)->transform(
                                *getParsedSource(theParsedSource),
                                getStylesheet(theCSSHandle),
  -                             theOutFileName);
  +                             XSLTResultTarget(theOutFileName, 
XalanMemMgrs::getDefaultXercesMemMgr()));
   }
   
   
  @@ -207,14 +230,14 @@
        {
                status = getTransformer(theXalanHandle)->transform(
                        theXMLFileName,
  -                     theOutputStream);
  +                     XSLTResultTarget(theOutputStream, 
XalanMemMgrs::getDefaultXercesMemMgr()));
        }
        else
        {
                status = getTransformer(theXalanHandle)->transform(
                        theXMLFileName,
                        theXSLFileName,
  -                     theOutputStream);
  +                     XSLTResultTarget(theOutputStream, 
XalanMemMgrs::getDefaultXercesMemMgr()));
        }
   
        if (status == 0)
  @@ -246,7 +269,7 @@
                getTransformer(theXalanHandle)->transform(
                        *getParsedSource(theParsedSource),
                        getStylesheet(theCSSHandle),
  -                     theOutputStream);
  +                     XSLTResultTarget(theOutputStream, 
XalanMemMgrs::getDefaultXercesMemMgr()));
   
        if (status == 0)
        {
  @@ -448,8 +471,8 @@
                                XalanHandle                             
theXalanHandle)
   {
        getTransformer(theXalanHandle)->setStylesheetParam(
  -             XalanDOMString(key),
  -             XalanDOMString(expression));
  +             XalanDOMString(key, XalanMemMgrs::getDefaultXercesMemMgr()),
  +             XalanDOMString(expression, 
XalanMemMgrs::getDefaultXercesMemMgr()));
   }
   
   
  
  
  
  1.5       +1 -4      xml-xalan/c/src/xalanc/XalanTransformer/XalanCAPI.h
  
  Index: XalanCAPI.h
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/xalanc/XalanTransformer/XalanCAPI.h,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- XalanCAPI.h       26 Feb 2004 23:07:13 -0000      1.4
  +++ XalanCAPI.h       8 Nov 2004 19:20:04 -0000       1.5
  @@ -108,11 +108,8 @@
         * @return  the XalanTransformer handle
         */
        XALAN_TRANSFORMER_EXPORT_FUNCTION(XalanHandle)
  -#if defined(__cplusplus)
        CreateXalanTransformer();
  -#else
  -     CreateXalanTransformer(void);
  -#endif
  +
   
        /**
         * Delete a XalanTransformer instance.
  
  
  
  1.5       +27 -1     
xml-xalan/c/src/xalanc/XalanTransformer/XalanCompiledStylesheetDefault.cpp
  
  Index: XalanCompiledStylesheetDefault.cpp
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/c/src/xalanc/XalanTransformer/XalanCompiledStylesheetDefault.cpp,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- XalanCompiledStylesheetDefault.cpp        26 Feb 2004 23:07:13 -0000      
1.4
  +++ XalanCompiledStylesheetDefault.cpp        8 Nov 2004 19:20:04 -0000       
1.5
  @@ -86,13 +86,15 @@
   
   
   XalanCompiledStylesheetDefault::XalanCompiledStylesheetDefault(
  +            MemoryManagerType&      theManager,
                        const XSLTInputSource&  theStylesheetSource,
                        XSLTEngineImpl&                 theProcessor,
                        ErrorHandlerType*               theErrorHandler,
                        EntityResolverType*             theEntityResolver):
        XalanCompiledStylesheet(),
  -     m_stylesheetXPathFactory(),
  +     m_stylesheetXPathFactory(theManager),
        m_stylesheetConstructionContext(
  +                theManager,
                                theProcessor,
                                m_stylesheetXPathFactory),
        m_stylesheetRoot(compileStylesheet(
  @@ -104,7 +106,31 @@
   {
   }
   
  +XalanCompiledStylesheetDefault*
  +XalanCompiledStylesheetDefault::create(
  +            MemoryManagerType&      theManager,
  +                     const XSLTInputSource&  theStylesheetSource,
  +                     XSLTEngineImpl&                 theProcessor,
  +                     ErrorHandlerType*               theErrorHandler,
  +                     EntityResolverType*             theEntityResolver)
  +{
  +    typedef XalanCompiledStylesheetDefault ThisType;
  +
  +    XalanMemMgrAutoPtr<ThisType, false> theGuard( theManager , 
(ThisType*)theManager.allocate(sizeof(ThisType)));
   
  +    ThisType* theResult = theGuard.get();
  +
  +    new (theResult) ThisType(
  +            theManager,
  +                     theStylesheetSource,
  +                     theProcessor,
  +                     theErrorHandler,
  +                     theEntityResolver);
  +
  +     theGuard.release();
  +
  +    return theResult;
  +}
   
   XalanCompiledStylesheetDefault::~XalanCompiledStylesheetDefault()
   {
  
  
  
  1.5       +10 -0     
xml-xalan/c/src/xalanc/XalanTransformer/XalanCompiledStylesheetDefault.hpp
  
  Index: XalanCompiledStylesheetDefault.hpp
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/c/src/xalanc/XalanTransformer/XalanCompiledStylesheetDefault.hpp,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- XalanCompiledStylesheetDefault.hpp        26 Feb 2004 23:07:13 -0000      
1.4
  +++ XalanCompiledStylesheetDefault.hpp        8 Nov 2004 19:20:04 -0000       
1.5
  @@ -59,6 +59,16 @@
   public:
        
        XalanCompiledStylesheetDefault(
  +            MemoryManagerType&      theManager,
  +                     const XSLTInputSource&  theStylesheetSource,
  +                     XSLTEngineImpl&                 theProcessor,
  +                     ErrorHandlerType*               theErrorHandler = 0,
  +                     EntityResolverType*             theEntityResolver = 0);
  +
  +     
  +     static XalanCompiledStylesheetDefault*
  +    create(
  +            MemoryManagerType&      theManager,
                        const XSLTInputSource&  theStylesheetSource,
                        XSLTEngineImpl&                 theProcessor,
                        ErrorHandlerType*               theErrorHandler = 0,
  
  
  
  1.6       +21 -6     
xml-xalan/c/src/xalanc/XalanTransformer/XalanDefaultDocumentBuilder.cpp
  
  Index: XalanDefaultDocumentBuilder.cpp
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/c/src/xalanc/XalanTransformer/XalanDefaultDocumentBuilder.cpp,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- XalanDefaultDocumentBuilder.cpp   13 Mar 2004 00:44:55 -0000      1.5
  +++ XalanDefaultDocumentBuilder.cpp   8 Nov 2004 19:20:04 -0000       1.6
  @@ -30,16 +30,31 @@
   
   
   
  -XalanDefaultDocumentBuilder::XalanDefaultDocumentBuilder(const 
XalanDOMString&       theURI) :
  +XalanDefaultDocumentBuilder::XalanDefaultDocumentBuilder(MemoryManagerType&  
   theManager,
  +                                                         const 
XalanDOMString&       theURI) :
        m_domSupport(),
  -     m_parserLiaison(),
  -     m_contentHandler(m_parserLiaison.createXalanSourceTreeDocument()),
  -     m_uri(theURI)
  +     m_parserLiaison(theManager),
  +     m_contentHandler(theManager, 
m_parserLiaison.createXalanSourceTreeDocument()),
  +     m_uri(theURI,theManager)
   {
        m_domSupport.setParserLiaison(&m_parserLiaison);
   }
   
  +XalanDefaultDocumentBuilder*
  +XalanDefaultDocumentBuilder::create(MemoryManagerType& theManager, const 
XalanDOMString&     theURI)
  +{
  +        typedef XalanDefaultDocumentBuilder ThisType;
  +        
  +        XalanMemMgrAutoPtr<ThisType, false> theGuard( theManager , 
(ThisType*)theManager.allocate(sizeof(ThisType)));
  +
  +        ThisType* theResult = theGuard.get();
  +
  +        new (theResult) ThisType(theManager, theURI);
   
  +         theGuard.release();
  +
  +        return theResult;
  +}
   
   XalanDefaultDocumentBuilder::~XalanDefaultDocumentBuilder()
   {
  @@ -56,9 +71,9 @@
   
   
   XalanParsedSourceHelper*
  -XalanDefaultDocumentBuilder::createHelper() const
  +XalanDefaultDocumentBuilder::createHelper(MemoryManagerType& theManager) 
const
   {
  -     return new XalanDefaultParsedSourceHelper(m_domSupport);
  +     return XalanDefaultParsedSourceHelper::create(m_domSupport, theManager);
   }
   
   
  
  
  
  1.5       +6 -2      
xml-xalan/c/src/xalanc/XalanTransformer/XalanDefaultDocumentBuilder.hpp
  
  Index: XalanDefaultDocumentBuilder.hpp
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/c/src/xalanc/XalanTransformer/XalanDefaultDocumentBuilder.hpp,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- XalanDefaultDocumentBuilder.hpp   26 Feb 2004 23:07:13 -0000      1.4
  +++ XalanDefaultDocumentBuilder.hpp   8 Nov 2004 19:20:04 -0000       1.5
  @@ -43,6 +43,7 @@
    */
   class XALAN_TRANSFORMER_EXPORT XalanDefaultDocumentBuilder : public 
XalanDocumentBuilder
   {
  +    
   public:
   
        /**
  @@ -50,7 +51,10 @@
         *
         * @param theURI An optional string to identify the document.
         */
  -     XalanDefaultDocumentBuilder(const XalanDOMString&       theURI = 
XalanDOMString());
  +     XalanDefaultDocumentBuilder(MemoryManagerType& theManager, const 
XalanDOMString&        theURI);
  +
  +    static XalanDefaultDocumentBuilder*
  +    create(MemoryManagerType& theManager, const XalanDOMString&      theURI);
   
        virtual
        ~XalanDefaultDocumentBuilder();
  @@ -59,7 +63,7 @@
        getDocument() const;
   
        virtual XalanParsedSourceHelper*
  -     createHelper() const;
  +     createHelper(MemoryManagerType& theManager) const;
   
        virtual const XalanDOMString&
        getURI() const;
  
  
  
  1.6       +122 -71   
xml-xalan/c/src/xalanc/XalanTransformer/XalanDefaultParsedSource.cpp
  
  Index: XalanDefaultParsedSource.cpp
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/c/src/xalanc/XalanTransformer/XalanDefaultParsedSource.cpp,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- XalanDefaultParsedSource.cpp      28 Oct 2004 19:40:06 -0000      1.5
  +++ XalanDefaultParsedSource.cpp      8 Nov 2004 19:20:04 -0000       1.6
  @@ -66,49 +66,68 @@
   
   const XalanDOMString&
   XalanDefaultParsedSourceDOMSupport::getUnparsedEntityURI(
  -            const XalanDOMString&   theName,
  -            const XalanDocument&    theDocument) const
  -{
  -    // Check the wrapped XalanSourceTreeDOMSupport instance...
  -    const XalanDOMString&   theURI =
  -            m_domSupport.getUnparsedEntityURI(
  -                    theName,
  -                    theDocument);
  -
  -    if (length(theURI) != 0)
  -    {
  -        return theURI;
  -    }
  -    else
  -    {
  -        // Chain up to our parent...
  -        return XalanSourceTreeDOMSupport::getUnparsedEntityURI(
  -                    theName,
  -                    theDocument);
  -    }
  +                     const XalanDOMString&   theName,
  +                     const XalanDocument&    theDocument,
  +            XalanDOMString&         theResult ) const
  +{
  +     // Check the wrapped XalanSourceTreeDOMSupport instance...
  +     const XalanDOMString&   theURI =
  +                     m_domSupport.getUnparsedEntityURI(
  +                                     theName,
  +                                     theDocument,
  +                    theResult);
  +
  +     if (length(theURI) != 0)
  +     {
  +             return theURI;
  +     }
  +     else
  +     {
  +             // Chain up to our parent...
  +             return XalanSourceTreeDOMSupport::getUnparsedEntityURI(
  +                                     theName,
  +                                     theDocument,
  +                    theResult);
  +     }
   }
   
   
   
   bool
   XalanDefaultParsedSourceDOMSupport::isNodeAfter(
  -            const XalanNode&    node1,
  -            const XalanNode&    node2) const
  +                     const XalanNode&        node1,
  +                     const XalanNode&        node2) const
   {
  -    return m_domSupport.isNodeAfter(
  -                    node1, 
  -                    node2);
  +     return m_domSupport.isNodeAfter(
  +                                     node1, 
  +                                     node2);
   }
   
   
   
  -XalanDefaultParsedSourceHelper::XalanDefaultParsedSourceHelper(const 
XalanSourceTreeDOMSupport&     theSourceDOMSupport) :
  -    m_parserLiaison(),
  -    m_domSupport(m_parserLiaison, theSourceDOMSupport)
  +XalanDefaultParsedSourceHelper::XalanDefaultParsedSourceHelper(const 
XalanSourceTreeDOMSupport&              theSourceDOMSupport,
  +                                                               
MemoryManagerType&                   theManager) :
  +     m_parserLiaison(theManager),
  +     m_domSupport(m_parserLiaison, theSourceDOMSupport)
   {
   }
   
  +XalanDefaultParsedSourceHelper*
  +XalanDefaultParsedSourceHelper::create(const XalanSourceTreeDOMSupport&      
        theSourceDOMSupport,
  +                                       MemoryManagerType&                   
theManager)
  +{
  +    typedef XalanDefaultParsedSourceHelper ThisType;
  +
  +    XalanMemMgrAutoPtr<ThisType, false> theGuard( theManager , 
(ThisType*)theManager.allocate(sizeof(ThisType)));
  +
  +    ThisType* theResult = theGuard.get();
   
  +    new (theResult) ThisType(theSourceDOMSupport, theManager);
  +                             
  +    theGuard.release();
  +
  +    return theResult;
  +}
   
   XalanDefaultParsedSourceHelper::~XalanDefaultParsedSourceHelper()
   {
  @@ -119,7 +138,7 @@
   DOMSupport&
   XalanDefaultParsedSourceHelper::getDOMSupport()
   {
  -    return m_domSupport;
  +     return m_domSupport;
   }
   
   
  @@ -127,56 +146,88 @@
   XMLParserLiaison&
   XalanDefaultParsedSourceHelper::getParserLiaison()
   {
  -    return m_parserLiaison;
  +     return m_parserLiaison;
   }
   
   
   
   XalanDefaultParsedSource::XalanDefaultParsedSource(
  -            const InputSourceType&  theInputSource,
  -            bool                    fValidate,
  -            ErrorHandlerType*       theErrorHandler,
  -            EntityResolverType*     theEntityResolver,
  -            const XalanDOMChar*     theExternalSchemaLocation,
  -            const XalanDOMChar*     theExternalNoNamespaceSchemaLocation,
  +                     const InputSourceType&  theInputSource,
  +            MemoryManagerType&      theManager,
  +                     bool                                    fValidate,
  +                     ErrorHandlerType*               theErrorHandler,
  +                     EntityResolverType*             theEntityResolver,
  +                     const XalanDOMChar*             
theExternalSchemaLocation,
  +                     const XalanDOMChar*             
theExternalNoNamespaceSchemaLocation,
               bool                    fPoolAllTextNodes) :
  -    XalanParsedSource(),
  -    m_parserLiaison(),
  -    m_domSupport(m_parserLiaison),
  -    m_parsedSource(0)
  -{
  -    m_parserLiaison.setUseValidation(fValidate);
  -    m_parserLiaison.setEntityResolver(theEntityResolver);
  -    m_parserLiaison.setErrorHandler(theErrorHandler);
  -    m_parserLiaison.setExternalSchemaLocation(theExternalSchemaLocation);
  -    
m_parserLiaison.setExternalNoNamespaceSchemaLocation(theExternalNoNamespaceSchemaLocation);
  +     XalanParsedSource(),
  +     m_parserLiaison(theManager),
  +     m_domSupport(m_parserLiaison),
  +     m_parsedSource(0),
  +    m_uri(theManager)
  +{
  +     m_parserLiaison.setUseValidation(fValidate);
  +     m_parserLiaison.setEntityResolver(theEntityResolver);
  +     m_parserLiaison.setErrorHandler(theErrorHandler);
  +     m_parserLiaison.setExternalSchemaLocation(theExternalSchemaLocation);
  +     
m_parserLiaison.setExternalNoNamespaceSchemaLocation(theExternalNoNamespaceSchemaLocation);
       m_parserLiaison.setPoolAllText(fPoolAllTextNodes);
   
  -    m_parsedSource = 
m_parserLiaison.mapDocument(m_parserLiaison.parseXMLStream(theInputSource));
  -    assert(m_parsedSource != 0);
  +     m_parsedSource = 
m_parserLiaison.mapDocument(m_parserLiaison.parseXMLStream(theInputSource));
  +     assert(m_parsedSource != 0);
   
  -    m_domSupport.setParserLiaison(&m_parserLiaison);
  +     m_domSupport.setParserLiaison(&m_parserLiaison);
   
  -    const XalanDOMChar* const   theSystemID = theInputSource.getSystemId();
  +     const XalanDOMChar* const       theSystemID = 
theInputSource.getSystemId();
   
  -    if (theSystemID != 0)
  -    {
  -        try
  -        {
  -            m_uri = URISupport::getURLStringFromString(theSystemID);
  -        }
  -        catch(const XERCES_CPP_NAMESPACE_QUALIFIER XMLException&)
  -        {
  -            // Assume that any exception here relates to get the url from
  -            // the system ID.  We'll assume that it's just a fake base 
identifier
  -            // since the parser would have thrown an error if the system ID
  -            // wasn't resolved.
  -            m_uri = theSystemID;
  -        }
  -    }
  -}
  +     if (theSystemID != 0)
  +     {
  +             try
  +             {
  +                     URISupport::getURLStringFromString(theSystemID, m_uri);
  +             }
  +             catch(const XERCES_CPP_NAMESPACE_QUALIFIER XMLException&)
  +             {
  +                     // Assume that any exception here relates to get the 
url from
  +                     // the system ID.  We'll assume that it's just a fake 
base identifier
  +                     // since the parser would have thrown an error if the 
system ID
  +                     // wasn't resolved.
  +                     m_uri = theSystemID;
  +             }
  +     }
  +}
  +
  +XalanDefaultParsedSource*
  +XalanDefaultParsedSource::create(
  +            MemoryManagerType&      theManager,
  +                     const InputSourceType&  theInputSource,
  +                     bool                                    fValidate,
  +                     ErrorHandlerType*               theErrorHandler,
  +                     EntityResolverType*             theEntityResolver,
  +                     const XalanDOMChar*             
theExternalSchemaLocation,
  +                     const XalanDOMChar*             
theExternalNoNamespaceSchemaLocation,
  +            bool                    fPoolAllTextNodes)
  +{
  +    typedef XalanDefaultParsedSource ThisType;
  +
  +    XalanMemMgrAutoPtr<ThisType, false> theGuard( theManager , 
(ThisType*)theManager.allocate(sizeof(ThisType)));
  +
  +    ThisType* theResult = theGuard.get();
  +
  +    new (theResult) ThisType(
  +                                     theInputSource,
  +                            theManager,
  +                                     fValidate,
  +                                     theErrorHandler,
  +                                     theEntityResolver,
  +                                     theExternalSchemaLocation,
  +                                     theExternalNoNamespaceSchemaLocation,
  +                            fPoolAllTextNodes);
   
  +    theGuard.release();
   
  +    return theResult;
  +}
   
   XalanDefaultParsedSource::~XalanDefaultParsedSource()
   {
  @@ -184,18 +235,18 @@
   
   
   
  -XalanDocument*  
  +XalanDocument*       
   XalanDefaultParsedSource::getDocument() const
   {
  -    return m_parsedSource;
  +     return m_parsedSource;
   }
   
   
   
   XalanParsedSourceHelper*
  -XalanDefaultParsedSource::createHelper() const
  +XalanDefaultParsedSource::createHelper(MemoryManagerType& theManager) const
   {
  -    return new XalanDefaultParsedSourceHelper(m_domSupport);
  +    return XalanDefaultParsedSourceHelper::create(m_domSupport, theManager);
   }
   
   
  @@ -203,7 +254,7 @@
   const XalanDOMString&
   XalanDefaultParsedSource::getURI() const
   {
  -    return m_uri;
  +     return m_uri;
   }
   
   
  
  
  
  1.6       +82 -64    
xml-xalan/c/src/xalanc/XalanTransformer/XalanDefaultParsedSource.hpp
  
  Index: XalanDefaultParsedSource.hpp
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/c/src/xalanc/XalanTransformer/XalanDefaultParsedSource.hpp,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- XalanDefaultParsedSource.hpp      28 Oct 2004 19:40:06 -0000      1.5
  +++ XalanDefaultParsedSource.hpp      8 Nov 2004 19:20:04 -0000       1.6
  @@ -45,39 +45,40 @@
   {
   public:
   
  -    XalanDefaultParsedSourceDOMSupport(
  -            const XalanSourceTreeParserLiaison&     theParserLiaison,
  -            const XalanSourceTreeDOMSupport&        theDOMSupport);
  -
  -    virtual
  -    ~XalanDefaultParsedSourceDOMSupport();
  -
  -    virtual void
  -    reset();
  -
  -    // These interfaces are inherited from DOMSupport...
  -
  -    virtual const XalanDOMString&
  -    getUnparsedEntityURI(
  -            const XalanDOMString&   theName,
  -            const XalanDocument&    theDocument) const;
  -
  -    virtual bool
  -    isNodeAfter(
  -            const XalanNode&    node1,
  -            const XalanNode&    node2) const;
  +     XalanDefaultParsedSourceDOMSupport(
  +                     const XalanSourceTreeParserLiaison&             
theParserLiaison,
  +                     const XalanSourceTreeDOMSupport&                
theDOMSupport);
  +
  +     virtual
  +     ~XalanDefaultParsedSourceDOMSupport();
  +
  +     virtual void
  +     reset();
  +
  +     // These interfaces are inherited from DOMSupport...
  +
  +     virtual const XalanDOMString&
  +     getUnparsedEntityURI(
  +                     const XalanDOMString&   theName,
  +                     const XalanDocument&    theDocument,
  +            XalanDOMString&         theResult) const;
  +
  +     virtual bool
  +     isNodeAfter(
  +                     const XalanNode&        node1,
  +                     const XalanNode&        node2) const;
   
   private:
   
  -    // Not implemented...
  -    XalanDefaultParsedSourceDOMSupport(const 
XalanDefaultParsedSourceDOMSupport&);
  +     // Not implemented...
  +     XalanDefaultParsedSourceDOMSupport(const 
XalanDefaultParsedSourceDOMSupport&);
   
  -    XalanDefaultParsedSourceDOMSupport&
  -    operator=(const XalanDefaultParsedSourceDOMSupport&);
  +     XalanDefaultParsedSourceDOMSupport&
  +     operator=(const XalanDefaultParsedSourceDOMSupport&);
   
   
  -    // Data members...
  -    const XalanSourceTreeDOMSupport&    m_domSupport;
  +     // Data members...
  +     const XalanSourceTreeDOMSupport&        m_domSupport;
   };
   
   
  @@ -86,29 +87,34 @@
   {
   public:
   
  -    XalanDefaultParsedSourceHelper(const XalanSourceTreeDOMSupport&     
theSourceDOMSupport);
  +     XalanDefaultParsedSourceHelper(const XalanSourceTreeDOMSupport&         
theSourceDOMSupport,
  +                                    MemoryManagerType&                  
theManager);
   
  -    ~XalanDefaultParsedSourceHelper();
  +    static XalanDefaultParsedSourceHelper*
  +    create(const XalanSourceTreeDOMSupport&          theSourceDOMSupport,
  +            MemoryManagerType&                  theManager);
   
  -    virtual DOMSupport&
  -    getDOMSupport();
  +     ~XalanDefaultParsedSourceHelper();
   
  -    virtual XMLParserLiaison&
  -    getParserLiaison();
  +     virtual DOMSupport&
  +     getDOMSupport();
  +
  +     virtual XMLParserLiaison&
  +     getParserLiaison();
   
   private:
   
  -    // Not implemented...
  -    XalanDefaultParsedSourceHelper(const XalanDefaultParsedSourceHelper&);
  +     // Not implemented...
  +     XalanDefaultParsedSourceHelper(const XalanDefaultParsedSourceHelper&);
   
  -    XalanDefaultParsedSourceHelper&
  -    operator=(const XalanDefaultParsedSourceHelper&);
  +     XalanDefaultParsedSourceHelper&
  +     operator=(const XalanDefaultParsedSourceHelper&);
   
   
  -    // Data members...
  -    XalanSourceTreeParserLiaison        m_parserLiaison;
  +     // Data members...
  +     XalanSourceTreeParserLiaison            m_parserLiaison;
   
  -    XalanDefaultParsedSourceDOMSupport  m_domSupport;
  +     XalanDefaultParsedSourceDOMSupport      m_domSupport;
   };
   
   
  @@ -121,44 +127,56 @@
   {
   public:
   
  -    XalanDefaultParsedSource(
  -            const InputSourceType&  theInputSource,
  -            bool                    fValidate = false,
  -            ErrorHandlerType*       theErrorHandler = 0,
  -            EntityResolverType*     theEntityResolver = 0,
  -            const XalanDOMChar*     theExternalSchemaLocation = 0,
  +     XalanDefaultParsedSource(
  +                     const InputSourceType&  theInputSource,
  +            MemoryManagerType&      theManager,
  +                     bool                                    fValidate = 
false,
  +                     ErrorHandlerType*               theErrorHandler = 0,
  +                     EntityResolverType*             theEntityResolver = 0,
  +                     const XalanDOMChar*             
theExternalSchemaLocation = 0,
               const XalanDOMChar*     theExternalNoNamespaceSchemaLocation = 0,
               bool                    fPoolAllTextNodes = 
XalanSourceTreeDocument::getPoolAllTextNodes());
   
  -    virtual
  -    ~XalanDefaultParsedSource();
  +     static XalanDefaultParsedSource*
  +    create(
  +            MemoryManagerType&      theManager,
  +                     const InputSourceType&  theInputSource,
  +                     bool                                    fValidate = 
false,
  +                     ErrorHandlerType*               theErrorHandler = 0,
  +                     EntityResolverType*             theEntityResolver = 0,
  +                     const XalanDOMChar*             
theExternalSchemaLocation = 0,
  +                     const XalanDOMChar*             
theExternalNoNamespaceSchemaLocation = 0,
  +            bool                    fPoolAllTextNodes = 
XalanSourceTreeDocument::getPoolAllTextNodes());
  +
  +     virtual
  +     ~XalanDefaultParsedSource();
   
  -    virtual XalanDocument*
  -    getDocument() const;
  +     virtual XalanDocument*
  +     getDocument() const;
   
  -    virtual XalanParsedSourceHelper*
  -    createHelper() const;
  +     virtual XalanParsedSourceHelper*
  +     createHelper(MemoryManagerType& theManager) const;
   
  -    virtual const XalanDOMString&
  -    getURI() const;
  +     virtual const XalanDOMString&
  +     getURI() const;
   
   private:
   
  -    // Not implemented...
  -    XalanDefaultParsedSource(const XalanDefaultParsedSource&);
  +     // Not implemented...
  +     XalanDefaultParsedSource(const XalanDefaultParsedSource&);
   
  -    XalanDefaultParsedSource&
  -    operator=(const XalanDefaultParsedSource&);
  +     XalanDefaultParsedSource&
  +     operator=(const XalanDefaultParsedSource&);
   
   
  -    // Data members...
  -    XalanSourceTreeParserLiaison    m_parserLiaison;
  +     // Data members...
  +     XalanSourceTreeParserLiaison    m_parserLiaison;
   
  -    XalanSourceTreeDOMSupport       m_domSupport;
  +     XalanSourceTreeDOMSupport               m_domSupport;
   
  -    XalanSourceTreeDocument*        m_parsedSource;
  +     XalanSourceTreeDocument*                m_parsedSource;
   
  -    XalanDOMString                  m_uri;
  +     XalanDOMString                                  m_uri;
   };
   
   
  @@ -167,7 +185,7 @@
   
   
   
  -#endif  // XALANDEFAULTPARSEDSOURCE_HEADER_GUARD
  +#endif       // XALANDEFAULTPARSEDSOURCE_HEADER_GUARD
   
   
   
  
  
  
  1.5       +3 -1      
xml-xalan/c/src/xalanc/XalanTransformer/XalanDocumentBuilder.hpp
  
  Index: XalanDocumentBuilder.hpp
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/c/src/xalanc/XalanTransformer/XalanDocumentBuilder.hpp,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- XalanDocumentBuilder.hpp  26 Feb 2004 23:07:13 -0000      1.4
  +++ XalanDocumentBuilder.hpp  8 Nov 2004 19:20:04 -0000       1.5
  @@ -22,6 +22,8 @@
   #include <xalanc/XalanTransformer/XalanTransformerDefinitions.hpp>
   
   
  +#include <xalanc/Include/XalanMemoryManagement.hpp>
  +
   
   // Base class include file.
   #include <xalanc/XalanTransformer/XalanParsedSource.hpp>
  @@ -67,7 +69,7 @@
        getDocument() const = 0;        
   
        virtual XalanParsedSourceHelper*
  -     createHelper() const = 0;
  +     createHelper(MemoryManagerType& theManager) const = 0;
   
        virtual const XalanDOMString&
        getURI() const = 0;
  
  
  
  1.5       +3 -1      
xml-xalan/c/src/xalanc/XalanTransformer/XalanParsedSource.hpp
  
  Index: XalanParsedSource.hpp
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/c/src/xalanc/XalanTransformer/XalanParsedSource.hpp,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- XalanParsedSource.hpp     26 Feb 2004 23:07:13 -0000      1.4
  +++ XalanParsedSource.hpp     8 Nov 2004 19:20:04 -0000       1.5
  @@ -22,6 +22,8 @@
   #include <xalanc/XalanTransformer/XalanTransformerDefinitions.hpp>
   
   
  +#include <xalanc/Include/XalanMemoryManagement.hpp>
  +
   
   // We're bringing in XalanDocument so that its derivation from XalanNode
   // is known...
  @@ -97,7 +99,7 @@
         * @return A pointer to a XalanParsedSourceHelper instance.
         */
        virtual XalanParsedSourceHelper*
  -     createHelper() const = 0;
  +     createHelper(MemoryManagerType& theManager) const = 0;
   
        /**
         * Get the URI for the parsed source, if any.
  
  
  
  1.5       +8 -3      
xml-xalan/c/src/xalanc/XalanTransformer/XalanSourceTreeWrapperParsedSource.cpp
  
  Index: XalanSourceTreeWrapperParsedSource.cpp
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/c/src/xalanc/XalanTransformer/XalanSourceTreeWrapperParsedSource.cpp,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- XalanSourceTreeWrapperParsedSource.cpp    26 Feb 2004 23:07:13 -0000      
1.4
  +++ XalanSourceTreeWrapperParsedSource.cpp    8 Nov 2004 19:20:04 -0000       
1.5
  @@ -36,6 +36,7 @@
   
   
   XalanSourceTreeWrapperParsedSource::XalanSourceTreeWrapperParsedSource(
  +            MemoryManagerType&              theManager,
                        XalanSourceTreeDocument*                theDocument,
                        XalanSourceTreeParserLiaison&   theParserLiaison,
                        XalanSourceTreeDOMSupport&              theDOMSupport,
  @@ -44,8 +45,12 @@
        m_parserLiaison(theParserLiaison),
        m_domSupport(theDOMSupport),
        m_parsedSource(theDocument),
  -     m_uri(URISupport::NormalizeURIText(theURI))
  +     m_uri(theURI, theManager)
   {
  +    XalanDOMString& refURI = const_cast<XalanDOMString&>(m_uri);
  +
  +    URISupport::NormalizeURIText(refURI);
  +
        assert(m_parsedSource != 0);
   }
   
  @@ -66,9 +71,9 @@
   
   
   XalanParsedSourceHelper*
  -XalanSourceTreeWrapperParsedSource::createHelper() const
  +XalanSourceTreeWrapperParsedSource::createHelper(MemoryManagerType& 
theManager) const
   {
  -     return new XalanDefaultParsedSourceHelper(m_domSupport);
  +     return XalanDefaultParsedSourceHelper::create(m_domSupport, theManager);
   }
   
   
  
  
  
  1.5       +4 -2      
xml-xalan/c/src/xalanc/XalanTransformer/XalanSourceTreeWrapperParsedSource.hpp
  
  Index: XalanSourceTreeWrapperParsedSource.hpp
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/c/src/xalanc/XalanTransformer/XalanSourceTreeWrapperParsedSource.hpp,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- XalanSourceTreeWrapperParsedSource.hpp    26 Feb 2004 23:07:13 -0000      
1.4
  +++ XalanSourceTreeWrapperParsedSource.hpp    8 Nov 2004 19:20:04 -0000       
1.5
  @@ -47,13 +47,15 @@
    */
   class XALAN_TRANSFORMER_EXPORT XalanSourceTreeWrapperParsedSource : public 
XalanParsedSource
   {
  +    
   public:
   
        XalanSourceTreeWrapperParsedSource(
  +            MemoryManagerType&              theManager,
                        XalanSourceTreeDocument*                theDocument,
                        XalanSourceTreeParserLiaison&   theParserLiaison,
                        XalanSourceTreeDOMSupport&              theDOMSupport,
  -                     const XalanDOMString&                   theURI = 
XalanDOMString());
  +                     const XalanDOMString&                   theURI = 
XalanDOMString(XalanMemMgrs::getDummyMemMgr()));
   
        virtual
        ~XalanSourceTreeWrapperParsedSource();
  @@ -62,7 +64,7 @@
        getDocument() const;
   
        virtual XalanParsedSourceHelper*
  -     createHelper() const;
  +     createHelper(MemoryManagerType& theManager) const;
   
        virtual const XalanDOMString&
        getURI() const;
  
  
  
  1.18      +195 -108  
xml-xalan/c/src/xalanc/XalanTransformer/XalanTransformer.cpp
  
  Index: XalanTransformer.cpp
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/c/src/xalanc/XalanTransformer/XalanTransformer.cpp,v
  retrieving revision 1.17
  retrieving revision 1.18
  diff -u -r1.17 -r1.18
  --- XalanTransformer.cpp      28 Oct 2004 19:40:06 -0000      1.17
  +++ XalanTransformer.cpp      8 Nov 2004 19:20:04 -0000       1.18
  @@ -29,6 +29,8 @@
   #include <xercesc/sax/SAXParseException.hpp>
   
   
  +#include <xalanc/Include/XalanMemMgrHelper.hpp>
  +
   
   #include <xalanc/XalanDOM/XalanDOMException.hpp>
   
  @@ -99,44 +101,50 @@
   const XSLTInit*                      XalanTransformer::s_xsltInit = 0;
   
   
  +static MemoryManagerType* s_initMemoryManager = 0;
   
  -XalanTransformer::XalanTransformer():
  -     m_compiledStylesheets(),
  -     m_parsedSources(),
  -     m_paramPairs(),
  -     m_functionPairs(),
  -     m_traceListeners(),
  -     m_errorMessage(1, '\0'),
  +XalanTransformer::XalanTransformer(MemoryManagerType& theManager):
  +    m_memoryManager(theManager),
  +     m_compiledStylesheets(m_memoryManager),
  +     m_parsedSources(m_memoryManager),
  +     m_paramPairs(m_memoryManager),
  +     m_functionPairs(m_memoryManager),
  +     m_traceListeners(m_memoryManager),
  +     m_errorMessage(1, '\0', m_memoryManager),
        m_useValidation(false),
        m_entityResolver(0),
        m_errorHandler(0),
  -     m_externalSchemaLocation(),
  -     m_externalNoNamespaceSchemaLocation(),
  +     m_externalSchemaLocation(m_memoryManager),
  +     m_externalNoNamespaceSchemaLocation(m_memoryManager),
        m_problemListener(0),
   #if defined(XALAN_NO_STD_NAMESPACE)
        m_warningStream(&cerr),
   #else
        m_warningStream(&std::cerr),
   #endif
  -     m_outputEncoding(),
  -    m_poolAllTextNodes(XalanSourceTreeDocument::getPoolAllTextNodes()),
  -     m_stylesheetExecutionContext(new StylesheetExecutionContextDefault)
  +     m_outputEncoding(m_memoryManager),
  +     
m_stylesheetExecutionContext(StylesheetExecutionContextDefault::create(m_memoryManager))
   {
   #if defined(XALAN_USE_ICU)
        // Create a collation function for the ICU, and have it
        // cache collators...
  -     XalanAutoPtr<ICUBridgeCollationCompareFunctor>  theICUFunctor(new 
ICUBridgeCollationCompareFunctor(true));
  +     XalanMemMgrAutoPtr<ICUBridgeCollationCompareFunctor, true>      
theICUFunctor(m_memoryManager, 
ICUBridgeCollationCompareFunctor::create(m_memoryManager, true));
   
        
m_stylesheetExecutionContext->installCollationCompareFunctor(theICUFunctor.get());
   
  -     XalanAutoPtr<ICUFormatNumberFunctor>  theFormatNumberFunctor(new 
ICUFormatNumberFunctor());
  +     XalanMemMgrAutoPtr<ICUFormatNumberFunctor, true>  
theFormatNumberFunctor(m_memoryManager, 
ICUFormatNumberFunctor::create(m_memoryManager));
        
m_stylesheetExecutionContext->installFormatNumberFunctor(theFormatNumberFunctor.get());
        theICUFunctor.release();
        theFormatNumberFunctor.release();
  +
   #endif
   }
   
  -
  +MemoryManagerType& 
  +XalanTransformer::getMemoryManager()
  +{
  +    return m_memoryManager;
  +}
   
   XalanTransformer::~XalanTransformer()
   {
  @@ -145,41 +153,60 @@
        // Clean up all entries in the compliledStylesheets vector.
        for_each(m_compiledStylesheets.begin(),
                         m_compiledStylesheets.end(),
  -                      DeleteFunctor<XalanCompiledStylesheet>());
  +                      
DeleteFunctor<XalanCompiledStylesheet>(m_memoryManager));
   
        // Clean up all entries in the compliledStylesheets vector.
        for_each(m_parsedSources.begin(),
                         m_parsedSources.end(),
  -                      DeleteFunctor<XalanParsedSource>());
  +                      DeleteFunctor<XalanParsedSource>(m_memoryManager));
   
        for (FunctionParamPairVectorType::size_type i = 0; i < 
m_functionPairs.size(); ++i)
        {
  -             delete m_functionPairs[i].second;
  +        if(m_functionPairs[i].second!= 0)
  +             {
  +                     m_functionPairs[i].second->~Function();
  +
  +             m_memoryManager.deallocate(m_functionPairs[i].second);
  +             }
  +     }
  +
  +    typedef ParamPairVectorType::iterator iterator;
  +
  +     for (iterator j = m_paramPairs.begin(); j != m_paramPairs.end(); ++j)
  +     {
  +
  +        destroyObjWithMemMgr((*j).first, m_memoryManager);
  +        destroyObjWithMemMgr((*j).second, m_memoryManager);
        }
   
   #if defined(XALAN_USE_ICU)
        // Uninstall the ICU collation compare functor, and destroy it...
  -     delete m_stylesheetExecutionContext->uninstallCollationCompareFunctor();
  -     delete m_stylesheetExecutionContext->uninstallFormatNumberFunctor();
  +
  +    destroyObjWithMemMgr( 
m_stylesheetExecutionContext->uninstallCollationCompareFunctor(), 
m_memoryManager);
  +     destroyObjWithMemMgr( 
m_stylesheetExecutionContext->uninstallFormatNumberFunctor(), m_memoryManager);
   #endif
   
  -     delete m_stylesheetExecutionContext;
  -}
  +     m_stylesheetExecutionContext->~StylesheetExecutionContextDefault();
   
  +    m_memoryManager.deallocate(m_stylesheetExecutionContext);
  +}
   
   
   void
  -XalanTransformer::initialize()
  +XalanTransformer::initialize(MemoryManagerType&  theManager)
   {
        // Initialize Xalan. 
  -     XalanAutoPtr<XSLTInit>                  initGuard(new XSLTInit);
  -     XalanAutoPtr<XSLTInputSource>   inputSourceGuard(new XSLTInputSource);
  -     EnsureFunctionsInstallation             installGuard; 
  -     installGuard.install();
  +    XalanMemMgrAutoPtr<XSLTInit, true>                       
initGuard(theManager, XSLTInit::create(theManager));
  +     XalanAutoPtr<XSLTInputSource>   inputSourceGuard(new (&theManager) 
XSLTInputSource);
  +     EnsureFunctionsInstallation             instalGuard(theManager); 
  +
  +     instalGuard.install();
   
  -     installGuard.release();
  -     s_xsltInit = initGuard.release();
  +     instalGuard.release();
  +     s_xsltInit = initGuard.releasePtr();
        s_emptyInputSource = inputSourceGuard.release();
  +
  +    s_initMemoryManager = &theManager;
   }
   
   
  @@ -187,20 +214,19 @@
   void
   XalanTransformer::terminate()
   {
  +    assert( s_initMemoryManager!= 0 );
  +
        {
  -             EnsureFunctionsInstallation             uninstalGuard;
  +             EnsureFunctionsInstallation             
uninstalGuard(*s_initMemoryManager);
        }
   
  -#if defined(XALAN_CANNOT_DELETE_CONST)
  -     delete (XSLTInputSource*) s_emptyInputSource;
  -     delete (XSLTInit*) s_xsltInit;
  -#else
        delete s_emptyInputSource;
  -     delete s_xsltInit;
  -#endif
  +
  +    destroyObjWithMemMgr(s_xsltInit, *s_initMemoryManager);
   
        s_emptyInputSource = 0;
        s_xsltInit = 0;
  +    s_initMemoryManager = 0;
   
   #if defined(XALAN_USE_ICU)
        ICUBridgeCleanup::cleanup();
  @@ -217,6 +243,17 @@
   #endif
   }
   
  +#if defined(XALAN_USE_ICU)
  +void
  +ICUStartUp(MemoryManagerType&  theManager)
  +{
  +    ICUBridgeCleanup::startup(theManager);
  +}
  +#else
  +ICUStartUp(MemoryManagerType&  /*theManager*/)
  +{
  +}
  +#endif
   
   
   static void
  @@ -315,11 +352,11 @@
                        XalanFlushHandlerType   theFlushHandler)
   {
        // Set to output target to the callback 
  -     XalanTransformerOutputStream    theOutputStream(theOutputHandle, 
theOutputHandler, theFlushHandler);
  +     XalanTransformerOutputStream    theOutputStream(m_memoryManager, 
theOutputHandle, theOutputHandler, theFlushHandler);
   
        XalanOutputStreamPrintWriter    thePrintWriter(theOutputStream);
   
  -     XSLTResultTarget                                
theResultTarget(&thePrintWriter);
  +     XSLTResultTarget                                
theResultTarget(&thePrintWriter, m_memoryManager);
   
        // Do the transformation...
        return transform(
  @@ -339,11 +376,11 @@
                        XalanFlushHandlerType                   theFlushHandler)
   {
        // Set to output target to the callback 
  -     XalanTransformerOutputStream    theOutputStream(theOutputHandle, 
theOutputHandler, theFlushHandler);
  +     XalanTransformerOutputStream    theOutputStream(m_memoryManager, 
theOutputHandle, theOutputHandler, theFlushHandler);
   
        XalanOutputStreamPrintWriter    thePrintWriter(theOutputStream);
   
  -     XSLTResultTarget                                
theResultTarget(&thePrintWriter);
  +     XSLTResultTarget                                
theResultTarget(&thePrintWriter, m_memoryManager);
   
        // Do the transformation...
        return transform(
  @@ -364,11 +401,11 @@
        assert(s_emptyInputSource != 0);
   
        // Set to output target to the callback 
  -     XalanTransformerOutputStream    theOutputStream(theOutputHandle, 
theOutputHandler, theFlushHandler);
  +     XalanTransformerOutputStream    theOutputStream(m_memoryManager, 
theOutputHandle, theOutputHandler, theFlushHandler);
   
        XalanOutputStreamPrintWriter    thePrintWriter(theOutputStream);
   
  -     XSLTResultTarget                                
theResultTarget(&thePrintWriter);
  +     XSLTResultTarget                                
theResultTarget(&thePrintWriter, m_memoryManager);
   
        // Do the transformation...
        return transform(
  @@ -412,7 +449,7 @@
                        const SAXParseException&        theException,
                        CharVectorType&                         theErrorMessage)
   {
  -     XalanDOMString  theBuffer;
  +    XalanDOMString   theBuffer(theErrorMessage.getMemoryManager());
   
        FormatSAXParseException(
                                theException,
  @@ -428,12 +465,16 @@
                        const XalanDOMException&        theException,
                        CharVectorType&                         theErrorMessage)
   {
  -     XalanDOMString  theBuffer;
  +    XalanDOMString   theBuffer(theErrorMessage.getMemoryManager()), 
theResult(theErrorMessage.getMemoryManager());
   
  -     append(theBuffer, 
LongToDOMString(long(theException.getExceptionCode())));
  +    LongToDOMString(long(theException.getExceptionCode()), theResult);
  +     append(theBuffer, theResult);
   
        append(theBuffer, XalanDOMChar(XalanUnicode::charFullStop));
  -     XalanDOMString  theMessage = 
XalanMessageLoader::getMessage(XalanMessages::XalanDOMExceptionCaught_1Param,theBuffer);
  +
  +     XalanDOMString  theMessage (theErrorMessage.getMemoryManager());
  +    
  +    
XalanMessageLoader::getMessage(XalanMessages::XalanDOMExceptionCaught_1Param, 
theMessage, theBuffer);
   
        TranscodeToLocalCodePage(theMessage, theErrorMessage, true);
   }
  @@ -449,7 +490,7 @@
        m_errorMessage.resize(1, '\0');
   
        // Store error messages from problem listener.
  -     XalanDOMString  theErrorMessage;
  +     XalanDOMString  theErrorMessage(m_memoryManager);
   
        int     theResult = 0;
   
  @@ -458,7 +499,7 @@
                // Create some support objects that are necessary for running 
the processor...
                XalanSourceTreeDOMSupport               theDOMSupport;
   
  -             XalanSourceTreeParserLiaison    theParserLiaison(theDOMSupport);
  +             XalanSourceTreeParserLiaison    
theParserLiaison(m_memoryManager, theDOMSupport);
   
                theParserLiaison.setEntityResolver(m_entityResolver);
                theParserLiaison.setErrorHandler(m_errorHandler);
  @@ -467,14 +508,15 @@
                theDOMSupport.setParserLiaison(&theParserLiaison);
   
                // Create some more support objects...
  -             XSLTProcessorEnvSupportDefault  theXSLTProcessorEnvSupport;
  +             XSLTProcessorEnvSupportDefault  
theXSLTProcessorEnvSupport(m_memoryManager);
   
  -             XObjectFactoryDefault   theXObjectFactory;
  +             XObjectFactoryDefault   theXObjectFactory(m_memoryManager);
   
  -             XPathFactoryBlock               theXPathFactory;
  +             XPathFactoryBlock               
theXPathFactory(m_memoryManager);
   
                // Create a processor...
                XSLTEngineImpl  theProcessor(
  +                m_memoryManager,
                                theParserLiaison,
                                theXSLTProcessorEnvSupport,
                                theDOMSupport,
  @@ -484,7 +526,7 @@
                // Create a problem listener and send output to a 
XalanDOMString.
                DOMStringPrintWriter    thePrintWriter(theErrorMessage);
   
  -             XalanTransformerProblemListener         
theProblemListener(m_warningStream, &thePrintWriter);
  +             XalanTransformerProblemListener         theProblemListener( 
m_memoryManager, m_warningStream, &thePrintWriter);
   
                if (m_problemListener == 0)
                {
  @@ -500,7 +542,8 @@
   
                // Create a new XalanCompiledStylesheet.
                theCompiledStylesheet =
  -                     new XalanCompiledStylesheetDefault(
  +                     XalanCompiledStylesheetDefault::create(
  +                        m_memoryManager,
                                                theStylesheetSource,
                                                theProcessor,
                                                m_errorHandler,
  @@ -569,12 +612,17 @@
                }
                else
                {
  -                     XalanDOMString  theBuffer;
  -                     append(theBuffer, 
LongToDOMString(long(e.getExceptionCode())));
  +                     XalanDOMString  theBuffer(m_memoryManager), 
longStr(m_memoryManager);
  +
  +            LongToDOMString(long(e.getExceptionCode()), longStr);
  +
  +                     append(theBuffer, longStr);
   
                        append(theBuffer, 
XalanDOMChar(XalanUnicode::charFullStop));
   
  -                     XalanDOMString theMessage = 
XalanMessageLoader::getMessage(XalanMessages::XalanDOMExceptionCaught_1Param,theBuffer);
  +                     XalanDOMString theMessage(m_memoryManager);
  +             
  +            
XalanMessageLoader::getMessage(XalanMessages::XalanDOMExceptionCaught_1Param, 
theMessage, theBuffer);
   
                        TranscodeToLocalCodePage(theMessage, m_errorMessage, 
true);
                }
  @@ -600,11 +648,13 @@
   
        if (i == m_compiledStylesheets.end())
        {
  -             XalanDOMString theStylesheetErrorMessage = 
XalanMessageLoader::getMessage(XalanMessages::InvalidCompiledStylesheetProvided);
  +             XalanDOMString theStylesheetErrorMessage(m_memoryManager);
  +            
  +        
XalanMessageLoader::getMessage(XalanMessages::InvalidCompiledStylesheetProvided,
 theStylesheetErrorMessage);
   
                try
                {
  -                     m_errorMessage = theStylesheetErrorMessage.transcode();
  +            theStylesheetErrorMessage.transcode(m_errorMessage);
                }
                catch(...)
                {
  @@ -629,12 +679,9 @@
        {
                m_compiledStylesheets.erase(i);
   
  -#if defined(XALAN_CANNOT_DELETE_CONST)
  -             delete (XalanCompiledStylesheet*) theStylesheet;
  -#else
  -             delete theStylesheet;
  -#endif
  +             theStylesheet ->~XalanCompiledStylesheet() ;
   
  +        m_memoryManager.deallocate((void*) theStylesheet);
                return 0;
        }
   }
  @@ -661,7 +708,8 @@
                if(useXercesDOM == true)
                {
                        theParsedSource =
  -                             new XercesDOMParsedSource(
  +                             XercesDOMParsedSource::create(
  +                        m_memoryManager,
                                                theInputSource,
                                                m_useValidation,
                                                m_errorHandler,
  @@ -672,14 +720,14 @@
                else
                {
                        theParsedSource =
  -                             new XalanDefaultParsedSource(
  +                             XalanDefaultParsedSource::create(
  +                        m_memoryManager,
                                                theInputSource,
                                                m_useValidation,
                                                m_errorHandler,
                                                m_entityResolver,
                                                getExternalSchemaLocation(),
  -                                             
getExternalNoNamespaceSchemaLocation(),
  -                        m_poolAllTextNodes);
  +                                             
getExternalNoNamespaceSchemaLocation());
                }
   
                // Store it in a vector.
  @@ -687,7 +735,11 @@
        }
        catch(const XSLException&       e)
        {
  -             TranscodeToLocalCodePage(e.defaultFormat(), m_errorMessage, 
true);
  +        XalanDOMString theBuffer(m_memoryManager);
  +
  +        e.defaultFormat(theBuffer);
  +
  +             TranscodeToLocalCodePage(theBuffer, m_errorMessage, true);
   
                theResult = -1;
        }
  @@ -734,11 +786,13 @@
   
        if (i == m_parsedSources.end())
        {
  -             XalanDOMString theParserErrorMessage = 
XalanMessageLoader::getMessage(XalanMessages::InvalidParsedSourceProvided);
  +             XalanDOMString theParserErrorMessage(m_memoryManager);
  +        
  +        
XalanMessageLoader::getMessage(XalanMessages::InvalidParsedSourceProvided, 
theParserErrorMessage);
   
                try
                {
  -                     m_errorMessage = theParserErrorMessage.transcode();
  +                      theParserErrorMessage.transcode(m_errorMessage);
                }
                catch(...)
                {
  @@ -762,12 +816,14 @@
        {
                m_parsedSources.erase(i);
   
  -#if defined(XALAN_CANNOT_DELETE_CONST)
  -             delete (XalanParsedSource*) theParsedSource;
  -#else
  -             delete theParsedSource;
  -#endif
  +        XalanParsedSource* sourceToDelete = 
const_cast<XalanParsedSource*>(theParsedSource);
  +
  +        if(sourceToDelete != 0)
  +        {
  +            sourceToDelete->~XalanParsedSource();
   
  +            getMemoryManager().deallocate((void*)sourceToDelete);
  +        }
                return 0;
        }
   }
  @@ -780,7 +836,9 @@
                        const XalanDOMString&   expression)
   {
        // Store the stylesheet parameter in a vector.
  -     m_paramPairs.push_back(ParamPairType(key,  expression));
  +
  +     
m_paramPairs.push_back(ParamPairType(cloneObjWithMemMgr(key,m_memoryManager),
  +                                         cloneObjWithMemMgr (expression, 
m_memoryManager)));
   }
   
   
  @@ -790,7 +848,8 @@
                        const char*             key,
                        const char*             expression)
   {
  -     setStylesheetParam(XalanDOMString(key), XalanDOMString(expression));
  +
  +     setStylesheetParam(XalanDOMString(key, m_memoryManager), 
XalanDOMString(expression, m_memoryManager));
   }
   
   
  @@ -823,9 +882,10 @@
   XalanDocumentBuilder*
   XalanTransformer::createDocumentBuilder(const XalanDOMString&        theURI)
   {
  +
        m_parsedSources.reserve(m_parsedSources.size() + 1);
   
  -     XalanDocumentBuilder* const     theNewBuilder = new 
XalanDefaultDocumentBuilder(theURI);
  +    XalanDocumentBuilder* const      theNewBuilder = 
XalanDefaultDocumentBuilder::create( m_memoryManager, theURI);
   
        m_parsedSources.push_back(theNewBuilder);
   
  @@ -848,7 +908,8 @@
                        const XalanDOMString&   functionName,
                        const Function&                 function)
   {
  -     
m_functionPairs.push_back(FunctionPairType(XalanQNameByValue(theNamespace, 
functionName), function.clone()));
  +    
m_functionPairs.push_back(FunctionPairType(XalanQNameByValue::create(theNamespace,
 functionName, m_memoryManager), 
  +                                                
function.clone(m_memoryManager)));
   }
   
   
  @@ -874,9 +935,12 @@
   {
        for (FunctionParamPairVectorType::size_type i = 0; i < 
m_functionPairs.size(); ++i)
        {
  -             if(XalanQNameByReference(theNamespace, 
functionName).equals(m_functionPairs[i].first))
  +             if(m_functionPairs[i].first != 0 &&
  +            XalanQNameByReference(theNamespace, functionName).equals(* 
(m_functionPairs[i].first)))
                {
  -                     delete m_functionPairs[i].second;
  +            destroyObjWithMemMgr( m_functionPairs[i].first, m_memoryManager);
  +
  +                     destroyObjWithMemMgr( m_functionPairs[i].second, 
m_memoryManager);
   
                        m_functionPairs.erase(m_functionPairs.begin() + i);     
                }
  @@ -1044,6 +1108,21 @@
                m_stylesheetExecutionContext->reset();
   
                // Clear the ParamPairVectorType.
  +        XALAN_USING_STD(for_each)
  +
  +/*        for_each(m_paramPairs.begin(),
  +                m_paramPairs.end(),
  +                DeleteParamPairFunctor<ParamPairType>(m_memoryManager));
  +*/
  +        typedef ParamPairVectorType::iterator iterator;
  +
  +        for (iterator j = m_paramPairs.begin(); j != m_paramPairs.end(); ++j)
  +        {
  +    
  +            destroyObjWithMemMgr((*j).first, m_memoryManager);
  +            destroyObjWithMemMgr((*j).second, m_memoryManager);
  +        }     
  +
                m_paramPairs.clear();
        }
        catch(...)
  @@ -1075,7 +1154,7 @@
        m_errorMessage.resize(1, '\0');
   
        // Store error messages from problem listener.
  -     XalanDOMString  theErrorMessage;
  +     XalanDOMString  theErrorMessage(m_memoryManager);
   
        try
        {
  @@ -1083,7 +1162,8 @@
                assert(theSourceDocument != 0);
   
                // Create the helper object that is necessary for running the 
processor...
  -             XalanAutoPtr<XalanParsedSourceHelper>   
theHelper(theParsedXML.createHelper());
  +             XalanMemMgrAutoPtr<XalanParsedSourceHelper, true>       
theHelper(m_memoryManager, theParsedXML.createHelper(m_memoryManager));
  +
                assert(theHelper.get() != 0);
   
                DOMSupport&             theDOMSupport = 
theHelper->getDOMSupport();
  @@ -1097,7 +1177,7 @@
                theParserLiaison.setUseValidation(m_useValidation);
   
                // Create some more support objects...
  -             XSLTProcessorEnvSupportDefault  theXSLTProcessorEnvSupport;
  +             XSLTProcessorEnvSupportDefault  
theXSLTProcessorEnvSupport(m_memoryManager);
   
                const XalanDOMString&   theSourceURI = theParsedXML.getURI();
   
  @@ -1110,19 +1190,23 @@
                {
                        for (FunctionParamPairVectorType::size_type i = 0; i < 
m_functionPairs.size(); ++i)
                        {
  +                assert( m_functionPairs[i].first != 0);
  +                assert( m_functionPairs[i].second != 0);
  +
                                
theXSLTProcessorEnvSupport.installExternalFunctionLocal(
  -                                             
m_functionPairs[i].first.getNamespace(),
  -                                             
m_functionPairs[i].first.getLocalPart(),
  +                                             
m_functionPairs[i].first->getNamespace(),
  +                                             
m_functionPairs[i].first->getLocalPart(),
                                                *m_functionPairs[i].second);
                        }
                }
   
  -             XObjectFactoryDefault   theXObjectFactory;
  +             XObjectFactoryDefault   theXObjectFactory(m_memoryManager);
   
  -             XPathFactoryBlock               theXPathFactory;
  +             XPathFactoryBlock               
theXPathFactory(m_memoryManager);
   
                // Create a processor...
                XSLTEngineImpl  theProcessor(
  +                    m_memoryManager,
                                        theParserLiaison,
                                        theXSLTProcessorEnvSupport,
                                        theDOMSupport,
  @@ -1146,7 +1230,7 @@
                // pushing params, since there could be a problem resolving a 
QName.
                DOMStringPrintWriter    thePrintWriter(theErrorMessage);
   
  -             XalanTransformerProblemListener         
theProblemListener(m_warningStream, &thePrintWriter);
  +             XalanTransformerProblemListener         
theProblemListener(m_memoryManager, m_warningStream, &thePrintWriter);
   
                if (m_problemListener == 0)
                {
  @@ -1161,9 +1245,12 @@
                        // Set the parameters if any.
                        for (ParamPairVectorType::size_type i = 0; i < 
m_paramPairs.size(); ++i)
                        {
  +                assert ( m_paramPairs[i].first != 0);
  +                assert ( m_paramPairs[i].second != 0);
  +
                                theProcessor.setStylesheetParam(
  -                                             m_paramPairs[i].first,
  -                                             m_paramPairs[i].second);
  +                                             * (m_paramPairs[i].first),
  +                                             * (m_paramPairs[i].second));
                        }
                }
   
  @@ -1177,7 +1264,7 @@
   
                // We may need to change the output encoding, so
                // we make a copy of the result target.
  -             XSLTResultTarget        tempResultTarget(theResultTarget);
  +             XSLTResultTarget        tempResultTarget(theResultTarget, 
m_memoryManager);
   
                if (tempResultTarget.getEncoding().length() == 0 && 
m_outputEncoding.length() != 0)
                {
  @@ -1204,6 +1291,7 @@
                        // Create a stylesheet construction context, 
                        // using the stylesheet's factory support objects.
                        StylesheetConstructionContextDefault    
theStylesheetConstructionContext(
  +                            m_memoryManager,
                                                        theProcessor,
                                                        theXPathFactory);
   
  @@ -1286,27 +1374,26 @@
   void
   XalanTransformer::EnsureFunctionsInstallation::install()
   {
  -
  -     XalanExtensionsInstaller::installGlobal();
  -     XalanEXSLTCommonFunctionsInstaller::installGlobal();
  -     XalanEXSLTDynamicFunctionsInstaller::installGlobal();
  -     XalanEXSLTMathFunctionsInstaller::installGlobal();
  -     XalanEXSLTSetFunctionsInstaller::installGlobal();
  -     XalanEXSLTStringFunctionsInstaller::installGlobal();
  -     XalanEXSLTDateTimeFunctionsInstaller::installGlobal();
  +     XalanExtensionsInstaller::installGlobal(m_memoryManagement);
  +     XalanEXSLTCommonFunctionsInstaller::installGlobal(m_memoryManagement);
  +     XalanEXSLTDynamicFunctionsInstaller::installGlobal(m_memoryManagement);
  +     XalanEXSLTMathFunctionsInstaller::installGlobal(m_memoryManagement);
  +     XalanEXSLTSetFunctionsInstaller::installGlobal(m_memoryManagement);
  +     XalanEXSLTStringFunctionsInstaller::installGlobal(m_memoryManagement);
  +     XalanEXSLTDateTimeFunctionsInstaller::installGlobal(m_memoryManagement);
   }
   
   XalanTransformer::EnsureFunctionsInstallation::~EnsureFunctionsInstallation()
   {
  -     if ( !m_release )
  +     if ( !m_release)
        {
  -             XalanExtensionsInstaller::uninstallGlobal();
  -             XalanEXSLTCommonFunctionsInstaller::uninstallGlobal();
  -             XalanEXSLTDynamicFunctionsInstaller::uninstallGlobal();
  -             XalanEXSLTMathFunctionsInstaller::uninstallGlobal();
  -             XalanEXSLTSetFunctionsInstaller::uninstallGlobal();
  -             XalanEXSLTStringFunctionsInstaller::uninstallGlobal();
  -             XalanEXSLTDateTimeFunctionsInstaller::uninstallGlobal();
  +             XalanExtensionsInstaller::uninstallGlobal(m_memoryManagement);
  +             
XalanEXSLTCommonFunctionsInstaller::uninstallGlobal(m_memoryManagement);
  +             
XalanEXSLTDynamicFunctionsInstaller::uninstallGlobal(m_memoryManagement);
  +             
XalanEXSLTMathFunctionsInstaller::uninstallGlobal(m_memoryManagement);
  +             
XalanEXSLTSetFunctionsInstaller::uninstallGlobal(m_memoryManagement);
  +             
XalanEXSLTStringFunctionsInstaller::uninstallGlobal(m_memoryManagement);
  +             
XalanEXSLTDateTimeFunctionsInstaller::uninstallGlobal(m_memoryManagement);
   
   #if defined(XALAN_USE_ICU)
                XPath::uninstallFunction(XPathFunctionTable::s_formatNumber);
  
  
  
  1.12      +78 -8     
xml-xalan/c/src/xalanc/XalanTransformer/XalanTransformer.hpp
  
  Index: XalanTransformer.hpp
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/c/src/xalanc/XalanTransformer/XalanTransformer.hpp,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- XalanTransformer.hpp      28 Oct 2004 19:40:06 -0000      1.11
  +++ XalanTransformer.hpp      8 Nov 2004 19:20:05 -0000       1.12
  @@ -80,6 +80,7 @@
   */
   class XALAN_TRANSFORMER_EXPORT XalanTransformer
   {
  +
   public:
        
   #if defined(XALAN_NO_STD_NAMESPACE)
  @@ -88,11 +89,15 @@
        typedef std::ostream    StreamType;
   #endif
   
  -     XalanTransformer();
  +     XalanTransformer(MemoryManagerType& theManager = 
XalanMemMgrs::getDefaultXercesMemMgr());
   
        virtual
        ~XalanTransformer();
   
  +    MemoryManagerType& 
  +    getMemoryManager();
  +
  +
        /**
         * Initialize Xalan.
         *
  @@ -102,7 +107,7 @@
         * initialization state, so you do not call it more than once.
         */
        static void
  -     initialize();
  +     initialize(MemoryManagerType&  theManager = 
XalanMemMgrs::getDefaultXercesMemMgr());
   
        /**
         * Terminate Xalan.
  @@ -141,6 +146,9 @@
        ICUCleanUp();
   
   
  +     static void
  +     ICUStartUp(MemoryManagerType&  theManager = 
XalanMemMgrs::getDefaultXercesMemMgr());
  +
        /**
         * Transform will apply the stylesheet source to the parsed xml source
         * and write the transformation output to the target. 
  @@ -397,7 +405,7 @@
         * @return      a pointer to a XalanDocumentBuilder instance or 0 for 
failure.
         */
        XalanDocumentBuilder*
  -     createDocumentBuilder(const XalanDOMString&             theURI = 
XalanDOMString());
  +     createDocumentBuilder(const XalanDOMString&             theURI = 
XalanDOMString(XalanMemMgrs::getDummyMemMgr()));
   
        /**
         * Destroy a document builder created by a previous call to 
createDocumentBuilder().
  @@ -828,9 +836,9 @@
   
        typedef XalanVector<const XalanCompiledStylesheet*>     
CompiledStylesheetPtrVectorType;
        typedef XalanVector<const XalanParsedSource*>           
ParsedSourcePtrVectorType;
  -     typedef XALAN_STD_QUALIFIER pair<XalanDOMString, XalanDOMString>        
        ParamPairType;
  +     typedef XALAN_STD_QUALIFIER pair<XalanDOMString*, XalanDOMString*>      
        ParamPairType;
        typedef XalanVector<ParamPairType>                                      
ParamPairVectorType;
  -     typedef XALAN_STD_QUALIFIER pair<XalanQNameByValue, Function*>          
        FunctionPairType;
  +     typedef XALAN_STD_QUALIFIER pair<XalanQNameByValue*, Function*>         
        FunctionPairType;
        typedef XalanVector<FunctionPairType>                           
FunctionParamPairVectorType;
        typedef XalanVector<TraceListener*>                                     
TraceListenerVectorType;
   
  @@ -838,14 +846,15 @@
        {
        public:
                
  -             EnsureFunctionsInstallation() : 
  +             EnsureFunctionsInstallation(MemoryManagerType& theManager) : 
  +          m_memoryManagement(theManager),
                  m_release(false)
  -             {         
  +             {        
                }
   
                ~EnsureFunctionsInstallation();
   
  -             static void
  +             void
                install();
   
                void
  @@ -855,6 +864,7 @@
                }
   
        private:
  +        MemoryManagerType& m_memoryManagement;
   
                bool m_release;
        };
  @@ -926,7 +936,65 @@
   
                XalanDocumentBuilder* const m_documentBuilder;
        };
  +    template <class T>
  +#if defined(XALAN_NO_STD_NAMESPACE)
  +    struct DeleteParamPairFunctor : public unary_function<const T&, void>
  +#else
  +    struct DeleteParamPairFunctor : public std::unary_function<const T&, 
void>
  +#endif
  +    {
  +#if defined(XALAN_NO_STD_NAMESPACE)
  +        typedef unary_function<const T&, void>       BaseClassType;
  +#else
  +        typedef std::unary_function<const T&, void>  BaseClassType;
  +#endif
  +
  +        typedef typename BaseClassType::result_type          result_type;
  +        typedef typename BaseClassType::argument_type        argument_type;
  +
  +        DeleteParamPairFunctor(MemoryManagerType&      theManager) :
  +        m_memoryManager(theManager)
  +        {
  +        }
  +
  +        template<class T>
  +        deletePtr(T* ptr)const
  +        {
  +            ptr->~T();
  +        }
  +
  +        /**
  +        * Delete the object pointed to by argument.
  +        *
  +        * @param thePointer pointer to object to be deleted
  +        */
  +        result_type
  +            operator()(argument_type thePair) const
  +        {
  +            T&  tmpPair = const_cast<T&>(thePair);
  +
  +            if (tmpPair.first != 0)
  +            {
  +                deletePtr(tmpPair.first);
  +                
  +                m_memoryManager.deallocate((void*)tmpPair.first);
  +            }
  +
  +            if (tmpPair.second != 0)
  +            {
  +                deletePtr(tmpPair.second);
  +                
  +                m_memoryManager.deallocate((void*)tmpPair.second);
  +            }            
   
  +            
  +        }
  +
  +    private:
  +
  +        MemoryManagerType& m_memoryManager;
  +
  +    };
   protected:
   
   private:
  @@ -961,6 +1029,8 @@
   
   
        // Data members...
  +    MemoryManagerType&                      m_memoryManager;
  +
        CompiledStylesheetPtrVectorType                 m_compiledStylesheets;
   
        ParsedSourcePtrVectorType                               m_parsedSources;
  
  
  
  1.7       +6 -1      
xml-xalan/c/src/xalanc/XalanTransformer/XalanTransformerOutputStream.cpp
  
  Index: XalanTransformerOutputStream.cpp
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/c/src/xalanc/XalanTransformer/XalanTransformerOutputStream.cpp,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- XalanTransformerOutputStream.cpp  24 Aug 2004 14:03:16 -0000      1.6
  +++ XalanTransformerOutputStream.cpp  8 Nov 2004 19:20:05 -0000       1.7
  @@ -26,9 +26,11 @@
   
   
   XalanTransformerOutputStream::XalanTransformerOutputStream(
  +    MemoryManagerType&          theManager,
        void*                                           theOutputHandle, 
        XalanOutputHandlerType          theOutputHandler,
        XalanFlushHandlerType           theFlushHandler):
  +    XalanOutputStream(theManager),
        m_outputHandle(theOutputHandle),
        m_outputHandler(theOutputHandler),
        m_flushHandler(theFlushHandler)
  @@ -66,8 +68,11 @@
        // Thus the callback can alert us of memory allocation issues or buffer 
overflows.
        if(theBytesWritten != theBufferLength)
        {
  +
  +        XalanDOMString theBuffer(getMemoryManager());
  +
                throw XalanOutputStreamException(
  -                     
XalanMessageLoader::getMessage(XalanMessages::NumberBytesWrittenDoesNotEqual));
  +                     
XalanMessageLoader::getMessage(XalanMessages::NumberBytesWrittenDoesNotEqual, 
theBuffer), getMemoryManager());
        }
   }
   
  
  
  
  1.5       +3 -2      
xml-xalan/c/src/xalanc/XalanTransformer/XalanTransformerOutputStream.hpp
  
  Index: XalanTransformerOutputStream.hpp
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/c/src/xalanc/XalanTransformer/XalanTransformerOutputStream.hpp,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- XalanTransformerOutputStream.hpp  26 Feb 2004 23:07:13 -0000      1.4
  +++ XalanTransformerOutputStream.hpp  8 Nov 2004 19:20:05 -0000       1.5
  @@ -46,6 +46,7 @@
         * @param theFlushHandler       a user defined (callback) function.
         */
       XalanTransformerOutputStream(
  +        MemoryManagerType&          theManager,
                void*                                           
theOutputHandle, 
                XalanOutputHandlerType          theOutputHandler,
                XalanFlushHandlerType           theFlushHandler = 0);
  @@ -58,8 +59,8 @@
   
        virtual void
        writeData(
  -                     const char*             theBuffer,
  -                     size_type               theBufferLength);
  +                     const char*                 theBuffer,
  +                     size_type                   theBufferLength);
   
        virtual void
        doFlush();
  
  
  
  1.5       +7 -5      
xml-xalan/c/src/xalanc/XalanTransformer/XalanTransformerProblemListener.cpp
  
  Index: XalanTransformerProblemListener.cpp
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/c/src/xalanc/XalanTransformer/XalanTransformerProblemListener.cpp,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- XalanTransformerProblemListener.cpp       26 Feb 2004 23:07:13 -0000      
1.4
  +++ XalanTransformerProblemListener.cpp       8 Nov 2004 19:20:05 -0000       
1.5
  @@ -43,11 +43,13 @@
   
   
   XalanTransformerProblemListener::XalanTransformerProblemListener(
  +            MemoryManagerType& theManager,
                        StreamType*             theWarningStream,
                        PrintWriter*    thePrintWriter) :
        ProblemListener(),
  -     m_problemListener(thePrintWriter),
  -     m_warningStream(theWarningStream)
  +     m_problemListener(theManager, thePrintWriter),
  +     m_warningStream(theWarningStream),
  +    m_warningString(theManager)
   {
   }
   
  @@ -92,9 +94,9 @@
        }
        else if (m_warningStream != 0)
        {
  -             XalanDOMString  theWarning;
  +        m_warningString.erase();
   
  -             DOMStringPrintWriter    thePrintWriter(theWarning);
  +             DOMStringPrintWriter    thePrintWriter(m_warningString);
   
                ProblemListenerDefault::problem(
                        thePrintWriter,
  @@ -107,7 +109,7 @@
                        lineNo,
                        charOffset);
   
  -             *m_warningStream << theWarning;
  +             *m_warningStream << m_warningString;
        }
   }
   
  
  
  
  1.5       +5 -2      
xml-xalan/c/src/xalanc/XalanTransformer/XalanTransformerProblemListener.hpp
  
  Index: XalanTransformerProblemListener.hpp
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/c/src/xalanc/XalanTransformer/XalanTransformerProblemListener.hpp,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- XalanTransformerProblemListener.hpp       26 Feb 2004 23:07:13 -0000      
1.4
  +++ XalanTransformerProblemListener.hpp       8 Nov 2004 19:20:05 -0000       
1.5
  @@ -52,8 +52,9 @@
   #endif
   
        XalanTransformerProblemListener(
  -                     StreamType*             theStream,
  -                     PrintWriter*    thePrintWriter);
  +            MemoryManagerType&  theManager,
  +                     StreamType*                 theStream,
  +                     PrintWriter*        thePrintWriter);
   
        virtual
        ~XalanTransformerProblemListener();
  @@ -79,6 +80,8 @@
        ProblemListenerDefault  m_problemListener;
   
        StreamType*             m_warningStream;
  +
  +    XalanDOMString   m_warningString;
   };
   
   
  
  
  
  1.5       +54 -8     
xml-xalan/c/src/xalanc/XalanTransformer/XercesDOMParsedSource.cpp
  
  Index: XercesDOMParsedSource.cpp
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/c/src/xalanc/XalanTransformer/XercesDOMParsedSource.cpp,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- XercesDOMParsedSource.cpp 26 Feb 2004 23:07:13 -0000      1.4
  +++ XercesDOMParsedSource.cpp 8 Nov 2004 19:20:05 -0000       1.5
  @@ -33,13 +33,27 @@
   
   
   
  -XercesDOMParsedSourceHelper::XercesDOMParsedSourceHelper() :
  -     m_domSupport(),
  -     m_parserLiaison()
  +XercesDOMParsedSourceHelper::XercesDOMParsedSourceHelper(MemoryManagerType& 
theManager) :
  +     m_domSupport(theManager),
  +     m_parserLiaison(theManager)
   {
   }
   
  +XercesDOMParsedSourceHelper*
  +XercesDOMParsedSourceHelper::create(MemoryManagerType& theManager)
  +{
  +        typedef XercesDOMParsedSourceHelper ThisType;
  +        
  +        XalanMemMgrAutoPtr<ThisType, false> theGuard( theManager , 
(ThisType*)theManager.allocate(sizeof(ThisType)));
  +
  +        ThisType* theResult = theGuard.get();
  +
  +        new (theResult) ThisType(theManager);
   
  +         theGuard.release();
  +
  +        return theResult;
  +}
   
   XercesDOMParsedSourceHelper::~XercesDOMParsedSourceHelper()
   {
  @@ -64,6 +78,7 @@
   
   
   XercesDOMParsedSource::XercesDOMParsedSource(
  +            MemoryManagerType&      theManager,
                        const InputSourceType&  theInputSource,
                        bool                                    fValidate,
                        ErrorHandlerType*               theErrorHandler,
  @@ -71,8 +86,9 @@
                        const XalanDOMChar*             
theExternalSchemaLocation,
                        const XalanDOMChar*             
theExternalNoNamespaceSchemaLocation) :
        XalanParsedSource(),
  -     m_parserLiaison(),
  -     m_parsedSource(0)
  +     m_parserLiaison(theManager),
  +     m_parsedSource(0),
  +    m_uri(theManager)
   {
        m_parserLiaison.setUseValidation(fValidate);
        m_parserLiaison.setEntityResolver(theEntityResolver);
  @@ -89,7 +105,7 @@
        {
                try
                {
  -                     m_uri = URISupport::getURLStringFromString(theSystemID);
  +                     URISupport::getURLStringFromString(theSystemID, m_uri);
                }
                catch(const XERCES_CPP_NAMESPACE_QUALIFIER XMLException&)
                {
  @@ -102,6 +118,36 @@
        }
   }
   
  +XercesDOMParsedSource*
  +XercesDOMParsedSource::create(
  +            MemoryManagerType&      theManager,
  +                     const InputSourceType&  theInputSource,
  +                     bool                                    fValidate,
  +                     ErrorHandlerType*               theErrorHandler,
  +                     EntityResolverType*             theEntityResolver,
  +                     const XalanDOMChar*             
theExternalSchemaLocation,
  +                     const XalanDOMChar*             
theExternalNoNamespaceSchemaLocation)
  +{
  +    typedef XercesDOMParsedSource ThisType;
  +
  +    XalanMemMgrAutoPtr<ThisType, false> theGuard( theManager , 
(ThisType*)theManager.allocate(sizeof(ThisType)));
  +
  +    ThisType* theResult = theGuard.get();
  +
  +    new (theResult) ThisType(            
  +                            theManager,
  +                            theInputSource,
  +                            fValidate,
  +                            theErrorHandler,
  +                            theEntityResolver,
  +                            theExternalSchemaLocation,
  +                            theExternalNoNamespaceSchemaLocation);
  +
  +
  +     theGuard.release();
  +
  +    return theResult;
  +}
   
   
   XercesDOMParsedSource::~XercesDOMParsedSource()
  @@ -119,9 +165,9 @@
   
   
   XalanParsedSourceHelper*
  -XercesDOMParsedSource::createHelper() const
  +XercesDOMParsedSource::createHelper(MemoryManagerType& theManager) const
   {
  -     return new XercesDOMParsedSourceHelper;
  +    return XercesDOMParsedSourceHelper::create(theManager);
   }
   
   
  
  
  
  1.5       +16 -2     
xml-xalan/c/src/xalanc/XalanTransformer/XercesDOMParsedSource.hpp
  
  Index: XercesDOMParsedSource.hpp
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/c/src/xalanc/XalanTransformer/XercesDOMParsedSource.hpp,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- XercesDOMParsedSource.hpp 26 Feb 2004 23:07:13 -0000      1.4
  +++ XercesDOMParsedSource.hpp 8 Nov 2004 19:20:05 -0000       1.5
  @@ -40,10 +40,13 @@
   {
   public:
   
  -     XercesDOMParsedSourceHelper();
  +     XercesDOMParsedSourceHelper(MemoryManagerType& theManager);
   
        ~XercesDOMParsedSourceHelper();
   
  +    static XercesDOMParsedSourceHelper*
  +    create(MemoryManagerType& theManager);
  +
        virtual DOMSupport&
        getDOMSupport();
   
  @@ -68,6 +71,17 @@
   public:
        
        XercesDOMParsedSource(
  +            MemoryManagerType&      theManager,
  +                     const InputSourceType&  theInputSource,
  +                     bool                                    fValidate = 
false,
  +                     ErrorHandlerType*               theErrorHandler = 0,
  +                     EntityResolverType*             theEntityResolver = 0,
  +                     const XalanDOMChar*             
theExternalSchemaLocation = 0,
  +                     const XalanDOMChar*             
theExternalNoNamespaceSchemaLocation = 0);
  +
  +     static XercesDOMParsedSource*
  +    create(
  +            MemoryManagerType&      theManager,
                        const InputSourceType&  theInputSource,
                        bool                                    fValidate = 
false,
                        ErrorHandlerType*               theErrorHandler = 0,
  @@ -82,7 +96,7 @@
        getDocument() const;
   
        virtual XalanParsedSourceHelper*
  -     createHelper() const;
  +     createHelper(MemoryManagerType& theManager) const;
   
        virtual const XalanDOMString&
        getURI() const;
  
  
  
  1.7       +15 -5     
xml-xalan/c/src/xalanc/XalanTransformer/XercesDOMWrapperParsedSource.cpp
  
  Index: XercesDOMWrapperParsedSource.cpp
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/c/src/xalanc/XalanTransformer/XercesDOMWrapperParsedSource.cpp,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- XercesDOMWrapperParsedSource.cpp  13 Mar 2004 00:44:56 -0000      1.6
  +++ XercesDOMWrapperParsedSource.cpp  8 Nov 2004 19:20:05 -0000       1.7
  @@ -37,9 +37,9 @@
   XALAN_CPP_NAMESPACE_BEGIN
   
   
  -
   #if defined(XALAN_BUILD_DEPRECATED_DOM_BRIDGE)
   XercesDOMWrapperParsedSource::XercesDOMWrapperParsedSource(
  +            MemoryManagerType&          theManager,
                        const DOM_Document_Type&        theDocument,
                        XercesParserLiaison&            theParserLiaison,
                        XercesDOMSupport&                       theDOMSupport,
  @@ -48,8 +48,12 @@
        m_parserLiaison(theParserLiaison),
        m_domSupport(theDOMSupport),
        m_parsedSource(theParserLiaison.createDocument(theDocument, true, 
true)),
  -     m_uri(URISupport::NormalizeURIText(theURI))
  +     m_uri(theURI,theManager)
   {
  +    XalanDOMString& refURI = const_cast<XalanDOMString&>(m_uri);
  +
  +    URISupport::NormalizeURIText(refURI);
  +
        assert(m_parsedSource != 0);
   }
   #endif
  @@ -57,6 +61,7 @@
   
   
   XercesDOMWrapperParsedSource::XercesDOMWrapperParsedSource(
  +            MemoryManagerType&          theManager,
                        const DOMDocument_Type*         theDocument,
                        XercesParserLiaison&            theParserLiaison,
                        XercesDOMSupport&                       theDOMSupport,
  @@ -65,8 +70,13 @@
        m_parserLiaison(theParserLiaison),
        m_domSupport(theDOMSupport),
        m_parsedSource(theParserLiaison.createDocument(theDocument, true, 
true)),
  -     m_uri(URISupport::NormalizeURIText(theURI))
  +     m_uri(theURI, theManager)
   {
  +    XalanDOMString& refURI = const_cast<XalanDOMString&>(m_uri);
  +
  +    URISupport::NormalizeURIText(refURI);
  +
  +
        assert(m_parsedSource != 0);
   }
   
  @@ -88,9 +98,9 @@
   
   
   XalanParsedSourceHelper*
  -XercesDOMWrapperParsedSource::createHelper() const
  +XercesDOMWrapperParsedSource::createHelper(MemoryManagerType& theManager) 
const
   {
  -     return new XercesDOMParsedSourceHelper;
  +    return XercesDOMParsedSourceHelper::create(theManager);
   }
   
   
  
  
  
  1.6       +6 -3      
xml-xalan/c/src/xalanc/XalanTransformer/XercesDOMWrapperParsedSource.hpp
  
  Index: XercesDOMWrapperParsedSource.hpp
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/c/src/xalanc/XalanTransformer/XercesDOMWrapperParsedSource.hpp,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- XercesDOMWrapperParsedSource.hpp  13 Mar 2004 00:44:56 -0000      1.5
  +++ XercesDOMWrapperParsedSource.hpp  8 Nov 2004 19:20:05 -0000       1.6
  @@ -56,6 +56,7 @@
    */
   class XALAN_TRANSFORMER_EXPORT XercesDOMWrapperParsedSource : public 
XalanParsedSource
   {
  +    
   public:
   
   #if defined(XALAN_BUILD_DEPRECATED_DOM_BRIDGE)
  @@ -70,10 +71,11 @@
         * @deprecated This constructor is deprecated.
         */
        XercesDOMWrapperParsedSource(
  +            MemoryManagerType&          theManager,
                        const DOM_Document_Type&        theDocument,
                        XercesParserLiaison&            theParserLiaison,
                        XercesDOMSupport&                       theDOMSupport,
  -                     const XalanDOMString&           theURI = 
XalanDOMString());
  +                     const XalanDOMString&           theURI = 
XalanDOMString(XalanMemMgrs::getDummyMemMgr()));
   #endif
   
        /**
  @@ -85,10 +87,11 @@
         * @param theURI The URI of the document, if any.
         */
        XercesDOMWrapperParsedSource(
  +            MemoryManagerType&          theManager,
                        const DOMDocument_Type*         theDocument,
                        XercesParserLiaison&            theParserLiaison,
                        XercesDOMSupport&                       theDOMSupport,
  -                     const XalanDOMString&           theURI = 
XalanDOMString());
  +                     const XalanDOMString&           theURI = 
XalanDOMString(XalanMemMgrs::getDummyMemMgr()));
   
        virtual
        ~XercesDOMWrapperParsedSource();
  @@ -97,7 +100,7 @@
        getDocument() const;
   
        virtual XalanParsedSourceHelper*
  -     createHelper() const;
  +     createHelper(MemoryManagerType& theManager) const;
   
        virtual const XalanDOMString&
        getURI() const;
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to