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...@apache.org on 2004/04/12 02:37:06 UTC
cvs commit: xml-xalan/c/src/xalanc/XPath XPath.cpp XPath.hpp
dbertoni 2004/04/11 17:37:06
Modified: c/src/xalanc/XPath XPath.cpp XPath.hpp
Log:
Moved initialization code from constructor to discrete function.
Revision Changes Path
1.16 +60 -44 xml-xalan/c/src/xalanc/XPath/XPath.cpp
Index: XPath.cpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/xalanc/XPath/XPath.cpp,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -r1.15 -r1.16
--- XPath.cpp 6 Apr 2004 00:15:27 -0000 1.15
+++ XPath.cpp 12 Apr 2004 00:37:06 -0000 1.16
@@ -4952,15 +4952,60 @@
m_testFunction(&NodeTester::testDefault),
m_testFunction2(&NodeTester::testDefault2)
{
+ const eMatchScore theScore =
+ initialize(
+ theConstructionContext,
+ theNameTest,
+ thePrefixResolver,
+ theLocator);
+
+ if (theMatchScore != 0)
+ {
+ *theMatchScore = theScore;
+ }
+}
+
+
+
+XPath::NodeTester::NodeTester(
+ const XalanDOMString& theNamespaceURI,
+ const XalanDOMString& theLocalName,
+ eMatchScore* theMatchScore) :
+ m_executionContext(0),
+ m_targetNamespace(0),
+ m_targetLocalName(0),
+ m_testFunction(&NodeTester::testDefault),
+ m_testFunction2(0)
+{
+ const eMatchScore theScore =
+ initialize(theNamespaceURI, theLocalName);
+
+ if (theMatchScore != 0)
+ {
+ *theMatchScore = theScore;
+ }
+}
+
+
+
+XPath::eMatchScore
+XPath::NodeTester::initialize(
+ XPathConstructionContext& theConstructionContext,
+ const XalanDOMString& theNameTest,
+ const PrefixResolver& thePrefixResolver,
+ const LocatorType* theLocator)
+{
const XalanDOMString::size_type theLength =
length(theNameTest);
if (theLength == 1 && theNameTest[0] == XPath::PSEUDONAME_ANY[0])
{
- initialize(s_emptyString, s_emptyString, theMatchScore);
+ return initialize(s_emptyString, s_emptyString);
}
else
{
+ eMatchScore theResult = eMatchScoreNone;
+
const XalanDOMString::size_type theIndex =
indexOf(theNameTest, XalanUnicode::charColon);
@@ -4978,10 +5023,9 @@
}
else
{
- initialize(
+ theResult = initialize(
s_emptyString,
- theConstructionContext.getPooledString(theNameTest),
- theMatchScore);
+ theConstructionContext.getPooledString(theNameTest));
}
}
else
@@ -5021,10 +5065,9 @@
theNameTest[theIndex + 1] == XPath::PSEUDONAME_ANY[0])
{
// It's of the form "NCName:*"
- initialize(
+ theResult = initialize(
theConstructionContext.getPooledString(*theNamespaceURI),
- s_emptyString,
- theMatchScore);
+ s_emptyString);
}
else
{
@@ -5042,39 +5085,24 @@
else
{
// It's of the form "NCName:NCName"
- initialize(
+ theResult = initialize(
theConstructionContext.getPooledString(*theNamespaceURI),
- theConstructionContext.getPooledString(theScratchString),
- theMatchScore);
+ theConstructionContext.getPooledString(theScratchString));
}
}
}
}
- }
-}
-
-
-XPath::NodeTester::NodeTester(
- const XalanDOMString& theNamespaceURI,
- const XalanDOMString& theLocalName,
- eMatchScore* theMatchScore) :
- m_executionContext(0),
- m_targetNamespace(0),
- m_targetLocalName(0),
- m_testFunction(&NodeTester::testDefault),
- m_testFunction2(0)
-{
- initialize(theNamespaceURI, theLocalName, theMatchScore);
+ return theResult;
+ }
}
-void
+XPath::eMatchScore
XPath::NodeTester::initialize(
const XalanDOMString& theNamespaceURI,
- const XalanDOMString& theLocalName,
- eMatchScore* theMatchScore)
+ const XalanDOMString& theLocalName)
{
if (theNamespaceURI.empty() == false)
{
@@ -5084,10 +5112,7 @@
{
m_testFunction2 = &NodeTester::testElementNamespaceOnly2;
- if (theMatchScore != 0)
- {
- *theMatchScore = eMatchScoreNSWild;
- }
+ return eMatchScoreNSWild;
}
else
{
@@ -5095,10 +5120,7 @@
m_targetLocalName = &theLocalName;
- if (theMatchScore != 0)
- {
- *theMatchScore = eMatchScoreQName;
- }
+ return eMatchScoreQName;
}
}
else if (theLocalName.empty() == false)
@@ -5107,19 +5129,13 @@
m_targetLocalName = &theLocalName;
- if (theMatchScore != 0)
- {
- *theMatchScore = eMatchScoreQName;
- }
+ return eMatchScoreQName;
}
else
{
m_testFunction2 = &NodeTester::testElementTotallyWild2;
- if (theMatchScore != 0)
- {
- *theMatchScore = eMatchScoreNodeTest;
- }
+ return eMatchScoreNodeTest;
}
}
1.10 +12 -4 xml-xalan/c/src/xalanc/XPath/XPath.hpp
Index: XPath.hpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/xalanc/XPath/XPath.hpp,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- XPath.hpp 6 Apr 2004 00:15:27 -0000 1.9
+++ XPath.hpp 12 Apr 2004 00:37:06 -0000 1.10
@@ -1083,13 +1083,21 @@
return *this;
}
- private:
+ protected:
+
+ eMatchScore
+ initialize(
+ XPathConstructionContext& theConstructionContext,
+ const XalanDOMString& theNameTest,
+ const PrefixResolver& thePrefixResolver,
+ const LocatorType* theLocator);
- void
+ eMatchScore
initialize(
const XalanDOMString& theNamespaceURI,
- const XalanDOMString& theLocalName,
- eMatchScore* theMatchScore = 0);
+ const XalanDOMString& theLocalName);
+
+ private:
typedef eMatchScore (NodeTester::*TestFunctionPtr)(const XalanNode&, XalanNode::NodeType) const;
---------------------------------------------------------------------
To unsubscribe, e-mail: xalan-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xalan-cvs-help@xml.apache.org