dbertoni    00/07/28 15:02:22

  Modified:    c/src/XSLT ElemTemplateElement.cpp FunctionDocument.cpp
                        FunctionKey.cpp StylesheetExecutionContext.hpp
                        StylesheetExecutionContextDefault.cpp
                        StylesheetExecutionContextDefault.hpp
                        XSLTEngineImpl.cpp XSLTEngineImpl.hpp
                        XSLTProcessor.hpp
  Log:
  Changes for reducing dynamic allocations.
  
  Revision  Changes    Path
  1.27      +14 -11    xml-xalan/c/src/XSLT/ElemTemplateElement.cpp
  
  Index: ElemTemplateElement.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XSLT/ElemTemplateElement.cpp,v
  retrieving revision 1.26
  retrieving revision 1.27
  diff -u -r1.26 -r1.27
  --- ElemTemplateElement.cpp   2000/07/25 14:49:32     1.26
  +++ ElemTemplateElement.cpp   2000/07/28 22:02:20     1.27
  @@ -676,7 +676,7 @@
                                        executionContext.getXObjectFactory(),
                                        theXObject);
   
  -                     const NodeRefListBase* const    sourceNodes = 
&result->mutableNodeset();
  +                     const NodeRefListBase&  sourceNodes = result->nodeset();
   
                        if(0 != executionContext.getTraceListeners())
                        {
  @@ -689,7 +689,7 @@
                                                        result.get()));
                        }
   
  -                     const unsigned int      nNodes = 
sourceNodes->getLength();
  +                     const unsigned int      nNodes = 
sourceNodes.getLength();
   
                        if (nNodes > 0)
                        {
  @@ -704,7 +704,7 @@
                                                xslToken,
                                                selectStackFrameIndex,
                                                keys,
  -                                             *sourceNodes,
  +                                             sourceNodes,
                                                nNodes);
                        }
                }
  @@ -756,11 +756,12 @@
   
        if (keys.size() > 0)
        {
  -             MutableNodeRefList      sortedSourceNodes =
  -                             executionContext.createMutableNodeRefList();
  +             typedef 
StylesheetExecutionContext::BorrowReturnMutableNodeRefList      
BorrowReturnMutableNodeRefList;
   
  -             sortedSourceNodes = sourceNodes;
  +             BorrowReturnMutableNodeRefList  
sortedSourceNodes(executionContext);
   
  +             *sortedSourceNodes = sourceNodes;
  +
                {
                        NodeSorter      sorter;
   
  @@ -768,7 +769,7 @@
                                        executionContext,
                                        selectStackFrameIndex);
   
  -                     sorter.sort(executionContext, sortedSourceNodes, keys);
  +                     sorter.sort(executionContext, *sortedSourceNodes, keys);
                }
   
                doTransformSelectedChildren(
  @@ -780,7 +781,7 @@
                        sourceNodeContext,
                        mode,
                        xslToken,
  -                     sortedSourceNodes,
  +                     *sortedSourceNodes,
                        sourceNodesCount);
        }
        else
  @@ -816,9 +817,11 @@
                        const XalanNodeList&                                    
        childNodes,
                        unsigned int                                            
                childNodeCount) const
   {
  -     MutableNodeRefList      sourceNodes = 
executionContext.createMutableNodeRefList();
  +     typedef StylesheetExecutionContext::BorrowReturnMutableNodeRefList      
BorrowReturnMutableNodeRefList;
  +
  +     BorrowReturnMutableNodeRefList  sourceNodes(executionContext);
   
  -     sourceNodes = &childNodes;
  +     *sourceNodes = &childNodes;
   
        doTransformSelectedChildren(
                        executionContext,
  @@ -831,7 +834,7 @@
                        xslToken,
                        selectStackFrameIndex,
                        keys,
  -                     sourceNodes,
  +                     *sourceNodes,
                        childNodeCount);
   }
   
  
  
  
  1.10      +8 -4      xml-xalan/c/src/XSLT/FunctionDocument.cpp
  
  Index: FunctionDocument.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XSLT/FunctionDocument.cpp,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- FunctionDocument.cpp      2000/06/08 18:33:13     1.9
  +++ FunctionDocument.cpp      2000/07/28 22:02:20     1.10
  @@ -198,8 +198,12 @@
                        base = executionContext.getPrefixResolver()->getURI();
                }
   
  -             MutableNodeRefList              
mnl(executionContext.createMutableNodeRefList());
  +#if !defined(XALAN_NO_NAMESPACES)
  +             using std::auto_ptr;
  +#endif
   
  +             auto_ptr<MutableNodeRefList>    
mnl(executionContext.createMutableNodeRefList());
  +
                const unsigned int              nRefs = XObject::eTypeNodeSet 
== arg->getType() ?
                                                                                
                        arg->nodeset().getLength()
                                                                                
                        : 1;
  @@ -257,14 +261,14 @@
   
                                if(newDoc != 0)
                                {
  -                                     mnl.addNodeInDocOrder(newDoc, true);
  +                                     mnl->addNodeInDocOrder(newDoc, true);
                                }
                        }
                }
   
  -             assert(mnl.checkForDuplicates() == false);
  +             assert(mnl->checkForDuplicates() == false);
   
  -             return executionContext.getXObjectFactory().createNodeSet(mnl);
  +             return 
executionContext.getXObjectFactory().createNodeSet(mnl.release());
        }
   }
   
  
  
  
  1.6       +8 -5      xml-xalan/c/src/XSLT/FunctionKey.cpp
  
  Index: FunctionKey.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XSLT/FunctionKey.cpp,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- FunctionKey.cpp   2000/04/12 19:41:00     1.5
  +++ FunctionKey.cpp   2000/07/28 22:02:21     1.6
  @@ -142,8 +142,11 @@
                const bool                              argIsNodeSet =
                                XObject::eTypeNodeSet == arg->getType() ? true 
: false;
   
  -             MutableNodeRefList      theNodeRefList =
  -                             executionContext.createMutableNodeRefList();
  +#if !defined(XALAN_NO_NAMESPACES)
  +             using std::auto_ptr;
  +#endif
  +
  +             auto_ptr<MutableNodeRefList>    
theNodeRefList(executionContext.createMutableNodeRefList());
   
                if(argIsNodeSet == true)
                {
  @@ -180,7 +183,7 @@
                                                                                
        *executionContext.getPrefixResolver());
                                                        assert(nl != 0);
   
  -                                                     
theNodeRefList.addNodesInDocOrder(*nl);
  +                                                     
theNodeRefList->addNodesInDocOrder(*nl);
                                                }
                                        }
                                }
  @@ -198,11 +201,11 @@
   
                        if (nl != 0)
                        {
  -                             theNodeRefList.addNodesInDocOrder(*nl);
  +                             theNodeRefList->addNodesInDocOrder(*nl);
                        }
                }
   
  -             return 
executionContext.getXObjectFactory().createNodeSet(theNodeRefList);
  +             return 
executionContext.getXObjectFactory().createNodeSet(theNodeRefList.release());
        }
   }
   
  
  
  
  1.24      +13 -1     xml-xalan/c/src/XSLT/StylesheetExecutionContext.hpp
  
  Index: StylesheetExecutionContext.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XSLT/StylesheetExecutionContext.hpp,v
  retrieving revision 1.23
  retrieving revision 1.24
  diff -u -r1.23 -r1.24
  --- StylesheetExecutionContext.hpp    2000/07/21 19:52:56     1.23
  +++ StylesheetExecutionContext.hpp    2000/07/28 22:02:21     1.24
  @@ -1538,6 +1538,12 @@
                        const XalanDOMString&   theNamespace, 
                        const XalanDOMString&   functionName) const = 0;
   
  +     virtual XObjectArgVectorType&
  +     pushArgVector() = 0;
  +
  +     virtual void
  +     popArgVector() = 0;
  +
        virtual XObject*
        extFunction(
                        const XalanDOMString&                   theNamespace,
  @@ -1557,8 +1563,14 @@
        parseXML(
                        const XalanDOMString&   urlString,
                        const XalanDOMString&   base) const = 0;
  +
  +     virtual MutableNodeRefList*
  +     borrowMutableNodeRefList() = 0;
  +
  +     virtual bool
  +     returnMutableNodeRefList(MutableNodeRefList*    theList) = 0;
   
  -     virtual MutableNodeRefList
  +     virtual MutableNodeRefList*
        createMutableNodeRefList() const = 0;
   
        virtual bool
  
  
  
  1.24      +35 -4     
xml-xalan/c/src/XSLT/StylesheetExecutionContextDefault.cpp
  
  Index: StylesheetExecutionContextDefault.cpp
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/c/src/XSLT/StylesheetExecutionContextDefault.cpp,v
  retrieving revision 1.23
  retrieving revision 1.24
  diff -u -r1.23 -r1.24
  --- StylesheetExecutionContextDefault.cpp     2000/07/25 15:12:06     1.23
  +++ StylesheetExecutionContextDefault.cpp     2000/07/28 22:02:21     1.24
  @@ -969,7 +969,7 @@
                                                                                
                                 sourceNode,
                                                                                
                                 mode));
   
  -     return m_xsltProcessor.createXResultTreeFrag(*theFragment.get());
  +     return getXObjectFactory().createResultTreeFrag(theFragment.release());
   }
   
   
  @@ -977,8 +977,7 @@
   bool
   StylesheetExecutionContextDefault::destroyXObject(XObject*   theXObject) 
const
   {
  -
  -     return m_xsltProcessor.destroyXObject(theXObject);
  +     return getXObjectFactory().returnObject(theXObject);
   }
   
   
  @@ -1454,6 +1453,22 @@
   
   
   
  +StylesheetExecutionContextDefault::XObjectArgVectorType&
  +StylesheetExecutionContextDefault::pushArgVector()
  +{
  +     return m_xpathExecutionContextDefault.pushArgVector();
  +}
  +
  +
  +
  +void
  +StylesheetExecutionContextDefault::popArgVector()
  +{
  +     m_xpathExecutionContextDefault.popArgVector();
  +}
  +
  +
  +
   XObject*
   StylesheetExecutionContextDefault::extFunction(
                        const XalanDOMString&                   theNamespace,
  @@ -1493,8 +1508,24 @@
   }
   
   
  +
  +MutableNodeRefList*
  +StylesheetExecutionContextDefault::borrowMutableNodeRefList()
  +{
  +     return m_xpathExecutionContextDefault.borrowMutableNodeRefList();
  +}
  +
  +
  +
  +bool
  
+StylesheetExecutionContextDefault::returnMutableNodeRefList(MutableNodeRefList*
              theList)
  +{
  +     return m_xpathExecutionContextDefault.returnMutableNodeRefList(theList);
  +}
  +
  +
   
  -MutableNodeRefList
  +MutableNodeRefList*
   StylesheetExecutionContextDefault::createMutableNodeRefList() const
   {
        return m_xpathExecutionContextDefault.createMutableNodeRefList();
  
  
  
  1.22      +13 -1     
xml-xalan/c/src/XSLT/StylesheetExecutionContextDefault.hpp
  
  Index: StylesheetExecutionContextDefault.hpp
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/c/src/XSLT/StylesheetExecutionContextDefault.hpp,v
  retrieving revision 1.21
  retrieving revision 1.22
  diff -u -r1.21 -r1.22
  --- StylesheetExecutionContextDefault.hpp     2000/07/25 15:12:07     1.21
  +++ StylesheetExecutionContextDefault.hpp     2000/07/28 22:02:21     1.22
  @@ -583,6 +583,12 @@
                        const XalanDOMString&   theNamespace, 
                        const XalanDOMString&   functionName) const;
   
  +     virtual XObjectArgVectorType&
  +     pushArgVector();
  +
  +     virtual void
  +     popArgVector();
  +
        virtual XObject*
        extFunction(
                        const XalanDOMString&                   theNamespace,
  @@ -602,8 +608,14 @@
        parseXML(
                        const XalanDOMString&   urlString,
                        const XalanDOMString&   base) const;
  +
  +     virtual MutableNodeRefList*
  +     borrowMutableNodeRefList();
  +
  +     virtual bool
  +     returnMutableNodeRefList(MutableNodeRefList*    theList);
   
  -     virtual MutableNodeRefList
  +     virtual MutableNodeRefList*
        createMutableNodeRefList() const;
   
        virtual bool
  
  
  
  1.52      +0 -18     xml-xalan/c/src/XSLT/XSLTEngineImpl.cpp
  
  Index: XSLTEngineImpl.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XSLT/XSLTEngineImpl.cpp,v
  retrieving revision 1.51
  retrieving revision 1.52
  diff -u -r1.51 -r1.52
  --- XSLTEngineImpl.cpp        2000/07/25 14:53:40     1.51
  +++ XSLTEngineImpl.cpp        2000/07/28 22:02:21     1.52
  @@ -3359,24 +3359,6 @@
   
   
   
  -XObject*
  -XSLTEngineImpl::createXResultTreeFrag(const ResultTreeFragBase&  r) const
  -{
  -     return m_xobjectFactory.createResultTreeFrag(r);
  -}
  -
  -
  -
  -bool
  -XSLTEngineImpl::destroyXObject(XObject*              theXObject) const
  -{
  -     assert(theXObject != 0);
  -
  -     return m_xobjectFactory.returnObject(theXObject);
  -}
  -
  -
  -
   void
   XSLTEngineImpl::InstallFunctions()
   {
  
  
  
  1.40      +0 -14     xml-xalan/c/src/XSLT/XSLTEngineImpl.hpp
  
  Index: XSLTEngineImpl.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XSLT/XSLTEngineImpl.hpp,v
  retrieving revision 1.39
  retrieving revision 1.40
  diff -u -r1.39 -r1.40
  --- XSLTEngineImpl.hpp        2000/07/25 14:53:41     1.39
  +++ XSLTEngineImpl.hpp        2000/07/28 22:02:21     1.40
  @@ -263,20 +263,6 @@
   
        virtual const XalanDOMString
        getUniqueNSValue() const;
  -     
  -     virtual XObject*
  -     createXResultTreeFrag(const ResultTreeFragBase&         r) const;
  -
  -     /**
  -      * Function to destroy an XObject that was returned
  -      * by executing.  It is safe to call this function
  -      * with any XObject.
  -      *
  -      * @param theXObject pointer to the XObject.
  -      * @return true if the object was destroyed.
  -      */
  -     virtual bool
  -     destroyXObject(XObject*         theXObject) const;
   
        virtual void
        setStylesheetParam(     
  
  
  
  1.13      +0 -33     xml-xalan/c/src/XSLT/XSLTProcessor.hpp
  
  Index: XSLTProcessor.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XSLT/XSLTProcessor.hpp,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- XSLTProcessor.hpp 2000/07/21 19:52:58     1.12
  +++ XSLTProcessor.hpp 2000/07/28 22:02:21     1.13
  @@ -72,24 +72,15 @@
   
   
   
  -class Arg;
  -class DispatcherFactory;
   class ElemTemplateElement;
  -class Formatter;
   class FormatterListener;
   class GenerateEvent;
  -class InputSource;
  -class Locator;
   class NodeRefListBase;
   class PrefixResolver;
   class PrintWriter;
  -class ProblemListener;
   class QName;
  -class ResultTreeFrag;
   class ResultTreeFragBase;
   class SelectionEvent;
  -class StackEntry;
  -class Stylesheet;
   class StylesheetConstructionContext;
   class StylesheetExecutionContext;
   class StylesheetRoot;
  @@ -100,10 +91,7 @@
   class XalanNode;
   class XMLParserLiaison;
   class XObject;
  -class XObjectFactory;
   class XPathExecutionContext;
  -class XPathFactory;
  -class XPathProcessor;
   class XSLTInputSource;
   class XSLTResultTarget;
   
  @@ -331,27 +319,6 @@
         */
      virtual const XalanDOMString
      getUniqueNSValue() const = 0;
  -
  -     /**
  -      * Function to create an XObject that represents a Result tree
  -      * fragment.
  -      *
  -      * @param r result tree fragment to use
  -      * @return pointer to XObject
  -      */
  -   virtual XObject*
  -   createXResultTreeFrag(const ResultTreeFragBase&   r) const = 0;
  -
  -     /**
  -      * Function to destroy an XObject that was returned
  -      * by executing.  It is safe to call this function
  -      * with any XObject.
  -      *
  -      * @param theXObject pointer to the XObject.
  -      * @return true if the object was destroyed.
  -      */
  -   virtual bool
  -   destroyXObject(XObject*   theXObject) const = 0;
   
     /**
        * Push a top-level stylesheet parameter.  This value can be evaluated 
via
  
  
  

Reply via email to