dbertoni    00/07/07 15:53:30

  Modified:    c/src/XPath XNodeSet.cpp XNodeSet.hpp XNumber.cpp
                        XNumber.hpp XString.cpp XString.hpp
  Log:
  Cache conversion results.
  
  Revision  Changes    Path
  1.7       +31 -7     xml-xalan/c/src/XPath/XNodeSet.cpp
  
  Index: XNodeSet.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XPath/XNodeSet.cpp,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- XNodeSet.cpp      2000/07/06 20:16:27     1.6
  +++ XNodeSet.cpp      2000/07/07 22:53:27     1.7
  @@ -81,6 +81,8 @@
                        const NodeRefListBase&  value) :
        XObject(&envSupport, &support),
        m_value(value),
  +     m_cachedStringValue(),
  +     m_cachedNumberValue(0.0),
        m_resultTreeFrag()
   {
   }
  @@ -93,6 +95,8 @@
                        const MutableNodeRefList&       value) :
        XObject(&envSupport, &support),
        m_value(value),
  +     m_cachedStringValue(),
  +     m_cachedNumberValue(0.0),
        m_resultTreeFrag()
   {
   }
  @@ -105,6 +109,8 @@
                        XalanNode&                      value) :
        XObject(&envSupport, &support),
        m_value(),
  +     m_cachedStringValue(),
  +     m_cachedNumberValue(0.0),
        m_resultTreeFrag()
   {
        m_value.addNode(&value);
  @@ -116,6 +122,8 @@
                                   bool                         deepClone) :
        XObject(source),
        m_value(source.m_value),
  +     m_cachedStringValue(source.m_cachedStringValue),
  +     m_cachedNumberValue(source.m_cachedNumberValue),
        m_resultTreeFrag(source.m_resultTreeFrag.get() == 0 ?
                                                0 :
                                                
source.m_resultTreeFrag->clone(deepClone))
  @@ -161,7 +169,16 @@
   double
   XNodeSet::num() const
   {
  -     return DOMStringToDouble(str());
  +     if (m_cachedNumberValue == 0.0)
  +     {
  +#if defined(XALAN_NO_MUTABLE)
  +             ((XString*)this)->m_cachedNumberValue = 
DOMStringToDouble(str());
  +#else
  +             m_cachedNumberValue = DOMStringToDouble(str());
  +#endif
  +     }
  +
  +     return m_cachedNumberValue;
   }
   
   
  @@ -179,9 +196,8 @@
   {
        assert(m_support != 0);
   
  -     XalanDOMString  theResult;
  -
  -     if (m_value.getLength() > 0)
  +     if (isEmpty(m_cachedStringValue) == true &&
  +             m_value.getLength() > 0)
        {
                const XalanNode* const  theNode = m_value.item(0);
                assert(theNode != 0);
  @@ -191,15 +207,23 @@
                if (theType == XalanNode::COMMENT_NODE ||
                        theType == XalanNode::PROCESSING_INSTRUCTION_NODE)
                {
  -                     theResult = theNode->getNodeValue();
  +#if defined(XALAN_NO_MUTABLE)
  +                     ((XNodeSet*)this)->m_cachedStringValue = 
theNode->getNodeValue();
  +#else
  +                     m_cachedStringValue = theNode->getNodeValue();
  +#endif
                }
                else
                {
  -                     theResult = m_support->getNodeData(*theNode);
  +#if defined(XALAN_NO_MUTABLE)
  +                     ((XNodeSet*)this)->m_cachedStringValue = 
m_support->getNodeData(*theNode);
  +#else
  +                     m_cachedStringValue = m_support->getNodeData(*theNode);
  +#endif
                }
        }
   
  -     return theResult;
  +     return m_cachedStringValue;
   }
   
   
  
  
  
  1.7       +4 -0      xml-xalan/c/src/XPath/XNodeSet.hpp
  
  Index: XNodeSet.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XPath/XNodeSet.hpp,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- XNodeSet.hpp      2000/07/06 20:16:27     1.6
  +++ XNodeSet.hpp      2000/07/07 22:53:27     1.7
  @@ -196,6 +196,10 @@
        // Data members...
        MutableNodeRefList                                                      
m_value;
   
  +     mutable XalanDOMString                                          
m_cachedStringValue;
  +
  +     mutable double                                                          
m_cachedNumberValue;
  +
   #if defined(XALAN_NO_NAMESPACES)
   #if defined(XALAN_NO_MUTABLE)
        auto_ptr<ResultTreeFragBase>                            
m_resultTreeFrag;
  
  
  
  1.6       +14 -3     xml-xalan/c/src/XPath/XNumber.cpp
  
  Index: XNumber.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XPath/XNumber.cpp,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- XNumber.cpp       2000/07/06 20:16:27     1.5
  +++ XNumber.cpp       2000/07/07 22:53:27     1.6
  @@ -73,7 +73,8 @@
                        XPathSupport&           support,
                        double                          val) :
        XObject(&envSupport, &support),
  -     m_value(val)
  +     m_value(val),
  +     m_cachedStringValue()
   {
   }
   
  @@ -81,7 +82,8 @@
   
   XNumber::XNumber(const XNumber&              source) :
        XObject(source),
  -     m_value(source.m_value)
  +     m_value(source.m_value),
  +     m_cachedStringValue(source.m_cachedStringValue)
   {
   }
   
  @@ -140,7 +142,16 @@
   XalanDOMString
   XNumber::str() const
   {
  -     return DoubleToDOMString(m_value);
  +     if (isEmpty(m_cachedStringValue) == true)
  +     {
  +#if defined(XALAN_NO_MUTABLE)
  +             ((XNumber*)this)->m_cachedStringValue = 
DoubleToDOMString(m_value);
  +#else
  +             m_cachedStringValue = DoubleToDOMString(m_value);
  +#endif
  +     }
  +
  +     return m_cachedStringValue;
   }
   
   
  
  
  
  1.6       +3 -1      xml-xalan/c/src/XPath/XNumber.hpp
  
  Index: XNumber.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XPath/XNumber.hpp,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- XNumber.hpp       2000/07/06 20:16:27     1.5
  +++ XNumber.hpp       2000/07/07 22:53:28     1.6
  @@ -141,7 +141,9 @@
   private:
   
        // Value of the number being represented.
  -     double  m_value;
  +     double                                  m_value;
  +
  +     mutable XalanDOMString  m_cachedStringValue;
   };
   
   
  
  
  
  1.6       +11 -1     xml-xalan/c/src/XPath/XString.cpp
  
  Index: XString.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XPath/XString.cpp,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- XString.cpp       2000/07/06 20:16:28     1.5
  +++ XString.cpp       2000/07/07 22:53:28     1.6
  @@ -80,6 +80,7 @@
                        const XalanDOMString&   val) :
        XObject(&envSupport, &support),
        m_value(val),
  +     m_cachedNumberValue(0.0),
        m_resultTreeFrag(0)
   {
   }
  @@ -134,7 +135,16 @@
   double
   XString::num() const
   {
  -     return DOMStringToDouble(m_value);
  +     if (m_cachedNumberValue == 0.0)
  +     {
  +#if defined(XALAN_NO_MUTABLE)
  +             ((XString*)this)->m_cachedNumberValue = 
DOMStringToDouble(m_value);
  +#else
  +             m_cachedNumberValue = DOMStringToDouble(m_value);
  +#endif
  +     }
  +
  +     return m_cachedNumberValue;
   }
   
   
  
  
  
  1.7       +2 -0      xml-xalan/c/src/XPath/XString.hpp
  
  Index: XString.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XPath/XString.hpp,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- XString.hpp       2000/07/06 20:16:28     1.6
  +++ XString.hpp       2000/07/07 22:53:28     1.7
  @@ -154,6 +154,8 @@
   
        const XalanDOMString                                            m_value;
   
  +     mutable double                                                          
m_cachedNumberValue;
  +
   #if defined(XALAN_NO_NAMESPACES)
   #if defined(XALAN_NO_MUTABLE)
        auto_ptr<ResultTreeFragBase>                            
m_resultTreeFrag;
  
  
  

Reply via email to