dbertoni    00/07/27 13:34:34

  Modified:    c/src/XPath XResultTreeFrag.cpp XResultTreeFrag.hpp
  Log:
  Cache number and string conversion values.
  
  Revision  Changes    Path
  1.8       +25 -5     xml-xalan/c/src/XPath/XResultTreeFrag.cpp
  
  Index: XResultTreeFrag.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XPath/XResultTreeFrag.cpp,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- XResultTreeFrag.cpp       2000/07/13 22:47:16     1.7
  +++ XResultTreeFrag.cpp       2000/07/27 20:34:34     1.8
  @@ -83,7 +83,9 @@
                        bool                                            
deepClone) :
        XObject(&envSupport, &support),
        NodeRefListBase(),
  -     m_value(val.clone(deepClone))
  +     m_value(val.clone(deepClone)),
  +     m_cachedStringValue(),
  +     m_cachedNumberValue(0.0)
   {
   }
   
  @@ -94,7 +96,9 @@
                        bool                                    deepClone) :
        XObject(source),
        NodeRefListBase(source),
  -     m_value(source.m_value->clone(deepClone))
  +     m_value(source.m_value->clone(deepClone)),
  +     m_cachedStringValue(source.m_cachedStringValue),
  +     m_cachedNumberValue(source.m_cachedNumberValue)
   {
   }
   
  @@ -137,9 +141,16 @@
   double
   XResultTreeFrag::num() const
   {
  -     const XalanDOMString    theValue = 
m_support->getNodeData(*m_value.get());
  +     if (m_cachedNumberValue == 0.0)
  +     {
  +#if defined(XALAN_NO_MUTABLE)
  +             ((XNodeSet*)this)->m_cachedNumberValue = 
DoubleSupport::toDouble(str());
  +#else
  +             m_cachedNumberValue = DoubleSupport::toDouble(str());
  +#endif
  +     }
   
  -     return DoubleSupport::toDouble(theValue);
  +     return m_cachedNumberValue;
   }
   
   
  @@ -179,7 +190,16 @@
   XalanDOMString
   XResultTreeFrag::str() const
   {
  -     return m_support->getNodeData(*m_value.get());
  +     if (isEmpty(m_cachedStringValue) == true)
  +     {
  +#if defined(XALAN_NO_MUTABLE)
  +             ((XResultTreeFrag*)this)->m_cachedStringValue = 
m_support->getNodeData(*m_value.get());
  +#else
  +             m_cachedStringValue = m_support->getNodeData(*m_value.get());
  +#endif
  +     }
  +
  +     return m_cachedStringValue;
   }
   
   
  
  
  
  1.9       +4 -0      xml-xalan/c/src/XPath/XResultTreeFrag.hpp
  
  Index: XResultTreeFrag.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XPath/XResultTreeFrag.hpp,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- XResultTreeFrag.hpp       2000/07/21 19:50:03     1.8
  +++ XResultTreeFrag.hpp       2000/07/27 20:34:34     1.9
  @@ -182,6 +182,10 @@
   #else
        std::auto_ptr<ResultTreeFragBase>       m_value;
   #endif
  +
  +     mutable XalanDOMString                          m_cachedStringValue;
  +
  +     mutable double                                          
m_cachedNumberValue;
   };
   
   
  
  
  

Reply via email to