dbertoni    2002/10/04 15:29:44

  Modified:    c/src/XSLT XResultTreeFrag.cpp XResultTreeFrag.hpp
  Log:
  Better optimization of single-text-child RTFs.
  
  Revision  Changes    Path
  1.8       +34 -13    xml-xalan/c/src/XSLT/XResultTreeFrag.cpp
  
  Index: XResultTreeFrag.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XSLT/XResultTreeFrag.cpp,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- XResultTreeFrag.cpp       4 Oct 2002 07:51:38 -0000       1.7
  +++ XResultTreeFrag.cpp       4 Oct 2002 22:29:44 -0000       1.8
  @@ -84,8 +84,8 @@
   
   
   
  -inline bool
  -hasSingleTextChild(const ResultTreeFragBase& theRTreeFrag)
  +inline const XalanDOMString*
  +getSingleTextChildValue(const ResultTreeFragBase&    theRTreeFrag)
   {
        const XalanNode* const  theFirstChild = theRTreeFrag.getFirstChild();
   
  @@ -93,11 +93,11 @@
                theFirstChild->getNodeType() == XalanNode::TEXT_NODE &&
                theFirstChild->getNextSibling() == 0)
        {
  -             return true;
  +             return &theFirstChild->getNodeValue();
        }
        else
        {
  -             return false;
  +             return 0;
        }
   }
   
  @@ -106,7 +106,7 @@
   XResultTreeFrag::XResultTreeFrag(ResultTreeFragBase& value) :
        XObject(eTypeResultTreeFrag),
        m_value(&value),
  -     m_hasSingleTextChild(hasSingleTextChild(value)),
  +     m_singleTextChildValue(getSingleTextChildValue(value)),
        m_executionContext(0),
        m_cachedStringValue(),
        m_cachedNumberValue(0.0)
  @@ -120,7 +120,7 @@
                        bool                                    /* deepClone 
*/) :
        XObject(source),
        m_value(source.m_value),
  -     m_hasSingleTextChild(source.m_hasSingleTextChild),
  +     m_singleTextChildValue(source.m_singleTextChildValue),
        m_executionContext(0),
        m_cachedStringValue(source.m_cachedStringValue),
        m_cachedNumberValue(source.m_cachedNumberValue)
  @@ -185,12 +185,12 @@
   const XalanDOMString&
   XResultTreeFrag::str() const
   {
  -     if (m_hasSingleTextChild == true)
  +     if (m_singleTextChildValue != 0)
        {
                assert(m_value->getFirstChild() != 0 &&
                                m_value->getFirstChild()->getNodeType() == 
XalanNode::TEXT_NODE);
   
  -             return m_value->getFirstChild()->getNodeValue();
  +             return *m_singleTextChildValue;
        }
        else if (isEmpty(m_cachedStringValue) == true)
        {
  @@ -211,7 +211,16 @@
                        FormatterListener&      formatterListener,
                        MemberFunctionPtr       function) const
   {
  -     if (isEmpty(m_cachedStringValue) == false)
  +     if (m_singleTextChildValue != 0)
  +     {
  +             assert(m_value->getFirstChild() != 0 &&
  +                             m_value->getFirstChild()->getNodeType() == 
XalanNode::TEXT_NODE);
  +
  +             assert(length(*m_singleTextChildValue) == 
FormatterListener::size_type(length(*m_singleTextChildValue)));
  +
  +             (formatterListener.*function)(c_wstr(*m_singleTextChildValue), 
FormatterListener::size_type(length(*m_singleTextChildValue)));
  +     }
  +     else if (isEmpty(m_cachedStringValue) == false)
        {
                assert(length(m_cachedStringValue) == 
FormatterListener::size_type(length(m_cachedStringValue)));
   
  @@ -228,7 +237,11 @@
   void
   XResultTreeFrag::str(XalanDOMString& theBuffer) const
   {
  -     if (isEmpty(m_cachedStringValue) == false)
  +     if (m_singleTextChildValue != 0)
  +     {
  +             append(theBuffer, *m_singleTextChildValue);
  +     }
  +     else if (isEmpty(m_cachedStringValue) == false)
        {
                append(theBuffer, m_cachedStringValue);
        }
  @@ -243,7 +256,11 @@
   double
   XResultTreeFrag::stringLength() const
   {
  -     if (isEmpty(m_cachedStringValue) == false)
  +     if (m_singleTextChildValue != 0)
  +     {
  +             return m_singleTextChildValue->length();
  +     }
  +     else if (isEmpty(m_cachedStringValue) == false)
        {
                return length(m_cachedStringValue);
        }
  @@ -298,6 +315,8 @@
   ResultTreeFragBase*
   XResultTreeFrag::release()
   {
  +     m_singleTextChildValue = 0;
  +
        clear(m_cachedStringValue);
   
        m_cachedNumberValue = 0.0;
  @@ -312,11 +331,13 @@
   
   
   void
  -XResultTreeFrag::set(ResultTreeFragBase*     theValue)
  +XResultTreeFrag::set(ResultTreeFragBase&     theValue)
   {
        release();
   
  -     m_value = theValue;
  +     m_value = &theValue;
  +
  +     m_singleTextChildValue = getSingleTextChildValue(*m_value);
   }
   
   
  
  
  
  1.6       +2 -2      xml-xalan/c/src/XSLT/XResultTreeFrag.hpp
  
  Index: XResultTreeFrag.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XSLT/XResultTreeFrag.hpp,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- XResultTreeFrag.hpp       4 Oct 2002 07:51:38 -0000       1.5
  +++ XResultTreeFrag.hpp       4 Oct 2002 22:29:44 -0000       1.6
  @@ -182,7 +182,7 @@
         * @param theValue The new value.
         */
        void
  -     set(ResultTreeFragBase*         theValue);
  +     set(ResultTreeFragBase&         theValue);
   
   protected:
   
  @@ -194,7 +194,7 @@
        // Data members...
        ResultTreeFragBase*                             m_value;        
   
  -     const bool                                              
m_hasSingleTextChild;
  +     const XalanDOMString*                   m_singleTextChildValue;
   
        StylesheetExecutionContext*             m_executionContext;
   
  
  
  

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

Reply via email to