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