You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xerces.apache.org by ca...@apache.org on 2006/03/23 21:54:34 UTC

svn commit: r388265 - /xerces/c/branches/xerces-2.7/src/xercesc/framework/psvi/XSValue.cpp

Author: cargilld
Date: Thu Mar 23 12:54:32 2006
New Revision: 388265

URL: http://svn.apache.org/viewcvs?rev=388265&view=rev
Log:
Make getCanonical for float and double have consistent behaviour with getActual.

Modified:
    xerces/c/branches/xerces-2.7/src/xercesc/framework/psvi/XSValue.cpp

Modified: xerces/c/branches/xerces-2.7/src/xercesc/framework/psvi/XSValue.cpp
URL: http://svn.apache.org/viewcvs/xerces/c/branches/xerces-2.7/src/xercesc/framework/psvi/XSValue.cpp?rev=388265&r1=388264&r2=388265&view=diff
==============================================================================
--- xerces/c/branches/xerces-2.7/src/xercesc/framework/psvi/XSValue.cpp (original)
+++ xerces/c/branches/xerces-2.7/src/xercesc/framework/psvi/XSValue.cpp Thu Mar 23 12:54:32 2006
@@ -1030,7 +1030,7 @@
         if (toValidate && !validateNumerics(content, datatype, status, manager))
             return 0;
 
-        XMLCh* retVal;
+        XMLCh* retVal = 0;
 
         if (datatype == XSValue::dt_decimal)
         {
@@ -1044,11 +1044,45 @@
         }
         else if (datatype == XSValue::dt_float || datatype == XSValue::dt_double  )
         {
-            retVal = XMLAbstractDoubleFloat::getCanonicalRepresentation(content, manager);
-
-            if (!retVal)
+            // In XML4C, no float or double is treated as out of range
+            // it gets converted to INF, -INF or zero.
+            // The getCanonical method should treat double & float the
+            // same way as the rest of XML4C for consistentcy so need
+            // to getActualValue and see if it was converted.
+            XSValue* xsval = getActValNumerics(content, datatype, status, manager);
+            if (!xsval) {
                 status = st_FOCA0002;
+                return retVal;
+            }
 
+            DoubleFloatType enumVal;
+            if (datatype == XSValue::dt_float) {
+                enumVal = xsval->fData.fValue.f_floatType.f_floatEnum;
+            }
+            else {
+                enumVal = xsval->fData.fValue.f_doubleType.f_doubleEnum;
+            }
+            
+            switch(enumVal) {
+            case DoubleFloatType_NegINF:
+                retVal = XMLString::replicate(XMLUni::fgNegINFString, manager);        
+                break;
+            case DoubleFloatType_PosINF:
+                retVal = XMLString::replicate(XMLUni::fgPosINFString, manager);        
+                break;
+            case DoubleFloatType_NaN:
+                retVal = XMLString::replicate(XMLUni::fgNaNString, manager);        
+                break;
+            case DoubleFloatType_Zero:
+                retVal = XMLString::replicate(XMLUni::fgPosZeroString, manager);
+                break;
+            default: //DoubleFloatType_Normal         
+                retVal = XMLAbstractDoubleFloat::getCanonicalRepresentation(content, manager);
+
+                if (!retVal)
+                    status = st_FOCA0002;
+                break;
+            }
             return retVal;
         }  
         else 



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