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