dbertoni 2003/01/03 13:46:35
Modified: c/src/XPath XPath.cpp XPath.hpp XPathProcessorImpl.cpp
Log:
Implemented another "inline" function.
Revision Changes Path
1.86 +72 -6 xml-xalan/c/src/XPath/XPath.cpp
Index: XPath.cpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XPath/XPath.cpp,v
retrieving revision 1.85
retrieving revision 1.86
diff -u -r1.85 -r1.86
--- XPath.cpp 3 Jan 2003 08:04:24 -0000 1.85
+++ XPath.cpp 3 Jan 2003 21:46:30 -0000 1.86
@@ -84,6 +84,7 @@
+#include "FormatterStringLengthCounter.hpp"
#include "FoundIndex.hpp"
#include "MutableNodeRefList.hpp"
#include "XalanQNameByReference.hpp"
@@ -464,6 +465,14 @@
// return functionString(context, opPos, executionContext);
// break;
+ case XPathExpression::eOP_FUNCTION_STRINGLENGTH_0:
+ return
executionContext.getXObjectFactory().createNumber(functionStringLength(context));
+ break;
+
+ case XPathExpression::eOP_FUNCTION_STRINGLENGTH_1:
+ return
executionContext.getXObjectFactory().createNumber(functionStringLength(context,
opPos, executionContext));
+ break;
+
default:
unknownOpCodeError(context, executionContext, opPos);
break;
@@ -639,6 +648,14 @@
result = XObject::boolean(functionNumber(context, opPos,
executionContext));
break;
+ case XPathExpression::eOP_FUNCTION_STRINGLENGTH_0:
+ result = XObject::boolean(functionStringLength(context));
+ break;
+
+ case XPathExpression::eOP_FUNCTION_STRINGLENGTH_1:
+ result = XObject::boolean(functionStringLength(context, opPos,
executionContext));
+ break;
+
default:
unknownOpCodeError(context, executionContext, opPos);
break;
@@ -812,6 +829,14 @@
result = functionNumber(context, opPos, executionContext);
break;
+ case XPathExpression::eOP_FUNCTION_STRINGLENGTH_0:
+ result = functionStringLength(context);
+ break;
+
+ case XPathExpression::eOP_FUNCTION_STRINGLENGTH_1:
+ result = functionStringLength(context, opPos, executionContext);
+ break;
+
default:
unknownOpCodeError(context, executionContext, opPos);
break;
@@ -985,6 +1010,14 @@
XObject::string(functionNumber(context, opPos,
executionContext), result);
break;
+ case XPathExpression::eOP_FUNCTION_STRINGLENGTH_0:
+ XObject::string(functionStringLength(context), result);
+ break;
+
+ case XPathExpression::eOP_FUNCTION_STRINGLENGTH_1:
+ XObject::string(functionStringLength(context, opPos,
executionContext), result);
+ break;
+
default:
unknownOpCodeError(context, executionContext, opPos);
break;
@@ -1194,6 +1227,14 @@
XObject::string(functionNumber(context, opPos,
executionContext), formatterListener, function);
break;
+ case XPathExpression::eOP_FUNCTION_STRINGLENGTH_0:
+ XObject::string(functionStringLength(context),
formatterListener, function);
+ break;
+
+ case XPathExpression::eOP_FUNCTION_STRINGLENGTH_1:
+ XObject::string(functionStringLength(context, opPos,
executionContext), formatterListener, function);
+ break;
+
default:
unknownOpCodeError(context, executionContext, opPos);
break;
@@ -2649,6 +2690,37 @@
+double
+XPath::functionStringLength(XalanNode* context) const
+{
+ assert(context != 0);
+
+ FormatterStringLengthCounter theCounter;
+
+ DOMServices::getNodeData(*context, theCounter,
&FormatterListener::characters);
+
+ return theCounter.getCount();
+}
+
+
+
+double
+XPath::functionStringLength(
+ XalanNode* context,
+ int opPos,
+ XPathExecutionContext& executionContext) const
+{
+ assert(context != 0);
+
+ FormatterStringLengthCounter theCounter;
+
+ executeMore(context, opPos + 2, executionContext, theCounter,
&FormatterListener::characters);
+
+ return theCounter.getCount();
+}
+
+
+
XPath::eMatchScore
XPath::locationPathPattern(
XPathExecutionContext& executionContext,
@@ -2803,12 +2875,6 @@
queryResults.setDocumentOrder();
}
-// else if (mnl->getReverseDocumentOrder()
== true)
-// {
-// queryResults.swap(*mnl);
-//
-// queryResults.reverse();
-// }
else
{
assert(mnl->getDocumentOrder()
== true);
1.40 +23 -0 xml-xalan/c/src/XPath/XPath.hpp
Index: XPath.hpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XPath/XPath.hpp,v
retrieving revision 1.39
retrieving revision 1.40
diff -u -r1.39 -r1.40
--- XPath.hpp 3 Jan 2003 08:04:24 -0000 1.39
+++ XPath.hpp 3 Jan 2003 21:46:30 -0000 1.40
@@ -1938,6 +1938,29 @@
}
/**
+ * Handle the built-in function "string-length".
+ *
+ * @param context The current source tree context node, which must not
be 0.
+ * @return the result of the function.
+ */
+ double
+ functionStringLength(XalanNode* context) const;
+
+ /**
+ * Handle the built-in function "string-length".
+ *
+ * @param context The current source tree context node, which must not
be 0.
+ * @param opPos The current position in the m_opMap array.
+ * @param executionContext current execution context
+ * @return the result of the function.
+ */
+ double
+ functionStringLength(
+ XalanNode* context,
+ int opPos,
+ XPathExecutionContext& executionContext) const;
+
+ /**
* Get a numeric operand for an expression.
* @param context The current source tree context node.
* @param opPos The current position in the m_opMap array.
1.68 +1 -0 xml-xalan/c/src/XPath/XPathProcessorImpl.cpp
Index: XPathProcessorImpl.cpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XPath/XPathProcessorImpl.cpp,v
retrieving revision 1.67
retrieving revision 1.68
diff -u -r1.67 -r1.68
--- XPathProcessorImpl.cpp 3 Jan 2003 08:04:24 -0000 1.67
+++ XPathProcessorImpl.cpp 3 Jan 2003 21:46:31 -0000 1.68
@@ -3330,6 +3330,7 @@
{ XPathProcessorImpl::s_commentString,
XPathExpression::eNODETYPE_COMMENT },
{ XPathProcessorImpl::s_positionString,
XPathExpression::eOP_FUNCTION_POSITION },
{ XPathFunctionTable::s_localName,
XPathExpression::eOP_FUNCTION_LOCALNAME_0 },
+ { XPathFunctionTable::s_stringLength,
XPathExpression::eOP_FUNCTION_STRINGLENGTH_0 },
{ XPathProcessorImpl::s_piString, XPathExpression::eNODETYPE_PI },
};
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]