auriemma    00/11/06 11:28:56

  Modified:    c/src/XPath FunctionConcat.hpp FunctionLang.hpp
                        FunctionLocalName.hpp FunctionName.hpp
                        FunctionNamespaceURI.hpp FunctionSubstring.hpp
                        FunctionSubstringAfter.hpp
                        FunctionSubstringBefore.hpp FunctionSum.hpp
                        FunctionTranslate.hpp
  Log:
  Modified XSLT Functions so they are called with a specific number of 
arguments.
  
  Revision  Changes    Path
  1.6       +26 -61    xml-xalan/c/src/XPath/FunctionConcat.hpp
  
  Index: FunctionConcat.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XPath/FunctionConcat.hpp,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- FunctionConcat.hpp        2000/11/02 01:45:56     1.5
  +++ FunctionConcat.hpp        2000/11/06 19:27:48     1.6
  @@ -64,93 +64,58 @@
   
   
   
  -#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 "concat" 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 FunctionConcat : public Function
   {
   public:
   
  +     FunctionConcat();
  +
  +     virtual
  +     ~FunctionConcat();
  +
        // These methods are inherited from Function ...
   
        virtual XObject*
        execute(
                        XPathExecutionContext&                  
executionContext,
  -                     XalanNode*                                              
context,
  -                     int                                                     
        /* opPos */,
  -                     const XObjectArgVectorType&             args)
  -     {
  -             const XObjectArgVectorType::size_type   theArgCount = 
args.size();
  -
  -             if (theArgCount < 2)
  -             {
  -                     executionContext.error("The concat() function takes at 
least two arguments!",
  -                                                                context);
  -             }
  -
  -             unsigned int    theCombinedLength = 0;
  -
  -             const XObjectArgVectorType::const_iterator      theEnd = 
args.end();
  -
  -             {
  -                     XObjectArgVectorType::const_iterator    i = 
args.begin();
  -
  -                     for(; i != theEnd; ++i)
  -                     {
  -                             theCombinedLength += length((*i)->str());
  -                     }
  -             }
  -
  -             XalanDOMString  theResult;
  -
  -             reserve(theResult, theCombinedLength + 1);
  -
  -             {
  -                     XObjectArgVectorType::const_iterator    i = 
args.begin();
  -
  -                     for(; i != theEnd; ++i)
  -                     {
  -                             theResult += (*i)->str();
  -                     }
  -             }
  +                     XalanNode*                                              
/* context */,                  
  +                     const XObject*                                  arg1,
  +                     const XObject*                                  arg2);
   
  -             return 
executionContext.getXObjectFactory().createString(theResult);
  -     }
  +     virtual XObject*
  +     execute(
  +                     XPathExecutionContext&                  
executionContext,
  +                     XalanNode*                                              
/* context */,                  
  +                     const XObject*                                  arg1,
  +                     const XObject*                                  arg2,
  +                     const XObject*                                  arg3);
   
  +     virtual XObject*
  +     execute(
  +             XPathExecutionContext&                  executionContext,
  +             XalanNode*                                              /* 
context */,
  +             int                                                             
/* opPos */,
  +             const XObjectArgVectorType&             args);
  +
   #if defined(XALAN_NO_COVARIANT_RETURN_TYPE)
        virtual Function*
   #else
        virtual FunctionConcat*
   #endif
  -     clone() const
  -     {
  -             return new FunctionConcat(*this);
  -     }
  +     clone() const;
   
   private:
  +
  +     virtual const XalanDOMString
  +     getError() const;
   
        // Not implemented...
        FunctionConcat&
  
  
  
  1.10      +11 -75    xml-xalan/c/src/XPath/FunctionLang.hpp
  
  Index: FunctionLang.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XPath/FunctionLang.hpp,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- FunctionLang.hpp  2000/11/02 01:45:57     1.9
  +++ FunctionLang.hpp  2000/11/06 19:27:52     1.10
  @@ -64,111 +64,47 @@
   
   
   
  -#include <vector>
  -
  -
  -
   #include <XalanDOM/XalanElement.hpp>
   #include <XalanDOM/XalanNode.hpp>
   
   
   
  -#include <PlatformSupport/DOMStringHelper.hpp>
  -#include <PlatformSupport/XalanUnicode.hpp>
  -
  -
  -
   // Base class header file...
   #include <XPath/Function.hpp>
   
   
   
  -#include <XPath/XObject.hpp>
  -#include <XPath/XObjectFactory.hpp>
  -#include <XPath/XPathExecutionContext.hpp>
  -
  -
  -
   /**
    * XPath implementation of "lang" 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 FunctionLang : public Function
   {
   public:
   
  +     FunctionLang();
  +
  +     virtual
  +     ~FunctionLang();
  +
        // 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 lang() function takes one 
argument!",
  -                                                                context);
  -             }
  -
  -             const XalanNode*                parent = context;
  -
  -             bool                                    fMatch = false;
  -
  -             const XalanDOMString&   lang = args[0]->str();
  -
  -             while(0 != parent)
  -             {
  -                     if(XalanNode::ELEMENT_NODE == parent->getNodeType())
  -                     {
  -                             const XalanElement* const       theElementNode =
  -#if defined(XALAN_OLD_STYLE_CASTS)
  -                                     (const XalanElement*)parent;
  -#else
  -                                     static_cast<const 
XalanElement*>(parent);
  -#endif
  -
  -                             const XalanDOMString            langVal =
  -                                     
theElementNode->getAttribute(StaticStringToDOMString(XALAN_STATIC_UCODE_STRING("xml:lang")));
  +                     XalanNode*                                              
context,                        
  +                     const XObject*                                  arg1);
   
  -                             if(0 != length(langVal))
  -                             {
  -                                     if(startsWith(toLowerCase(langVal), 
toLowerCase(lang)))
  -                                     {
  -                                             const unsigned int      valLen 
= length(lang);
  -
  -                                             if(length(langVal) == valLen ||
  -                                                charAt(langVal, valLen) == 
XalanUnicode::charHyphenMinus)
  -                                             {
  -                                                     fMatch = true;
  -
  -                                                     break;
  -                                             }
  -                                     }
  -                             }
  -                     }
  -
  -                     parent = executionContext.getParentOfNode(*parent);
  -             }
  -
  -             return 
executionContext.getXObjectFactory().createBoolean(fMatch);
  -     }
  -
   #if defined(XALAN_NO_COVARIANT_RETURN_TYPE)
        virtual Function*
   #else
        virtual FunctionLang*
   #endif
  -     clone() const
  -     {
  -             return new FunctionLang(*this);
  -     }
  +     clone() const;
   
   private:
  +
  +     virtual const XalanDOMString
  +     getError() const;
   
        // Not implemented...
        FunctionLang&
  
  
  
  1.10      +17 -75    xml-xalan/c/src/XPath/FunctionLocalName.hpp
  
  Index: FunctionLocalName.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XPath/FunctionLocalName.hpp,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- FunctionLocalName.hpp     2000/11/02 01:45:57     1.9
  +++ FunctionLocalName.hpp     2000/11/06 19:27:54     1.10
  @@ -78,103 +78,45 @@
   
   
   #include <XPath/NodeRefListBase.hpp>
  -#include <XPath/XObject.hpp>
  -#include <XPath/XObjectFactory.hpp>
  -#include <XPath/XPathExecutionContext.hpp>
   
   
   
   /**
    * XPath implementation of "local-name" 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 FunctionLocalName : public Function
   {
   public:
   
  +     FunctionLocalName();
  +
  +     virtual
  +     ~FunctionLocalName();
  +
        // These methods are inherited from Function ...
   
  -     virtual XObject*
  +     XObject*
        execute(
  -                     XPathExecutionContext&                  
executionContext,
  -                     XalanNode*                                              
context,
  -                     int                                                     
        /* opPos */,
  -                     const XObjectArgVectorType&             args)
  -     {
  -             const XObjectArgVectorType::size_type   theSize =
  -                     args.size();
  -
  -             if(theSize > 1)
  -             {
  -                     executionContext.error("The local-name() function takes 
zero or one arguments!",
  -                                                                context);
  -             }
  -
  -             XObject*        theResult = 0;
  -
  -             if (theSize == 0)
  -             {
  -                     if (context == 0)
  -                     {
  -                             executionContext.error("The local-name() 
function requires a non-null context node!");
  -                     }
  -                     else
  -                     {
  -                             theResult = getLocalName(executionContext, 
*context);
  -                     }
  -             }
  -             else
  -             {
  -                     assert(args[0] != 0);
  -
  -                     const NodeRefListBase&  theNodeList = 
args[0]->nodeset();
  -
  -                     if (theNodeList.getLength() == 0)
  -                     {
  -                             theResult = 
executionContext.getXObjectFactory().createString(XalanDOMString());
  -                     }
  -                     else
  -                     {
  -                             theResult = getLocalName(executionContext, 
*theNodeList.item(0));
  -                     }
  -             }
  -
  -             return theResult;
  -     }
  +             XPathExecutionContext&                  executionContext,
  +             XalanNode*                                              
context,                        
  +             const XObject*                                  arg1);
  +             
  +     XObject*
  +     execute(
  +             XPathExecutionContext&                  executionContext,
  +             XalanNode*                                              
context);
   
   #if defined(XALAN_NO_COVARIANT_RETURN_TYPE)
        virtual Function*
   #else
        virtual FunctionLocalName*
   #endif
  -     clone() const
  -     {
  -             return new FunctionLocalName(*this);
  -     }
  +     clone() const;
   
   private:
   
  -     XObject*
  -     getLocalName(
  -                     XPathExecutionContext&  executionContext,
  -                     const XalanNode&                node)
  -     {
  -             const XalanNode::NodeType       theType = node.getNodeType();
  -
  -             if(theType == XalanNode::ATTRIBUTE_NODE ||
  -                     theType == XalanNode::ELEMENT_NODE ||
  -                     theType == XalanNode::PROCESSING_INSTRUCTION_NODE)
  -             {
  -                     return 
executionContext.getXObjectFactory().createString(executionContext.getLocalNameOfNode(node));
  -             }
  -             else
  -             {
  -                     return 
executionContext.getXObjectFactory().createString(XalanDOMString());
  -             }
  -     }
  +     const XalanDOMString
  +     getError() const;
   
        // Not implemented...
        FunctionLocalName&
  
  
  
  1.8       +19 -86    xml-xalan/c/src/XPath/FunctionName.hpp
  
  Index: FunctionName.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XPath/FunctionName.hpp,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- FunctionName.hpp  2000/11/02 01:45:57     1.7
  +++ FunctionName.hpp  2000/11/06 19:27:56     1.8
  @@ -79,115 +79,48 @@
   
   
   
  -#include <DOMSupport/DOMServices.hpp>
  -
  -
  -
   #include <XPath/NodeRefListBase.hpp>
  -#include <XPath/XObject.hpp>
  -#include <XPath/XObjectFactory.hpp>
  -#include <XPath/XPathExecutionContext.hpp>
   
   
   
   /**
    * XPath implementation of "name" 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 FunctionName : public Function
   {
   public:
   
        // These methods are inherited from Function ...
   
  -     virtual XObject*
  -     execute(
  -                     XPathExecutionContext&                  
executionContext,
  -                     XalanNode*                                              
context,
  -                     int                                                     
        /* opPos */,
  -                     const XObjectArgVectorType&             args)
  -     {
  -             const XObjectArgVectorType::size_type   theSize = args.size();
  -
  -             XObject*        theResult = 0;
  -
  -             if(theSize == 0)
  -             {
  -                     if (context == 0)
  -                     {
  -                             executionContext.error("The name() function 
requires a non-null context node!",
  -                                                                        
context);
  -                     }
  -                     else
  -                     {
  -                             theResult = getName(executionContext, *context);
  -                     }
  -             }
  -             else if (theSize == 1)
  -             {
  -                     assert(args[0] != 0);
  -
  -                     const NodeRefListBase&  theNodeList = 
args[0]->nodeset();
  -
  -                     if (theNodeList.getLength() == 0)
  -                     {
  -                             theResult = 
executionContext.getXObjectFactory().createString(XalanDOMString());
  -                     }
  -                     else
  -                     {
  -                             assert(theNodeList.item(0) != 0);
  -
  -                             theResult = getName(executionContext, 
*theNodeList.item(0));
  -                     }
  -             }
  -             else
  -             {
  -                     executionContext.error("The name() function takes 
either zero arguments or one argument!",
  -                                                                context);
  -             }
  +     FunctionName();
  +
  +     virtual
  +     ~FunctionName();
   
  -             assert(theResult != 0);
  +     // These methods are inherited from Function ...
   
  -             return theResult;
  -     }
  +     XObject*
  +     execute(
  +             XPathExecutionContext&                  executionContext,
  +             XalanNode*                                              
context,                        
  +             const XObject*                                  arg1);
  +             
  +     XObject*
  +     execute(
  +             XPathExecutionContext&                  executionContext,
  +             XalanNode*                                              
context);
   
   #if defined(XALAN_NO_COVARIANT_RETURN_TYPE)
        virtual Function*
   #else
        virtual FunctionName*
   #endif
  -     clone() const
  -     {
  -             return new FunctionName(*this);
  -     }
  -
  +     clone() const;
  +     
   private:
   
  -     XObject*
  -     getName(
  -                     XPathExecutionContext&  executionContext,
  -                     const XalanNode&                node)
  -     {
  -//           if (node.getNodeType() == XalanNode::ATTRIBUTE_NODE)
  -//           {
  -//                   const XalanDOMString&   theName = 
executionContext.getNameOfNode(node);
  -
  -//                   if (startsWith(theName, 
DOMServices::s_XMLNamespaceWithSeparator) == true)
  -//                   {
  -//                   }
  -//                   else
  -//                   {
  -//                           return 
executionContext.getXObjectFactory().createString();
  -//                   }
  -//           }
  -//           else
  -             {
  -                     return 
executionContext.getXObjectFactory().createString(executionContext.getNameOfNode(node));
  -             }
  -     }
  +     const XalanDOMString
  +     getError() const;
   
        // Not implemented...
        FunctionName&
  
  
  
  1.8       +18 -70    xml-xalan/c/src/XPath/FunctionNamespaceURI.hpp
  
  Index: FunctionNamespaceURI.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XPath/FunctionNamespaceURI.hpp,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- FunctionNamespaceURI.hpp  2000/11/02 01:45:57     1.7
  +++ FunctionNamespaceURI.hpp  2000/11/06 19:27:58     1.8
  @@ -74,97 +74,45 @@
   
   
   #include <XPath/NodeRefListBase.hpp>
  -#include <XPath/XObject.hpp>
  -#include <XPath/XObjectFactory.hpp>
  -#include <XPath/XPathExecutionContext.hpp>
   
   
   
   /**
    * XPath implementation of "namespace-uri" 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 FunctionNamespaceURI : public Function
   {
   public:
   
        // These methods are inherited from Function ...
  +     FunctionNamespaceURI();
   
  -     virtual XObject*
  +     virtual
  +     ~FunctionNamespaceURI();
  +
  +     XObject*
        execute(
                        XPathExecutionContext&                  
executionContext,
  -                     XalanNode*                                              
context,
  -                     int                                                     
        /* opPos */,
  -                     const XObjectArgVectorType&             args)
  -     {
  -             const XalanDOMString*   theNamespace = 0;
  -
  -             if (args.size() > 1)
  -             {
  -                     executionContext.error("The namespace-uri() function 
takes zero arguments or one argument!",
  -                                                                context);
  -             }
  -             else if (args.size() == 1)
  -             {
  -                     theNamespace = getNamespaceFromNodeSet(*args[0],
  -                                                                             
                   executionContext);
  -             }
  -             else if (context == 0)
  -             {
  -                     executionContext.error("The namespace-uri() 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 XObject with the context 
node as
  -                     // the only member.
  -                     // We shroud the temporary getNamespaceFromNodeSet( in a
  -                     // FactoryObjectAutoPointer because it can be deleted 
once
  -                     // we're done.
  -
  -                     // An XObject that contains the context node.
  -                     XObjectGuard    
theXObject(executionContext.getXObjectFactory(),
  -                                                                        
executionContext.createNodeSet(*context));
  -
  -
  -                     theNamespace = 
getNamespaceFromNodeSet(*theXObject.get(),
  -                                                                             
                   executionContext);
  -             }
  +                     XalanNode*                                              
context,                        
  +                     const XObject*                                  arg1);
   
  -             return 
executionContext.getXObjectFactory().createString(theNamespace == 0 ? 
XalanDOMString() : *theNamespace);
  -     }
  +     XObject*
  +     execute(
  +                     XPathExecutionContext&                  
executionContext,
  +                     XalanNode*                                              
context);       
   
        virtual Function*
  -     clone() const
  -     {
  -             return new FunctionNamespaceURI(*this);
  -     }
  +     clone() const;
   
   private:
   
  -     static const XalanDOMString*
  +     static XalanDOMString
        getNamespaceFromNodeSet(const XObject&                  theXObject,
  -                                                     XPathExecutionContext&  
theContext)
  -     {
  -             const NodeRefListBase&  theList = theXObject.nodeset();
  -
  -             if (theList.getLength() == 0)
  -             {
  -                     return 0;
  -             }
  -             else
  -             {
  -                     assert(theList.item(0) != 0);
  -
  -                     return &theContext.getNamespaceOfNode(*theList.item(0));
  -             }
  -     }
  +                                                     XPathExecutionContext&  
theContext);
  +
  +     const XalanDOMString
  +     getError() const;
  +
   
        // Not implemented...
        FunctionNamespaceURI&
  
  
  
  1.8       +23 -97    xml-xalan/c/src/XPath/FunctionSubstring.hpp
  
  Index: FunctionSubstring.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XPath/FunctionSubstring.hpp,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- FunctionSubstring.hpp     2000/11/02 22:25:46     1.7
  +++ FunctionSubstring.hpp     2000/11/06 19:28:00     1.8
  @@ -68,134 +68,60 @@
   
   
   
  -#include <PlatformSupport/DoubleSupport.hpp>
  -#include <PlatformSupport/DOMStringHelper.hpp>
  -
  -
  -
   // Base class header file...
   #include <XPath/Function.hpp>
   
   
   
   #include <XPath/FunctionRound.hpp>
  -#include <XPath/XObject.hpp>
  -#include <XPath/XObjectFactory.hpp>
  -#include <XPath/XPathExecutionContext.hpp>
   
   
   
  +#include <PlatformSupport/DoubleSupport.hpp>
  +
  +
  +
   /**
    * XPath implementation of "substring" 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 FunctionSubstring : public Function
   {
   public:
   
  +     FunctionSubstring();
  +
  +     virtual
  +     ~FunctionSubstring();
  +
        // These methods are inherited from Function ...
   
        virtual XObject*
        execute(
                        XPathExecutionContext&                  
executionContext,
  -                     XalanNode*                                              
context,
  -                     int                                                     
        /* opPos */,
  -                     const XObjectArgVectorType&             args)
  -     {
  -             const XObjectArgVectorType::size_type   theArgCount =
  -                             args.size();
  -
  -             if (theArgCount < 2 || theArgCount > 3)
  -             {
  -                     executionContext.error("The substring() function takes 
two or three arguments!",
  -                                                                context);
  -             }
  -
  -             const XalanDOMString&   theSourceString = args[0]->str();
  -             const unsigned int              theSourceStringLength = 
length(theSourceString);
  -
  -#if defined(XALAN_NO_NAMESPACES)
  -             typedef vector<XalanDOMChar>            VectorType;
  -#else
  -             typedef std::vector<XalanDOMChar>       VectorType;
  -#endif
  +                     XalanNode*                                              
context,                        
  +                     const XObject*                                  arg1,
  +                     const XObject*                                  arg2,
  +                     const XObject*                                  arg3);
   
  -             // This buffer will hold the output characters.
  -             VectorType      theBuffer;
  +     virtual XObject*
  +     execute(
  +                     XPathExecutionContext&                  
executionContext,
  +                     XalanNode*                                              
context,                        
  +                     const XObject*                                  arg1,
  +                     const XObject*                                  arg2);
   
  -             if (theSourceStringLength > 0)
  -             {
  -                     // The substring can only be as long as the source 
string,
  -                     // so reserve enough space now.  Also reserve space for
  -                     // the terminating 0.
  -                     theBuffer.reserve(theSourceStringLength);
  -
  -                     // $$$ ToDo: Add support for NaN.
  -
  -                     // Get the value of the second argument...
  -                     const double    theSecondArgValue =
  -                             FunctionRound::getRoundedValue(args[1]->num());
  -
  -                     // Now, total the second and third arguments.  If
  -                     // the third argument is missing, make the total
  -                     // DBL_MAX.
  -                     const double    theTotal =
  -                                     theArgCount == 2 ? DBL_MAX :
  -                                                                        
FunctionRound::getRoundedValue(theSecondArgValue + args[2]->num());
  -
  -                     if (DoubleSupport::isNaN(theSecondArgValue) == false &&
  -                             DoubleSupport::isNaN(theTotal) == false &&
  -                             DoubleSupport::isNegativeInfinity(theTotal) == 
false)
  -                     {
  -                             // Start with 1, since strings are index from 1 
in the XPath spec,
  -                             for (unsigned int i = 1; i <= 
theSourceStringLength; i++)
  -                             {
  -                                     // Is the index greater than or equal 
to the second argument?
  -                                     if (i >= theSecondArgValue)
  -                                     {
  -                                             // Is it less than the sum of 
the second and
  -                                             // third arguments?
  -                                             if (i < theTotal)
  -                                             {
  -                                                     // It is, so include 
the character.
  -                                                     
theBuffer.push_back(charAt(theSourceString, i - 1));
  -                                             }
  -                                             else
  -                                             {
  -                                                     // It's not, so stop.
  -                                                     break;
  -                                             }
  -                                     }
  -                             }
  -                     }
  -             }
  -
  -             const VectorType::size_type             theSize = 
theBuffer.size();
  -
  -             if (theSize == 0)
  -             {
  -                     return 
executionContext.getXObjectFactory().createString(XalanDOMString());
  -             }
  -             else
  -             {
  -                     return 
executionContext.getXObjectFactory().createString(XalanDOMString(theBuffer.begin(),
 theSize));
  -             }
  -     }
   
   #if defined(XALAN_NO_COVARIANT_RETURN_TYPE)
        virtual Function*
   #else
        virtual FunctionSubstring*
   #endif
  -     clone() const
  -     {
  -             return new FunctionSubstring(*this);
  -     }
  +     clone() const;
   
   private:
  +
  +     virtual const XalanDOMString
  +     getError() const;
   
        // Not implemented...
        FunctionSubstring&
  
  
  
  1.7       +12 -71    xml-xalan/c/src/XPath/FunctionSubstringAfter.hpp
  
  Index: FunctionSubstringAfter.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XPath/FunctionSubstringAfter.hpp,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- FunctionSubstringAfter.hpp        2000/11/02 22:25:47     1.6
  +++ FunctionSubstringAfter.hpp        2000/11/06 19:28:02     1.7
  @@ -64,102 +64,43 @@
   
   
   
  -#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 "substring-after" 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 FunctionSubstringAfter : public Function
   {
   public:
   
  +     FunctionSubstringAfter();
  +
  +     virtual
  +     ~FunctionSubstringAfter();
  +
        // 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 substring-after() function 
takes two arguments!",
  -                                                                context);
  -             }
  -
  -             const XalanDOMString&   theFirstString = args[0]->str();
  -             const XalanDOMString&   theSecondString = args[1]->str();
  +                     XalanNode*                                              
context,                        
  +                     const XObject*                                  arg1,
  +                     const XObject*                                  arg2);
   
  -             const unsigned int              theIndex = 
indexOf(theFirstString,
  -                                                                             
                   theSecondString);
  -
  -             const unsigned int              theFirstStringLength = 
length(theFirstString);
  -
  -#if defined(XALAN_NO_NAMESPACES)
  -             typedef vector<XalanDOMChar>            VectorType;
  -#else
  -             typedef std::vector<XalanDOMChar>       VectorType;
  -#endif
  -
  -             // This buffer will hold the output characters.
  -             VectorType      theBuffer;
  -
  -             if (theIndex < theFirstStringLength)
  -             {
  -                     unsigned int            theStartIndex = theIndex + 
length(theSecondString);
  -
  -                     // The result string can only be as large as the source 
string, so
  -                     // just reserve the space now.  Also reserve a space 
for the
  -                     // terminating 0.
  -                     theBuffer.reserve(theFirstStringLength - theStartIndex 
+ 1);
  -
  -                     for (; theStartIndex < theFirstStringLength; 
theStartIndex++)
  -                     {
  -                             theBuffer.push_back(charAt(theFirstString, 
theStartIndex));
  -                     }
  -             }
  -
  -             const VectorType::size_type             theSize = 
theBuffer.size();
  -
  -             if (theSize == 0)
  -             {
  -                     return 
executionContext.getXObjectFactory().createString(XalanDOMString());
  -             }
  -             else
  -             {
  -                     return 
executionContext.getXObjectFactory().createString(XalanDOMString(theBuffer.begin(),
 theSize));
  -             }
  -     }
  -
   #if defined(XALAN_NO_COVARIANT_RETURN_TYPE)
        virtual Function*
   #else
        virtual FunctionSubstringAfter*
   #endif
  -     clone() const
  -     {
  -             return new FunctionSubstringAfter(*this);
  -     }
  +     clone() const;
   
   private:
  +
  +     virtual const XalanDOMString
  +     getError() const;
   
        // Not implemented...
        FunctionSubstringAfter&
  
  
  
  1.7       +12 -69    xml-xalan/c/src/XPath/FunctionSubstringBefore.hpp
  
  Index: FunctionSubstringBefore.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XPath/FunctionSubstringBefore.hpp,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- FunctionSubstringBefore.hpp       2000/11/02 22:25:48     1.6
  +++ FunctionSubstringBefore.hpp       2000/11/06 19:28:04     1.7
  @@ -64,100 +64,43 @@
   
   
   
  -#include <PlatformSupport/DOMStringHelper.hpp>
  -
  -
  -
   // 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 "substring-before" 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 FunctionSubstringBefore : public Function
   {
   public:
   
  +     FunctionSubstringBefore();
  +
  +     virtual
  +     ~FunctionSubstringBefore();
  +
        // 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 substring-before() function 
takes two arguments!",
  -                                                                context);
  -             }
  +                     XalanNode*                                              
context,                        
  +                     const XObject*                                  arg1,
  +                     const XObject*                                  arg2);
   
  -             const XalanDOMString&   theFirstString = args[0]->str();
  -             const XalanDOMString&   theSecondString = args[1]->str();
  -
  -             const unsigned int              theIndex = 
indexOf(theFirstString,
  -                                                                             
                   theSecondString);
  -
  -#if defined(XALAN_NO_NAMESPACES)
  -             typedef vector<XalanDOMChar>            VectorType;
  -#else
  -             typedef std::vector<XalanDOMChar>       VectorType;
  -#endif
  -
  -             // This buffer will hold the output characters.
  -             VectorType      theBuffer;
  -
  -             if (theIndex < length(theFirstString))
  -             {
  -                     // The result string can only be as large as the source 
string, so
  -                     // just reserve the space now.  Also reserve a space 
for the
  -                     // terminating 0.
  -                     theBuffer.reserve(theIndex + 2);
  -
  -                     // Stop with the last character before the index.
  -                     for (unsigned int i = 0; i < theIndex; i++)
  -                     {
  -                             theBuffer.push_back(charAt(theFirstString, i));
  -                     }
  -             }
  -
  -             const VectorType::size_type             theSize = 
theBuffer.size();
  -
  -             if (theSize == 0)
  -             {
  -                     return 
executionContext.getXObjectFactory().createString(XalanDOMString());
  -             }
  -             else
  -             {
  -                     return 
executionContext.getXObjectFactory().createString(XalanDOMString(theBuffer.begin(),
 theSize));
  -             }
  -     }
  -
   #if defined(XALAN_NO_COVARIANT_RETURN_TYPE)
        virtual Function*
   #else
        virtual FunctionSubstringBefore*
   #endif
  -     clone() const
  -     {
  -             return new FunctionSubstringBefore(*this);
  -     }
  +     clone() const;
   
   private:
  +
  +     virtual const XalanDOMString
  +     getError() const;
   
        // Not implemented...
        FunctionSubstringBefore&
  
  
  
  1.8       +11 -46    xml-xalan/c/src/XPath/FunctionSum.hpp
  
  Index: FunctionSum.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XPath/FunctionSum.hpp,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- FunctionSum.hpp   2000/11/02 01:45:58     1.7
  +++ FunctionSum.hpp   2000/11/06 19:28:06     1.8
  @@ -64,10 +64,6 @@
   
   
   
  -#include <vector>
  -
  -
  -
   #include <PlatformSupport/DOMStringHelper.hpp>
   #include <PlatformSupport/DoubleSupport.hpp>
   
  @@ -78,68 +74,37 @@
   
   
   
  -#include <XPath/NodeRefListBase.hpp>
  -#include <XPath/XObject.hpp>
  -#include <XPath/XObjectFactory.hpp>
  -#include <XPath/XPathExecutionContext.hpp>
  -
  -
  -
   /**
    * XPath implementation of "sum" 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 FunctionSum : public Function
   {
   public:
   
  +     FunctionSum();
  +
  +     virtual
  +     ~FunctionSum();
  +
        // 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 sum() function takes one 
argument!",
  -                                                                context);
  -             }
  +                     XalanNode*                                              
context,                        
  +                     const XObject*                                  arg1);
   
  -             const NodeRefListBase&  nl = args[0]->nodeset();
  -
  -             double                                  sum = 0.0;
  -
  -             const unsigned int              count = nl.getLength();
  -
  -             for (unsigned int i = 0; i < count; i++)
  -             {
  -                     XalanDOMString  theData;
  -
  -                     executionContext.getNodeData(*nl.item(i), theData);
  -
  -                     sum += DoubleSupport::toDouble(theData);
  -             }
  -
  -             return executionContext.getXObjectFactory().createNumber(sum);
  -     }
  -
   #if defined(XALAN_NO_COVARIANT_RETURN_TYPE)
        virtual Function*
   #else
        virtual FunctionSum*
   #endif
  -     clone() const
  -     {
  -             return new FunctionSum(*this);
  -     }
  +     clone() const;
   
   private:
  +
  +     virtual const XalanDOMString
  +     getError() const;
   
        // Not implemented...
        FunctionSum&
  
  
  
  1.8       +13 -94    xml-xalan/c/src/XPath/FunctionTranslate.hpp
  
  Index: FunctionTranslate.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XPath/FunctionTranslate.hpp,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- FunctionTranslate.hpp     2000/11/02 22:25:48     1.7
  +++ FunctionTranslate.hpp     2000/11/06 19:28:08     1.8
  @@ -64,125 +64,44 @@
   
   
   
  -#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 "translate" 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 FunctionTranslate : public Function
   {
   public:
   
  +     FunctionTranslate();
  +
  +     virtual
  +     ~FunctionTranslate();
  +
        // These methods are inherited from Function ...
   
        virtual XObject*
        execute(
                        XPathExecutionContext&                  
executionContext,
  -                     XalanNode*                                              
context,
  -                     int                                                     
        /* opPos */,
  -                     const XObjectArgVectorType&             args)
  -     {
  -             if (args.size() != 3)
  -             {
  -                     executionContext.error("The translate() function takes 
three arguments!",
  -                                                                context);
  -             }
  -
  -             const XalanDOMString&   theFirstString = args[0]->str();
  -             const XalanDOMString&   theSecondString = args[1]->str();
  -             const XalanDOMString&   theThirdString = args[2]->str();
  -
  -             const unsigned int              theFirstStringLength = 
length(theFirstString);
  -             const unsigned int              theSecondStringLength = 
length(theSecondString);
  -             const unsigned int              theThirdStringLength = 
length(theThirdString);
  -
  -#if defined(XALAN_NO_NAMESPACES)
  -             typedef vector<XalanDOMChar>            VectorType;
  -#else
  -             typedef std::vector<XalanDOMChar>       VectorType;
  -#endif
  +                     XalanNode*                                              
/* context */,                  
  +                     const XObject*                                  arg1,
  +                     const XObject*                                  arg2,
  +                     const XObject*                                  arg3);
   
  -             // A vector to contain the new characters.  We'll use it to 
construct
  -             // the result string.
  -             VectorType      theBuffer;
  -
  -             // The result string can only be as large as the first string, 
so
  -             // just reserve the space now.  Also reserve space for the
  -             // terminating 0.
  -             theBuffer.reserve(theFirstStringLength + 1);
  -
  -             for (unsigned int i = 0; i < theFirstStringLength; i++)
  -             {
  -                     const XalanDOMChar              theCurrentChar = 
charAt(theFirstString, i);
  -
  -                     const unsigned int              theIndex = 
indexOf(theSecondString, theCurrentChar);
  -
  -                     if (theIndex >= theSecondStringLength)
  -                     {
  -                             // Didn't find the character in the second 
string, so it
  -                             // is not translated.
  -                             theBuffer.push_back(theCurrentChar);
  -                     }
  -                     else if (theIndex < theThirdStringLength)
  -                     {
  -                             // OK, there's a corresponding character in the
  -                             // third string, so do the translation...
  -                             theBuffer.push_back(charAt(theThirdString, 
theIndex));
  -                     }
  -                     else
  -                     {
  -                             // There's no corresponding character in the
  -                             // third string, since it's shorter than the
  -                             // second string.  In this case, the character
  -                             // is removed from the output string, so don't
  -                             // do anything.
  -                     }
  -             }
  -
  -             const VectorType::size_type             theSize = 
theBuffer.size();
  -
  -             if (theSize == 0)
  -             {
  -                     return 
executionContext.getXObjectFactory().createString(XalanDOMString());
  -             }
  -             else
  -             {
  -                     return 
executionContext.getXObjectFactory().createString(XalanDOMString(theBuffer.begin(),
 theSize));
  -             }
  -     }
  -
   #if defined(XALAN_NO_COVARIANT_RETURN_TYPE)
        virtual Function*
   #else
        virtual FunctionTranslate*
   #endif
  -     clone() const
  -     {
  -             return new FunctionTranslate(*this);
  -     }
  +     clone() const;
   
   private:
  +
  +     virtual const XalanDOMString
  +     getError() const;
   
        // Not implemented...
        FunctionTranslate&
  
  
  

Reply via email to