dbertoni    2003/01/03 13:46:35

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

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to