dbertoni 02/04/16 22:34:20
Modified: c/src/XalanExtensions FunctionDifference.cpp
FunctionDifference.hpp FunctionDistinct.cpp
FunctionDistinct.hpp FunctionEvaluate.cpp
FunctionEvaluate.hpp FunctionHasSameNodes.cpp
FunctionHasSameNodes.hpp FunctionIntersection.cpp
FunctionIntersection.hpp FunctionNodeSet.cpp
FunctionNodeSet.hpp
Log:
Updated extension functions to use direct execute() call.
Revision Changes Path
1.6 +12 -8 xml-xalan/c/src/XalanExtensions/FunctionDifference.cpp
Index: FunctionDifference.cpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XalanExtensions/FunctionDifference.cpp,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- FunctionDifference.cpp 26 Sep 2001 20:53:11 -0000 1.5
+++ FunctionDifference.cpp 17 Apr 2002 05:34:20 -0000 1.6
@@ -77,16 +77,20 @@
XObjectPtr
FunctionDifference::execute(
- XPathExecutionContext& executionContext,
- XalanNode* /* context */,
- const XObjectPtr arg1,
- const XObjectPtr arg2,
- const Locator* /* locator */) const
+ XPathExecutionContext& executionContext,
+ XalanNode*
context,
+ const XObjectArgVectorType& args,
+ const Locator* locator) const
{
- assert(arg1.null() == false && arg2.null() == false);
+ if (args.size() != 2)
+ {
+ executionContext.error(getError(), context, locator);
+ }
- const NodeRefListBase& nodeset1 = arg1->nodeset();
- const NodeRefListBase& nodeset2 = arg2->nodeset();
+ assert(args[0].null() == false && args[1].null() == false);
+
+ const NodeRefListBase& nodeset1 = args[0]->nodeset();
+ const NodeRefListBase& nodeset2 = args[1]->nodeset();
typedef XPathExecutionContext::BorrowReturnMutableNodeRefList
BorrowReturnMutableNodeRefList;
1.3 +4 -5 xml-xalan/c/src/XalanExtensions/FunctionDifference.hpp
Index: FunctionDifference.hpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XalanExtensions/FunctionDifference.hpp,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- FunctionDifference.hpp 14 Sep 2001 20:57:21 -0000 1.2
+++ FunctionDifference.hpp 17 Apr 2002 05:34:20 -0000 1.3
@@ -85,11 +85,10 @@
virtual XObjectPtr
execute(
- XPathExecutionContext& executionContext,
- XalanNode* context,
- const XObjectPtr arg1,
- const XObjectPtr arg2,
- const Locator* locator) const;
+ XPathExecutionContext& executionContext,
+ XalanNode*
context,
+ const XObjectArgVectorType& args,
+ const Locator* locator) const;
#if defined(XALAN_NO_COVARIANT_RETURN_TYPE)
virtual Function*
1.8 +11 -6 xml-xalan/c/src/XalanExtensions/FunctionDistinct.cpp
Index: FunctionDistinct.cpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XalanExtensions/FunctionDistinct.cpp,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- FunctionDistinct.cpp 26 Sep 2001 20:53:11 -0000 1.7
+++ FunctionDistinct.cpp 17 Apr 2002 05:34:20 -0000 1.8
@@ -89,14 +89,19 @@
XObjectPtr
FunctionDistinct::execute(
- XPathExecutionContext& executionContext,
- XalanNode* /* context */,
- const XObjectPtr arg,
- const Locator* /* locator */) const
+ XPathExecutionContext& executionContext,
+ XalanNode*
context,
+ const XObjectArgVectorType& args,
+ const Locator* locator) const
{
- assert(arg.null() == false);
+ if (args.size() != 1)
+ {
+ executionContext.error(getError(), context, locator);
+ }
- const NodeRefListBase& nodeset = arg->nodeset();
+ assert(args[0].null() == false);
+
+ const NodeRefListBase& nodeset = args[0]->nodeset();
typedef XPathExecutionContext::BorrowReturnMutableNodeRefList
BorrowReturnMutableNodeRefList;
1.3 +4 -4 xml-xalan/c/src/XalanExtensions/FunctionDistinct.hpp
Index: FunctionDistinct.hpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XalanExtensions/FunctionDistinct.hpp,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- FunctionDistinct.hpp 14 Sep 2001 20:57:21 -0000 1.2
+++ FunctionDistinct.hpp 17 Apr 2002 05:34:20 -0000 1.3
@@ -85,10 +85,10 @@
virtual XObjectPtr
execute(
- XPathExecutionContext& executionContext,
- XalanNode* context,
- const XObjectPtr arg,
- const Locator* locator) const;
+ XPathExecutionContext& executionContext,
+ XalanNode*
context,
+ const XObjectArgVectorType& args,
+ const Locator* locator) const;
#if defined(XALAN_NO_COVARIANT_RETURN_TYPE)
virtual Function*
1.6 +48 -11 xml-xalan/c/src/XalanExtensions/FunctionEvaluate.cpp
Index: FunctionEvaluate.cpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XalanExtensions/FunctionEvaluate.cpp,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- FunctionEvaluate.cpp 20 Sep 2001 18:06:05 -0000 1.5
+++ FunctionEvaluate.cpp 17 Apr 2002 05:34:20 -0000 1.6
@@ -62,6 +62,11 @@
+#include <XalanDOM/XalanElement.hpp>
+
+
+
+#include <XPath/ElementPrefixResolverProxy.hpp>
#include <XPath/XObjectFactory.hpp>
#include <XPath/XPath.hpp>
#include <XPath/XPathProcessorImpl.hpp>
@@ -82,24 +87,56 @@
XObjectPtr
FunctionEvaluate::execute(
- XPathExecutionContext& executionContext,
- XalanNode* context,
- const XObjectPtr arg,
- const Locator* locator) const
+ XPathExecutionContext& executionContext,
+ XalanNode*
context,
+ const XObjectArgVectorType& args,
+ const Locator* locator) const
{
- assert(arg.null() == false);
+ if (args.size() != 1)
+ {
+ executionContext.error(getError(), context, locator);
+ }
+
+ assert(args[0].null() == false);
const PrefixResolver* const theResolver =
executionContext.getPrefixResolver();
if (theResolver == 0)
{
- executionContext.warn(
- "No prefix resolver available in evaluate()!",
- context,
- locator);
+ if (context->getNodeType() != XalanNode::ELEMENT_NODE)
+ {
+ executionContext.warn(
+ "No prefix resolver is available in evaluate(). The
expression cannot be evaluated.",
+ context,
+ locator);
+
+ return args[0];
+ }
+ else
+ {
+ executionContext.warn(
+ "No prefix resolver is available in evaluate().
evalute() will use the context node for prefix resolution.",
+ context,
+ locator);
+
+#if defined(XALAN_OLD_STYLE_CASTS)
+ ElementPrefixResolverProxy theProxy((const
XalanElement*)context);
+#else
+ ElementPrefixResolverProxy theProxy(static_cast<const
XalanElement*>(context));
+#endif
+
+ XPathProcessorImpl theProcessor;
+
+ XPath theXPath;
+
+ theProcessor.initXPath(
+ theXPath,
+ args[0]->str(),
+ theProxy);
- return arg;
+ return theXPath.execute(context, *theResolver,
executionContext);
+ }
}
else
{
@@ -109,7 +146,7 @@
theProcessor.initXPath(
theXPath,
- arg->str(),
+ args[0]->str(),
*theResolver);
return theXPath.execute(context, *theResolver, executionContext);
1.3 +4 -4 xml-xalan/c/src/XalanExtensions/FunctionEvaluate.hpp
Index: FunctionEvaluate.hpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XalanExtensions/FunctionEvaluate.hpp,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- FunctionEvaluate.hpp 14 Sep 2001 20:57:21 -0000 1.2
+++ FunctionEvaluate.hpp 17 Apr 2002 05:34:20 -0000 1.3
@@ -85,10 +85,10 @@
virtual XObjectPtr
execute(
- XPathExecutionContext& executionContext,
- XalanNode* context,
- const XObjectPtr arg,
- const Locator* locator) const;
+ XPathExecutionContext& executionContext,
+ XalanNode*
context,
+ const XObjectArgVectorType& args,
+ const Locator* locator) const;
#if defined(XALAN_NO_COVARIANT_RETURN_TYPE)
virtual Function*
1.6 +12 -8 xml-xalan/c/src/XalanExtensions/FunctionHasSameNodes.cpp
Index: FunctionHasSameNodes.cpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XalanExtensions/FunctionHasSameNodes.cpp,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- FunctionHasSameNodes.cpp 26 Sep 2001 20:53:11 -0000 1.5
+++ FunctionHasSameNodes.cpp 17 Apr 2002 05:34:20 -0000 1.6
@@ -77,16 +77,20 @@
XObjectPtr
FunctionHasSameNodes::execute(
- XPathExecutionContext& executionContext,
- XalanNode* /* context */,
- const XObjectPtr arg1,
- const XObjectPtr arg2,
- const Locator* /* locator */) const
+ XPathExecutionContext& executionContext,
+ XalanNode*
context,
+ const XObjectArgVectorType& args,
+ const Locator* locator) const
{
- assert(arg1.null() == false && arg2.null() == false);
+ if (args.size() != 2)
+ {
+ executionContext.error(getError(), context, locator);
+ }
- const NodeRefListBase& nodeset1 = arg1->nodeset();
- const NodeRefListBase& nodeset2 = arg2->nodeset();
+ assert(args[0].null() == false && args[1].null() == false);
+
+ const NodeRefListBase& nodeset1 = args[0]->nodeset();
+ const NodeRefListBase& nodeset2 = args[1]->nodeset();
const NodeRefListBase::size_type theLength = nodeset1.getLength();
1.3 +5 -5 xml-xalan/c/src/XalanExtensions/FunctionHasSameNodes.hpp
Index: FunctionHasSameNodes.hpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XalanExtensions/FunctionHasSameNodes.hpp,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- FunctionHasSameNodes.hpp 14 Sep 2001 20:57:21 -0000 1.2
+++ FunctionHasSameNodes.hpp 17 Apr 2002 05:34:20 -0000 1.3
@@ -85,11 +85,11 @@
virtual XObjectPtr
execute(
- XPathExecutionContext& executionContext,
- XalanNode* context,
- const XObjectPtr arg1,
- const XObjectPtr arg2,
- const Locator* locator) const;
+ XPathExecutionContext& executionContext,
+ XalanNode*
context,
+ const XObjectArgVectorType& args,
+ const Locator* locator) const;
+
#if defined(XALAN_NO_COVARIANT_RETURN_TYPE)
virtual Function*
#else
1.6 +12 -8 xml-xalan/c/src/XalanExtensions/FunctionIntersection.cpp
Index: FunctionIntersection.cpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XalanExtensions/FunctionIntersection.cpp,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- FunctionIntersection.cpp 26 Sep 2001 20:53:11 -0000 1.5
+++ FunctionIntersection.cpp 17 Apr 2002 05:34:20 -0000 1.6
@@ -77,16 +77,20 @@
XObjectPtr
FunctionIntersection::execute(
- XPathExecutionContext& executionContext,
- XalanNode* /* context */,
- const XObjectPtr arg1,
- const XObjectPtr arg2,
- const Locator* /* locator */) const
+ XPathExecutionContext& executionContext,
+ XalanNode*
context,
+ const XObjectArgVectorType& args,
+ const Locator* locator) const
{
- assert(arg1.null() == false && arg2.null() == false);
+ if (args.size() != 2)
+ {
+ executionContext.error(getError(), context, locator);
+ }
- const NodeRefListBase& nodeset1 = arg1->nodeset();
- const NodeRefListBase& nodeset2 = arg2->nodeset();
+ assert(args[0].null() == false && args[1].null() == false);
+
+ const NodeRefListBase& nodeset1 = args[0]->nodeset();
+ const NodeRefListBase& nodeset2 = args[1]->nodeset();
typedef XPathExecutionContext::BorrowReturnMutableNodeRefList
BorrowReturnMutableNodeRefList;
1.3 +4 -5 xml-xalan/c/src/XalanExtensions/FunctionIntersection.hpp
Index: FunctionIntersection.hpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XalanExtensions/FunctionIntersection.hpp,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- FunctionIntersection.hpp 14 Sep 2001 20:57:21 -0000 1.2
+++ FunctionIntersection.hpp 17 Apr 2002 05:34:20 -0000 1.3
@@ -85,11 +85,10 @@
virtual XObjectPtr
execute(
- XPathExecutionContext& executionContext,
- XalanNode* context,
- const XObjectPtr arg1,
- const XObjectPtr arg2,
- const Locator* locator) const;
+ XPathExecutionContext& executionContext,
+ XalanNode*
context,
+ const XObjectArgVectorType& args,
+ const Locator* locator) const;
#if defined(XALAN_NO_COVARIANT_RETURN_TYPE)
virtual Function*
1.7 +13 -8 xml-xalan/c/src/XalanExtensions/FunctionNodeSet.cpp
Index: FunctionNodeSet.cpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XalanExtensions/FunctionNodeSet.cpp,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- FunctionNodeSet.cpp 27 Sep 2001 14:13:44 -0000 1.6
+++ FunctionNodeSet.cpp 17 Apr 2002 05:34:20 -0000 1.7
@@ -153,25 +153,30 @@
XObjectPtr
FunctionNodeSet::execute(
- XPathExecutionContext& executionContext,
- XalanNode* context,
- const XObjectPtr arg,
- const Locator* locator) const
+ XPathExecutionContext& executionContext,
+ XalanNode*
context,
+ const XObjectArgVectorType& args,
+ const Locator* locator) const
{
- assert(arg.null() == false);
+ if (args.size() != 1)
+ {
+ executionContext.error(getError(), context, locator);
+ }
+
+ assert(args[0].null() == false);
- if (arg->getType() != XObject::eTypeResultTreeFrag)
+ if (args[0]->getType() != XObject::eTypeResultTreeFrag)
{
executionContext.warn(
"Invalid argument type in function nodeset()!",
context,
locator);
- return arg;
+ return args[0];
}
else
{
- return XObjectPtr(new XResultTreeFragNodeSetProxy(arg));
+ return XObjectPtr(new XResultTreeFragNodeSetProxy(args[0]));
}
}
1.4 +4 -4 xml-xalan/c/src/XalanExtensions/FunctionNodeSet.hpp
Index: FunctionNodeSet.hpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XalanExtensions/FunctionNodeSet.hpp,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- FunctionNodeSet.hpp 1 Nov 2001 15:48:34 -0000 1.3
+++ FunctionNodeSet.hpp 17 Apr 2002 05:34:20 -0000 1.4
@@ -89,10 +89,10 @@
virtual XObjectPtr
execute(
- XPathExecutionContext& executionContext,
- XalanNode* context,
- const XObjectPtr arg,
- const Locator* locator) const;
+ XPathExecutionContext& executionContext,
+ XalanNode*
context,
+ const XObjectArgVectorType& args,
+ const Locator* locator) const;
#if defined(XALAN_NO_COVARIANT_RETURN_TYPE)
virtual Function*
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]