Commit d566bb81 by Théo DELRIEU

use switchs where appropriate

parent 1e20887c
...@@ -498,22 +498,23 @@ template <typename Json, typename ArithmeticType, ...@@ -498,22 +498,23 @@ template <typename Json, typename ArithmeticType,
int> = 0> int> = 0>
void get_arithmetic_value(const Json& j, ArithmeticType& val) void get_arithmetic_value(const Json& j, ArithmeticType& val)
{ {
// unsigned must be checked first, since is_number_integer() == true for unsigned switch (static_cast<value_t>(j))
if (j.is_number_unsigned()) {
{ case value_t::number_unsigned:
val = static_cast<ArithmeticType>(*j.template get_ptr<const typename Json::number_unsigned_t*>()); val = static_cast<ArithmeticType>(
} *j.template get_ptr<const typename Json::number_unsigned_t*>());
else if (j.is_number_integer()) break;
{ case value_t::number_integer:
val = static_cast<ArithmeticType>(*j.template get_ptr<const typename Json::number_integer_t*>()); val = static_cast<ArithmeticType>(
} *j.template get_ptr<const typename Json::number_integer_t*>());
else if (j.is_number_float()) break;
{ case value_t::number_float:
val = static_cast<ArithmeticType>(*j.template get_ptr<const typename Json::number_float_t*>()); val = static_cast<ArithmeticType>(
} *j.template get_ptr<const typename Json::number_float_t*>());
else break;
{ default:
JSON_THROW(std::domain_error("type must be number, but is " + type_name(j))); JSON_THROW(
std::domain_error("type must be number, but is " + type_name(j)));
} }
} }
...@@ -752,32 +753,37 @@ template < ...@@ -752,32 +753,37 @@ template <
typename Json, typename ArithmeticType, typename Json, typename ArithmeticType,
enable_if_t < enable_if_t <
std::is_arithmetic<ArithmeticType>::value and std::is_arithmetic<ArithmeticType>::value and
not std::is_same<ArithmeticType, typename Json::number_unsigned_t>::value and not std::is_same<ArithmeticType,
not std::is_same<ArithmeticType, typename Json::number_integer_t>::value and typename Json::number_unsigned_t>::value and
not std::is_same<ArithmeticType, typename Json::number_float_t>::value and not std::is_same<ArithmeticType,
typename Json::number_integer_t>::value and
not std::is_same<ArithmeticType,
typename Json::number_float_t>::value and
not std::is_same<ArithmeticType, typename Json::boolean_t>::value, not std::is_same<ArithmeticType, typename Json::boolean_t>::value,
int > = 0 > int > = 0 >
void from_json(const Json& j, ArithmeticType& val) void from_json(const Json& j, ArithmeticType& val)
{ {
if (j.is_number_unsigned()) switch (static_cast<value_t>(j))
{ {
val = static_cast<ArithmeticType>(*j.template get_ptr<const typename Json::number_unsigned_t*>()); case value_t::number_unsigned:
} val = static_cast<ArithmeticType>(
else if (j.is_number_integer()) *j.template get_ptr<const typename Json::number_unsigned_t*>());
{ break;
val = static_cast<ArithmeticType>(*j.template get_ptr<const typename Json::number_integer_t*>()); case value_t::number_integer:
} val = static_cast<ArithmeticType>(
else if (j.is_number_float()) *j.template get_ptr<const typename Json::number_integer_t*>());
{ break;
val = static_cast<ArithmeticType>(*j.template get_ptr<const typename Json::number_float_t*>()); case value_t::number_float:
} val = static_cast<ArithmeticType>(
else if (j.is_boolean()) *j.template get_ptr<const typename Json::number_float_t*>());
{ break;
val = static_cast<ArithmeticType>(*j.template get_ptr<const typename Json::boolean_t*>()); case value_t::boolean:
} val = static_cast<ArithmeticType>(
else *j.template get_ptr<const typename Json::boolean_t*>());
{ break;
JSON_THROW(std::domain_error("type must be number, but is " + type_name(j))); default:
JSON_THROW(
std::domain_error("type must be number, but is " + type_name(j)));
} }
} }
......
...@@ -498,22 +498,23 @@ template <typename Json, typename ArithmeticType, ...@@ -498,22 +498,23 @@ template <typename Json, typename ArithmeticType,
int> = 0> int> = 0>
void get_arithmetic_value(const Json& j, ArithmeticType& val) void get_arithmetic_value(const Json& j, ArithmeticType& val)
{ {
// unsigned must be checked first, since is_number_integer() == true for unsigned switch (static_cast<value_t>(j))
if (j.is_number_unsigned()) {
{ case value_t::number_unsigned:
val = static_cast<ArithmeticType>(*j.template get_ptr<const typename Json::number_unsigned_t*>()); val = static_cast<ArithmeticType>(
} *j.template get_ptr<const typename Json::number_unsigned_t*>());
else if (j.is_number_integer()) break;
{ case value_t::number_integer:
val = static_cast<ArithmeticType>(*j.template get_ptr<const typename Json::number_integer_t*>()); val = static_cast<ArithmeticType>(
} *j.template get_ptr<const typename Json::number_integer_t*>());
else if (j.is_number_float()) break;
{ case value_t::number_float:
val = static_cast<ArithmeticType>(*j.template get_ptr<const typename Json::number_float_t*>()); val = static_cast<ArithmeticType>(
} *j.template get_ptr<const typename Json::number_float_t*>());
else break;
{ default:
JSON_THROW(std::domain_error("type must be number, but is " + type_name(j))); JSON_THROW(
std::domain_error("type must be number, but is " + type_name(j)));
} }
} }
...@@ -752,32 +753,37 @@ template < ...@@ -752,32 +753,37 @@ template <
typename Json, typename ArithmeticType, typename Json, typename ArithmeticType,
enable_if_t < enable_if_t <
std::is_arithmetic<ArithmeticType>::value and std::is_arithmetic<ArithmeticType>::value and
not std::is_same<ArithmeticType, typename Json::number_unsigned_t>::value and not std::is_same<ArithmeticType,
not std::is_same<ArithmeticType, typename Json::number_integer_t>::value and typename Json::number_unsigned_t>::value and
not std::is_same<ArithmeticType, typename Json::number_float_t>::value and not std::is_same<ArithmeticType,
typename Json::number_integer_t>::value and
not std::is_same<ArithmeticType,
typename Json::number_float_t>::value and
not std::is_same<ArithmeticType, typename Json::boolean_t>::value, not std::is_same<ArithmeticType, typename Json::boolean_t>::value,
int > = 0 > int > = 0 >
void from_json(const Json& j, ArithmeticType& val) void from_json(const Json& j, ArithmeticType& val)
{ {
if (j.is_number_unsigned()) switch (static_cast<value_t>(j))
{ {
val = static_cast<ArithmeticType>(*j.template get_ptr<const typename Json::number_unsigned_t*>()); case value_t::number_unsigned:
} val = static_cast<ArithmeticType>(
else if (j.is_number_integer()) *j.template get_ptr<const typename Json::number_unsigned_t*>());
{ break;
val = static_cast<ArithmeticType>(*j.template get_ptr<const typename Json::number_integer_t*>()); case value_t::number_integer:
} val = static_cast<ArithmeticType>(
else if (j.is_number_float()) *j.template get_ptr<const typename Json::number_integer_t*>());
{ break;
val = static_cast<ArithmeticType>(*j.template get_ptr<const typename Json::number_float_t*>()); case value_t::number_float:
} val = static_cast<ArithmeticType>(
else if (j.is_boolean()) *j.template get_ptr<const typename Json::number_float_t*>());
{ break;
val = static_cast<ArithmeticType>(*j.template get_ptr<const typename Json::boolean_t*>()); case value_t::boolean:
} val = static_cast<ArithmeticType>(
else *j.template get_ptr<const typename Json::boolean_t*>());
{ break;
JSON_THROW(std::domain_error("type must be number, but is " + type_name(j))); default:
JSON_THROW(
std::domain_error("type must be number, but is " + type_name(j)));
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment