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;
};