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 2002/04/26 08:25:23 UTC
cvs commit: xml-xalan/c/src/XalanExtensions FunctionDifference.cpp FunctionDistinct.cpp FunctionIntersection.cpp FunctionNodeSet.cpp FunctionNodeSet.hpp XalanExtensions.hpp
dbertoni 02/04/25 23:25:23
Modified: c/src/XalanExtensions FunctionDifference.cpp
FunctionDistinct.cpp FunctionIntersection.cpp
FunctionNodeSet.cpp FunctionNodeSet.hpp
XalanExtensions.hpp
Log:
Make sure nodes are added in document order.
Revision Changes Path
1.7 +3 -1 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.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- FunctionDifference.cpp 17 Apr 2002 05:34:20 -0000 1.6
+++ FunctionDifference.cpp 26 Apr 2002 06:25:23 -0000 1.7
@@ -108,9 +108,11 @@
if (nodeset2.indexOf(theNode) == NodeRefListBase::npos)
{
- theResult->addNode(theNode);
+ theResult->addNodeInDocOrder(theNode, executionContext);
}
}
+
+ theResult->setDocumentOrder();
return executionContext.getXObjectFactory().createNodeSet(theResult);
}
1.9 +3 -1 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.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- FunctionDistinct.cpp 17 Apr 2002 05:34:20 -0000 1.8
+++ FunctionDistinct.cpp 26 Apr 2002 06:25:23 -0000 1.9
@@ -140,7 +140,7 @@
if (theStrings.find(theCachedString) == theStrings.end())
{
- theResult->addNode(theNode);
+ theResult->addNodeInDocOrder(theNode, executionContext);
theStrings.insert(theCachedString);
}
@@ -148,6 +148,8 @@
clear(theCachedString);
}
}
+
+ theResult->setDocumentOrder();
return executionContext.getXObjectFactory().createNodeSet(theResult);
}
1.7 +3 -1 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.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- FunctionIntersection.cpp 17 Apr 2002 05:34:20 -0000 1.6
+++ FunctionIntersection.cpp 26 Apr 2002 06:25:23 -0000 1.7
@@ -105,9 +105,11 @@
if (nodeset2.indexOf(theNode) != NodeRefListBase::npos)
{
- theResult->addNode(theNode);
+ theResult->addNodeInDocOrder(theNode, executionContext);
}
}
+
+ theResult->setDocumentOrder();
return executionContext.getXObjectFactory().createNodeSet(theResult);
}
1.8 +20 -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.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- FunctionNodeSet.cpp 17 Apr 2002 05:34:20 -0000 1.7
+++ FunctionNodeSet.cpp 26 Apr 2002 06:25:23 -0000 1.8
@@ -139,7 +139,8 @@
-FunctionNodeSet::FunctionNodeSet()
+FunctionNodeSet::FunctionNodeSet(bool convertString) :
+ m_convertString(convertString)
{
}
@@ -165,19 +166,22 @@
assert(args[0].null() == false);
- if (args[0]->getType() != XObject::eTypeResultTreeFrag)
+ const XObject::eObjectType theType = args[0]->getType();
+
+ if (theType == XObject::eTypeResultTreeFrag ||
+ (theType == XObject::eTypeString && m_convertString == true))
+ {
+ return XObjectPtr(new XResultTreeFragNodeSetProxy(args[0]));
+ }
+ else
{
executionContext.warn(
- "Invalid argument type in function nodeset()!",
+ getInvalidArgumentTypeError(),
context,
locator);
return args[0];
}
- else
- {
- return XObjectPtr(new XResultTreeFragNodeSetProxy(args[0]));
- }
}
@@ -197,5 +201,13 @@
const XalanDOMString
FunctionNodeSet::getError() const
{
- return StaticStringToDOMString(XALAN_STATIC_UCODE_STRING("The node-set() function accepts one argument"));
+ return StaticStringToDOMString(XALAN_STATIC_UCODE_STRING("The nodeset() function accepts one argument"));
+}
+
+
+
+const XalanDOMString
+FunctionNodeSet::getInvalidArgumentTypeError() const
+{
+ return StaticStringToDOMString(XALAN_STATIC_UCODE_STRING("Invalid argument type in function nodeset()"));
}
1.5 +14 -2 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.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- FunctionNodeSet.hpp 17 Apr 2002 05:34:20 -0000 1.4
+++ FunctionNodeSet.hpp 26 Apr 2002 06:25:23 -0000 1.5
@@ -80,7 +80,12 @@
{
public:
- FunctionNodeSet();
+ /**
+ * Constructor.
+ *
+ * @param convertString If true, strings as well as result tree fragments will be converted to nodesets.
+ */
+ FunctionNodeSet(bool convertString = true);
virtual
~FunctionNodeSet();
@@ -103,9 +108,12 @@
protected:
- const XalanDOMString
+ virtual const XalanDOMString
getError() const;
+ virtual const XalanDOMString
+ getInvalidArgumentTypeError() const;
+
private:
// Not implemented...
@@ -114,6 +122,10 @@
bool
operator==(const FunctionNodeSet&) const;
+
+
+ // Data members...
+ const bool m_convertString;
};
1.2 +60 -6 xml-xalan/c/src/XalanExtensions/XalanExtensions.hpp
Index: XalanExtensions.hpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XalanExtensions/XalanExtensions.hpp,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- XalanExtensions.hpp 18 Jul 2001 05:50:19 -0000 1.1
+++ XalanExtensions.hpp 26 Apr 2002 06:25:23 -0000 1.2
@@ -59,12 +59,66 @@
-#include <XalanExtensions/FunctionDifference.hpp>
-#include <XalanExtensions/FunctionDistinct.hpp>
-#include <XalanExtensions/FunctionEvaluate.hpp>
-#include <XalanExtensions/FunctionHasSameNodes.hpp>
-#include <XalanExtensions/FunctionIntersection.hpp>
-#include <XalanExtensions/FunctionNodeSet.hpp>
+// Base header file. Must be first.
+#include <XalanExtensions/XalanExtensionsDefinitions.hpp>
+
+
+
+#include <XalanDOM/XalanDOMString.hpp>
+
+
+
+class Function;
+class XPathEnvSupportDefault;
+
+
+
+class XALAN_XALANEXTENSIONS_EXPORT XalanExtensionsInstaller
+{
+public:
+
+ struct FunctionTableEntry
+ {
+ const XalanDOMChar* theFunctionName;
+ const Function* theFunction;
+ };
+
+ static void
+ installLocal(XPathEnvSupportDefault& theSupport);
+
+ static void
+ installGlobal();
+
+ static void
+ uninstallLocal(XPathEnvSupportDefault& theSupport);
+
+ static void
+ uninstallGlobal();
+
+protected:
+
+ static void
+ doInstallLocal(
+ const XalanDOMChar* theNamespace,
+ const FunctionTableEntry theFunctionTable[],
+ XPathEnvSupportDefault& theSupport);
+
+ static void
+ doInstallGlobal(
+ const XalanDOMChar* theNamespace,
+ const FunctionTableEntry theFunctionTable[]);
+
+ static void
+ doUninstallLocal(
+ const XalanDOMChar* theNamespace,
+ const FunctionTableEntry theFunctionTable[],
+ XPathEnvSupportDefault& theSupport);
+
+ static void
+ doUninstallGlobal(
+ const XalanDOMChar* theNamespace,
+ const FunctionTableEntry theFunctionTable[]);
+};
---------------------------------------------------------------------
To unsubscribe, e-mail: xalan-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xalan-cvs-help@xml.apache.org