You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xalan.apache.org by au...@locus.apache.org on 2000/11/06 20:34:52 UTC

cvs commit: xml-xalan/c/src/XPath Function.hpp FunctionBoolean.hpp FunctionCeiling.hpp FunctionContains.hpp FunctionCount.hpp FunctionDoc.hpp FunctionFalse.hpp FunctionFloor.hpp FunctionID.hpp FunctionLast.hpp FunctionNot.hpp FunctionNumber.hpp FunctionPosition.hpp FunctionRound.hpp FunctionStartsWith.hpp FunctionString.hpp FunctionStringLength.hpp FunctionTrue.hpp XPath.cpp XPathException.hpp XPathExecutionContext.hpp XPathFunctionTable.cpp

auriemma    00/11/06 11:34:46

  Modified:    c/src/XPath Function.hpp FunctionBoolean.hpp
                        FunctionCeiling.hpp FunctionContains.hpp
                        FunctionCount.hpp FunctionDoc.hpp FunctionFalse.hpp
                        FunctionFloor.hpp FunctionID.hpp FunctionLast.hpp
                        FunctionNot.hpp FunctionNumber.hpp
                        FunctionPosition.hpp FunctionRound.hpp
                        FunctionStartsWith.hpp FunctionString.hpp
                        FunctionStringLength.hpp FunctionTrue.hpp XPath.cpp
                        XPathException.hpp XPathExecutionContext.hpp
                        XPathFunctionTable.cpp
  Log:
  Modified XSLT Functions so they are called with a specific number of arguments.
  
  Revision  Changes    Path
  1.6       +101 -7    xml-xalan/c/src/XPath/Function.hpp
  
  Index: Function.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XPath/Function.hpp,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- Function.hpp	2000/08/10 18:37:29	1.5
  +++ Function.hpp	2000/11/06 19:33:03	1.6
  @@ -64,6 +64,12 @@
   
   
   
  +#include <XPath/XObject.hpp>
  +#include <XPath/XObjectFactory.hpp>
  +#include <XPath/XPathExecutionContext.hpp>
  +
  +
  +
   #include <vector>
   
   
  @@ -88,11 +94,7 @@
   	{
   	}
   
  -#if defined(XALAN_NO_NAMESPACES)
  -	typedef vector<const XObject*>			XObjectArgVectorType;
  -#else
  -	typedef std::vector<const XObject*>		XObjectArgVectorType;
  -#endif
  +	typedef XPathExecutionContext::XObjectArgVectorType	XObjectArgVectorType;
   
   	/**
   	 * Execute an XPath function object.  The function must return a valid
  @@ -108,10 +110,91 @@
   	execute(
   			XPathExecutionContext&			executionContext,
   			XalanNode*						context,
  -			int								opPos,
  -			const XObjectArgVectorType&		args) = 0;
  +			int								/* opPos */,
  +			const XObjectArgVectorType&		/* args */)
  +	{
  +		executionContext.error(getError(), context);
  +		return 0;
  +	}
  +
  +	/**
  +	 * Execute an XPath function object.  The function must return a valid
  +	 * object. Called if function has no parameters.
  +	 *
  +	 * @param executionContext executing context
  +	 * @param context          current context node	 
  +	 * @return                 pointer to the result XObject
  +	 */
  +	virtual XObject*
  +	execute(
  +			XPathExecutionContext&			executionContext,
  +			XalanNode*						context)
  +	{
  +		executionContext.error(getError(), context);
  +		return 0;
  +	}
  +
  +	/**
  +	 * Execute an XPath function object.  The function must return a valid
  +	 * object. Called if function has one parameter.
  +	 *
  +	 * @param executionContext executing context
  +	 * @param context          current context node
  +	 * @param arg1             pointer to XObject arguments
  +	 * @return                 pointer to the result XObject
  +	 */
  +	virtual XObject*
  +	execute(
  +			XPathExecutionContext&			executionContext,
  +			XalanNode*						context,			
  +			const XObject*					/* arg1 */)
  +	{
  +		executionContext.error(getError(), context);
  +		return 0;
  +	}
  +
  +	/**
  +	 * Execute an XPath function object.  The function must return a valid
  +	 * object. Called if function has two parameters.
  +	 *
  +	 * @param executionContext executing context
  +	 * @param context          current context node
  +	 * @param arg1             pointer to XObject arguments
  +	 * @return                 pointer to the result XObject
  +	 */
  +	virtual XObject*
  +	execute(
  +			XPathExecutionContext&			executionContext,
  +			XalanNode*						context,			
  +			const XObject*					/* arg1 */,
  +			const XObject*					/* arg2 */)
  +	{
  +		executionContext.error(getError(), context);
  +		return 0;
  +	}
   
   	/**
  +	 * Execute an XPath function object.  The function must return a valid
  +	 * object. Called if function has three parameters.
  +	 *
  +	 * @param executionContext executing context
  +	 * @param context          current context node
  +	 * @param arg1             pointer to XObject arguments
  +	 * @return                 pointer to the result XObject
  +	 */
  +	virtual XObject*
  +	execute(
  +			XPathExecutionContext&			executionContext,
  +			XalanNode*						context,			
  +			const XObject*					/* arg1 */,
  +			const XObject*					/* arg2 */,
  +			const XObject*					/* arg3 */)
  +	{
  +		executionContext.error(getError(), context);
  +		return 0;
  +	}
  +
  +	/**
   	 * Create a copy of the function object.
   	 *
   	 * @return pointer to the new object
  @@ -121,6 +204,17 @@
   
   private:
   
  +	/**
  +	 * Create a copy of the function object.
  +	 *
  +	 * @return string function name
  +	 */
  +	virtual const XalanDOMString
  +	getError() const
  +	{
  +		return "Unknown function called.";
  +	}
  +	
   	// Not implemented...
   	Function&
   	operator=(const Function&);
  
  
  
  1.5       +11 -30    xml-xalan/c/src/XPath/FunctionBoolean.hpp
  
  Index: FunctionBoolean.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XPath/FunctionBoolean.hpp,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- FunctionBoolean.hpp	2000/04/11 14:46:04	1.4
  +++ FunctionBoolean.hpp	2000/11/06 19:33:06	1.5
  @@ -64,61 +64,42 @@
   
   
   
  -#include <vector>
  -
  -
  -
   // Base class header file...
   #include <XPath/Function.hpp>
   
   
   
  -#include <XPath/XObject.hpp>
  -#include <XPath/XObjectFactory.hpp>
  -#include <XPath/XPathExecutionContext.hpp>
  -
  -
  -
   /**
    * XPath implementation of "boolean" function.
    */
  -//
  -// These are all inline, even though
  -// there are virtual functions, because we expect that they will only be
  -// needed by the XPath class.
   class XALAN_XPATH_EXPORT FunctionBoolean : public Function
   {
   public:
   
  +	FunctionBoolean();
  +
  +	virtual
  +	~FunctionBoolean();
  +
   	// These methods are inherited from Function ...
   
   	virtual XObject*
   	execute(
   			XPathExecutionContext&			executionContext,
  -			XalanNode*						context,
  -			int								/* opPos */,
  -			const XObjectArgVectorType&		args)
  -	{
  -		if(args.size() != 1)
  -		{
  -			executionContext.error("The boolean() function takes one argument!",
  -								   context);
  -		}
  +			XalanNode*						context,			
  +			const XObject*					arg1);
   
  -		return executionContext.getXObjectFactory().createBoolean(args[0]->boolean());
  -	}
  -
   #if defined(XALAN_NO_COVARIANT_RETURN_TYPE)
   	virtual Function*
   #else
   	virtual FunctionBoolean*
   #endif
  -	clone() const
  -	{
  -		return new FunctionBoolean(*this);
  -	}
  +	clone() const;
   
   private:
  +
  +	virtual const XalanDOMString
  +	getError() const;
   
   	// Not implemented...
   	FunctionBoolean&
  
  
  
  1.5       +11 -26    xml-xalan/c/src/XPath/FunctionCeiling.hpp
  
  Index: FunctionCeiling.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XPath/FunctionCeiling.hpp,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- FunctionCeiling.hpp	2000/04/11 14:46:04	1.4
  +++ FunctionCeiling.hpp	2000/11/06 19:33:07	1.5
  @@ -65,7 +65,6 @@
   
   
   #include <cmath>
  -#include <vector>
   
   
   
  @@ -74,51 +73,37 @@
   
   
   
  -#include <XPath/XObjectFactory.hpp>
  -#include <XPath/XPathExecutionContext.hpp>
  -
  -
  -
   /**
    * XPath implementation of "ceiling" function.
    */
  -//
  -// These are all inline, even though
  -// there are virtual functions, because we expect that they will only be
  -// needed by the XPath class.
   class XALAN_XPATH_EXPORT FunctionCeiling : public Function
   {
   public:
   
  +	FunctionCeiling();
  +
  +	virtual
  +	~FunctionCeiling();
  +
   	// These methods are inherited from Function ...
   
   	virtual XObject*
   	execute(
   			XPathExecutionContext&			executionContext,
  -			XalanNode*						context,
  -			int								/* opPos */,
  -			const XObjectArgVectorType&		args)
  -	{
  -		if (args.size() != 1)
  -		{
  -			executionContext.error("The ceiling() function takes one argument!",
  -								   context);
  -		}
  -
  -		return executionContext.getXObjectFactory().createNumber(ceil(args[0]->num()));
  -	}
  +			XalanNode*						context,			
  +			const XObject*					arg1);
   
   #if defined(XALAN_NO_COVARIANT_RETURN_TYPE)
   	virtual Function*
   #else
   	virtual FunctionCeiling*
   #endif
  -	clone() const
  -	{
  -		return new FunctionCeiling(*this);
  -	}
  +	clone() const;
   
   private:
  +
  +	virtual const XalanDOMString
  +	getError() const;
   
   	// Not implemented...
   	FunctionCeiling&
  
  
  
  1.8       +12 -57    xml-xalan/c/src/XPath/FunctionContains.hpp
  
  Index: FunctionContains.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XPath/FunctionContains.hpp,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- FunctionContains.hpp	2000/09/19 14:53:45	1.7
  +++ FunctionContains.hpp	2000/11/06 19:33:09	1.8
  @@ -64,88 +64,43 @@
   
   
   
  -#include <vector>
  -
  -
  -
  -#include <PlatformSupport/DOMStringHelper.hpp>
  -
  -
  -
   // Base class header file...
   #include <XPath/Function.hpp>
   
   
   
  -#include <XPath/XObject.hpp>
  -#include <XPath/XObjectFactory.hpp>
  -#include <XPath/XPathExecutionContext.hpp>
  -
  -
  -
   /**
    * XPath implementation of "contains" function.
    */
  -//
  -// These are all inline, even though
  -// there are virtual functions, because we expect that they will only be
  -// needed by the XPath class.
   class XALAN_XPATH_EXPORT FunctionContains : public Function
   {
   public:
   
  +	FunctionContains();
  +
  +	virtual
  +	~FunctionContains();
  +
   	// These methods are inherited from Function ...
   
   	virtual XObject*
   	execute(
   			XPathExecutionContext&			executionContext,
  -			XalanNode*						context,
  -			int								/* opPos */,
  -			const XObjectArgVectorType&		args)
  -	{
  -		if(args.size() != 2)
  -		{
  -			executionContext.error("The contains() function takes two arguments!",
  -								   context);
  -		}
  -
  -		const XalanDOMString&	arg1 = args[0]->str();
  -		const XalanDOMString&	arg2 = args[1]->str();
  -
  -		bool					fResult = true;
  -
  -		// If arg2 is empty, then don't bother to check anything.
  -		if (isEmpty(arg2) == false)
  -		{
  -			// Is arg1 empty?
  -			if (isEmpty(arg1) == true)
  -			{
  -				fResult = false;
  -			}
  -			else
  -			{
  -				// OK, both strings have some data, so look for
  -				// the index...
  -				const unsigned int		theIndex = indexOf(arg1, arg2);
  -
  -				fResult = theIndex < length(arg1) ? true : false;
  -			}
  -		}
  -
  -		return executionContext.getXObjectFactory().createBoolean(fResult);
  -	}
  +			XalanNode*						context,			
  +			const XObject*					arg1,
  +			const XObject*					arg2);
   
   #if defined(XALAN_NO_COVARIANT_RETURN_TYPE)
   	virtual Function*
   #else
   	virtual FunctionContains*
   #endif
  -	clone() const
  -	{
  -		return new FunctionContains(*this);
  -	}
  +	clone() const;
   
   private:
  +
  +	virtual const XalanDOMString
  +	getError() const;
   
   	// Not implemented...
   	FunctionContains&
  
  
  
  1.5       +12 -34    xml-xalan/c/src/XPath/FunctionCount.hpp
  
  Index: FunctionCount.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XPath/FunctionCount.hpp,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- FunctionCount.hpp	2000/04/11 14:46:05	1.4
  +++ FunctionCount.hpp	2000/11/06 19:33:12	1.5
  @@ -64,65 +64,43 @@
   
   
   
  -#include <vector>
  -
  -
  -
   // Base class header file...
   #include <XPath/Function.hpp>
   
   
   
  -#include <XPath/NodeRefListBase.hpp>
  -#include <XPath/XObject.hpp>
  -#include <XPath/XObjectFactory.hpp>
  -#include <XPath/XPathExecutionContext.hpp>
  -
  -
  -
   /**
    * XPath implementation of "count" function.
    */
  -//
  -// These are all inline, even though
  -// there are virtual functions, because we expect that they will only be
  -// needed by the XPath class.
   class XALAN_XPATH_EXPORT FunctionCount : public Function
   {
   public:
   
  +	FunctionCount();
  +
  +	virtual
  +	~FunctionCount();
  +
   	// These methods are inherited from Function ...
   
   	virtual XObject*
   	execute(
   			XPathExecutionContext&			executionContext,
  -			XalanNode*						context,
  -			int								/* opPos */,
  -			const XObjectArgVectorType&		args)
  -	{
  -		if(args.size() != 1)
  -		{
  -			executionContext.error("The count() function takes one argument!",
  -								   context);
  -		}
  -
  -		const NodeRefListBase&	theNodeList = args[0]->nodeset();
  +			XalanNode*						context,			
  +			const XObject*					arg1);
   
  -		return executionContext.getXObjectFactory().createNumber(theNodeList.getLength());
  -	}
  -
   #if defined(XALAN_NO_COVARIANT_RETURN_TYPE)
   	virtual Function*
   #else
   	virtual FunctionCount*
   #endif
  -	clone() const
  -	{
  -		return new FunctionCount(*this);
  -	}
  +	clone() const;
   
   private:
   
  +	virtual const XalanDOMString
  +	getError() const;
  +
   	// Not implemented...
   	FunctionCount&
   	operator=(const FunctionCount&);
  @@ -133,4 +111,4 @@
   
   
   
  -#endif	// FUNCTIONCOUNT_HEADER_GUARD_1357924680
  +#endif	// FUNCTIONCOUNT_HEADER_GUARD_1357924680
  \ No newline at end of file
  
  
  
  1.4       +0 -6      xml-xalan/c/src/XPath/FunctionDoc.hpp
  
  Index: FunctionDoc.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XPath/FunctionDoc.hpp,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- FunctionDoc.hpp	2000/03/03 19:00:13	1.3
  +++ FunctionDoc.hpp	2000/11/06 19:33:14	1.4
  @@ -76,12 +76,6 @@
   #include <XPath/Function.hpp>
   
   
  -#include <XPath/XObject.hpp>
  -#include <XPath/XObjectFactory.hpp>
  -#include <XPath/XPathExecutionContext.hpp>
  -
  -
  -
   /**
    * XPath implementation of "document" function.
    */
  
  
  
  1.5       +10 -29    xml-xalan/c/src/XPath/FunctionFalse.hpp
  
  Index: FunctionFalse.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XPath/FunctionFalse.hpp,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- FunctionFalse.hpp	2000/04/11 14:46:05	1.4
  +++ FunctionFalse.hpp	2000/11/06 19:33:16	1.5
  @@ -64,60 +64,41 @@
   
   
   
  -#include <vector>
  -
  -
  -
   // Base class header file...
   #include <XPath/Function.hpp>
   
   
   
  -#include <XPath/XObjectFactory.hpp>
  -#include <XPath/XPathExecutionContext.hpp>
  -
  -
  -
   /**
    * XPath implementation of "false" function.
    */
  -//
  -// These are all inline, even though
  -// there are virtual functions, because we expect that they will only be
  -// needed by the XPath class.
   class XALAN_XPATH_EXPORT FunctionFalse : public Function
   {
   public:
   
  +	FunctionFalse();
  +
  +	virtual
  +	~FunctionFalse();
  +
   	// These methods are inherited from Function ...
   
   	virtual XObject*
   	execute(
   			XPathExecutionContext&			executionContext,
  -			XalanNode*						context,
  -			int								/* opPos */,
  -			const XObjectArgVectorType&		args)
  -	{
  -		if(args.size() > 0)
  -		{
  -			executionContext.error("The false() function does not accept arguments!",
  -								   context);
  -		}
  +			XalanNode*						context);
   
  -		return executionContext.getXObjectFactory().createBoolean(false);
  -	}
  -
   #if defined(XALAN_NO_COVARIANT_RETURN_TYPE)
   	virtual Function*
   #else
   	virtual FunctionFalse*
   #endif
  -	clone() const
  -	{
  -		return new FunctionFalse(*this);
  -	}
  +	clone() const;
   
   private:
  +
  +	virtual const XalanDOMString
  +	getError() const;
   
   	// Not implemented...
   	FunctionFalse&
  
  
  
  1.5       +11 -27    xml-xalan/c/src/XPath/FunctionFloor.hpp
  
  Index: FunctionFloor.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XPath/FunctionFloor.hpp,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- FunctionFloor.hpp	2000/04/11 14:46:05	1.4
  +++ FunctionFloor.hpp	2000/11/06 19:33:18	1.5
  @@ -65,7 +65,6 @@
   
   
   #include <cmath>
  -#include <vector>
   
   
   
  @@ -74,52 +73,37 @@
   
   
   
  -#include <XPath/XObject.hpp>
  -#include <XPath/XObjectFactory.hpp>
  -#include <XPath/XPathExecutionContext.hpp>
  -
  -
  -
   /**
    * XPath implementation of "floor" function.
    */
  -//
  -// These are all inline, even though
  -// there are virtual functions, because we expect that they will only be
  -// needed by the XPath class.
   class XALAN_XPATH_EXPORT FunctionFloor : public Function
   {
   public:
   
  +	FunctionFloor();
  +
  +	virtual
  +	~FunctionFloor();
  +
   	// These methods are inherited from Function ...
   
   	virtual XObject*
   	execute(
   			XPathExecutionContext&			executionContext,
  -			XalanNode*						context,
  -			int								/* opPos */,
  -			const XObjectArgVectorType&		args)
  -	{
  -		if (args.size() != 1)
  -		{
  -			executionContext.error("The floor() function takes one argument!",
  -								   context);
  -		}
  -
  -		return executionContext.getXObjectFactory().createNumber(floor(args[0]->num()));
  -	}
  +			XalanNode*						context,			
  +			const XObject*					arg1);
   
   #if defined(XALAN_NO_COVARIANT_RETURN_TYPE)
   	virtual Function*
   #else
   	virtual FunctionFloor*
   #endif
  -	clone() const
  -	{
  -		return new FunctionFloor(*this);
  -	}
  +	clone() const;
   
   private:
  +
  +	virtual const XalanDOMString
  +	getError() const;
   
   	// Not implemented...
   	FunctionFloor&
  
  
  
  1.17      +11 -108   xml-xalan/c/src/XPath/FunctionID.hpp
  
  Index: FunctionID.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XPath/FunctionID.hpp,v
  retrieving revision 1.16
  retrieving revision 1.17
  diff -u -r1.16 -r1.17
  --- FunctionID.hpp	2000/11/02 22:25:46	1.16
  +++ FunctionID.hpp	2000/11/06 19:33:20	1.17
  @@ -53,8 +53,6 @@
    * Business Machines, Inc., http://www.ibm.com.  For more
    * information on the Apache Software Foundation, please see
    * <http://www.apache.org/>.
  - *
  - * @author <a href="mailto:david_n_bertoni@lotus.com">David N. Bertoni</a>
    */
   #if !defined(FUNCTIONID_HEADER_GUARD_1357924680)
   #define FUNCTIONID_HEADER_GUARD_1357924680
  @@ -84,139 +82,41 @@
   
   #include <PlatformSupport/DOMStringHelper.hpp>
   #include <PlatformSupport/StringTokenizer.hpp>
  -#include <PlatformSupport/XalanUnicode.hpp>
   
   
   
   #include <XPath/MutableNodeRefList.hpp>
   #include <XPath/NodeRefListBase.hpp>
  -#include <XPath/XObject.hpp>
  -#include <XPath/XObjectFactory.hpp>
  -#include <XPath/XPathExecutionContext.hpp>
   
   
   
   /**
    * XPath implementation of "id" function.
    */
  -//
  -// These are all inline, even though
  -// there are virtual functions, because we expect that they will only be
  -// needed by the XPath class.
   class XALAN_XPATH_EXPORT FunctionID : public Function
   {
   public:
   
  -	FunctionID() :
  -		Function()
  -	{
  -	}
  +	FunctionID();
  +
  +	virtual
  +	~FunctionID();
   
   	// These methods are inherited from Function ...
   
   	virtual XObject*
   	execute(
   			XPathExecutionContext&			executionContext,
  -			XalanNode*						context,
  -			int								/* opPos */,
  -			const XObjectArgVectorType&		args)
  -	{
  -		if (args.size() != 1)
  -		{
  -			executionContext.error("The id() function takes one argument!",
  -								   context);
  -		}
  -		else if (context == 0)
  -		{
  -			executionContext.error("The id() function requires a non-null context node!",
  -								   context);
  -		}
  -
  -		assert(args[0] != 0);
  -
  -		// Do the callback to get the data.
  -		FunctionIDXObjectTypeCallback	theCallback(executionContext);
  -
  -		const XalanDOMString	theResultString =
  -			theCallback.processCallback(*args[0]);
  -
  -		// Get the context document, so we can search for nodes.
  -		const XalanDocument* const	theDocContext = context->getNodeType() == XalanNode::DOCUMENT_NODE ?
  -#if defined(XALAN_OLD_STYLE_CASTS)
  -										(const XalanDocument*)context :
  -#else
  -										static_cast<const XalanDocument*>(context) :
  -#endif
  -										context->getOwnerDocument();
  -		assert(theDocContext != 0);
  -
  -		typedef XPathExecutionContext::BorrowReturnMutableNodeRefList	BorrowReturnMutableNodeRefList;
  -
  -		// This list will hold the nodes we find.
  -
  -		BorrowReturnMutableNodeRefList	theNodeList(executionContext);
  +			XalanNode*						context,			
  +			const XObject*					arg1);
   
  -		// If there is no context, we cannot continue.
  -		if(0 == theDocContext)
  -		{
  -			executionContext.error("The context node does not have an owner document!",
  -								   context);
  -        }
  -		else if (length(theResultString) > 0)
  -		{
  -#if defined(XALAN_NO_NAMESPACES)
  -			typedef set<XalanDOMString, less<XalanDOMString> >	TokenSetType;
  -#else
  -			typedef std::set<XalanDOMString>	TokenSetType;
  -#endif
  -
  -			// This set will hold tokens that we've previously found, so
  -			// we can avoid looking more than once.
  -			TokenSetType		thePreviousTokens;
  -
  -			StringTokenizer		theTokenizer(theResultString);
  -
  -			// Parse the result string...
  -			while(theTokenizer.hasMoreTokens() == true)
  -			{
  -				const XalanDOMString	theToken = theTokenizer.nextToken();
  -
  -				if (length(theToken) > 0)
  -				{
  -					// See if we've already seen this one...
  -					TokenSetType::const_iterator	i =
  -						thePreviousTokens.find(theToken);
  -
  -					if (i == thePreviousTokens.end())
  -					{
  -						thePreviousTokens.insert(theToken);
  -
  -						XalanNode* const	theNode =
  -							executionContext.getElementByID(theToken, *theDocContext);
  -
  -						if (theNode != 0)
  -						{
  -							theNodeList->addNodeInDocOrder(theNode, executionContext);
  -						}
  -					}
  -				}
  -			}
  -		}
  -
  -		return executionContext.getXObjectFactory().createNodeSet(theNodeList);
  -	}
  -
   #if defined(XALAN_NO_COVARIANT_RETURN_TYPE)
   	virtual Function*
   #else
   	virtual FunctionID*
   #endif
  -	clone() const
  -	{
  -		return new FunctionID(*this);
  -	}
  +	clone() const;
   
  -
   private:
   
   	class FunctionIDXObjectTypeCallback : public XObjectTypeCallback
  @@ -285,7 +185,7 @@
   			{
   				m_executionContext.getNodeData(*theValue.item(i), m_resultString);
   
  -				append(m_resultString, XalanDOMChar(XalanUnicode::charSpace));
  +				append(m_resultString, XalanDOMChar(XalanUnicode::charSpace));			
   			}
   		}
   
  @@ -306,6 +206,9 @@
   
   		XPathExecutionContext&	m_executionContext;
   	};
  +
  +	virtual const XalanDOMString
  +	getError() const;
   
   	// Not implemented...
   	FunctionID&
  
  
  
  1.5       +11 -32    xml-xalan/c/src/XPath/FunctionLast.hpp
  
  Index: FunctionLast.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XPath/FunctionLast.hpp,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- FunctionLast.hpp	2000/04/11 14:46:06	1.4
  +++ FunctionLast.hpp	2000/11/06 19:33:21	1.5
  @@ -64,63 +64,42 @@
   
   
   
  -#include <vector>
  -
  -
  -
   // Base class header file...
   #include <XPath/Function.hpp>
   
   
   
  -#include <XPath/XObject.hpp>
  -#include <XPath/XObjectFactory.hpp>
  -#include <XPath/XPathExecutionContext.hpp>
  -
  -
  -
   /**
    * XPath implementation of "last" function.
    */
  -//
  -// These are all inline, even though
  -// there are virtual functions, because we expect that they will only be
  -// needed by the XPath class.
   class XALAN_XPATH_EXPORT FunctionLast : public Function
   {
   public:
   
  +	
  +	FunctionLast();
  +
  +	virtual
  +	~FunctionLast();
  +
   	// These methods are inherited from Function ...
   
   	virtual XObject*
   	execute(
   			XPathExecutionContext&			executionContext,
  -			XalanNode*						context,
  -			int								/* opPos */,
  -			const XObjectArgVectorType&		args)
  -	{
  -		if (args.size() != 0)
  -		{
  -			executionContext.error("The last() function takes no arguments!",
  -								   context);
  -		}
  -
  -		const unsigned int	theValue = executionContext.getContextNodeListLength();
  +			XalanNode*						context);
   
  -		return executionContext.getXObjectFactory().createNumber(theValue);
  -	}
  -
   #if defined(XALAN_NO_COVARIANT_RETURN_TYPE)
   	virtual Function*
   #else
   	virtual FunctionLast*
   #endif
  -	clone() const
  -	{
  -		return new FunctionLast(*this);
  -	}
  +	clone() const;
   
   private:
  +
  +	const XalanDOMString
  +	getError() const;
   
   	// Not implemented...
   	FunctionLast&
  
  
  
  1.5       +11 -34    xml-xalan/c/src/XPath/FunctionNot.hpp
  
  Index: FunctionNot.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XPath/FunctionNot.hpp,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- FunctionNot.hpp	2000/04/11 14:46:07	1.4
  +++ FunctionNot.hpp	2000/11/06 19:33:24	1.5
  @@ -64,65 +64,42 @@
   
   
   
  -#include <vector>
  -
  -
  -
  -#include <PlatformSupport/DOMStringHelper.hpp>
  -
  -
  -
   // Base class header file...
   #include <XPath/Function.hpp>
   
   
   
  -#include <XPath/XObject.hpp>
  -#include <XPath/XObjectFactory.hpp>
  -#include <XPath/XPathExecutionContext.hpp>
  -
  -
  -
   /**
    * XPath implementation of "not" function.
    */
  -//
  -// These are all inline, even though
  -// there are virtual functions, because we expect that they will only be
  -// needed by the XPath class.
   class XALAN_XPATH_EXPORT FunctionNot : public Function
   {
   public:
   
  +	FunctionNot();
  +
  +	virtual
  +	~FunctionNot();
  +
   	// These methods are inherited from Function ...
   
   	virtual XObject*
   	execute(
   			XPathExecutionContext&			executionContext,
  -			XalanNode*						context,
  -			int								/* opPos */,
  -			const XObjectArgVectorType&		args)
  -	{
  -		if(args.size() != 1)
  -		{
  -			executionContext.error("The not() function takes one argument!",
  -								   context);
  -		}
  -
  -		return executionContext.getXObjectFactory().createBoolean(!args[0]->boolean());
  -	}
  +			XalanNode*						context,			
  +			const XObject*					arg1);
   
   #if defined(XALAN_NO_COVARIANT_RETURN_TYPE)
   	virtual Function*
   #else
   	virtual FunctionNot*
   #endif
  -	clone() const
  -	{
  -		return new FunctionNot(*this);
  -	}
  +	clone() const;
   
   private:
  +
  +	virtual const XalanDOMString
  +	getError() const;
   
   	// Not implemented...
   	FunctionNot&
  
  
  
  1.7       +17 -59    xml-xalan/c/src/XPath/FunctionNumber.hpp
  
  Index: FunctionNumber.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XPath/FunctionNumber.hpp,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- FunctionNumber.hpp	2000/08/14 16:33:54	1.6
  +++ FunctionNumber.hpp	2000/11/06 19:33:26	1.7
  @@ -64,89 +64,47 @@
   
   
   
  -#include <vector>
  -
  -
  -
   // Base class header file...
   #include <XPath/Function.hpp>
   
   
   
  -#include <XPath/XObject.hpp>
  -#include <XPath/XObjectFactory.hpp>
  -#include <XPath/XPathExecutionContext.hpp>
  +#include <XPath/NodeRefListBase.hpp>
   
   
   
   /**
    * XPath implementation of "number" function.
    */
  -//
  -// These are all inline, even though
  -// there are virtual functions, because we expect that they will only be
  -// needed by the XPath class.
   class XALAN_XPATH_EXPORT FunctionNumber : public Function
   {
   public:
   
   	// These methods are inherited from Function ...
  +	FunctionNumber();
  +
  +	virtual
  +	~FunctionNumber();
   
  -	virtual XObject*
  +	XObject*
   	execute(
   			XPathExecutionContext&			executionContext,
  -			XalanNode*						context,
  -			int								/* opPos */,
  -			const XObjectArgVectorType&		args)
  -	{
  -		double	theValue = 0.0L;
  -
  -		if (args.size() > 1)
  -		{
  -			executionContext.error("The number() function takes zero arguments or one argument!",
  -								   context);
  -		}
  -		else if (args.size() == 1)
  -		{
  -			theValue = args[0]->num();
  -		}
  -		else if (context == 0)
  -		{
  -			executionContext.error("The number() function requires a non-null context node!",
  -								   context);
  -		}
  -		else
  -		{
  -			// The XPath standard says that if there are no arguments,
  -			// the argument defaults to a node set with the context node
  -			// as the only member.
  -			// So we have to create an XNodeList with the context node as
  -			// the only member and call the num() function on it.  We shroud
  -			// the temporary XNodeList in an XObjectGuard because it can be
  -			// deleted once we've converted the context node to a number.
  -
  -			// An XObject that contains the context node.
  -			XObjectGuard	theXObject(executionContext.getXObjectFactory(),
  -									   executionContext.createNodeSet(*context));
  -
  -			// Get the numeric value of the theXObject...
  -			theValue = theXObject->num();
  -		}
  +			XalanNode*						context,			
  +			const XObject*					arg1);
   
  -		return executionContext.getXObjectFactory().createNumber(theValue);
  -	}
  +	XObject*
  +	execute(
  +			XPathExecutionContext&			executionContext,
  +			XalanNode*						context);	
   
  -#if defined(XALAN_NO_COVARIANT_RETURN_TYPE)
   	virtual Function*
  -#else
  -	virtual FunctionNumber*
  -#endif
  -	clone() const
  -	{
  -		return new FunctionNumber(*this);
  -	}
  +	clone() const;
   
   private:
  +
  +	const XalanDOMString
  +	getError() const;
  +
   
   	// Not implemented...
   	FunctionNumber&
  
  
  
  1.5       +11 -38    xml-xalan/c/src/XPath/FunctionPosition.hpp
  
  Index: FunctionPosition.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XPath/FunctionPosition.hpp,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- FunctionPosition.hpp	2000/04/11 14:46:07	1.4
  +++ FunctionPosition.hpp	2000/11/06 19:33:27	1.5
  @@ -64,68 +64,41 @@
   
   
   
  -#include <vector>
  -
  -
  -
   // Base class header file...
   #include <XPath/Function.hpp>
   
   
   
  -#include <XPath/XObject.hpp>
  -#include <XPath/XObjectFactory.hpp>
  -#include <XPath/XPathExecutionContext.hpp>
  -
  -
  -
   /**
    * XPath implementation of "position" function.
    */
  -//
  -// These are all inline, even though
  -// there are virtual functions, because we expect that they will only be
  -// needed by the XPath class.
   class XALAN_XPATH_EXPORT FunctionPosition : public Function
   {
   public:
   
  +	FunctionPosition();
  +
  +	virtual
  +	~FunctionPosition();
  +
   	// These methods are inherited from Function ...
   
   	virtual XObject*
   	execute(
   			XPathExecutionContext&			executionContext,
  -			XalanNode*						context,
  -			int								/* opPos */,
  -			const XObjectArgVectorType&		args)
  -	{
  -		if (args.size() != 0)
  -		{
  -			executionContext.error("The position() function takes no arguments!",
  -								   context);
  -		}
  -		else if (context == 0)
  -		{
  -			executionContext.error("The position() function requires a non-null context node!",
  -								   context);
  -		}
  -
  -		const unsigned int	theValue = executionContext.getContextNodeListPosition(*context);
  -
  -		return executionContext.getXObjectFactory().createNumber(theValue);
  -	}
  -
  +			XalanNode*						context);
  +	
   #if defined(XALAN_NO_COVARIANT_RETURN_TYPE)
   	virtual Function*
   #else
   	virtual FunctionPosition*
   #endif
  -	clone() const
  -	{
  -		return new FunctionPosition(*this);
  -	}
  +	clone() const;
   
   private:
  +
  +	const XalanDOMString
  +	getError() const;
   
   	// Not implemented...
   	FunctionPosition&
  
  
  
  1.7       +12 -75    xml-xalan/c/src/XPath/FunctionRound.hpp
  
  Index: FunctionRound.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XPath/FunctionRound.hpp,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- FunctionRound.hpp	2000/08/15 19:43:18	1.6
  +++ FunctionRound.hpp	2000/11/06 19:33:32	1.7
  @@ -65,7 +65,6 @@
   
   
   #include <cmath>
  -#include <vector>
   
   
   
  @@ -74,102 +73,40 @@
   
   
   
  -#include <PlatformSupport/DoubleSupport.hpp>
  -
  -
  -
  -#include <XPath/XObject.hpp>
  -#include <XPath/XObjectFactory.hpp>
  -#include <XPath/XPathExecutionContext.hpp>
  -
  -
  -
   /**
    * XPath implementation of "round" function.
    */
  -//
  -// These are all inline, even though
  -// there are virtual functions, because we expect that they will only be
  -// needed by the XPath class.
   class XALAN_XPATH_EXPORT FunctionRound : public Function
   {
   public:
   
  +	FunctionRound();
  +
  +	virtual
  +	~FunctionRound();
  +
   	// These methods are inherited from Function ...
   
   	virtual XObject*
   	execute(
   			XPathExecutionContext&			executionContext,
  -			XalanNode*						context,
  -			int								/* opPos */,
  -			const XObjectArgVectorType&		args)
  -	{
  -		if (args.size() != 1)
  -		{
  -			executionContext.error("The round() function takes one argument!",
  -								   context);
  -		}
  -
  -		const double	theValue = args[0]->num();
  +			XalanNode*						context,			
  +			const XObject*					arg1);
   
  -		return executionContext.getXObjectFactory().createNumber(getRoundedValue(theValue));
  -	}
  -
   #if defined(XALAN_NO_COVARIANT_RETURN_TYPE)
   	virtual Function*
   #else
   	virtual FunctionRound*
   #endif
  -	clone() const
  -	{
  -		return new FunctionRound(*this);
  -	}
  +	clone() const;
   
   	static double
  -	getRoundedValue(double	theValue)
  -	{
  -		if (DoubleSupport::isNaN(theValue))
  -		{
  -			return DoubleSupport::getNaN();
  -		}
  -		else if (DoubleSupport::isPositiveInfinity(theValue))
  -		{
  -			return DoubleSupport::getPositiveInfinity();
  -		}
  -		if (DoubleSupport::isNegativeInfinity(theValue))
  -		{
  -			return DoubleSupport::getNegativeInfinity();
  -		}
  -		else if (theValue == 0)
  -		{
  -			return 0.0;
  -		}
  -		else if (theValue > 0)
  -		{
  -			return long(theValue + 0.5);
  -		}
  -		else
  -		{
  -			// Negative numbers are a special case.  Any time we
  -			// have -0.5 as the fractional part, we have to
  -			// round up (toward 0), rather than down.
  -			double			intPart = 0;
  -
  -			const double	fracPart = modf(theValue, &intPart);
  -
  -			if (fracPart == -0.5)
  -			{
  -				// special case -- we have have to round toward 0...
  -				return long(theValue + 0.5);
  -			}
  -			else
  -			{
  -				return long(theValue - 0.5);
  -			}
  -		}
  -	}
  +	getRoundedValue(double	theValue);
   
   private:
  +
  +	virtual const XalanDOMString
  +	getError() const;
   
   	// Not implemented...
   	FunctionRound&
  
  
  
  1.5       +12 -37    xml-xalan/c/src/XPath/FunctionStartsWith.hpp
  
  Index: FunctionStartsWith.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XPath/FunctionStartsWith.hpp,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- FunctionStartsWith.hpp	2000/04/11 14:46:08	1.4
  +++ FunctionStartsWith.hpp	2000/11/06 19:33:34	1.5
  @@ -64,68 +64,43 @@
   
   
   
  -#include <vector>
  -
  -
  -
  -#include <PlatformSupport/DOMStringHelper.hpp>
  -
  -
  -
   // Base class header file...
   #include <XPath/Function.hpp>
   
   
   
  -#include <XPath/XObject.hpp>
  -#include <XPath/XObjectFactory.hpp>
  -#include <XPath/XPathExecutionContext.hpp>
  -
  -
  -
   /**
    * XPath implementation of "starts-with" function.
    */
  -//
  -// These are all inline, even though
  -// there are virtual functions, because we expect that they will only be
  -// needed by the XPath class.
   class XALAN_XPATH_EXPORT FunctionStartsWith : public Function
   {
   public:
   
  +	FunctionStartsWith();
  +
  +	virtual
  +	~FunctionStartsWith();
  +
   	// These methods are inherited from Function ...
   
   	virtual XObject*
   	execute(
   			XPathExecutionContext&			executionContext,
  -			XalanNode*						context,
  -			int								/* opPos */,
  -			const XObjectArgVectorType&		args)
  -	{
  -		if(args.size() != 2)
  -		{
  -			executionContext.error("The starts-with() function takes one argument!",
  -								   context);
  -		}
  +			XalanNode*						context,			
  +			const XObject*					arg1,
  +			const XObject*					arg2);
   
  -		const bool	fStartsWith = startsWith(args[0]->str(),
  -											 args[1]->str());
  -
  -		return executionContext.getXObjectFactory().createBoolean(fStartsWith);
  -	}
  -
   #if defined(XALAN_NO_COVARIANT_RETURN_TYPE)
   	virtual Function*
   #else
   	virtual FunctionStartsWith*
   #endif
  -	clone() const
  -	{
  -		return new FunctionStartsWith(*this);
  -	}
  +	clone() const;
   
   private:
  +
  +	virtual const XalanDOMString
  +	getError() const;
   
   	// Not implemented...
   	FunctionStartsWith&
  
  
  
  1.8       +19 -58    xml-xalan/c/src/XPath/FunctionString.hpp
  
  Index: FunctionString.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XPath/FunctionString.hpp,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- FunctionString.hpp	2000/09/19 14:54:06	1.7
  +++ FunctionString.hpp	2000/11/06 19:33:36	1.8
  @@ -68,86 +68,47 @@
   
   
   
  -#include <PlatformSupport/DOMStringHelper.hpp>
  -
  -
  -
   // Base class header file...
  -#include <XPath/FunctionDefaultStringArgument.hpp>
  +#include <XPath/Function.hpp>
   
   
   
  -#include <XPath/XObject.hpp>
  -#include <XPath/XObjectFactory.hpp>
  -#include <XPath/XPathExecutionContext.hpp>
  +#include <XPath/NodeRefListBase.hpp>
   
   
   
   /**
    * XPath implementation of "string" function.
    */
  -//
  -// These are all inline, even though
  -// there are virtual functions, because we expect that they will only be
  -// needed by the XPath class.
  -class XALAN_XPATH_EXPORT FunctionString : public FunctionDefaultStringArgument
  +class XALAN_XPATH_EXPORT FunctionString : public Function
   {
   public:
   
   	// These methods are inherited from Function ...
  +	FunctionString();
   
  -	virtual XObject*
  +	virtual
  +	~FunctionString();
  +
  +	XObject*
   	execute(
   			XPathExecutionContext&			executionContext,
  -			XalanNode*						context,
  -			int								/* opPos */,
  -			const XObjectArgVectorType&		args)
  -	{
  -		XObject*		theResult = 0;
  -
  -		const XObjectArgVectorType::size_type	theSize = args.size();
  -
  -		if(theSize > 1)
  -		{
  -			executionContext.error("The string() function takes zero or one argument!",
  -								   context);
  -		}
  -		else if(theSize == 0)
  -		{
  -			if (context == 0)
  -			{
  -				executionContext.error("The string() function requires a non-null context node!",
  -									   context);
  -			}
  -			else
  -			{
  -				theResult = executionContext.getXObjectFactory().createString(
  -									getDefaultStringArgument(
  -											executionContext,
  -											*context));
  -			}
  -		}
  -		else
  -		{
  -			assert(args[0] != 0);
  -
  -			theResult = executionContext.getXObjectFactory().createString(args[0]->str());
  -		}
  +			XalanNode*						context,			
  +			const XObject*					arg1);
   
  -		return theResult;
  -	}
  +	XObject*
  +	execute(
  +			XPathExecutionContext&			executionContext,
  +			XalanNode*						context);	
   
  -#if defined(XALAN_NO_COVARIANT_RETURN_TYPE)
   	virtual Function*
  -#else
  -	virtual FunctionString*
  -#endif
  -	clone() const
  -	{
  -		return new FunctionString(*this);
  -	}
  +	clone() const;
   
   private:
  +
  +	const XalanDOMString
  +	getError() const;
  +
   
   	// Not implemented...
   	FunctionString&
  
  
  
  1.7       +19 -55    xml-xalan/c/src/XPath/FunctionStringLength.hpp
  
  Index: FunctionStringLength.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XPath/FunctionStringLength.hpp,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- FunctionStringLength.hpp	2000/09/19 14:54:20	1.6
  +++ FunctionStringLength.hpp	2000/11/06 19:33:38	1.7
  @@ -64,83 +64,47 @@
   
   
   
  -#include <PlatformSupport/DOMStringHelper.hpp>
  -
  -
  -
   // Base class header file...
  -#include <XPath/FunctionDefaultStringArgument.hpp>
  +#include <XPath/Function.hpp>
   
   
   
   #include <XPath/NodeRefListBase.hpp>
  -#include <XPath/XObject.hpp>
  -#include <XPath/XObjectFactory.hpp>
  -#include <XPath/XPathExecutionContext.hpp>
   
   
   
   /**
    * XPath implementation of "string-length" function.
    */
  -//
  -// These are all inline, even though
  -// there are virtual functions, because we expect that they will only be
  -// needed by the XPath class.
  -class XALAN_XPATH_EXPORT FunctionStringLength : public FunctionDefaultStringArgument
  +class XALAN_XPATH_EXPORT FunctionStringLength : public Function
   {
   public:
  +
  +	// These methods are inherited from Function ...
  +	FunctionStringLength();
   
  -	// These methods are inherited from FunctionDefaultStringArgument ...
  +	virtual
  +	~FunctionStringLength();
   
  -	virtual XObject*
  +	XObject*
   	execute(
   			XPathExecutionContext&			executionContext,
  -			XalanNode*						context,
  -			int								/* opPos */,
  -			const XObjectArgVectorType&		args)
  -	{
  -		const XObjectArgVectorType::size_type	theSize = args.size();
  -
  -		unsigned int	theLength = 0;
  -
  -		if(theSize == 0)
  -		{
  -			if (context == 0)
  -			{
  -				executionContext.error("The string-length() function requires a non-null context node!",
  -									   context);
  -			}
  -			else
  -			{
  -				theLength = length(getDefaultStringArgument(executionContext,
  -															*context));
  -			}
  -		}
  -		else if (theSize == 1)
  -		{
  -			theLength = length(args[0]->str());
  -		}
  -		else
  -		{
  -			executionContext.error("The string-length() function takes either zero arguments or one argument!",
  -								   context);
  -		}
  +			XalanNode*						context,			
  +			const XObject*					arg1);
   
  -		return executionContext.getXObjectFactory().createNumber(theLength);
  -	}
  +	XObject*
  +	execute(
  +			XPathExecutionContext&			executionContext,
  +			XalanNode*						context);	
   
  -#if defined(XALAN_NO_COVARIANT_RETURN_TYPE)
   	virtual Function*
  -#else
  -	virtual FunctionStringLength*
  -#endif
  -	clone() const
  -	{
  -		return new FunctionStringLength(*this);
  -	}
  +	clone() const;
   
   private:
  +
  +	const XalanDOMString
  +	getError() const;
  +
   
   	// Not implemented...
   	FunctionStringLength&
  
  
  
  1.5       +10 -31    xml-xalan/c/src/XPath/FunctionTrue.hpp
  
  Index: FunctionTrue.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XPath/FunctionTrue.hpp,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- FunctionTrue.hpp	2000/04/11 14:46:09	1.4
  +++ FunctionTrue.hpp	2000/11/06 19:33:40	1.5
  @@ -64,62 +64,42 @@
   
   
   
  -#include <vector>
  -
  -
  -
   // Base class header file...
   #include <XPath/Function.hpp>
   
   
   
  -#include <XPath/XObject.hpp>
  -#include <XPath/XObjectFactory.hpp>
  -#include <XPath/XPathExecutionContext.hpp>
  -
  -
  -
   /**
    * XPath implementation of "true" function.
    */
  -//
  -// These are all inline, even though
  -// there are virtual functions, because we expect that they will only be
  -// needed by the XPath class.
   class XALAN_XPATH_EXPORT FunctionTrue : public Function
   {
   public:
   
  +	FunctionTrue();
  +
  +	virtual
  +	~FunctionTrue();
  +
   	// These methods are inherited from Function ...
   
   	virtual XObject*
   	execute(
   			XPathExecutionContext&			executionContext,
  -			XalanNode*						context,
  -			int								/* opPos */,
  -			const XObjectArgVectorType&		args)
  -	{
  -		if(args.size() > 0)
  -		{
  -			executionContext.error("The true() function does not accept arguments!",
  -								   context);
  -		}
  -
  -		return executionContext.getXObjectFactory().createBoolean(true);
  -	}
  +			XalanNode*						context);
   
   #if defined(XALAN_NO_COVARIANT_RETURN_TYPE)
   	virtual Function*
   #else
   	virtual FunctionTrue*
   #endif
  -	clone() const
  -	{
  -		return new FunctionTrue(*this);
  -	}
  +	clone() const;
   
   private:
   
  +	virtual const XalanDOMString
  +	getError() const;
  +
   	// Not implemented...
   	FunctionTrue&
   	operator=(const FunctionTrue&);
  @@ -127,7 +107,6 @@
   	bool
   	operator==(const FunctionTrue&) const;
   };
  -
   
   
   #endif	// FUNCTIONTRUE_HEADER_GUARD_1357924680
  
  
  
  1.32      +65 -3     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.31
  retrieving revision 1.32
  diff -u -r1.31 -r1.32
  --- XPath.cpp	2000/11/02 01:46:00	1.31
  +++ XPath.cpp	2000/11/06 19:33:42	1.32
  @@ -1402,10 +1402,74 @@
   	opPos++;
   
   	// Number of args is next, not used for now...
  -//	const int	argCount = m_expression.m_opMap[opPos];
  +	const int	argCount = m_expression.m_opMap[opPos];
   
   	opPos++;
   
  +	XObjectFactory&		theFactory = executionContext.getXObjectFactory();
  +
  +	if (argCount == 0)
  +	{
  +		assert(opPos == endFunc);
  +
  +		return s_functions[funcID].execute(executionContext, context);
  +	}
  +	else if (argCount == 1)
  +	{
  +		const int	nextOpPos = m_expression.getNextOpCodePosition(opPos);
  +
  +		const XObjectGuard	theArg(theFactory, executeMore(context, opPos, executionContext));
  +
  +		opPos = nextOpPos;
  +		
  +		assert(opPos == endFunc);
  +
  +		return s_functions[funcID].execute(executionContext, context, theArg.get());
  +	}
  +	else if (argCount == 2)
  +	{
  +		int	nextOpPos = m_expression.getNextOpCodePosition(opPos);
  +
  +		const XObjectGuard	theArg1(theFactory, executeMore(context, opPos, executionContext));
  +
  +		opPos = nextOpPos;
  +
  +		nextOpPos = m_expression.getNextOpCodePosition(opPos);
  +
  +		const XObjectGuard	theArg2(theFactory, executeMore(context, opPos, executionContext));
  +
  +		opPos = nextOpPos;
  +		
  +		assert(opPos == endFunc);
  +
  +		return s_functions[funcID].execute(executionContext, context, theArg1.get(), theArg2.get());
  +	}
  +	else if (argCount == 3)
  +	{
  +
  +		int	nextOpPos = m_expression.getNextOpCodePosition(opPos);
  +
  +		const XObjectGuard	theArg1(theFactory, executeMore(context, opPos, executionContext));
  +
  +		opPos = nextOpPos;
  +
  +		nextOpPos = m_expression.getNextOpCodePosition(opPos);
  +
  +		const XObjectGuard	theArg2(theFactory, executeMore(context, opPos, executionContext));
  +
  +		opPos = nextOpPos;
  +
  +		nextOpPos = m_expression.getNextOpCodePosition(opPos);
  +
  +		const XObjectGuard	theArg3(theFactory, executeMore(context, opPos, executionContext));
  +
  +		opPos = nextOpPos;
  +
  +		assert(opPos == endFunc);
  +
  +		return s_functions[funcID].execute(executionContext, context, theArg1.get(), theArg2.get(), theArg3.get());
  +	}
  +
   	typedef XPathExecutionContext::XObjectArgVectorType		XObjectArgVectorType;
   	typedef XPathExecutionContext::PushPopArgVector			PushPopArgVector;
   
  @@ -1424,8 +1488,6 @@
   
   	const XObject* const		theResult =
   		function(context, opPos, funcID, args, executionContext);
  -
  -	XObjectFactory&		theFactory = executionContext.getXObjectFactory();
   
   	// Return the args...
   	while(args.size() > 0)
  
  
  
  1.4       +1 -0      xml-xalan/c/src/XPath/XPathException.hpp
  
  Index: XPathException.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XPath/XPathException.hpp,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- XPathException.hpp	2000/04/11 14:46:17	1.3
  +++ XPathException.hpp	2000/11/06 19:33:44	1.4
  @@ -65,6 +65,7 @@
   
   
   #include <XalanDOM/XalanDOMString.hpp>
  +#include <XalanDOM/XalanNode.hpp>
   
   
   
  
  
  
  1.25      +6 -2      xml-xalan/c/src/XPath/XPathExecutionContext.hpp
  
  Index: XPathExecutionContext.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XPath/XPathExecutionContext.hpp,v
  retrieving revision 1.24
  retrieving revision 1.25
  diff -u -r1.24 -r1.25
  --- XPathExecutionContext.hpp	2000/11/02 01:46:01	1.24
  +++ XPathExecutionContext.hpp	2000/11/06 19:33:47	1.25
  @@ -80,7 +80,7 @@
   
   
   
  -#include <XPath/Function.hpp>
  +//#include <XPath/Function.hpp>
   #include <XPath/MutableNodeRefList.hpp>
   
   
  @@ -108,7 +108,11 @@
   {
   public:
   
  -	typedef Function::XObjectArgVectorType	XObjectArgVectorType;
  +#if defined(XALAN_NO_NAMESPACES)
  +	typedef vector<const XObject*>			XObjectArgVectorType;
  +#else
  +	typedef std::vector<const XObject*>		XObjectArgVectorType;
  +#endif
   
   	explicit
   	XPathExecutionContext();
  
  
  
  1.12      +1 -1      xml-xalan/c/src/XPath/XPathFunctionTable.cpp
  
  Index: XPathFunctionTable.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XPath/XPathFunctionTable.cpp,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- XPathFunctionTable.cpp	2000/11/02 01:46:02	1.11
  +++ XPathFunctionTable.cpp	2000/11/06 19:33:49	1.12
  @@ -76,7 +76,7 @@
   #include "FunctionLocalName.hpp"
   #include "FunctionName.hpp"
   #include "FunctionNamespaceURI.hpp"
  -#include "FunctionNormalize.hpp"
  +#include "FunctionNormalizeSpace.hpp"
   #include "FunctionNot.hpp"
   #include "FunctionNumber.hpp"
   #include "FunctionPosition.hpp"