You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xerces.apache.org by pe...@apache.org on 2004/11/14 20:01:23 UTC

cvs commit: xml-xerces/c/src/xercesc/framework/psvi XSValue.cpp XSValue.hpp

peiyongz    2004/11/14 11:01:23

  Modified:    c/src/xercesc/framework/psvi XSValue.cpp XSValue.hpp
  Log:
  st_InvalidRange removed
  getActVal return double only for dt_decimal
  error status re-specified for numeric data types
  
  Revision  Changes    Path
  1.17      +69 -89    xml-xerces/c/src/xercesc/framework/psvi/XSValue.cpp
  
  Index: XSValue.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/xercesc/framework/psvi/XSValue.cpp,v
  retrieving revision 1.16
  retrieving revision 1.17
  diff -u -r1.16 -r1.17
  --- XSValue.cpp	27 Oct 2004 21:52:04 -0000	1.16
  +++ XSValue.cpp	14 Nov 2004 19:01:22 -0000	1.17
  @@ -16,6 +16,11 @@
   
   /*
    * $Log$
  + * Revision 1.17  2004/11/14 19:01:22  peiyongz
  + * st_InvalidRange removed
  + * getActVal return double only for dt_decimal
  + * error status re-specified for numeric data types
  + *
    * Revision 1.16  2004/10/27 21:52:04  peiyongz
    * Set status for invalid data -- patch from David Bertoni
    *
  @@ -490,7 +495,7 @@
               XMLFloat data(content, manager);
               if (data.isDataConverted())
               {
  -                status = st_InvalidRange;
  +                status = st_FOCA0002;
                   return false;
               }
           }
  @@ -501,7 +506,7 @@
               XMLDouble  data(content, manager);
               if (data.isDataConverted())
               {
  -                status = st_InvalidRange;
  +                status = st_FOCA0002;
                   return false;
               }
           }
  @@ -540,7 +545,7 @@
                                                       , manager) 
                                                       == XMLNumber::GREATER_THAN)
                       {
  -                        status = st_InvalidRange;
  +                        status = st_FOCA0002;
                           return false;
                       }
                   }
  @@ -555,7 +560,7 @@
                                                      , manager) 
                                                      == XMLNumber::GREATER_THAN)
                       {
  -                        status = st_InvalidRange;
  +                        status = st_FOCA0002;
                           return false;
                       }
                   }
  @@ -570,7 +575,7 @@
                                                      , manager) 
                                                      == XMLNumber::LESS_THAN)
                       {
  -                        status = st_InvalidRange;
  +                        status = st_FOCA0002;
                           return false;
                       }
                   }
  @@ -585,7 +590,7 @@
                                                      , manager) 
                                                      == XMLNumber::LESS_THAN)
                       {
  -                        status = st_InvalidRange;
  +                        status = st_FOCA0002;
                           return false;
                       }
                   }
  @@ -606,7 +611,7 @@
                                                       , manager) 
                                                       == XMLNumber::GREATER_THAN))
                       {
  -                        status = st_InvalidRange;
  +                        status = st_FOCA0002;
                           return false;
                       }
                   }
  @@ -627,7 +632,7 @@
                                                       , manager) 
                                                       == XMLNumber::GREATER_THAN))
                       {
  -                        status = st_InvalidRange;
  +                        status = st_FOCA0002;
                           return false;
                       }
                   }
  @@ -658,7 +663,10 @@
                                   , manager
                                    )
                   )
  +            {
  +                status = st_FOCA0002;
                   return false;
  +            }
   
               switch (datatype)
               { 
  @@ -669,7 +677,7 @@
                       if ((actVal.f_long < INT_MIN) || 
                           (actVal.f_long > INT_MAX)  )
                       {
  -                        status = st_InvalidRange;
  +                        status = st_FOCA0002;
                           return false;
                       }
                   }
  @@ -680,7 +688,7 @@
                       if ((actVal.f_long < SHRT_MIN) || 
                           (actVal.f_long > SHRT_MAX)  )
                       {
  -                        status = st_InvalidRange;
  +                        status = st_FOCA0002;
                           return false;
                       }
                   }
  @@ -691,7 +699,7 @@
                       if ((actVal.f_long < SCHAR_MIN) || 
                           (actVal.f_long > SCHAR_MAX)  )
                       {
  -                        status = st_InvalidRange;
  +                        status = st_FOCA0002;
                           return false;
                       }
                   }
  @@ -718,7 +726,11 @@
                                   , manager
                                    )
                   )
  +            {
  +                status = st_FOCA0002;
                   return false;
  +            }
  +
   
               switch (datatype)
               { 
  @@ -727,7 +739,7 @@
                   // strtol() won't overflow for UINT_MAX+1 on 64 box
                   if (actVal.f_long > UINT_MAX) 
                   {
  -                    status = st_InvalidRange;
  +                    status = st_FOCA0002;
                       return false;
                   }
                   break;
  @@ -735,7 +747,7 @@
                   // error: > USHRT_MAX
                   if (actVal.f_ulong > USHRT_MAX) 
                   {
  -                    status = st_InvalidRange;
  +                    status = st_FOCA0002;
                       return false;
                   }
                   break;
  @@ -743,12 +755,12 @@
                   // error: > UCHAR_MAX
                   if (actVal.f_ulong > UCHAR_MAX) 
                   {
  -                    status = st_InvalidRange;
  +                    status = st_FOCA0002;
                       return false;
                   }
                   break;
               default:
  -                status = st_NotSupported;            
  +                status = st_NotSupported;
                   return false;
                   break;
               } 
  @@ -1407,70 +1419,16 @@
   
           if (datatype == XSValue::dt_decimal)
           {
  -            //Prepare for the quadruplet
  -            XMLBigDecimal data(content, manager); 
  -
  -            int      totalDigit = data.getTotalDigit();
  -            int      scale      = data.getScale();
  -            XMLCh*   intVal     = data.getIntVal();
  -
  -            // get the fraction
  -            t_value  actValFract;
  -
  -            if ( !getActualValue( 
  -                                  &(intVal[totalDigit - scale])
  -                                , status
  -                                , version
  -                                , convert_2_ulong
  -                                , actValFract
  -                                , base_decimal
  -                                , manager
  -                                )
  -                )
  -            {
  -                if (status != st_FOCA0002)
  -                    status = st_FOCA0001;
  -
  -                return 0;
  -            }
  -
  -            // get the integer
  -            t_value  actValInt;
  -            intVal[totalDigit - scale] = 0;
  -
  -            if ( !getActualValue( 
  -                                  intVal
  -                                , status
  -                                , version
  -                                , convert_2_ulong
  -                                , actValInt
  -                                , base_decimal
  -                                , manager
  -                                )
  -                )
  -            {
  -                if (status != st_FOCA0002)
  -                    status = st_FOCA0001;
  -
  -                return 0;
  -            }
  -
               //Prepare the double value
  -            XMLDouble  data2(content, manager);
  -            if (data2.isDataConverted())
  +            XMLDouble  data(content, manager);
  +            if (data.isDataConverted())
               {
  -                status = data2.isDataOverflowed()? st_FOCA0001 : st_InvalidRange;
  +                status = st_FOCA0001;
                   return 0;
               }
   
               XSValue* retVal = new (manager) XSValue(dt_decimal, manager);
  -
  -            retVal->fData.fValue.f_decimal.f_sign     = data.getSign();
  -            retVal->fData.fValue.f_decimal.f_scale    = data.getScale();
  -            retVal->fData.fValue.f_decimal.f_fraction = actValFract.f_ulong;
  -            retVal->fData.fValue.f_decimal.f_integral = actValInt.f_ulong;
  -
  -            retVal->fData.fValue.f_decimal.f_dvalue   = data2.getValue();
  +            retVal->fData.fValue.f_decimal.f_dvalue = data.getValue();
   
               return retVal;
           }
  @@ -1481,7 +1439,7 @@
               XMLFloat data(content, manager);
               if (data.isDataConverted())
               {
  -                status = st_InvalidRange;
  +                status = st_FOCA0002;
                   return 0;
               }
               else
  @@ -1498,7 +1456,7 @@
               XMLDouble  data(content, manager);
               if (data.isDataConverted())
               {
  -                status = st_InvalidRange;
  +                status = st_FOCA0002;
                   return 0;
               }
               else
  @@ -1527,9 +1485,7 @@
                                   )
                   )
               {
  -                if (status != st_FOCA0002)
  -                    status = st_FOCA0003;
  -
  +                //status has been set by getActualValue
                   return 0;
               }
   
  @@ -1547,7 +1503,10 @@
                   // error: > -1
                   {
                       if (actVal.f_long > -1)
  +                    {
  +                        status = st_FOCA0002;
                           return 0;
  +                    }
   
                       XSValue* retVal = new (manager) XSValue(dt_negativeInteger, manager);
                       retVal->fData.fValue.f_long = actVal.f_long;
  @@ -1558,7 +1517,10 @@
                   // error: > 0
                   {
                       if (actVal.f_long > 0)
  +                    {
  +                        status = st_FOCA0002;
                           return 0;
  +                    }
   
                       XSValue* retVal = new (manager) XSValue(dt_nonPositiveInteger, manager);
                       retVal->fData.fValue.f_long = actVal.f_long;
  @@ -1569,7 +1531,10 @@
                   // error: < 0
                   {
                       if (actVal.f_long < 0)
  +                    {
  +                        status = st_FOCA0002;
                           return 0;
  +                    }
   
                       XSValue* retVal = new (manager) XSValue(dt_nonNegativeInteger, manager);
                       retVal->fData.fValue.f_long = actVal.f_long;
  @@ -1580,7 +1545,10 @@
                   // error: < 1
                   {
                       if (actVal.f_long < 1)
  +                    {
  +                        status = st_FOCA0002;
                           return 0;
  +                    }
   
                       XSValue* retVal = new (manager) XSValue(dt_positiveInteger, manager);
                       retVal->fData.fValue.f_long = actVal.f_long;
  @@ -1609,7 +1577,14 @@
                                   , manager
                                    )
                  )
  -               return 0;
  +            {
  +                //for dt_long we return whatever set by getActualValue
  +                //for the rest, we need to return st_FOCA0002
  +                if (datatype != XSValue::dt_long)
  +                    status = st_FOCA0002;
  +
  +                return 0;
  +            }
   
               switch (datatype)
               { 
  @@ -1628,7 +1603,7 @@
                       if ((actVal.f_long < INT_MIN) || 
                           (actVal.f_long > INT_MAX)  )
                       {
  -                        status = st_InvalidRange;
  +                        status = st_FOCA0002;
                           return 0;
                       }
   
  @@ -1642,7 +1617,7 @@
                   {
                       if ((actVal.f_long < SHRT_MIN) || (actVal.f_long > SHRT_MAX))
                       {
  -                        status = st_InvalidRange;
  +                        status = st_FOCA0002;
                           return 0;
                       }
   
  @@ -1656,7 +1631,7 @@
                   {
                       if ((actVal.f_long < SCHAR_MIN) || (actVal.f_long > SCHAR_MAX))
                       {
  -                        status = st_InvalidRange;
  +                        status = st_FOCA0002;
                           return 0;
                       }
   
  @@ -1685,7 +1660,14 @@
                                   , manager
                                    )
                  )
  -               return 0;
  +            {
  +                //for dt_unsignedLong we return whatever set by getActualValue
  +                //for the rest, we need to return st_FOCA0002
  +                if (datatype != XSValue::dt_unsignedLong)
  +                    status = st_FOCA0002;
  +
  +                return 0;
  +            }
   
               switch (datatype)
               { 
  @@ -1704,7 +1686,7 @@
   
                       if (actVal.f_long > UINT_MAX) 
                       {
  -                        status = st_InvalidRange;
  +                        status = st_FOCA0002;
                           return 0;
                       }
   
  @@ -1718,7 +1700,7 @@
                   {
                       if (actVal.f_ulong > USHRT_MAX)
                       {
  -                        status = st_InvalidRange;
  +                        status = st_FOCA0002;
                           return 0;
                       }
   
  @@ -1732,7 +1714,7 @@
                   {
                       if (actVal.f_ulong > UCHAR_MAX)
                       {
  -                        status = st_InvalidRange;
  +                        status = st_FOCA0002;
                           return 0;
                       }
   
  @@ -1963,7 +1945,7 @@
       {
           if (-1 != XMLString::indexOf(content, chDash))
           {
  -            status = st_InvalidRange;
  +            status = st_FOCA0002; //invalid lexcial value
               return false;
           }
   
  @@ -1981,7 +1963,7 @@
       // check if overflow/underflow occurs
       if (errno == ERANGE)
       {
  -        status = st_InvalidRange;
  +        status = st_FOCA0003;
           return false;
       }
   
  
  
  
  1.15      +4 -6      xml-xerces/c/src/xercesc/framework/psvi/XSValue.hpp
  
  Index: XSValue.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/xercesc/framework/psvi/XSValue.hpp,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- XSValue.hpp	20 Oct 2004 15:18:20 -0000	1.14
  +++ XSValue.hpp	14 Nov 2004 19:01:22 -0000	1.15
  @@ -16,6 +16,11 @@
   
   /*
    * $Log$
  + * Revision 1.15  2004/11/14 19:01:22  peiyongz
  + * st_InvalidRange removed
  + * getActVal return double only for dt_decimal
  + * error status re-specified for numeric data types
  + *
    * Revision 1.14  2004/10/20 15:18:20  knoaman
    * Allow option of initializing static data in XMLPlatformUtils::Initialize
    *
  @@ -131,7 +136,6 @@
   
       enum Status {
               st_Init,
  -            st_InvalidRange,
               st_NoContent,
               st_NoCanRep,
               st_NoActVal,
  @@ -253,10 +257,6 @@
                            XMLCh*    f_strVal;
   
                   struct decimal {
  -                                int              f_sign;
  -                                unsigned int     f_scale;  
  -                                unsigned long    f_integral;
  -                                unsigned long    f_fraction;
                                   double           f_dvalue;
                   } f_decimal;
   
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: xerces-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xerces-cvs-help@xml.apache.org