Merge upstream commits and resolve conflicts

This commit is contained in:
Trevor Welsby 2016-01-25 02:48:38 +10:00
commit 0f28c69499
3 changed files with 46 additions and 20 deletions

View file

@ -390,7 +390,7 @@ I deeply appreciate the help of the following people.
- [406345](https://github.com/406345) fixed two small warnings. - [406345](https://github.com/406345) fixed two small warnings.
- [Glen Fernandes](https://github.com/glenfe) noted a potential portability problem in the `has_mapped_type` function. - [Glen Fernandes](https://github.com/glenfe) noted a potential portability problem in the `has_mapped_type` function.
- [Corbin Hughes](https://github.com/nibroc) fixed some typos in the contribution guidelines. - [Corbin Hughes](https://github.com/nibroc) fixed some typos in the contribution guidelines.
- [twelsby](https://github.com/twelsby) fixed the array subscript operator and an issue that failed the MSVC build. - [twelsby](https://github.com/twelsby) fixed the array subscript operator, an issue that failed the MSVC build, and floating-point parsing/dumping.
Thanks a lot for helping out! Thanks a lot for helping out!
@ -407,7 +407,7 @@ $ make
$ ./json_unit "*" $ ./json_unit "*"
=============================================================================== ===============================================================================
All tests passed (3343318 assertions in 29 test cases) All tests passed (3343329 assertions in 29 test cases)
``` ```
For more information, have a look at the file [.travis.yml](https://github.com/nlohmann/json/blob/master/.travis.yml). For more information, have a look at the file [.travis.yml](https://github.com/nlohmann/json/blob/master/.travis.yml).

View file

@ -5873,13 +5873,20 @@ class basic_json
case value_t::number_float: case value_t::number_float:
{ {
// If the number is an integer then output as a fixed with with precision 1 // If the number is an integer then output as a fixed with with
// to output "0.0", "1.0" etc as expected for some round trip tests otherwise // precision 1 to output "0.0", "1.0" etc as expected for some
// 15 digits of precision allows round-trip IEEE 754 string->double->string; // round trip tests otherwise 15 digits of precision allows
// to be safe, we read this value from std::numeric_limits<number_float_t>::digits10 // round-trip IEEE 754 string->double->string; to be safe, we
if (std::fmod(m_value.number_float, 1) == 0) o << std::fixed << std::setprecision(1); // read this value from
else { // std::numeric_limits<number_float_t>::digits10
o.unsetf(std::ios_base::floatfield); // std::defaultfloat not supported in gcc version < 5 if (std::fmod(m_value.number_float, 1) == 0)
{
o << std::fixed << std::setprecision(1);
}
else
{
// std::defaultfloat not supported in gcc version < 5
o.unsetf(std::ios_base::floatfield);
o << std::setprecision(std::numeric_limits<double>::digits10); o << std::setprecision(std::numeric_limits<double>::digits10);
} }
o << m_value.number_float; o << m_value.number_float;
@ -7637,11 +7644,17 @@ basic_json_parser_64:
supplied via the first parameter. Set this to supplied via the first parameter. Set this to
@a static_cast<number_float_t*>(nullptr). @a static_cast<number_float_t*>(nullptr).
@param type the @ref number_float_t in use @param[in] type the @ref number_float_t in use
@param endptr recieves a pointer to the first character after the number @param[in,out] endptr recieves a pointer to the first character after
the number
@return the floating point number @return the floating point number
@warning This function uses `std::strtof`, `std::strtod`, or
`std::strtold` which use the current C locale to determine which
character is used as decimal point character. This may yield to parse
errors if the locale does not used `.`.
*/ */
long double str_to_float_t(long double* /* type */, char** endptr) const long double str_to_float_t(long double* /* type */, char** endptr) const
{ {

View file

@ -5873,13 +5873,20 @@ class basic_json
case value_t::number_float: case value_t::number_float:
{ {
// If the number is an integer then output as a fixed with with precision 1 // If the number is an integer then output as a fixed with with
// to output "0.0", "1.0" etc as expected for some round trip tests otherwise // precision 1 to output "0.0", "1.0" etc as expected for some
// 15 digits of precision allows round-trip IEEE 754 string->double->string; // round trip tests otherwise 15 digits of precision allows
// to be safe, we read this value from std::numeric_limits<number_float_t>::digits10 // round-trip IEEE 754 string->double->string; to be safe, we
if (std::fmod(m_value.number_float, 1) == 0) o << std::fixed << std::setprecision(1); // read this value from
else { // std::numeric_limits<number_float_t>::digits10
o.unsetf(std::ios_base::floatfield); // std::defaultfloat not supported in gcc version < 5 if (std::fmod(m_value.number_float, 1) == 0)
{
o << std::fixed << std::setprecision(1);
}
else
{
// std::defaultfloat not supported in gcc version < 5
o.unsetf(std::ios_base::floatfield);
o << std::setprecision(std::numeric_limits<double>::digits10); o << std::setprecision(std::numeric_limits<double>::digits10);
} }
o << m_value.number_float; o << m_value.number_float;
@ -7319,11 +7326,17 @@ class basic_json
supplied via the first parameter. Set this to supplied via the first parameter. Set this to
@a static_cast<number_float_t*>(nullptr). @a static_cast<number_float_t*>(nullptr).
@param type the @ref number_float_t in use @param[in] type the @ref number_float_t in use
@param endptr recieves a pointer to the first character after the number @param[in,out] endptr recieves a pointer to the first character after
the number
@return the floating point number @return the floating point number
@warning This function uses `std::strtof`, `std::strtod`, or
`std::strtold` which use the current C locale to determine which
character is used as decimal point character. This may yield to parse
errors if the locale does not used `.`.
*/ */
long double str_to_float_t(long double* /* type */, char** endptr) const long double str_to_float_t(long double* /* type */, char** endptr) const
{ {