as_* functions now all use strto*/wcsto* functions; this unifies the behavior and fixes large unsigned integer parsing in as_uint

git-svn-id: http://pugixml.googlecode.com/svn/trunk@438 99668b35-9821-0410-8761-19e4c4f06640
This commit is contained in:
arseny.kapoulkine 2010-05-20 20:35:49 +00:00
parent 1f5be930d0
commit ba1b2017db
3 changed files with 10 additions and 11 deletions

View File

@ -3067,7 +3067,7 @@ namespace pugi
#ifdef PUGIXML_WCHAR_MODE
return (int)wcstol(_attr->value, 0, 10);
#else
return atoi(_attr->value);
return (int)strtol(_attr->value, 0, 10);
#endif
}
@ -3076,12 +3076,10 @@ namespace pugi
if (!_attr || !_attr->value) return 0;
#ifdef PUGIXML_WCHAR_MODE
int result = (int)wcstol(_attr->value, 0, 10);
return (unsigned int)wcstoul(_attr->value, 0, 10);
#else
int result = atoi(_attr->value);
return (unsigned int)strtoul(_attr->value, 0, 10);
#endif
return result < 0 ? 0 : static_cast<unsigned int>(result);
}
double xml_attribute::as_double() const
@ -3091,7 +3089,7 @@ namespace pugi
#ifdef PUGIXML_WCHAR_MODE
return wcstod(_attr->value, 0);
#else
return atof(_attr->value);
return strtod(_attr->value, 0);
#endif
}
@ -3102,7 +3100,7 @@ namespace pugi
#ifdef PUGIXML_WCHAR_MODE
return (float)wcstod(_attr->value, 0);
#else
return (float)atof(_attr->value);
return (float)strtod(_attr->value, 0);
#endif
}

View File

@ -34,8 +34,8 @@ TEST_XML(dom_attr_set_value, "<node attr1='' attr2='' attr3='' attr4='' attr5=''
CHECK(node.attribute(STR("attr2")).set_value(-2147483647 - 1));
CHECK(!xml_attribute().set_value(-2147483647 - 1));
CHECK(node.attribute(STR("attr3")).set_value(2147483647u));
CHECK(!xml_attribute().set_value(2147483647));
CHECK(node.attribute(STR("attr3")).set_value(4294967295u));
CHECK(!xml_attribute().set_value(4294967295u));
CHECK(node.attribute(STR("attr4")).set_value(0.5));
CHECK(!xml_attribute().set_value(0.5));
@ -43,7 +43,7 @@ TEST_XML(dom_attr_set_value, "<node attr1='' attr2='' attr3='' attr4='' attr5=''
CHECK(node.attribute(STR("attr5")).set_value(true));
CHECK(!xml_attribute().set_value(true));
CHECK_NODE(node, STR("<node attr1=\"v1\" attr2=\"-2147483648\" attr3=\"2147483647\" attr4=\"0.5\" attr5=\"true\" />"));
CHECK_NODE(node, STR("<node attr1=\"v1\" attr2=\"-2147483648\" attr3=\"4294967295\" attr4=\"0.5\" attr5=\"true\" />"));
}
TEST_XML(dom_node_set_name, "<node>text</node>")

View File

@ -91,7 +91,7 @@ TEST_XML(dom_attr_as_int, "<node attr1='1' attr2='-1' attr3='-2147483648' attr4=
CHECK(node.attribute(STR("attr4")).as_int() == 2147483647);
}
TEST_XML(dom_attr_as_uint, "<node attr1='0' attr2='1' attr3='2147483647'/>")
TEST_XML(dom_attr_as_uint, "<node attr1='0' attr2='1' attr3='2147483647' attr4='4294967295'/>")
{
xml_node node = doc.child(STR("node"));
@ -99,6 +99,7 @@ TEST_XML(dom_attr_as_uint, "<node attr1='0' attr2='1' attr3='2147483647'/>")
CHECK(node.attribute(STR("attr1")).as_uint() == 0);
CHECK(node.attribute(STR("attr2")).as_uint() == 1);
CHECK(node.attribute(STR("attr3")).as_uint() == 2147483647);
CHECK(node.attribute(STR("attr4")).as_uint() == 4294967295u);
}
TEST_XML(dom_attr_as_float, "<node attr1='0' attr2='1' attr3='0.12' attr4='-5.1' attr5='3e-4' attr6='3.14159265358979323846'/>")