peiyongz    2003/02/02 15:54:44

  Modified:    c/src/xercesc/util XMLNumber.hpp XMLFloat.cpp XMLDouble.cpp
                        XMLDateTime.hpp XMLDateTime.cpp XMLBigDecimal.hpp
                        XMLBigDecimal.cpp XMLAbstractDoubleFloat.hpp
                        XMLAbstractDoubleFloat.cpp
  Log:
  getFormattedString() added to return original and converted value.
  
  Revision  Changes    Path
  1.4       +13 -1     xml-xerces/c/src/xercesc/util/XMLNumber.hpp
  
  Index: XMLNumber.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/xercesc/util/XMLNumber.hpp,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- XMLNumber.hpp     30 Jan 2003 21:55:22 -0000      1.3
  +++ XMLNumber.hpp     2 Feb 2003 23:54:43 -0000       1.4
  @@ -57,6 +57,9 @@
   /*
    * $Id$
    * $Log$
  + * Revision 1.4  2003/02/02 23:54:43  peiyongz
  + * getFormattedString() added to return original and converted value.
  + *
    * Revision 1.3  2003/01/30 21:55:22  tng
    * Performance: create getRawData which is similar to toString but return the 
internal data directly, user is not required to delete the returned memory.
    *
  @@ -103,6 +106,15 @@
        *  the returned buffer
         */
       virtual XMLCh*     getRawData() const = 0;    
  +
  +    /**
  +     *  Return the original and converted value of the original data.
  +     *  (applicable to double/float)
  +     *
  +     *  The internal buffer is returned directly, user is not required 
  +     *  to delete the returned buffer
  +     */
  +    virtual const XMLCh*     getFormattedString() const = 0;    
   
        /**
         * Returns the sign of this number
  
  
  
  1.8       +13 -1     xml-xerces/c/src/xercesc/util/XMLFloat.cpp
  
  Index: XMLFloat.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/xercesc/util/XMLFloat.cpp,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- XMLFloat.cpp      30 Jan 2003 19:14:43 -0000      1.7
  +++ XMLFloat.cpp      2 Feb 2003 23:54:43 -0000       1.8
  @@ -57,6 +57,9 @@
   /*
    * $Id$
    * $Log$
  + * Revision 1.8  2003/02/02 23:54:43  peiyongz
  + * getFormattedString() added to return original and converted value.
  + *
    * Revision 1.7  2003/01/30 19:14:43  tng
    * On some platforms like Solaris strtod will return -0.0.   So need to consider 
this scenario as well.
    *
  @@ -170,11 +173,13 @@
               if (fValue > (-1)*DBL_MIN)
               {
                   fType = NegZero;
  +                fDataConverted = true;
                   fValue = 0;
               }
               else
               {
                   fType = NegINF;
  +                fDataConverted = true;
               }
           }
           else if ( fValue > 0)
  @@ -182,16 +187,19 @@
               if (fValue < DBL_MIN )
               {
                   fType = PosZero;
  +                fDataConverted = true;
                   fValue = 0;
               }
               else
               {
                   fType = PosINF;
  +                fDataConverted = true;
               }
           }
           else
           {
               fType = (getSign() == 1) ? PosZero : NegZero;
  +            fDataConverted = true;
           }
       }
       else
  @@ -202,20 +210,24 @@
           if (fValue < (-1) * FLT_MAX)
           {
               fType = NegINF;
  +            fDataConverted = true;
           }
           else if (fValue > (-1)*FLT_MIN && fValue < 0)
           {
               fType = NegZero;
  +            fDataConverted = true;
               fValue = 0;
           }
           else if (fValue > 0 && fValue < FLT_MIN )
           {
               fType = PosZero;
  +            fDataConverted = true;
               fValue = 0;
           }
           else if  (fValue > FLT_MAX)
           {
               fType = PosINF;
  +            fDataConverted = true;
           }
       }
   }
  
  
  
  1.7       +9 -1      xml-xerces/c/src/xercesc/util/XMLDouble.cpp
  
  Index: XMLDouble.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/xercesc/util/XMLDouble.cpp,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- XMLDouble.cpp     30 Jan 2003 19:14:43 -0000      1.6
  +++ XMLDouble.cpp     2 Feb 2003 23:54:43 -0000       1.7
  @@ -57,6 +57,9 @@
   /*
    * $Id$
    * $Log$
  + * Revision 1.7  2003/02/02 23:54:43  peiyongz
  + * getFormattedString() added to return original and converted value.
  + *
    * Revision 1.6  2003/01/30 19:14:43  tng
    * On some platforms like Solaris strtod will return -0.0.   So need to consider 
this scenario as well.
    *
  @@ -175,11 +178,13 @@
               if (fValue > (-1)*DBL_MIN)
               {
                   fType = NegZero;
  +                fDataConverted = true;
                   fValue = 0;
               }
               else
               {
                   fType = NegINF;
  +                fDataConverted = true;
               }
           }
           else if ( fValue > 0)
  @@ -187,16 +192,19 @@
               if (fValue < DBL_MIN )
               {
                   fType = PosZero;
  +                fDataConverted = true;
                   fValue = 0;
               }
               else
               {
                   fType = PosINF;
  +                fDataConverted = true;
               }
           }
           else
           {
               fType = (getSign() == 1) ? PosZero : NegZero;
  +            fDataConverted = true;
           }
   
       }
  
  
  
  1.4       +6 -1      xml-xerces/c/src/xercesc/util/XMLDateTime.hpp
  
  Index: XMLDateTime.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/xercesc/util/XMLDateTime.hpp,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- XMLDateTime.hpp   30 Jan 2003 21:55:22 -0000      1.3
  +++ XMLDateTime.hpp   2 Feb 2003 23:54:43 -0000       1.4
  @@ -57,6 +57,9 @@
   /*
    * $Id$
    * $Log$
  + * Revision 1.4  2003/02/02 23:54:43  peiyongz
  + * getFormattedString() added to return original and converted value.
  + *
    * Revision 1.3  2003/01/30 21:55:22  tng
    * Performance: create getRawData which is similar to toString but return the 
internal data directly, user is not required to delete the returned memory.
    *
  @@ -152,6 +155,8 @@
       virtual XMLCh*        toString() const;
       
       virtual XMLCh*        getRawData() const;
  +
  +    virtual const XMLCh*  getFormattedString() const;
   
       virtual int           getSign() const;
   
  
  
  
  1.6       +10 -1     xml-xerces/c/src/xercesc/util/XMLDateTime.cpp
  
  Index: XMLDateTime.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/xercesc/util/XMLDateTime.cpp,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- XMLDateTime.cpp   30 Jan 2003 21:55:22 -0000      1.5
  +++ XMLDateTime.cpp   2 Feb 2003 23:54:43 -0000       1.6
  @@ -57,6 +57,9 @@
   /*
    * $Id$
    * $Log$
  + * Revision 1.6  2003/02/02 23:54:43  peiyongz
  + * getFormattedString() added to return original and converted value.
  + *
    * Revision 1.5  2003/01/30 21:55:22  tng
    * Performance: create getRawData which is similar to toString but return the 
internal data directly, user is not required to delete the returned memory.
    *
  @@ -514,6 +517,12 @@
   {
       assertBuffer();    
       return fBuffer;
  +}
  +
  +
  +const XMLCh*  XMLDateTime::getFormattedString() const
  +{
  +    return getRawData();
   }
   
   int XMLDateTime::getSign() const
  
  
  
  1.6       +3 -1      xml-xerces/c/src/xercesc/util/XMLBigDecimal.hpp
  
  Index: XMLBigDecimal.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/xercesc/util/XMLBigDecimal.hpp,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- XMLBigDecimal.hpp 30 Jan 2003 21:55:22 -0000      1.5
  +++ XMLBigDecimal.hpp 2 Feb 2003 23:54:43 -0000       1.6
  @@ -108,6 +108,8 @@
       
       virtual XMLCh*        getRawData() const;
   
  +    virtual const XMLCh*  getFormattedString() const;
  +
       virtual int           getSign() const;
   
       XMLBigInteger*        getValue() const;
  
  
  
  1.5       +8 -0      xml-xerces/c/src/xercesc/util/XMLBigDecimal.cpp
  
  Index: XMLBigDecimal.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/xercesc/util/XMLBigDecimal.cpp,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- XMLBigDecimal.cpp 30 Jan 2003 21:55:22 -0000      1.4
  +++ XMLBigDecimal.cpp 2 Feb 2003 23:54:43 -0000       1.5
  @@ -56,6 +56,9 @@
   
   /*
    * $Log$
  + * Revision 1.5  2003/02/02 23:54:43  peiyongz
  + * getFormattedString() added to return original and converted value.
  + *
    * Revision 1.4  2003/01/30 21:55:22  tng
    * Performance: create getRawData which is similar to toString but return the 
internal data directly, user is not required to delete the returned memory.
    *
  @@ -360,6 +363,11 @@
   }
   
   XMLCh*  XMLBigDecimal::getRawData() const
  +{
  +    return fRawData;
  +}
  +
  +const XMLCh*  XMLBigDecimal::getFormattedString() const
   {
       return fRawData;
   }
  
  
  
  1.8       +20 -1     xml-xerces/c/src/xercesc/util/XMLAbstractDoubleFloat.hpp
  
  Index: XMLAbstractDoubleFloat.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/xercesc/util/XMLAbstractDoubleFloat.hpp,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- XMLAbstractDoubleFloat.hpp        30 Jan 2003 21:55:22 -0000      1.7
  +++ XMLAbstractDoubleFloat.hpp        2 Feb 2003 23:54:43 -0000       1.8
  @@ -57,6 +57,9 @@
   /*
    * $Id$
    * $Log$
  + * Revision 1.8  2003/02/02 23:54:43  peiyongz
  + * getFormattedString() added to return original and converted value.
  + *
    * Revision 1.7  2003/01/30 21:55:22  tng
    * Performance: create getRawData which is similar to toString but return the 
internal data directly, user is not required to delete the returned memory.
    *
  @@ -151,6 +154,8 @@
       
       virtual XMLCh*        getRawData() const;
   
  +    virtual const XMLCh*  getFormattedString() const;
  +
       virtual int           getSign() const;
   
   protected:
  @@ -199,13 +204,27 @@
       static int            compareSpecial(const XMLAbstractDoubleFloat* const 
specialValue
                                          , const XMLAbstractDoubleFloat* const 
normalValue);
   
  +    void                  formatString();
  +
   protected:
       double                  fValue;
       LiteralType             fType;
  +    bool                    fDataConverted;
   
   private:
       int                     fSign;
       XMLCh*                  fRawData;
  +
  +    //
  +    // If the original string is not lexcially the same as the five
  +    // special value notations, and the value is converted to
  +    // special value due underlying platform restriction on data
  +    // representation, then this string is constructed and
  +    // takes the form "original_string (special_value_notation)", 
  +    // otherwise it is empty.
  +    //
  +    XMLCh*                  fFormattedString;
  +
   };
   
   inline bool XMLAbstractDoubleFloat::isSpecialValue() const
  
  
  
  1.9       +71 -11    xml-xerces/c/src/xercesc/util/XMLAbstractDoubleFloat.cpp
  
  Index: XMLAbstractDoubleFloat.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/xercesc/util/XMLAbstractDoubleFloat.cpp,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- XMLAbstractDoubleFloat.cpp        30 Jan 2003 21:55:22 -0000      1.8
  +++ XMLAbstractDoubleFloat.cpp        2 Feb 2003 23:54:43 -0000       1.9
  @@ -57,6 +57,9 @@
   /*
    * $Id$
    * $Log$
  + * Revision 1.9  2003/02/02 23:54:43  peiyongz
  + * getFormattedString() added to return original and converted value.
  + *
    * Revision 1.8  2003/01/30 21:55:22  tng
    * Performance: create getRawData which is similar to toString but return the 
internal data directly, user is not required to delete the returned memory.
    *
  @@ -114,14 +117,17 @@
   XMLAbstractDoubleFloat::XMLAbstractDoubleFloat()
   :fValue(0)
   ,fType(Normal)
  +,fDataConverted(false)
   ,fSign(0)
   ,fRawData(0)
  +,fFormattedString(0)
   {
   }
   
   XMLAbstractDoubleFloat::~XMLAbstractDoubleFloat()
   {
        delete [] fRawData;
  +     delete [] fFormattedString;
   }
   
   void XMLAbstractDoubleFloat::init(const XMLCh* const strValue)
  @@ -141,37 +147,35 @@
       {
           fType = NegINF;
           fSign = -1;
  -        return;
       }
       else if (XMLString::equals(tmpStrValue, XMLUni::fgNegZeroString) )
       {
           fType = NegZero;
           fSign = -1;
  -        return;
       }
       else if (XMLString::equals(tmpStrValue, XMLUni::fgPosZeroString) )
       {
           fType = PosZero;
           fSign = 1;
  -        return;
       }
       else if (XMLString::equals(tmpStrValue, XMLUni::fgPosINFString) )
       {
           fType = PosINF;
           fSign = 1;
  -        return;
       }
       else if (XMLString::equals(tmpStrValue, XMLUni::fgNaNString) )
       {
           fType = NaN;
           fSign = 1;
  -        return;
  +    }
  +    else
  +        //
  +        // Normal case
  +        //
  +    {
  +        checkBoundary(tmpStrValue);
       }
   
  -    //
  -    // Normal case
  -    //
  -    checkBoundary(tmpStrValue);
   }
   
   //
  @@ -186,6 +190,62 @@
   {
       return fRawData;
   }
  +
  +const XMLCh*  XMLAbstractDoubleFloat::getFormattedString() const
  +{
  +    if (!fDataConverted)
  +    {
  +        return fRawData;
  +    }
  +    else 
  +    {
  +        if (!fFormattedString)       
  +        {
  +            XMLAbstractDoubleFloat *temp = (XMLAbstractDoubleFloat *) this;
  +            temp->formatString();
  +        }
  +
  +        return fFormattedString;           
  +    }
  +
  +}
  +
  +void XMLAbstractDoubleFloat::formatString()
  +{
  +
  +    unsigned int rawDataLen = XMLString::stringLen(fRawData);
  +    fFormattedString = new XMLCh [ rawDataLen + 8];
  +    for (unsigned int i = 0; i < rawDataLen + 8; i++)
  +        fFormattedString[i] = chNull;
  +
  +    XMLString::copyString(fFormattedString, fRawData);
  +
  +    fFormattedString[rawDataLen] = chSpace;
  +    fFormattedString[rawDataLen + 1] = chOpenParen;
  +
  +    switch (fType)
  +    {
  +    case NegINF:       
  +        XMLString::catString(fFormattedString, XMLUni::fgNegINFString);
  +        break;
  +    case NegZero:
  +        XMLString::catString(fFormattedString, XMLUni::fgNegZeroString);
  +        break;
  +    case PosZero:
  +        XMLString::catString(fFormattedString, XMLUni::fgPosZeroString);
  +        break;
  +    case PosINF:
  +        XMLString::catString(fFormattedString, XMLUni::fgPosINFString);
  +        break;
  +    case NaN:
  +        XMLString::catString(fFormattedString, XMLUni::fgNaNString);
  +        break;
  +    }
  +
  +    fFormattedString[XMLString::stringLen(fFormattedString)] = chCloseParen;
  +
  +}
  +
   int XMLAbstractDoubleFloat::getSign() const
   {
       return fSign;
  @@ -344,6 +404,6 @@
       }
   
       return;
  -}
  +} 
   
   XERCES_CPP_NAMESPACE_END
  
  
  

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

Reply via email to