dbertoni    2002/10/04 00:51:38

  Modified:    c/src/XSLT XResultTreeFrag.cpp XResultTreeFrag.hpp
  Log:
  Optimize string conversion of single text child.
  
  Revision  Changes    Path
  1.7       +29 -1     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.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- XResultTreeFrag.cpp       4 Oct 2002 06:59:28 -0000       1.6
  +++ XResultTreeFrag.cpp       4 Oct 2002 07:51:38 -0000       1.7
  @@ -84,9 +84,29 @@
   
   
   
  +inline bool
  +hasSingleTextChild(const ResultTreeFragBase& theRTreeFrag)
  +{
  +     const XalanNode* const  theFirstChild = theRTreeFrag.getFirstChild();
  +
  +     if (theFirstChild != 0 &&
  +             theFirstChild->getNodeType() == XalanNode::TEXT_NODE &&
  +             theFirstChild->getNextSibling() == 0)
  +     {
  +             return true;
  +     }
  +     else
  +     {
  +             return false;
  +     }
  +}
  +
  +
  +
   XResultTreeFrag::XResultTreeFrag(ResultTreeFragBase& value) :
        XObject(eTypeResultTreeFrag),
        m_value(&value),
  +     m_hasSingleTextChild(hasSingleTextChild(value)),
        m_executionContext(0),
        m_cachedStringValue(),
        m_cachedNumberValue(0.0)
  @@ -100,6 +120,7 @@
                        bool                                    /* deepClone 
*/) :
        XObject(source),
        m_value(source.m_value),
  +     m_hasSingleTextChild(source.m_hasSingleTextChild),
        m_executionContext(0),
        m_cachedStringValue(source.m_cachedStringValue),
        m_cachedNumberValue(source.m_cachedNumberValue)
  @@ -164,7 +185,14 @@
   const XalanDOMString&
   XResultTreeFrag::str() const
   {
  -     if (isEmpty(m_cachedStringValue) == true)
  +     if (m_hasSingleTextChild == true)
  +     {
  +             assert(m_value->getFirstChild() != 0 &&
  +                             m_value->getFirstChild()->getNodeType() == 
XalanNode::TEXT_NODE);
  +
  +             return m_value->getFirstChild()->getNodeValue();
  +     }
  +     else if (isEmpty(m_cachedStringValue) == true)
        {
   #if defined(XALAN_NO_MUTABLE)
                DOMServices::getNodeData(*m_value, 
((XResultTreeFrag*)this)->m_cachedStringValue);
  
  
  
  1.5       +2 -0      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.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- XResultTreeFrag.hpp       4 Oct 2002 06:59:28 -0000       1.4
  +++ XResultTreeFrag.hpp       4 Oct 2002 07:51:38 -0000       1.5
  @@ -194,6 +194,8 @@
        // Data members...
        ResultTreeFragBase*                             m_value;        
   
  +     const bool                                              
m_hasSingleTextChild;
  +
        StylesheetExecutionContext*             m_executionContext;
   
        mutable XalanDOMString                  m_cachedStringValue;
  
  
  

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

Reply via email to