mirror of
https://github.com/pocoproject/poco.git
synced 2025-10-15 15:16:49 +02:00
added methods parseBool() and tryParseBool() to Poco::NumberParser + test unit
This commit is contained in:
@@ -115,6 +115,21 @@ public:
|
|||||||
/// from the given string.
|
/// from the given string.
|
||||||
/// Returns true if a valid floating point number has been found,
|
/// Returns true if a valid floating point number has been found,
|
||||||
/// false otherwise.
|
/// false otherwise.
|
||||||
|
|
||||||
|
static bool parseBool(const std::string& s);
|
||||||
|
/// Parses a bool value in decimal or string notation
|
||||||
|
/// from the given string.
|
||||||
|
/// Valid forms are: "0", "1", "true", "on", false", "yes", "no", "off".
|
||||||
|
/// String forms are NOT case sensitive.
|
||||||
|
/// Throws a SyntaxException if the string does not hold a valid bool number
|
||||||
|
|
||||||
|
static bool tryParseBool(const std::string& s, bool& value);
|
||||||
|
/// Parses a bool value in decimal or string notation
|
||||||
|
/// from the given string.
|
||||||
|
/// Valid forms are: "0", "1", "true", "on", false", "yes", "no", "off".
|
||||||
|
/// String forms are NOT case sensitive.
|
||||||
|
/// Returns true if a valid bool number has been found,
|
||||||
|
/// false otherwise.
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@@ -36,6 +36,7 @@
|
|||||||
|
|
||||||
#include "Poco/NumberParser.h"
|
#include "Poco/NumberParser.h"
|
||||||
#include "Poco/Exception.h"
|
#include "Poco/Exception.h"
|
||||||
|
#include "Poco/String.h"
|
||||||
#include <cstdio>
|
#include <cstdio>
|
||||||
#include <cctype>
|
#include <cctype>
|
||||||
|
|
||||||
@@ -177,4 +178,59 @@ bool NumberParser::tryParseFloat(const std::string& s, double& value)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool NumberParser::parseBool(const std::string& s)
|
||||||
|
{
|
||||||
|
bool result;
|
||||||
|
if (tryParseBool(s, result))
|
||||||
|
return result;
|
||||||
|
else
|
||||||
|
throw SyntaxException("Not a valid bool number", s);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool NumberParser::tryParseBool(const std::string& s, bool& value)
|
||||||
|
{
|
||||||
|
int n;
|
||||||
|
if (NumberParser::tryParse(s, n))
|
||||||
|
{
|
||||||
|
value = (n != 0);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (icompare(s, "true") == 0)
|
||||||
|
{
|
||||||
|
value = true;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else if (icompare(s, "yes") == 0)
|
||||||
|
{
|
||||||
|
value = true;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else if (icompare(s, "on") == 0)
|
||||||
|
{
|
||||||
|
value = true;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (icompare(s, "false") == 0)
|
||||||
|
{
|
||||||
|
value = false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else if (icompare(s, "no") == 0)
|
||||||
|
{
|
||||||
|
value = false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else if (icompare(s, "off") == 0)
|
||||||
|
{
|
||||||
|
value = false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
} // namespace Poco
|
} // namespace Poco
|
||||||
|
@@ -58,6 +58,13 @@ void NumberParserTest::testParse()
|
|||||||
assert (NumberParser::parseUnsigned("123") == 123);
|
assert (NumberParser::parseUnsigned("123") == 123);
|
||||||
assert (NumberParser::parseHex("12AB") == 0x12ab);
|
assert (NumberParser::parseHex("12AB") == 0x12ab);
|
||||||
|
|
||||||
|
assert (NumberParser::parseBool("0") == false);
|
||||||
|
assert (NumberParser::parseBool("FALSE") == false);
|
||||||
|
assert (NumberParser::parseBool("no") == false);
|
||||||
|
assert (NumberParser::parseBool("1") == true);
|
||||||
|
assert (NumberParser::parseBool("True") == true);
|
||||||
|
assert (NumberParser::parseBool("YeS") == true);
|
||||||
|
|
||||||
#if defined(POCO_HAVE_INT64)
|
#if defined(POCO_HAVE_INT64)
|
||||||
assert (NumberParser::parse64("123") == 123);
|
assert (NumberParser::parse64("123") == 123);
|
||||||
assert (NumberParser::parse64("-123") == -123);
|
assert (NumberParser::parse64("-123") == -123);
|
||||||
@@ -73,6 +80,7 @@ void NumberParserTest::testParseError()
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
NumberParser::parse("");
|
NumberParser::parse("");
|
||||||
|
NumberParser::parseBool("");
|
||||||
failmsg("must throw SyntaxException");
|
failmsg("must throw SyntaxException");
|
||||||
}
|
}
|
||||||
catch (SyntaxException&)
|
catch (SyntaxException&)
|
||||||
@@ -82,6 +90,7 @@ void NumberParserTest::testParseError()
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
NumberParser::parse("asd");
|
NumberParser::parse("asd");
|
||||||
|
NumberParser::parseBool("asd");
|
||||||
failmsg("must throw SyntaxException");
|
failmsg("must throw SyntaxException");
|
||||||
}
|
}
|
||||||
catch (SyntaxException&)
|
catch (SyntaxException&)
|
||||||
|
Reference in New Issue
Block a user