dbertoni    2002/11/02 21:51:22

  Modified:    c/src/XSLT StylesheetHandler.cpp StylesheetHandler.hpp
  Log:
  New block allocation for ElemEmpty and ElemText instances.
  
  Revision  Changes    Path
  1.94      +33 -12    xml-xalan/c/src/XSLT/StylesheetHandler.cpp
  
  Index: StylesheetHandler.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XSLT/StylesheetHandler.cpp,v
  retrieving revision 1.93
  retrieving revision 1.94
  diff -u -r1.93 -r1.94
  --- StylesheetHandler.cpp     3 Nov 2002 03:41:06 -0000       1.93
  +++ StylesheetHandler.cpp     3 Nov 2002 05:51:22 -0000       1.94
  @@ -139,11 +139,13 @@
        FormatterListener(OUTPUT_METHOD_OTHER),
        m_stylesheet(stylesheetTree),
        m_constructionContext(constructionContext),
  +     m_elemEmptyAllocator(eElemEmptyAllocatorBlockSize),
  +     m_elemTextAllocator(eElemTextBlockSize),
        m_elemStack(),
        m_elemStackParentedElements(),
        m_whiteSpaceElems(),
        m_pTemplate(0),
  -     m_lastPopped(),
  +     m_lastPopped(*this),
        m_inTemplate(false),
        m_foundStylesheet(false),
        m_foundNotImport(false),
  @@ -179,8 +181,12 @@
   
                if (j == m_elemStackParentedElements.end())
                {
  -                     // Not found, so delete it...
  -                     delete *i;
  +                     if ((*i)->getXSLToken() != 
StylesheetConstructionContext::ELEMNAME_UNDEFINED &&
  +                             (*i)->getXSLToken() != 
StylesheetConstructionContext::ELEMNAME_TEXT)
  +                     {
  +                             // Not found, so delete it...
  +                             delete *i;
  +                     }
                }
                else
                {
  @@ -472,7 +478,7 @@
                                                
m_elemStackParentedElements.insert(foreach);
   
                                                m_elemStack.push_back(
  -                                                     new ElemEmpty(
  +                                                     
m_elemEmptyAllocator.create(
                                                                        
m_constructionContext,
                                                                        
m_stylesheet,
                                                                        
&Constants::ELEMNAME_SORT_WITH_PREFIX_STRING));
  @@ -631,9 +637,13 @@
                                        break;
   
                                case 
StylesheetConstructionContext::ELEMNAME_TEXT:
  -                                     m_elemStack.push_back(new 
ElemText(m_constructionContext,
  -                                                                             
        m_stylesheet,
  -                                                                             
        atts, lineNumber, columnNumber));
  +                                     m_elemStack.push_back(
  +                                             m_elemTextAllocator.create(
  +                                                     m_constructionContext,
  +                                                     m_stylesheet,
  +                                                     atts,
  +                                                     lineNumber,
  +                                                     columnNumber));
                                        break;
   
                                case 
StylesheetConstructionContext::ELEMNAME_ATTRIBUTE:
  @@ -791,7 +801,7 @@
                // object.
                if(origStackSize == m_elemStack.size())
                {
  -                     m_elemStack.push_back(new 
ElemEmpty(m_constructionContext, m_stylesheet));
  +                     
m_elemStack.push_back(m_elemEmptyAllocator.create(m_constructionContext, 
m_stylesheet));
   
                        if (elem != 0)
                        {
  @@ -1939,7 +1949,7 @@
        m_elemStack(theHandler.m_elemStack),
        m_elemStackParentedElements(theHandler.m_elemStackParentedElements),
        m_pTemplate(theHandler.m_pTemplate),
  -     m_lastPopped(),
  +     m_lastPopped(theHandler),
        m_inTemplate(theHandler.m_inTemplate),
        m_foundStylesheet(theHandler.m_foundStylesheet),
        m_XSLNameSpaceURL(theHandler.m_stylesheet.getXSLTNamespaceURI()),
  @@ -2013,10 +2023,21 @@
        {
                const int tok = m_lastPopped->getXSLToken();
   
  -             if (tok == StylesheetConstructionContext::ELEMNAME_UNDEFINED ||
  -                     tok == StylesheetConstructionContext::ELEMNAME_TEXT)
  +             if (tok == StylesheetConstructionContext::ELEMNAME_UNDEFINED)
                {
  -                     delete m_lastPopped;
  +#if defined(XALAN_OLD_STYLE_CASTS)
  +                     
m_stylesheetHandler.m_elemEmptyAllocator.destroy((ElemEmpty*)m_lastPopped);
  +#else
  +                     
m_stylesheetHandler.m_elemEmptyAllocator.destroy(static_cast<ElemEmpty*>(m_lastPopped));
  +#endif
  +             }
  +             else if (tok == StylesheetConstructionContext::ELEMNAME_TEXT)
  +             {
  +#if defined(XALAN_OLD_STYLE_CASTS)
  +                     
m_stylesheetHandler.m_elemTextAllocator.destroy((ElemText*)m_lastPopped);
  +#else
  +                     
m_stylesheetHandler.m_elemTextAllocator.destroy(static_cast<ElemText*>(m_lastPopped));
  +#endif
                }
        }
   }
  
  
  
  1.39      +20 -1     xml-xalan/c/src/XSLT/StylesheetHandler.hpp
  
  Index: StylesheetHandler.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XSLT/StylesheetHandler.hpp,v
  retrieving revision 1.38
  retrieving revision 1.39
  diff -u -r1.38 -r1.39
  --- StylesheetHandler.hpp     3 Nov 2002 04:01:40 -0000       1.38
  +++ StylesheetHandler.hpp     3 Nov 2002 05:51:22 -0000       1.39
  @@ -85,6 +85,8 @@
   
   #include <XSLT/NamespacesHandler.hpp>
   #include <XSLT/Stylesheet.hpp>
  +#include <XSLT/XalanElemEmptyAllocator.hpp>
  +#include <XSLT/XalanElemTextAllocator.hpp>
   
   
   
  @@ -444,6 +446,8 @@
   
   private:
   
  +     enum { eElemEmptyAllocatorBlockSize = 10, eElemTextBlockSize = 10 };
  +
        // not implemented
        StylesheetHandler(const StylesheetHandler&);
   
  @@ -584,6 +588,16 @@
        StylesheetConstructionContext&  m_constructionContext;
   
        /**
  +      * An allocator for ElemEmpty instances.
  +      */
  +     XalanElemEmptyAllocator         m_elemEmptyAllocator;
  +
  +     /**
  +      * An allocator for ElemText instances.
  +      */
  +     XalanElemTextAllocator          m_elemTextAllocator;
  +
  +     /**
         * The stack of elements, pushed and popped as events occur.
         */
        ElemTemplateStackType   m_elemStack;
  @@ -611,7 +625,8 @@
        {
        public:
   
  -             LastPoppedHolder() :
  +             LastPoppedHolder(StylesheetHandler&             
theStylesheetHandler) :
  +                     m_stylesheetHandler(theStylesheetHandler),
                        m_lastPopped(0)
                {
                }
  @@ -690,8 +705,12 @@
                cleanup();
   
                // Data members...
  +             StylesheetHandler&              m_stylesheetHandler;
  +
                ElemTemplateElement*    m_lastPopped;
        };
  +
  +     friend class LastPoppedHolder;
   
        /**
         * Manages the last element popped from the stack.
  
  
  

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

Reply via email to