You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xalan.apache.org by db...@locus.apache.org on 2000/07/08 00:53:30 UTC

cvs commit: xml-xalan/c/src/XPath XNodeSet.cpp XNodeSet.hpp XNumber.cpp XNumber.hpp XString.cpp XString.hpp

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;