dbertoni    01/11/01 07:59:57

  Modified:    c/src/XSLT ResultTreeFrag.cpp ResultTreeFrag.hpp
                        StylesheetExecutionContext.hpp
                        StylesheetExecutionContextDefault.cpp
                        StylesheetExecutionContextDefault.hpp
                        XSLTEngineImpl.cpp
  Log:
  Changes to move XResultTreeFrag to XSLT. amd fixes for addressing RTFs as 
nodesets.
  
  Revision  Changes    Path
  1.2       +22 -0     xml-xalan/c/src/XSLT/ResultTreeFrag.cpp
  
  Index: ResultTreeFrag.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XSLT/ResultTreeFrag.cpp,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- ResultTreeFrag.cpp        2001/10/30 04:08:06     1.1
  +++ ResultTreeFrag.cpp        2001/11/01 15:59:57     1.2
  @@ -96,6 +96,28 @@
   
   
   
  +XalanNode*
  +ResultTreeFrag::getNodesetRoot() const
  +{
  +     if (m_documentFragment != 0)
  +     {
  +             return m_documentFragment;
  +     }
  +     else
  +     {
  +             // I hate to do this, but since all of the non-const
  +             // member functions will throw exceptions, I can live
  +             // with it.
  +#if defined(XALAN_OLD_STYLE_CASTS)
  +             return (ResultTreeFrag*)this;
  +#else
  +             return const_cast<ResultTreeFrag*>(this);
  +#endif
  +     }
  +}
  +
  +
  +
   void
   ResultTreeFrag::clear()
   {
  
  
  
  1.2       +7 -0      xml-xalan/c/src/XSLT/ResultTreeFrag.hpp
  
  Index: ResultTreeFrag.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XSLT/ResultTreeFrag.hpp,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- ResultTreeFrag.hpp        2001/10/30 04:08:06     1.1
  +++ ResultTreeFrag.hpp        2001/11/01 15:59:57     1.2
  @@ -108,6 +108,13 @@
        void
        clear();
   
  +
  +     // These interfaces are inherited from ResultTreeFragBase...
  +
  +     virtual XalanNode*
  +     getNodesetRoot() const;
  +
  +
        // These interfaces are inherited from XalanDocumentFragment...
   
        virtual const XalanDOMString&
  
  
  
  1.68      +14 -6     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.67
  retrieving revision 1.68
  diff -u -r1.67 -r1.68
  --- StylesheetExecutionContext.hpp    2001/10/30 04:11:22     1.67
  +++ StylesheetExecutionContext.hpp    2001/11/01 15:59:57     1.68
  @@ -141,6 +141,7 @@
   class XPath;
   class XObject;
   class XObjectPtr;
  +class XResultTreeFrag;
   
   
   
  @@ -1070,6 +1071,19 @@
        };
   
   
  +     /**
  +      * This is a hook that XResultTreeFrag instances (which are reference
  +      * counted), can notify the owning StylesheetExecutionContext instance
  +      * when they are dereferenced and can be cleaned up.
  +      *
  +      * @param theXResultTreeFrag The instance that is being returned.
  +      *
  +      * @return true if the XResultTreeFrag instance belongs to the 
execution context. false if not.
  +      */
  +     virtual bool
  +     returnXResultTreeFrag(XResultTreeFrag*  theXResultTreeFrag) = 0;
  +
  +
        enum eDummy
        {
                eDefaultXMLIndentAmount = 0,
  @@ -1595,12 +1609,6 @@
   
        virtual bool
        returnMutableNodeRefList(MutableNodeRefList*    theList) = 0;
  -
  -     virtual ResultTreeFragBase*
  -     borrowResultTreeFrag() = 0;
  -
  -     virtual bool
  -     returnResultTreeFrag(ResultTreeFragBase*        theResultTreeFragBase) 
= 0;
   
        virtual MutableNodeRefList*
        createMutableNodeRefList() const = 0;
  
  
  
  1.79      +62 -82    
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.78
  retrieving revision 1.79
  diff -u -r1.78 -r1.79
  --- StylesheetExecutionContextDefault.cpp     2001/10/30 04:11:22     1.78
  +++ StylesheetExecutionContextDefault.cpp     2001/11/01 15:59:57     1.79
  @@ -154,8 +154,10 @@
        m_formatterToTextCache(),
        m_formatterToSourceTreeCache(),
        m_nodeSorterCache(),
  -     m_resultTreeFragCache(*this, eResultTreeFragCacheListSize),
  -     m_indentAmount(-1)
  +     m_indentAmount(-1),
  +     m_xresultTreeFragAllocator(eXResultTreeFragAllocatorBlockSize),
  +     m_resultTreeFragAllocator(eResultTreeFragAllocatorBlockSize),
  +     m_documentFragmentAllocator(eDocumentFragmentAllocatorBlockSize)
   {
   }
   
  @@ -189,8 +191,10 @@
        m_formatterToTextCache(),
        m_formatterToSourceTreeCache(),
        m_nodeSorterCache(),
  -     m_resultTreeFragCache(*this, eResultTreeFragCacheListSize),
  -     m_indentAmount(-1)
  +     m_indentAmount(-1),
  +     m_xresultTreeFragAllocator(eXResultTreeFragAllocatorBlockSize),
  +     m_resultTreeFragAllocator(eResultTreeFragAllocatorBlockSize),
  +     m_documentFragmentAllocator(eDocumentFragmentAllocatorBlockSize)
   {
   }
   
  @@ -927,7 +931,13 @@
   {
        assert(m_xsltProcessor != 0);
   
  -     BorrowReturnResultTreeFrag      theResultTreeFrag(*this);
  +     XalanSourceTreeDocumentFragment* const  theDocumentFragment =
  +             m_documentFragmentAllocator.create(*getSourceTreeFactory());
  +     assert(theDocumentFragment != 0);
  +
  +     ResultTreeFragBase* const       theResultTreeFrag =
  +             m_resultTreeFragAllocator.create(theDocumentFragment);
  +     assert(theResultTreeFrag != 0);
   
        GuardCachedObject<FormatterToSourceTreeCacheType>       
theGuard(m_formatterToSourceTreeCache);
   
  @@ -938,14 +948,6 @@
   
        theFormatter->setDocument(theDocument);
   
  -     XalanSourceTreeDocumentFragment* const  theDocumentFragment =
  -#if defined(XALAN_OLD_STYLE_CASTS)
  -             ((const 
ResultTreeFrag*)theResultTreeFrag.get())->getDocumentFragment();
  -#else
  -             static_cast<const 
ResultTreeFrag*>(theResultTreeFrag.get())->getDocumentFragment();
  -#endif
  -     assert(theDocumentFragment != 0);
  -
        theFormatter->setDocumentFragment(theDocumentFragment);
   
        theFormatter->setPrefixResolver(m_xsltProcessor);
  @@ -954,9 +956,18 @@
                                *this,
                                theFormatter);
   
  +     theFormatter->startDocument();
  +
        templateChild.executeChildren(*this, sourceNode);
   
  -     return getXObjectFactory().createResultTreeFrag(theResultTreeFrag);
  +     theFormatter->endDocument();
  +
  +     XResultTreeFrag* const  theXResultTreeFrag =
  +             m_xresultTreeFragAllocator.create(*theResultTreeFrag);
  +
  +     theXResultTreeFrag->setExecutionContext(this);
  +
  +     return XObjectPtr(theXResultTreeFrag);
   }
   
   
  @@ -1072,6 +1083,40 @@
   
   
   
  +bool
  +StylesheetExecutionContextDefault::returnXResultTreeFrag(XResultTreeFrag*    
theXResultTreeFrag)
  +{
  +     assert(theXResultTreeFrag != 0);
  +
  +     ResultTreeFragBase* const       theResultTreeFragBase =
  +             theXResultTreeFrag->release();
  +
  +     if (m_xresultTreeFragAllocator.destroy(theXResultTreeFrag) == false)
  +     {
  +             return false;
  +     }
  +     else
  +     {
  +     ResultTreeFrag* const   theResultTreeFrag =
  +#if defined(XALAN_OLD_STYLE_CASTS)
  +                     (ResultTreeFrag*)theResultTreeFragBase;
  +#else
  +                     static_cast<ResultTreeFrag*>(theResultTreeFragBase);
  +#endif
  +
  +             XalanSourceTreeDocumentFragment* const  theDocumentFragment =
  +                     theResultTreeFrag->getDocumentFragment();
  +             assert(theDocumentFragment != 0);
  +
  +             m_resultTreeFragAllocator.destroy(theResultTreeFrag);
  +             m_documentFragmentAllocator.destroy(theDocumentFragment);
  +
  +             return true;
  +     }
  +}
  +
  +
  +     
   FormatterToXML*
   StylesheetExecutionContextDefault::createFormatterToXML(
                        Writer&                                 writer,
  @@ -1455,7 +1500,9 @@
        m_formatterToTextCache.reset();
        m_formatterToSourceTreeCache.reset();
        m_nodeSorterCache.reset();
  -     m_resultTreeFragCache.reset();
  +     m_documentFragmentAllocator.reset();
  +     m_resultTreeFragAllocator.reset();
  +     m_xresultTreeFragAllocator.reset();
   
        // Just in case endDocument() was not called,
        // clean things up...
  @@ -1614,22 +1661,6 @@
   
   
   
  -ResultTreeFragBase*
  -StylesheetExecutionContextDefault::borrowResultTreeFrag()
  -{
  -     return m_resultTreeFragCache.get();
  -}
  -
  -
  -
  -bool
  -StylesheetExecutionContextDefault::returnResultTreeFrag(ResultTreeFragBase*  
        theResultTreeFragBase)
  -{
  -     return m_resultTreeFragCache.release(theResultTreeFragBase);
  -}
  -
  -
  -
   MutableNodeRefList*
   StylesheetExecutionContextDefault::createMutableNodeRefList() const
   {
  @@ -2353,54 +2384,3 @@
   
   
   
  -StylesheetExecutionContextDefault::ResultTreeFragCache::ResultTreeFragCache(
  -                     StylesheetExecutionContextDefault&      
theExecutionContext,
  -                     unsigned int                                            
initialSize) :
  -     m_resultTreeFragCache(initialSize),
  -     m_documentFragmentCache(initialSize)
  -{
  -     
m_documentFragmentCache.m_createFunctor.setExecutionContext(&theExecutionContext);
  -}
  -
  -
  -
  
-StylesheetExecutionContextDefault::ResultTreeFragCache::~ResultTreeFragCache()
  -{
  -}
  -
  -
  -
  -ResultTreeFragBase*
  -StylesheetExecutionContextDefault::ResultTreeFragCache::get()
  -{
  -     GuardCachedObject<ResultTreeFragCacheType>              
theResultTreeFrag(m_resultTreeFragCache);
  -     assert(theResultTreeFrag.get() != 0);
  -
  -     
theResultTreeFrag.get()->setDocumentFragment(m_documentFragmentCache.get());
  -     assert(theResultTreeFrag.get()->getDocumentFragment() != 0);
  -
  -     return theResultTreeFrag.release();
  -}
  -
  -
  -
  -bool
  
-StylesheetExecutionContextDefault::ResultTreeFragCache::release(ResultTreeFragBase*
          theResultTreeFragBase)
  -{
  -     assert(theResultTreeFragBase != 0);
  -
  -     ResultTreeFrag* const   theResultTreeFrag =
  -#if defined(XALAN_OLD_STYLE_CASTS)
  -             (ResultTreeFrag*)theResultTreeFragBase;
  -#else
  -             static_cast<ResultTreeFrag*>(theResultTreeFragBase);
  -#endif
  -
  -     XalanSourceTreeDocumentFragment* const  theDocumentFragment =
  -                     theResultTreeFrag->getDocumentFragment();
  -     assert(theDocumentFragment != 0);
  -
  -     m_documentFragmentCache.release(theDocumentFragment);
  -
  -     return m_resultTreeFragCache.release(theResultTreeFrag);
  -}
  
  
  
  1.71      +15 -108   
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.70
  retrieving revision 1.71
  diff -u -r1.70 -r1.71
  --- StylesheetExecutionContextDefault.hpp     2001/10/30 04:11:22     1.70
  +++ StylesheetExecutionContextDefault.hpp     2001/11/01 15:59:57     1.71
  @@ -97,8 +97,11 @@
   #include <XSLT/CountersTable.hpp>
   #include <XSLT/NodeSorter.hpp>
   #include <XSLT/ResultTreeFrag.hpp>
  +#include <XSLT/ResultTreeFragAllocator.hpp>
   #include <XSLT/Stylesheet.hpp>
   #include <XSLT/VariablesStack.hpp>
  +#include <XSLT/XResultTreeFragAllocator.hpp>
  +#include <XSLT/XalanSourceTreeDocumentFragmentAllocator.hpp>
   
   
   
  @@ -513,6 +516,9 @@
        virtual const ElemTemplateElement*
        popElementRecursionStack();
   
  +     virtual bool
  +     returnXResultTreeFrag(XResultTreeFrag*  theXResultTreeFrag);
  +
        virtual FormatterToXML*
        createFormatterToXML(
                        Writer&                                 writer,
  @@ -799,12 +805,6 @@
        virtual bool
        returnMutableNodeRefList(MutableNodeRefList*    theList);
   
  -     virtual ResultTreeFragBase*
  -     borrowResultTreeFrag();
  -
  -     virtual bool
  -     returnResultTreeFrag(ResultTreeFragBase*        theResultTreeFragBase);
  -
        virtual MutableNodeRefList*
        createMutableNodeRefList() const;
   
  @@ -1011,105 +1011,6 @@
        void
        cleanUpTransients();
   
  -     /**
  -      *
  -      * A simple class to cache ResultTreeFrag and
  -      * XalanSourceTreeDocumentFragment instances.
  -      *
  -      */
  -     class XALAN_XSLT_EXPORT ResultTreeFragCache
  -     {
  -     public:
  -
  -             ResultTreeFragCache(
  -                             StylesheetExecutionContextDefault&      
theExecutionContext,
  -                             unsigned int                                    
        initialSize);
  -
  -             ~ResultTreeFragCache();
  -
  -             ResultTreeFragBase*
  -             get();
  -
  -             bool
  -             release(ResultTreeFragBase*             theResultTreeFragBase);
  -
  -             void
  -             reset()
  -             {
  -                     m_resultTreeFragCache.reset();
  -
  -                     m_documentFragmentCache.reset();
  -             }
  -
  -     private:
  -
  -             /**
  -              *
  -              * A simple functor class to create 
XalanSourceTreeDocumentFragment
  -              * instances.  This is necessary because the constructor 
requires
  -              * a XalanSourceTreeDocument instance.
  -              *
  -              */
  -             class XALAN_XSLT_EXPORT LocalCreateFunctor
  -             {
  -             public:
  -
  -                     LocalCreateFunctor() :
  -                             m_executionContext(0)
  -                     {
  -                     }
  -
  -                     void
  -                     setExecutionContext(StylesheetExecutionContextDefault*  
theExecutionContext)
  -                     {
  -                             m_executionContext = theExecutionContext;
  -                     }
  -
  -                     XalanSourceTreeDocumentFragment*
  -                     operator()() const
  -                     {
  -                             assert(m_executionContext != 0);
  -
  -                             return new 
XalanSourceTreeDocumentFragment(*m_executionContext->getSourceTreeFactory());
  -                     }
  -
  -                     StylesheetExecutionContextDefault*              
m_executionContext;
  -             };
  -
  -             /**
  -              *
  -              * A simple functor class to clear the children from a 
  -              * XalanSourceTreeDocumentFragment so it can be re-used.
  -              *
  -              */
  -             class XALAN_XSLT_EXPORT LocalResetFunctor
  -             {
  -             public:
  -
  -                     void
  -                     operator()(XalanSourceTreeDocumentFragment*             
theInstance) const
  -                     {
  -                             theInstance->clearChildren();
  -                     }
  -             };
  -
  -             typedef XalanObjectCache<
  -                                     ResultTreeFrag,
  -                                     
DefaultCacheCreateFunctor<ResultTreeFrag>,
  -                                     DeleteFunctor<ResultTreeFrag>,
  -                                     ClearCacheResetFunctor<ResultTreeFrag> 
>                ResultTreeFragCacheType;
  -
  -             typedef XalanObjectCache<
  -                                     XalanSourceTreeDocumentFragment,
  -                                     LocalCreateFunctor,
  -                                     
DeleteFunctor<XalanSourceTreeDocumentFragment>,
  -                                     LocalResetFunctor>                      
                                                                
DocumentFragmentCacheType;
  -
  -             ResultTreeFragCacheType                 m_resultTreeFragCache;
  -
  -             DocumentFragmentCacheType               m_documentFragmentCache;
  -     };
  -
        XPathExecutionContextDefault    m_xpathExecutionContextDefault;
   
        // $$ ToDo: Try to remove this dependency, and rely only on 
XSLTProcessor...
  @@ -1119,7 +1020,9 @@
   
        enum { eXPathCacheMax = 50,
                   eDefaultParamsVectorSize = 10,
  -                eResultTreeFragCacheListSize = 50 };
  +                eXResultTreeFragAllocatorBlockSize = 10,
  +                eResultTreeFragAllocatorBlockSize = 10,
  +                eDocumentFragmentAllocatorBlockSize = 10 };
   
        ElementRecursionStackType                       m_elementRecursionStack;
   
  @@ -1174,9 +1077,13 @@
   
        NodeSorterCacheType                                     
m_nodeSorterCache;
   
  -     ResultTreeFragCache                                     
m_resultTreeFragCache;
  -
        int                                                                     
m_indentAmount;
  +
  +     XResultTreeFragAllocator                        
m_xresultTreeFragAllocator;
  +
  +     ResultTreeFragAllocator                         
m_resultTreeFragAllocator;
  +
  +     XalanSourceTreeDocumentFragmentAllocator        
m_documentFragmentAllocator;
   
        static XalanNumberFormatFactory         
s_defaultXalanNumberFormatFactory;
   
  
  
  
  1.125     +0 -1      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.124
  retrieving revision 1.125
  diff -u -r1.124 -r1.125
  --- XSLTEngineImpl.cpp        2001/10/30 04:09:52     1.124
  +++ XSLTEngineImpl.cpp        2001/11/01 15:59:57     1.125
  @@ -118,7 +118,6 @@
   #include <XPath/XPathExecutionContextDefault.hpp>
   #include <XPath/XPathFactory.hpp>
   #include <XPath/XPathProcessorImpl.hpp>
  -#include <XPath/XResultTreeFrag.hpp>
   
   
   
  
  
  

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

Reply via email to