dbertoni    02/04/29 21:41:33

  Modified:    c/src/XalanEXSLT XalanEXSLTMath.cpp XalanEXSLTMathImpl.hpp
                        XalanEXSLTString.cpp
  Log:
  Clean up and new implementation of math:constant().
  
  Revision  Changes    Path
  1.2       +323 -53   xml-xalan/c/src/XalanEXSLT/XalanEXSLTMath.cpp
  
  Index: XalanEXSLTMath.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XalanEXSLT/XalanEXSLTMath.cpp,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- XalanEXSLTMath.cpp        26 Apr 2002 06:51:13 -0000      1.1
  +++ XalanEXSLTMath.cpp        30 Apr 2002 04:41:33 -0000      1.2
  @@ -527,47 +527,306 @@
        XalanUnicode::charLetter_S,
        XalanUnicode::charLetter_Q,
        XalanUnicode::charLetter_R,
  -     XalanUnicode::charLetter_T,
        XalanUnicode::charLetter_R,
  +     XalanUnicode::charLetter_T,
        XalanUnicode::charDigit_2,
        0
   };
   
   
   
  -const char   XalanEXSLTFunctionConstant::s_eValueString[] =
  -     "2.71828182845904523536028747135266249775724709369996";
  +const double XalanEXSLTFunctionConstant::s_eValues[] =
  +{
  +     0.0L,
  +     2.7L,
  +     2.71L,
  +     2.718L,
  +     2.7182L,
  +     2.71828L,
  +     2.718281L,
  +     2.7182818L,
  +     2.71828182L,
  +     2.718281828L,
  +     2.7182818284L,
  +     2.71828182845L,
  +     2.718281828459L,
  +     2.7182818284590L,
  +     2.71828182845904L,
  +     2.718281828459045L,
  +     2.7182818284590452L,
  +     2.71828182845904523L,
  +     2.718281828459045235L,
  +     2.7182818284590452353L,
  +     2.71828182845904523536L,
  +     2.718281828459045235360L,
  +     2.7182818284590452353602L,
  +     2.71828182845904523536028L,
  +     2.718281828459045235360287L,
  +     2.7182818284590452353602874L,
  +     2.71828182845904523536028747L,
  +     2.718281828459045235360287471L,
  +     2.7182818284590452353602874713L,
  +     2.71828182845904523536028747135L,
  +     2.718281828459045235360287471352L,
  +     2.7182818284590452353602874713526L,
  +     2.71828182845904523536028747135266L,
  +     2.718281828459045235360287471352662L,
  +     2.7182818284590452353602874713526624L,
  +     2.71828182845904523536028747135266249L,
  +     2.718281828459045235360287471352662497L,
  +     2.7182818284590452353602874713526624977L,
  +     2.71828182845904523536028747135266249775L,
  +     2.718281828459045235360287471352662497757L,
  +     2.7182818284590452353602874713526624977572L,
  +     2.71828182845904523536028747135266249775724L,
  +     2.718281828459045235360287471352662497757247L,
  +     2.7182818284590452353602874713526624977572470L,
  +     2.71828182845904523536028747135266249775724709L,
  +     2.718281828459045235360287471352662497757247093L,
  +     2.7182818284590452353602874713526624977572470936L,
  +     2.71828182845904523536028747135266249775724709369L,
  +     2.718281828459045235360287471352662497757247093699L,
  +     2.7182818284590452353602874713526624977572470936999L,
  +     2.71828182845904523536028747135266249775724709369996L,
  +};
   
  -const char   XalanEXSLTFunctionConstant::s_ln10ValueString[] =
  -     "2.302585092994046";
  +const double XalanEXSLTFunctionConstant::s_ln10Values[] =
  +{
  +     0.0L,
  +     2.3L,
  +     2.30L,
  +     2.302L,
  +     2.3025L,
  +     2.30258L,
  +     2.302585L,
  +     2.3025850L,
  +     2.30258509L,
  +     2.302585092L,
  +     2.3025850929L,
  +     2.30258509299L,
  +     2.302585092994L,
  +     2.3025850929940L,
  +     2.30258509299404L,
  +     2.302585092994046L
  +};
   
  -const char   XalanEXSLTFunctionConstant::s_ln2ValueString[] =
  -     "0.69314718055994530941723212145817656807550013436025";
  +const double XalanEXSLTFunctionConstant::s_ln2Values[] =
  +{
  +     0.0L,
  +     0.6L,
  +     0.69L,
  +     0.693L,
  +     0.6931L,
  +     0.69314L,
  +     0.693147L,
  +     0.6931471L,
  +     0.69314718L,
  +     0.693147180L,
  +     0.6931471805L,
  +     0.69314718055L,
  +     0.693147180559L,
  +     0.6931471805599L,
  +     0.69314718055994L,
  +     0.693147180559945L,
  +     0.6931471805599453L,
  +     0.69314718055994530L,
  +     0.693147180559945309L,
  +     0.6931471805599453094L,
  +     0.69314718055994530941L,
  +     0.693147180559945309417L,
  +     0.6931471805599453094172L,
  +     0.69314718055994530941723L,
  +     0.693147180559945309417232L,
  +     0.6931471805599453094172321L,
  +     0.69314718055994530941723212L,
  +     0.693147180559945309417232121L,
  +     0.6931471805599453094172321214L,
  +     0.69314718055994530941723212145L,
  +     0.693147180559945309417232121458L,
  +     0.6931471805599453094172321214581L,
  +     0.69314718055994530941723212145817L,
  +     0.693147180559945309417232121458176L,
  +     0.6931471805599453094172321214581765L,
  +     0.69314718055994530941723212145817656L,
  +     0.693147180559945309417232121458176568L,
  +     0.6931471805599453094172321214581765680L,
  +     0.69314718055994530941723212145817656807L,
  +     0.693147180559945309417232121458176568075L,
  +     0.6931471805599453094172321214581765680755L,
  +     0.69314718055994530941723212145817656807550L,
  +     0.693147180559945309417232121458176568075500L,
  +     0.6931471805599453094172321214581765680755001L,
  +     0.69314718055994530941723212145817656807550013L,
  +     0.693147180559945309417232121458176568075500134L,
  +     0.6931471805599453094172321214581765680755001343L,
  +     0.69314718055994530941723212145817656807550013436L,
  +     0.693147180559945309417232121458176568075500134360L,
  +     0.6931471805599453094172321214581765680755001343602L,
  +     0.69314718055994530941723212145817656807550013436025L
  +};
   
  -const char   XalanEXSLTFunctionConstant::s_log2EValueString[] =
  -     "1.4426950408889633";
  +const double XalanEXSLTFunctionConstant::s_log2EValues[] =
  +{
  +     0.0L,
  +     1.4L,
  +     1.44L,
  +     1.442L,
  +     1.4426L,
  +     1.44269L,
  +     1.442695L,
  +     1.4426950L,
  +     1.44269504L,
  +     1.442695040L,
  +     1.4426950408L,
  +     1.44269504088L,
  +     1.442695040888L,
  +     1.4426950408889L,
  +     1.44269504088896L,
  +     1.442695040888963L,
  +     1.4426950408889633L
  +};
   
  -const char   XalanEXSLTFunctionConstant::s_piValueString[] =
  -     "3.1415926535897932384626433832795028841971693993751";
  +const double XalanEXSLTFunctionConstant::s_piValues[] =
  +{
  +     0.0L,
  +     3.1L,
  +     3.14L,
  +     3.141L,
  +     3.1415L,
  +     3.14159L,
  +     3.141592L,
  +     3.1415926L,
  +     3.14159265L,
  +     3.141592653L,
  +     3.1415926535L,
  +     3.14159265358L,
  +     3.141592653589L,
  +     3.1415926535897L, //
  +     3.14159265358979L,
  +     3.141592653589793L,
  +     3.1415926535897932L,
  +     3.14159265358979323L,
  +     3.141592653589793238L,
  +     3.1415926535897932384L,
  +     3.14159265358979323846L,
  +     3.141592653589793238462L,
  +     3.1415926535897932384626L,
  +     3.14159265358979323846264L,
  +     3.141592653589793238462643L,
  +     3.1415926535897932384626433L,
  +     3.14159265358979323846264338L,
  +     3.141592653589793238462643383L,
  +     3.1415926535897932384626433832L,
  +     3.14159265358979323846264338327L,
  +     3.141592653589793238462643383279L,
  +     3.1415926535897932384626433832795L,
  +     3.14159265358979323846264338327950L,
  +     3.141592653589793238462643383279502L,
  +     3.1415926535897932384626433832795028L,
  +     3.14159265358979323846264338327950288L,
  +     3.141592653589793238462643383279502884L,
  +     3.1415926535897932384626433832795028841L,
  +     3.14159265358979323846264338327950288419L,
  +     3.141592653589793238462643383279502884197L,
  +     3.1415926535897932384626433832795028841971L,
  +     3.14159265358979323846264338327950288419716L,
  +     3.141592653589793238462643383279502884197169L,
  +     3.1415926535897932384626433832795028841971693L,
  +     3.14159265358979323846264338327950288419716939L,
  +     3.141592653589793238462643383279502884197169399L,
  +     3.1415926535897932384626433832795028841971693993L,
  +     3.14159265358979323846264338327950288419716939937L,
  +     3.141592653589793238462643383279502884197169399375L,
  +     3.1415926535897932384626433832795028841971693993751L
  +};
   
  -const char   XalanEXSLTFunctionConstant::s_sqrt1_2ValueString[] =
  -     "0.7071067811865476";
  +const double XalanEXSLTFunctionConstant::s_sqrt1_2Values[] =
  +{
  +     0.0L,
  +     0.7L,
  +     0.70L,
  +     0.707L,
  +     0.7071L,
  +     0.70710L,
  +     0.707106L,
  +     0.7071067L,
  +     0.70710678L,
  +     0.707106781L,
  +     0.7071067811L,
  +     0.70710678118L,
  +     0.707106781186L,
  +     0.7071067811865L,
  +     0.70710678118654L,
  +     0.707106781186547L,
  +     0.7071067811865476L
  +};
   
  -const char   XalanEXSLTFunctionConstant::s_sqrt2ValueString[] =
  -     "1.41421356237309504880168872420969807856967187537694";
  +const double XalanEXSLTFunctionConstant::s_sqrt2Values[] =
  +{
  +     0.0L,
  +     1.4L,
  +     1.41L,
  +     1.414L,
  +     1.4142L,
  +     1.41421L,
  +     1.414213L,
  +     1.4142135L,
  +     1.41421356L,
  +     1.414213562L,
  +     1.4142135623L,
  +     1.41421356237L,
  +     1.414213562373L,
  +     1.4142135623730L,
  +     1.41421356237309L,
  +     1.414213562373095L,
  +     1.4142135623730950L,
  +     1.41421356237309504L,
  +     1.414213562373095048L,
  +     1.4142135623730950488L,
  +     1.41421356237309504880L,
  +     1.414213562373095048801L,
  +     1.4142135623730950488016L,
  +     1.41421356237309504880168L,
  +     1.414213562373095048801688L,
  +     1.4142135623730950488016887L,
  +     1.41421356237309504880168872L,
  +     1.414213562373095048801688724L,
  +     1.4142135623730950488016887242L,
  +     1.41421356237309504880168872420L,
  +     1.414213562373095048801688724209L,
  +     1.4142135623730950488016887242096L,
  +     1.41421356237309504880168872420969L,
  +     1.414213562373095048801688724209698L,
  +     1.4142135623730950488016887242096980L,
  +     1.41421356237309504880168872420969807L,
  +     1.414213562373095048801688724209698078L,
  +     1.4142135623730950488016887242096980785L,
  +     1.41421356237309504880168872420969807856L,
  +     1.414213562373095048801688724209698078569L,
  +     1.4142135623730950488016887242096980785696L,
  +     1.41421356237309504880168872420969807856967L,
  +     1.414213562373095048801688724209698078569671L,
  +     1.4142135623730950488016887242096980785696718L,
  +     1.41421356237309504880168872420969807856967187L,
  +     1.414213562373095048801688724209698078569671875L,
  +     1.4142135623730950488016887242096980785696718753L,
  +     1.41421356237309504880168872420969807856967187537L,
  +     1.414213562373095048801688724209698078569671875376L,
  +     1.4142135623730950488016887242096980785696718753769L,
  +     1.41421356237309504880168872420969807856967187537694L
  +};
   
   
   
   XObjectPtr
   doConvert(
                        XPathExecutionContext&  executionContext,
  -                     const char*                             theValue,
  +                     const double                    theValues[],
                        size_t                                  theSize,
                        double                                  thePrecision)
   {
        return executionContext.getXObjectFactory().createNumber(
  -             DoubleSupport::toDouble(
  -                     XalanDOMString(theValue, 
XalanDOMString::size_type(thePrecision <= theSize ? thePrecision : theSize))));
  +                     theValues[XalanDOMString::size_type(thePrecision <= theSize ? 
thePrecision : theSize)]);
   }
   
   
  @@ -589,54 +848,65 @@
        const XalanDOMString&   theConstant = args[0]->str();
        const double                    thePrecision = 
DoubleSupport::round(args[1]->num());
   
  -     if (equals(
  -                             s_eString,
  -                             theConstant.c_str(),
  -                             sizeof(s_eString) / sizeof(s_eString[0]) - 1) == true)
  +     if (thePrecision <= 0.0L)
  +     {
  +             return 
executionContext.getXObjectFactory().createNumber(DoubleSupport::getNaN());
  +     }
  +     else if (equals(s_eString, theConstant) == true)
        {
  -             return doConvert(executionContext, s_eValueString, 
sizeof(s_eValueString) - 1, thePrecision);
  +             return doConvert(
  +                             executionContext,
  +                             s_eValues,
  +                             sizeof(s_eValues) / sizeof(s_eValues[0]),
  +                             thePrecision);
        }
  -     else if (equals(
  -                             s_ln10String,
  -                             theConstant.c_str(),
  -                             sizeof(s_ln10String) / sizeof(s_ln10String[0]) - 1) == 
true)
  +     else if (equals(s_ln10String, theConstant) == true)
        {
  -             return doConvert(executionContext, s_ln10ValueString, 
sizeof(s_ln10ValueString) - 1, thePrecision);
  +             return doConvert(
  +                             executionContext,
  +                             s_ln10Values,
  +                             sizeof(s_ln10Values) / sizeof(s_ln10Values[0]),
  +                             thePrecision);
        }
  -     else if (equals(
  -                             s_ln2String,
  -                             theConstant.c_str(),
  -                             sizeof(s_ln2String) / sizeof(s_ln2String[0]) - 1)  == 
true)
  +     else if (equals(s_ln2String, theConstant)  == true)
        {
  -             return doConvert(executionContext, s_ln2ValueString, 
sizeof(s_ln2ValueString) - 1, thePrecision);
  +             return doConvert(
  +                             executionContext,
  +                             s_ln2Values,
  +                             sizeof(s_ln2Values) / sizeof(s_ln2Values[0]),
  +                             thePrecision);
        }
  -     else if (equals(
  -                             s_log2EString,
  -                             theConstant.c_str(),
  -                             sizeof(s_log2EString) / sizeof(s_log2EString[0]) - 1) 
== true)
  +     else if (equals(s_log2EString, theConstant) == true)
        {
  -             return doConvert(executionContext, s_log2EValueString, 
sizeof(s_log2EValueString) - 1, thePrecision);
  +             return doConvert(
  +                             executionContext,
  +                             s_log2EValues,
  +                             sizeof(s_log2EValues) / sizeof(s_log2EValues[0]),
  +                             thePrecision);
        }
  -     else if (equals(
  -                             s_piString,
  -                             theConstant.c_str(),
  -                             sizeof(s_piString) / sizeof(s_piString[0]) - 1) == 
true)
  +     else if (equals(s_piString, theConstant) == true)
        {
  -             return doConvert(executionContext, s_piValueString, 
sizeof(s_piValueString) - 1, thePrecision);
  +             return doConvert(
  +                             executionContext,
  +                             s_piValues,
  +                             sizeof(s_piValues) / sizeof(s_piValues[0]),
  +                             thePrecision);
        }
  -     else if (equals(
  -                             s_sqrt1_2String,
  -                             theConstant.c_str(),
  -                             sizeof(s_sqrt1_2String) / sizeof(s_sqrt1_2String[0]) - 
1) == true)
  +     else if (equals(s_sqrt1_2String, theConstant) == true)
        {
  -             return doConvert(executionContext, s_sqrt1_2ValueString, 
sizeof(s_sqrt1_2ValueString) - 1, thePrecision);
  +             return doConvert(
  +                             executionContext,
  +                             s_sqrt1_2Values,
  +                             sizeof(s_sqrt1_2Values) / sizeof(s_sqrt1_2Values[0]),
  +                             thePrecision);
        }
  -     else if (equals(
  -                             s_sqrt2String,
  -                             theConstant.c_str(),
  -                             sizeof(s_sqrt2String) / sizeof(s_sqrt2String[0]) - 1) 
== true)
  +     else if (equals(s_sqrt2String, theConstant) == true)
        {
  -             return doConvert(executionContext, s_sqrt2ValueString, 
sizeof(s_sqrt2ValueString) - 1, thePrecision);
  +             return doConvert(
  +                             executionContext,
  +                             s_sqrt2Values,
  +                             sizeof(s_sqrt2Values) / sizeof(s_sqrt2Values[0]),
  +                             thePrecision);
        }
        else
        {
  
  
  
  1.2       +7 -7      xml-xalan/c/src/XalanEXSLT/XalanEXSLTMathImpl.hpp
  
  Index: XalanEXSLTMathImpl.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XalanEXSLT/XalanEXSLTMathImpl.hpp,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- XalanEXSLTMathImpl.hpp    26 Apr 2002 06:51:13 -0000      1.1
  +++ XalanEXSLTMathImpl.hpp    30 Apr 2002 04:41:33 -0000      1.2
  @@ -362,13 +362,13 @@
        static const XalanDOMChar       s_sqrt1_2String[];
        static const XalanDOMChar       s_sqrt2String[];
   
  -     static const char       s_eValueString[];
  -     static const char       s_ln10ValueString[];
  -     static const char       s_ln2ValueString[];
  -     static const char       s_log2EValueString[];
  -     static const char       s_piValueString[];
  -     static const char       s_sqrt1_2ValueString[];
  -     static const char       s_sqrt2ValueString[];
  +     static const double             s_eValues[];
  +     static const double             s_ln10Values[];
  +     static const double             s_ln2Values[];
  +     static const double             s_log2EValues[];
  +     static const double             s_piValues[];
  +     static const double             s_sqrt1_2Values[];
  +     static const double             s_sqrt2Values[];
   
   
        // Not implemented...
  
  
  
  1.2       +1 -773    xml-xalan/c/src/XalanEXSLT/XalanEXSLTString.cpp
  
  Index: XalanEXSLTString.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XalanEXSLT/XalanEXSLTString.cpp,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- XalanEXSLTString.cpp      26 Apr 2002 06:51:13 -0000      1.1
  +++ XalanEXSLTString.cpp      30 Apr 2002 04:41:33 -0000      1.2
  @@ -279,7 +279,7 @@
   
                if (thePaddingStringLength == 1)
                {
  -                     theResult.assign(theLength, thePaddingString[0]);
  +                     theResult.assign(XalanDOMString::size_type(theLength), 
thePaddingString[0]);
                }
                else
                {
  @@ -307,780 +307,8 @@
   
                return executionContext.getXObjectFactory().createString(theResult);
        }
  -#if 0
  -     const XalanDOMString::size_type         theTargetStringLength = 
theTargetString.length();
  -
  -     if (theTargetStringLength == thePaddingStringLength)
  -     {
  -             return XObjectPtr(args[0]);
  -     }
  -     else
  -     {
  -             if (theTargetStringLength > thePaddingStringLength)
  -             {
  -                     theResult.assign(theTargetString, 0, thePaddingStringLength);
  -             }
  -             else
  -             {
  -                     theResult.reserve(thePaddingStringLength);
  -
  -                     enum eAlignment { eCenter, eLeft, eRight };
  -
  -                     eAlignment      theAlignment = eLeft;
  -
  -                     if (theSize == 3)
  -                     {
  -                             const XalanDOMString&   theAlignmentString = 
args[2]->str();
  -
  -                             if (equals(
  -                                                     s_centerString,
  -                                                     theAlignmentString.c_str(),
  -                                                     sizeof(s_centerString) / 
sizeof(s_centerString[0]) - 1) == true)
  -                             {
  -                                     theAlignment = eCenter;
  -                             }
  -                             else if (equals(
  -                                                     s_rightString,
  -                                                     theAlignmentString.c_str(),
  -                                                     sizeof(s_rightString) / 
sizeof(s_rightString[0]) - 1) == true)
  -                             {
  -                                     theAlignment = eRight;
  -                             }
  -                     }
  -
  -                     if (theAlignment == eLeft)
  -                     {
  -                             theResult = theTargetString;
  -
  -                             theResult.append(thePaddingString, 
theTargetStringLength, thePaddingStringLength - theTargetStringLength);
  -                     }
  -                     else if (theAlignment == eRight)
  -                     {
  -                             theResult.assign(thePaddingString, 0, 
thePaddingStringLength - theTargetStringLength);
  -                             theResult.append(theTargetString);
  -                     }
  -                     else if (theAlignment == eCenter)
  -                     {
  -                             const XalanDOMString::size_type         theStartIndex =
  -                                     (thePaddingStringLength - 
theTargetStringLength) / 2;
  -
  -                             theResult.assign(thePaddingString, 0, theStartIndex);
  -
  -                             theResult.append(theTargetString);
  -
  -                             theResult.append(
  -                                     thePaddingString,
  -                                     theTargetStringLength + theStartIndex,
  -                                     thePaddingStringLength - theTargetStringLength 
- theStartIndex);
  -                     }
  -             }
  -     }
  -#endif
  -}
  -
  -
  -
  -#if 0
  -const XalanDOMString
  -XalanEXSLTFunctionHighest::getError() const
  -{
  -     return StaticStringToDOMString(XALAN_STATIC_UCODE_STRING("The EXSLT highest() 
function accepts one argument"));
  -}
  -
  -
  -
  -XObjectPtr
  -XalanEXSLTFunctionLowest::execute(
  -                     XPathExecutionContext&                  executionContext,
  -                     XalanNode*                                              
context,
  -                     const XObjectArgVectorType&             args,
  -                     const Locator*                                  locator) const
  -{
  -     if (args.size() != 1)
  -     {
  -             executionContext.error(getError(), context, locator);
  -     }
  -
  -     assert(args[0].null() == false);
  -
  -     return findNodes(executionContext, args[0]->nodeset(), 
DoubleSupport::lessThan);
  -}
  -
  -
  -
  -const XalanDOMString
  -XalanEXSLTFunctionLowest::getError() const
  -{
  -     return StaticStringToDOMString(XALAN_STATIC_UCODE_STRING("The EXSLT lowest() 
function accepts one argument"));
  -}
  -
  -
  -
  -template<class FunctionType>
  -XObjectPtr
  -findValue(
  -                     XPathExecutionContext&  executionContext,
  -                     const NodeRefListBase&  theNodeSet,
  -                     FunctionType                    theCompareFunction)
  -{
  -     const NodeRefListBase::size_type        theLength = theNodeSet.getLength();
  -
  -     if (theLength == 0)
  -     {
  -             return 
executionContext.getXObjectFactory().createNumber(DoubleSupport::getNaN());
  -     }
  -     else
  -     {
  -             const XPathExecutionContext::GetAndReleaseCachedString  
theGuard(executionContext);
  -
  -             XalanDOMString&         theStringValue = theGuard.get();
  -
  -             assert(theNodeSet.item(0) != 0);
  -
  -             DOMServices::getNodeData(*theNodeSet.item(0), theStringValue);
  -
  -             double  theResult = DOMStringToDouble(theStringValue);
  -
  -             for (NodeRefListBase::size_type i = 1; i < theLength; ++i)
  -             {
  -                     assert(theNodeSet.item(i) != 0);
  -
  -                     DOMServices::getNodeData(*theNodeSet.item(i), theStringValue);
  -
  -                     const double    theCurrent = DOMStringToDouble(theStringValue);
  -
  -                     if (DoubleSupport::isNaN(theCurrent) == true)
  -                     {
  -                             theResult = theCurrent;
  -
  -                             break;
  -                     }
  -                     else if (theCompareFunction(theCurrent, theResult) == true)
  -                     {
  -                             theResult = theCurrent;
  -                     }
  -
  -                     theStringValue.clear();
  -             }
  -
  -             return executionContext.getXObjectFactory().createNumber(theResult);
  -     }
  -}
  -
  -
  -
  -XObjectPtr
  -XalanEXSLTFunctionMin::execute(
  -                     XPathExecutionContext&                  executionContext,
  -                     XalanNode*                                              
context,
  -                     const XObjectArgVectorType&             args,
  -                     const Locator*                                  locator) const
  -{
  -     if (args.size() != 1)
  -     {
  -             executionContext.error(getError(), context, locator);
  -     }
  -
  -     assert(args[0].null() == false);
  -
  -     return findValue(executionContext, args[0]->nodeset(), 
DoubleSupport::lessThan);
  -}
  -
  -
  -
  -const XalanDOMString
  -XalanEXSLTFunctionMin::getError() const
  -{
  -     return StaticStringToDOMString(XALAN_STATIC_UCODE_STRING("The EXSLT min() 
function accepts one argument"));
  -}
  -
  -
  -
  -XObjectPtr
  -XalanEXSLTFunctionMax::execute(
  -                     XPathExecutionContext&                  executionContext,
  -                     XalanNode*                                              
context,
  -                     const XObjectArgVectorType&             args,
  -                     const Locator*                                  locator) const
  -{
  -     if (args.size() != 1)
  -     {
  -             executionContext.error(getError(), context, locator);
  -     }
  -
  -     assert(args[0].null() == false);
  -
  -     return findValue(executionContext, args[0]->nodeset(), 
DoubleSupport::greaterThan);
  -}
  -
  -
  -
  -const XalanDOMString
  -XalanEXSLTFunctionMax::getError() const
  -{
  -     return StaticStringToDOMString(XALAN_STATIC_UCODE_STRING("The EXSLT max() 
function accepts one argument"));
  -}
  -
  -
  -
  -XObjectPtr
  -XalanEXSLTFunctionAbs::execute(
  -                     XPathExecutionContext&                  executionContext,
  -                     XalanNode*                                              
context,
  -                     const XObjectArgVectorType&             args,
  -                     const Locator*                                  locator) const
  -{
  -     if (args.size() != 1)
  -     {
  -             executionContext.error(getError(), context, locator);
  -     }
  -
  -     assert(args[0].null() == false);
  -
  -#if defined(XALAN_STRICT_ANSI_HEADERS)
  -     using std::fabs;
  -#endif
  -
  -     return executionContext.getXObjectFactory().createNumber(fabs(args[0]->num()));
   }
   
  -
  -
  -const XalanDOMString
  -XalanEXSLTFunctionAbs::getError() const
  -{
  -     return StaticStringToDOMString(XALAN_STATIC_UCODE_STRING("The EXSLT abs() 
function accepts one argument"));
  -}
  -
  -
  -
  -XObjectPtr
  -XalanEXSLTFunctionAcos::execute(
  -                     XPathExecutionContext&                  executionContext,
  -                     XalanNode*                                              
context,
  -                     const XObjectArgVectorType&             args,
  -                     const Locator*                                  locator) const
  -{
  -     if (args.size() != 1)
  -     {
  -             executionContext.error(getError(), context, locator);
  -     }
  -
  -     assert(args[0].null() == false);
  -
  -#if defined(XALAN_STRICT_ANSI_HEADERS)
  -     using std::acos;
  -#endif
  -
  -     return executionContext.getXObjectFactory().createNumber(acos(args[0]->num()));
  -}
  -
  -
  -
  -const XalanDOMString
  -XalanEXSLTFunctionAcos::getError() const
  -{
  -     return StaticStringToDOMString(XALAN_STATIC_UCODE_STRING("The EXSLT acos() 
function accepts one argument"));
  -}
  -
  -
  -
  -XObjectPtr
  -XalanEXSLTFunctionAsin::execute(
  -                     XPathExecutionContext&                  executionContext,
  -                     XalanNode*                                              
context,
  -                     const XObjectArgVectorType&             args,
  -                     const Locator*                                  locator) const
  -{
  -     if (args.size() != 1)
  -     {
  -             executionContext.error(getError(), context, locator);
  -     }
  -
  -     assert(args[0].null() == false);
  -
  -#if defined(XALAN_STRICT_ANSI_HEADERS)
  -     using std::asin;
  -#endif
  -
  -     return executionContext.getXObjectFactory().createNumber(asin(args[0]->num()));
  -}
  -
  -
  -
  -const XalanDOMString
  -XalanEXSLTFunctionAsin::getError() const
  -{
  -     return StaticStringToDOMString(XALAN_STATIC_UCODE_STRING("The EXSLT asin() 
function accepts one argument"));
  -}
  -
  -
  -
  -XObjectPtr
  -XalanEXSLTFunctionAtan::execute(
  -                     XPathExecutionContext&                  executionContext,
  -                     XalanNode*                                              
context,
  -                     const XObjectArgVectorType&             args,
  -                     const Locator*                                  locator) const
  -{
  -     if (args.size() != 1)
  -     {
  -             executionContext.error(getError(), context, locator);
  -     }
  -
  -     assert(args[0].null() == false);
  -
  -#if defined(XALAN_STRICT_ANSI_HEADERS)
  -     using std::atan;
  -#endif
  -
  -     return executionContext.getXObjectFactory().createNumber(atan(args[0]->num()));
  -}
  -
  -
  -
  -const XalanDOMString
  -XalanEXSLTFunctionAtan::getError() const
  -{
  -     return StaticStringToDOMString(XALAN_STATIC_UCODE_STRING("The EXSLT atan() 
function accepts one argument"));
  -}
  -
  -
  -
  -XObjectPtr
  -XalanEXSLTFunctionAtan2::execute(
  -                     XPathExecutionContext&                  executionContext,
  -                     XalanNode*                                              
context,
  -                     const XObjectArgVectorType&             args,
  -                     const Locator*                                  locator) const
  -{
  -     if (args.size() != 2)
  -     {
  -             executionContext.error(getError(), context, locator);
  -     }
  -
  -     assert(args[0].null() == false && args[1].null() == false);
  -
  -#if defined(XALAN_STRICT_ANSI_HEADERS)
  -     using std::atan2;
  -#endif
  -
  -     return executionContext.getXObjectFactory().createNumber(atan2(args[0]->num(), 
args[1]->num()));
  -}
  -
  -
  -
  -const XalanDOMString
  -XalanEXSLTFunctionAtan2::getError() const
  -{
  -     return StaticStringToDOMString(XALAN_STATIC_UCODE_STRING("The EXSLT atan2() 
function accepts two arguments"));
  -}
  -
  -
  -
  -const XalanDOMChar   XalanEXSLTFunctionConstant::s_eString[] =
  -{
  -     XalanUnicode::charLetter_E,
  -     0
  -};
  -
  -
  -
  -const XalanDOMChar   XalanEXSLTFunctionConstant::s_ln10String[] =
  -{
  -     XalanUnicode::charLetter_L,
  -     XalanUnicode::charLetter_N,
  -     XalanUnicode::charDigit_1,
  -     XalanUnicode::charDigit_0,
  -     0
  -};
  -
  -
  -
  -const XalanDOMChar   XalanEXSLTFunctionConstant::s_ln2String[] =
  -{
  -     XalanUnicode::charLetter_L,
  -     XalanUnicode::charLetter_N,
  -     XalanUnicode::charDigit_2,
  -     0
  -};
  -
  -
  -
  -const XalanDOMChar   XalanEXSLTFunctionConstant::s_log2EString[] =
  -{
  -     XalanUnicode::charLetter_L,
  -     XalanUnicode::charLetter_O,
  -     XalanUnicode::charLetter_G,
  -     XalanUnicode::charDigit_2,
  -     XalanUnicode::charLetter_E,
  -     0
  -};
  -
  -
  -
  -const XalanDOMChar   XalanEXSLTFunctionConstant::s_piString[] =
  -{
  -     XalanUnicode::charLetter_P,
  -     XalanUnicode::charLetter_I,
  -     0
  -};
  -
  -
  -
  -const XalanDOMChar   XalanEXSLTFunctionConstant::s_sqrt1_2String[] =
  -{
  -     XalanUnicode::charLetter_S,
  -     XalanUnicode::charLetter_Q,
  -     XalanUnicode::charLetter_R,
  -     XalanUnicode::charLetter_T,
  -     XalanUnicode::charDigit_1,
  -     XalanUnicode::charLowLine,
  -     XalanUnicode::charDigit_2,
  -     0
  -};
  -
  -
  -
  -const XalanDOMChar   XalanEXSLTFunctionConstant::s_sqrt2String[] =
  -{
  -     XalanUnicode::charLetter_S,
  -     XalanUnicode::charLetter_Q,
  -     XalanUnicode::charLetter_R,
  -     XalanUnicode::charLetter_T,
  -     XalanUnicode::charLetter_R,
  -     XalanUnicode::charDigit_2,
  -     0
  -};
  -
  -
  -
  -const char   XalanEXSLTFunctionConstant::s_eValueString[] =
  -     "2.71828182845904523536028747135266249775724709369996";
  -
  -const char   XalanEXSLTFunctionConstant::s_ln10ValueString[] =
  -     "2.302585092994046";
  -
  -const char   XalanEXSLTFunctionConstant::s_ln2ValueString[] =
  -     "0.69314718055994530941723212145817656807550013436025";
  -
  -const char   XalanEXSLTFunctionConstant::s_log2EValueString[] =
  -     "1.4426950408889633";
  -
  -const char   XalanEXSLTFunctionConstant::s_piValueString[] =
  -     "3.1415926535897932384626433832795028841971693993751";
  -
  -const char   XalanEXSLTFunctionConstant::s_sqrt1_2ValueString[] =
  -     "0.7071067811865476";
  -
  -const char   XalanEXSLTFunctionConstant::s_sqrt2ValueString[] =
  -     "1.41421356237309504880168872420969807856967187537694";
  -
  -
  -
  -XObjectPtr
  -doConvert(
  -                     XPathExecutionContext&  executionContext,
  -                     const char*                             theValue,
  -                     size_t                                  theSize,
  -                     double                                  thePrecision)
  -{
  -     return executionContext.getXObjectFactory().createNumber(
  -             DoubleSupport::toDouble(
  -                     XalanDOMString(theValue, 
XalanDOMString::size_type(thePrecision <= theSize ? thePrecision : theSize))));
  -}
  -
  -
  -
  -XObjectPtr
  -XalanEXSLTFunctionConstant::execute(
  -                     XPathExecutionContext&                  executionContext,
  -                     XalanNode*                                              
context,
  -                     const XObjectArgVectorType&             args,
  -                     const Locator*                                  locator) const
  -{
  -     if (args.size() != 2)
  -     {
  -             executionContext.error(getError(), context, locator);
  -     }
  -
  -     assert(args[0].null() == false && args[1].null() == false);
  -
  -     const XalanDOMString&   theConstant = args[0]->str();
  -     const double                    thePrecision = 
DoubleSupport::round(args[1]->num());
  -
  -     if (equals(
  -                             s_eString,
  -                             theConstant.c_str(),
  -                             sizeof(s_eString) / sizeof(s_eString[0]) - 1) == true)
  -     {
  -             return doConvert(executionContext, s_eValueString, 
sizeof(s_eValueString) - 1, thePrecision);
  -     }
  -     else if (equals(
  -                             s_ln10String,
  -                             theConstant.c_str(),
  -                             sizeof(s_ln10String) / sizeof(s_ln10String[0]) - 1) == 
true)
  -     {
  -             return doConvert(executionContext, s_ln10ValueString, 
sizeof(s_ln10ValueString) - 1, thePrecision);
  -     }
  -     else if (equals(
  -                             s_ln2String,
  -                             theConstant.c_str(),
  -                             sizeof(s_ln2String) / sizeof(s_ln2String[0]) - 1)  == 
true)
  -     {
  -             return doConvert(executionContext, s_ln2ValueString, 
sizeof(s_ln2ValueString) - 1, thePrecision);
  -     }
  -     else if (equals(
  -                             s_log2EString,
  -                             theConstant.c_str(),
  -                             sizeof(s_log2EString) / sizeof(s_log2EString[0]) - 1) 
== true)
  -     {
  -             return doConvert(executionContext, s_log2EValueString, 
sizeof(s_log2EValueString) - 1, thePrecision);
  -     }
  -     else if (equals(
  -                             s_piString,
  -                             theConstant.c_str(),
  -                             sizeof(s_piString) / sizeof(s_piString[0]) - 1) == 
true)
  -     {
  -             return doConvert(executionContext, s_piValueString, 
sizeof(s_piValueString) - 1, thePrecision);
  -     }
  -     else if (equals(
  -                             s_sqrt1_2String,
  -                             theConstant.c_str(),
  -                             sizeof(s_sqrt1_2String) / sizeof(s_sqrt1_2String[0]) - 
1) == true)
  -     {
  -             return doConvert(executionContext, s_sqrt1_2ValueString, 
sizeof(s_sqrt1_2ValueString) - 1, thePrecision);
  -     }
  -     else if (equals(
  -                             s_sqrt2String,
  -                             theConstant.c_str(),
  -                             sizeof(s_sqrt2String) / sizeof(s_sqrt2String[0]) - 1) 
== true)
  -     {
  -             return doConvert(executionContext, s_sqrt2ValueString, 
sizeof(s_sqrt2ValueString) - 1, thePrecision);
  -     }
  -     else
  -     {
  -             return 
executionContext.getXObjectFactory().createNumber(DoubleSupport::getNaN());
  -     }
  -}
  -
  -
  -
  -XObjectPtr
  -XalanEXSLTFunctionCos::execute(
  -                     XPathExecutionContext&                  executionContext,
  -                     XalanNode*                                              
context,
  -                     const XObjectArgVectorType&             args,
  -                     const Locator*                                  locator) const
  -{
  -     if (args.size() != 1)
  -     {
  -             executionContext.error(getError(), context, locator);
  -     }
  -
  -     assert(args[0].null() == false);
  -
  -#if defined(XALAN_STRICT_ANSI_HEADERS)
  -     using std::cos;
  -#endif
  -
  -     return executionContext.getXObjectFactory().createNumber(cos(args[0]->num()));
  -}
  -
  -
  -
  -const XalanDOMString
  -XalanEXSLTFunctionCos::getError() const
  -{
  -     return StaticStringToDOMString(XALAN_STATIC_UCODE_STRING("The EXSLT cos() 
function accepts one argument"));
  -}
  -
  -
  -
  -XObjectPtr
  -XalanEXSLTFunctionExp::execute(
  -                     XPathExecutionContext&                  executionContext,
  -                     XalanNode*                                              
context,
  -                     const XObjectArgVectorType&             args,
  -                     const Locator*                                  locator) const
  -{
  -     if (args.size() != 1)
  -     {
  -             executionContext.error(getError(), context, locator);
  -     }
  -
  -     assert(args[0].null() == false);
  -
  -#if defined(XALAN_STRICT_ANSI_HEADERS)
  -     using std::exp;
  -#endif
  -
  -     return executionContext.getXObjectFactory().createNumber(exp(args[0]->num()));
  -}
  -
  -
  -
  -const XalanDOMString
  -XalanEXSLTFunctionExp::getError() const
  -{
  -     return StaticStringToDOMString(XALAN_STATIC_UCODE_STRING("The EXSLT exp() 
function accepts one argument"));
  -}
  -
  -
  -
  -XObjectPtr
  -XalanEXSLTFunctionLog::execute(
  -                     XPathExecutionContext&                  executionContext,
  -                     XalanNode*                                              
context,
  -                     const XObjectArgVectorType&             args,
  -                     const Locator*                                  locator) const
  -{
  -     if (args.size() != 1)
  -     {
  -             executionContext.error(getError(), context, locator);
  -     }
  -
  -     assert(args[0].null() == false);
  -
  -#if defined(XALAN_STRICT_ANSI_HEADERS)
  -     using std::log;
  -#endif
  -
  -     return executionContext.getXObjectFactory().createNumber(log(args[0]->num()));
  -}
  -
  -
  -
  -const XalanDOMString
  -XalanEXSLTFunctionLog::getError() const
  -{
  -     return StaticStringToDOMString(XALAN_STATIC_UCODE_STRING("The EXSLT log() 
function accepts one argument"));
  -}
  -
  -
  -
  -XObjectPtr
  -XalanEXSLTFunctionPower::execute(
  -                     XPathExecutionContext&                  executionContext,
  -                     XalanNode*                                              
context,
  -                     const XObjectArgVectorType&             args,
  -                     const Locator*                                  locator) const
  -{
  -     if (args.size() != 2)
  -     {
  -             executionContext.error(getError(), context, locator);
  -     }
  -
  -     assert(args[0].null() == false && args[1].null() == false);
  -
  -#if defined(XALAN_STRICT_ANSI_HEADERS)
  -     using std::pow;
  -#endif
  -
  -     return executionContext.getXObjectFactory().createNumber(pow(args[0]->num(), 
args[1]->num()));
  -}
  -
  -
  -
  -const XalanDOMString
  -XalanEXSLTFunctionPower::getError() const
  -{
  -     return StaticStringToDOMString(XALAN_STATIC_UCODE_STRING("The EXSLT power() 
function accepts two arguments"));
  -}
  -
  -
  -
  -XObjectPtr
  -XalanEXSLTFunctionSin::execute(
  -                     XPathExecutionContext&                  executionContext,
  -                     XalanNode*                                              
context,
  -                     const XObjectArgVectorType&             args,
  -                     const Locator*                                  locator) const
  -{
  -     if (args.size() != 1)
  -     {
  -             executionContext.error(getError(), context, locator);
  -     }
  -
  -     assert(args[0].null() == false);
  -
  -#if defined(XALAN_STRICT_ANSI_HEADERS)
  -     using std::sin;
  -#endif
  -
  -     return executionContext.getXObjectFactory().createNumber(sin(args[0]->num()));
  -}
  -
  -
  -
  -const XalanDOMString
  -XalanEXSLTFunctionSin::getError() const
  -{
  -     return StaticStringToDOMString(XALAN_STATIC_UCODE_STRING("The EXSLT sin() 
function accepts one argument"));
  -}
  -
  -
  -
  -XObjectPtr
  -XalanEXSLTFunctionSqrt::execute(
  -                     XPathExecutionContext&                  executionContext,
  -                     XalanNode*                                              
context,
  -                     const XObjectArgVectorType&             args,
  -                     const Locator*                                  locator) const
  -{
  -     if (args.size() != 1)
  -     {
  -             executionContext.error(getError(), context, locator);
  -     }
  -
  -     assert(args[0].null() == false);
  -
  -#if defined(XALAN_STRICT_ANSI_HEADERS)
  -     using std::sqrt;
  -#endif
  -
  -     return executionContext.getXObjectFactory().createNumber(sqrt(args[0]->num()));
  -}
  -
  -
  -
  -const XalanDOMString
  -XalanEXSLTFunctionSqrt::getError() const
  -{
  -     return StaticStringToDOMString(XALAN_STATIC_UCODE_STRING("The EXSLT sqrt() 
function accepts one argument"));
  -}
  -
  -
  -
  -XObjectPtr
  -XalanEXSLTFunctionTan::execute(
  -                     XPathExecutionContext&                  executionContext,
  -                     XalanNode*                                              
context,
  -                     const XObjectArgVectorType&             args,
  -                     const Locator*                                  locator) const
  -{
  -     if (args.size() != 1)
  -     {
  -             executionContext.error(getError(), context, locator);
  -     }
  -
  -     assert(args[0].null() == false);
  -
  -#if defined(XALAN_STRICT_ANSI_HEADERS)
  -     using std::tan;
  -#endif
  -
  -     return executionContext.getXObjectFactory().createNumber(tan(args[0]->num()));
  -}
  -
  -
  -
  -const XalanDOMString
  -XalanEXSLTFunctionTan::getError() const
  -{
  -     return StaticStringToDOMString(XALAN_STATIC_UCODE_STRING("The EXSLT tan() 
function accepts one argument"));
  -}
  -#endif
   
   
   static const XalanDOMChar    s_stringNamespace[] =
  
  
  

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

Reply via email to