mirror of
https://github.com/NixOS/nix.git
synced 2025-11-18 00:12:43 +01:00
string2Int(): Return std::optional
This commit is contained in:
parent
29a445840a
commit
6548b89cc4
17 changed files with 82 additions and 69 deletions
|
|
@ -87,7 +87,9 @@ protected:
|
|||
template<class I>
|
||||
Handler(I * dest)
|
||||
: fun([=](std::vector<std::string> ss) {
|
||||
if (!string2Int(ss[0], *dest))
|
||||
if (auto n = string2Int<I>(ss[0]))
|
||||
*dest = *n;
|
||||
else
|
||||
throw UsageError("'%s' is not an integer", ss[0]);
|
||||
})
|
||||
, arity(1)
|
||||
|
|
|
|||
|
|
@ -230,7 +230,9 @@ template<typename T>
|
|||
void BaseSetting<T>::set(const std::string & str, bool append)
|
||||
{
|
||||
static_assert(std::is_integral<T>::value, "Integer required.");
|
||||
if (!string2Int(str, value))
|
||||
if (auto n = string2Int<T>(str))
|
||||
value = *n;
|
||||
else
|
||||
throw UsageError("setting '%s' has invalid value '%s'", name, str);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -397,21 +397,27 @@ bool statusOk(int status);
|
|||
|
||||
|
||||
/* Parse a string into an integer. */
|
||||
template<class N> bool string2Int(const string & s, N & n)
|
||||
template<class N>
|
||||
std::optional<N> string2Int(const std::string & s)
|
||||
{
|
||||
if (string(s, 0, 1) == "-" && !std::numeric_limits<N>::is_signed)
|
||||
return false;
|
||||
if (s.substr(0, 1) == "-" && !std::numeric_limits<N>::is_signed)
|
||||
return {};
|
||||
std::istringstream str(s);
|
||||
N n;
|
||||
str >> n;
|
||||
return str && str.get() == EOF;
|
||||
if (str && str.get() == EOF) return n;
|
||||
return {};
|
||||
}
|
||||
|
||||
/* Parse a string into a float. */
|
||||
template<class N> bool string2Float(const string & s, N & n)
|
||||
template<class N>
|
||||
std::optional<N> string2Float(const string & s)
|
||||
{
|
||||
std::istringstream str(s);
|
||||
N n;
|
||||
str >> n;
|
||||
return str && str.get() == EOF;
|
||||
if (str && str.get() == EOF) return n;
|
||||
return {};
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue