dbertoni 2002/10/04 00:51:38
Modified: c/src/XSLT XResultTreeFrag.cpp XResultTreeFrag.hpp
Log:
Optimize string conversion of single text child.
Revision Changes Path
1.7 +29 -1 xml-xalan/c/src/XSLT/XResultTreeFrag.cpp
Index: XResultTreeFrag.cpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XSLT/XResultTreeFrag.cpp,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- XResultTreeFrag.cpp 4 Oct 2002 06:59:28 -0000 1.6
+++ XResultTreeFrag.cpp 4 Oct 2002 07:51:38 -0000 1.7
@@ -84,9 +84,29 @@
+inline bool
+hasSingleTextChild(const ResultTreeFragBase& theRTreeFrag)
+{
+ const XalanNode* const theFirstChild = theRTreeFrag.getFirstChild();
+
+ if (theFirstChild != 0 &&
+ theFirstChild->getNodeType() == XalanNode::TEXT_NODE &&
+ theFirstChild->getNextSibling() == 0)
+ {
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+}
+
+
+
XResultTreeFrag::XResultTreeFrag(ResultTreeFragBase& value) :
XObject(eTypeResultTreeFrag),
m_value(&value),
+ m_hasSingleTextChild(hasSingleTextChild(value)),
m_executionContext(0),
m_cachedStringValue(),
m_cachedNumberValue(0.0)
@@ -100,6 +120,7 @@
bool /* deepClone
*/) :
XObject(source),
m_value(source.m_value),
+ m_hasSingleTextChild(source.m_hasSingleTextChild),
m_executionContext(0),
m_cachedStringValue(source.m_cachedStringValue),
m_cachedNumberValue(source.m_cachedNumberValue)
@@ -164,7 +185,14 @@
const XalanDOMString&
XResultTreeFrag::str() const
{
- if (isEmpty(m_cachedStringValue) == true)
+ if (m_hasSingleTextChild == true)
+ {
+ assert(m_value->getFirstChild() != 0 &&
+ m_value->getFirstChild()->getNodeType() ==
XalanNode::TEXT_NODE);
+
+ return m_value->getFirstChild()->getNodeValue();
+ }
+ else if (isEmpty(m_cachedStringValue) == true)
{
#if defined(XALAN_NO_MUTABLE)
DOMServices::getNodeData(*m_value,
((XResultTreeFrag*)this)->m_cachedStringValue);
1.5 +2 -0 xml-xalan/c/src/XSLT/XResultTreeFrag.hpp
Index: XResultTreeFrag.hpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XSLT/XResultTreeFrag.hpp,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- XResultTreeFrag.hpp 4 Oct 2002 06:59:28 -0000 1.4
+++ XResultTreeFrag.hpp 4 Oct 2002 07:51:38 -0000 1.5
@@ -194,6 +194,8 @@
// Data members...
ResultTreeFragBase* m_value;
+ const bool
m_hasSingleTextChild;
+
StylesheetExecutionContext* m_executionContext;
mutable XalanDOMString m_cachedStringValue;
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]