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;