dbertoni    01/02/01 10:31:27

  Modified:    c/src/PlatformSupport DoubleSupport.cpp DoubleSupport.hpp
  Log:
  Moved rounding function from XPath/FunctionRound to here.
  
  Revision  Changes    Path
  1.19      +45 -0     xml-xalan/c/src/PlatformSupport/DoubleSupport.cpp
  
  Index: DoubleSupport.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/PlatformSupport/DoubleSupport.cpp,v
  retrieving revision 1.18
  retrieving revision 1.19
  diff -u -r1.18 -r1.19
  --- DoubleSupport.cpp 2001/01/16 02:42:13     1.18
  +++ DoubleSupport.cpp 2001/02/01 18:31:25     1.19
  @@ -883,3 +883,48 @@
   }
   
   #endif
  +
  +
  +double
  +DoubleSupport::round(double          theValue)
  +{
  +     if (isNaN(theValue))
  +     {
  +             return getNaN();
  +     }
  +     else if (isPositiveInfinity(theValue))
  +     {
  +             return getPositiveInfinity();
  +     }
  +     if (isNegativeInfinity(theValue))
  +     {
  +             return getNegativeInfinity();
  +     }
  +     else if (theValue == 0)
  +     {
  +             return 0.0;
  +     }
  +     else if (theValue > 0)
  +     {
  +             return long(theValue + 0.5);
  +     }
  +     else
  +     {
  +             // Negative numbers are a special case.  Any time we
  +             // have -0.5 as the fractional part, we have to
  +             // round up (toward 0), rather than down.
  +             double                  intPart = 0;
  +
  +             const double    fracPart = modf(theValue, &intPart);
  +
  +             if (fracPart == -0.5)
  +             {
  +                     // special case -- we have have to round toward 0...
  +                     return long(theValue + 0.5);
  +             }
  +             else
  +             {
  +                     return long(theValue - 0.5);
  +             }
  +     }
  +}
  
  
  
  1.11      +10 -0     xml-xalan/c/src/PlatformSupport/DoubleSupport.hpp
  
  Index: DoubleSupport.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/PlatformSupport/DoubleSupport.hpp,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- DoubleSupport.hpp 2001/01/16 02:42:13     1.10
  +++ DoubleSupport.hpp 2001/02/01 18:31:26     1.11
  @@ -593,6 +593,16 @@
        static double
        toDouble(const XalanDOMChar*    theString);
   
  +     /**
  +      * Round a number according to the XPath
  +      * rules.
  +      *
  +      * @param theValue The value to round.
  +      * @return The result of the rounding
  +      */
  +     static double
  +     round(double    theValue);
  +
   private:
   
        static const double                             s_NaN;
  
  
  

Reply via email to