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 2003/01/03 22:46:35 UTC

cvs commit: xml-xalan/c/src/XPath XPath.cpp XPath.hpp XPathProcessorImpl.cpp

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: xalan-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xalan-cvs-help@xml.apache.org