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:[email protected]";>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"
  
  
  

Reply via email to