diff --git a/Makefile b/Makefile index 28b978c5..ea2d7f73 100644 --- a/Makefile +++ b/Makefile @@ -104,7 +104,7 @@ doctest: # -Wno-keyword-macro: unit-tests use "#define private public" # -Wno-deprecated-declarations: the library deprecated some functions # -Wno-weak-vtables: exception class is defined inline, but has virtual method -# -Wno-range-loop-analysis: iterator_wrapper tests "for(const auto i...)" +# -Wno-range-loop-analysis: items tests "for(const auto i...)" # -Wno-float-equal: not all comparisons in the tests can be replaced by Approx # -Wno-switch-enum -Wno-covered-switch-default: pedantic/contradicting warnings about switches # -Wno-padded: padding is nothing to warn about diff --git a/README.md b/README.md index 09353b9b..21ff833b 100644 --- a/README.md +++ b/README.md @@ -933,7 +933,7 @@ I deeply appreciate the help of the following people. - [bogemic](https://github.com/bogemic) fixed some C++17 deprecation warnings. - [Eren Okka](https://github.com/erengy) fixed some MSVC warnings. - [abolz](https://github.com/abolz) integrated the Grisu2 algorithm for proper floating-point formatting, allowing more roundtrip checks to succeed. - +- [Vadim Evard](https://github.com/Pipeliner) fixed a Markdown issue in the README. Thanks a lot for helping out! Please [let me know](mailto:mail@nlohmann.me) if I forgot someone. diff --git a/develop/detail/iterators/iteration_proxy.hpp b/develop/detail/iterators/iteration_proxy.hpp index 08b32caf..1a699542 100644 --- a/develop/detail/iterators/iteration_proxy.hpp +++ b/develop/detail/iterators/iteration_proxy.hpp @@ -9,7 +9,7 @@ namespace nlohmann { namespace detail { -/// proxy class for the iterator_wrapper functions +/// proxy class for the items() function template class iteration_proxy { private: diff --git a/develop/detail/serializer.hpp b/develop/detail/serializer.hpp index 600dfdbc..717399f9 100644 --- a/develop/detail/serializer.hpp +++ b/develop/detail/serializer.hpp @@ -351,14 +351,15 @@ class serializer { if (codepoint <= 0xFFFF) { - std::snprintf(string_buffer.data() + bytes, 7, "\\u%04x", codepoint); + std::snprintf(string_buffer.data() + bytes, 7, "\\u%04x", + static_cast(codepoint)); bytes += 6; } else { std::snprintf(string_buffer.data() + bytes, 13, "\\u%04x\\u%04x", - (0xD7C0 + (codepoint >> 10)), - (0xDC00 + (codepoint & 0x3FF))); + static_cast(0xD7C0 + (codepoint >> 10)), + static_cast(0xDC00 + (codepoint & 0x3FF))); bytes += 12; } } @@ -598,7 +599,7 @@ class serializer codep = (state != UTF8_ACCEPT) ? (byte & 0x3fu) | (codep << 6) - : (0xff >> type) & (byte); + : static_cast(0xff >> type) & (byte); state = utf8d[256u + state * 16u + type]; return state; diff --git a/develop/json.hpp b/develop/json.hpp index abce61aa..56cc6f1a 100644 --- a/develop/json.hpp +++ b/develop/json.hpp @@ -4480,18 +4480,24 @@ class basic_json @note The name of this function is not yet final and may change in the future. + + @deprecated This stream operator is deprecated and will be removed in + future 4.0.0 of the library. Please use @ref items() instead; + that is, replace `json::iterator_wrapper(j)` with `j.items()`. */ + JSON_DEPRECATED static iteration_proxy iterator_wrapper(reference ref) noexcept { - return iteration_proxy(ref); + return ref.items(); } /*! @copydoc iterator_wrapper(reference) */ + JSON_DEPRECATED static iteration_proxy iterator_wrapper(const_reference ref) noexcept { - return iteration_proxy(ref); + return ref.items(); } /*! @@ -6127,8 +6133,8 @@ class basic_json /*! @brief serialize to stream - @deprecated This stream operator is deprecated and will be removed in a - future version of the library. Please use + @deprecated This stream operator is deprecated and will be removed in + future 4.0.0 of the library. Please use @ref operator<<(std::ostream&, const basic_json&) instead; that is, replace calls like `j >> o;` with `o << j;`. @since version 1.0.0; deprecated since version 3.0.0 @@ -6313,8 +6319,8 @@ class basic_json /*! @brief deserialize from stream - @deprecated This stream operator is deprecated and will be removed in a - future version of the library. Please use + @deprecated This stream operator is deprecated and will be removed in + version 4.0.0 of the library. Please use @ref operator>>(std::istream&, basic_json&) instead; that is, replace calls like `j << i;` with `i >> j;`. @since version 1.0.0; deprecated since version 3.0.0 diff --git a/doc/avatars.png b/doc/avatars.png index 78df273c..b24204bd 100644 Binary files a/doc/avatars.png and b/doc/avatars.png differ diff --git a/src/json.hpp b/src/json.hpp index b1f42acd..409d3894 100644 --- a/src/json.hpp +++ b/src/json.hpp @@ -4445,7 +4445,7 @@ namespace nlohmann { namespace detail { -/// proxy class for the iterator_wrapper functions +/// proxy class for the items() function template class iteration_proxy { private: @@ -8498,14 +8498,15 @@ class serializer { if (codepoint <= 0xFFFF) { - std::snprintf(string_buffer.data() + bytes, 7, "\\u%04x", codepoint); + std::snprintf(string_buffer.data() + bytes, 7, "\\u%04x", + static_cast(codepoint)); bytes += 6; } else { std::snprintf(string_buffer.data() + bytes, 13, "\\u%04x\\u%04x", - (0xD7C0 + (codepoint >> 10)), - (0xDC00 + (codepoint & 0x3FF))); + static_cast(0xD7C0 + (codepoint >> 10)), + static_cast(0xDC00 + (codepoint & 0x3FF))); bytes += 12; } } @@ -8745,7 +8746,7 @@ class serializer codep = (state != UTF8_ACCEPT) ? (byte & 0x3fu) | (codep << 6) - : (0xff >> type) & (byte); + : static_cast(0xff >> type) & (byte); state = utf8d[256u + state * 16u + type]; return state; @@ -13308,18 +13309,24 @@ class basic_json @note The name of this function is not yet final and may change in the future. + + @deprecated This stream operator is deprecated and will be removed in + future 4.0.0 of the library. Please use @ref items() instead; + that is, replace `json::iterator_wrapper(j)` with `j.items()`. */ + JSON_DEPRECATED static iteration_proxy iterator_wrapper(reference ref) noexcept { - return iteration_proxy(ref); + return ref.items(); } /*! @copydoc iterator_wrapper(reference) */ + JSON_DEPRECATED static iteration_proxy iterator_wrapper(const_reference ref) noexcept { - return iteration_proxy(ref); + return ref.items(); } /*! @@ -14955,8 +14962,8 @@ class basic_json /*! @brief serialize to stream - @deprecated This stream operator is deprecated and will be removed in a - future version of the library. Please use + @deprecated This stream operator is deprecated and will be removed in + future 4.0.0 of the library. Please use @ref operator<<(std::ostream&, const basic_json&) instead; that is, replace calls like `j >> o;` with `o << j;`. @since version 1.0.0; deprecated since version 3.0.0 @@ -15141,8 +15148,8 @@ class basic_json /*! @brief deserialize from stream - @deprecated This stream operator is deprecated and will be removed in a - future version of the library. Please use + @deprecated This stream operator is deprecated and will be removed in + version 4.0.0 of the library. Please use @ref operator>>(std::istream&, basic_json&) instead; that is, replace calls like `j << i;` with `i >> j;`. @since version 1.0.0; deprecated since version 3.0.0 diff --git a/test/Makefile b/test/Makefile index feee7bfb..c7b72303 100644 --- a/test/Makefile +++ b/test/Makefile @@ -25,7 +25,7 @@ SOURCES = src/unit.cpp \ src/unit-element_access1.cpp \ src/unit-element_access2.cpp \ src/unit-inspection.cpp \ - src/unit-iterator_wrapper.cpp \ + src/unit-items.cpp \ src/unit-iterators1.cpp \ src/unit-iterators2.cpp \ src/unit-merge_patch.cpp \ diff --git a/test/src/unit-iterator_wrapper.cpp b/test/src/unit-items.cpp similarity index 100% rename from test/src/unit-iterator_wrapper.cpp rename to test/src/unit-items.cpp diff --git a/test/src/unit-regression.cpp b/test/src/unit-regression.cpp index cb19ca7e..886392b1 100644 --- a/test/src/unit-regression.cpp +++ b/test/src/unit-regression.cpp @@ -843,7 +843,7 @@ TEST_CASE("regression tests") { json j = json::parse("166020696663385964490"); CHECK(j.is_number_float()); - CHECK(j.get() == static_cast(166020696663385964490.0)); + CHECK(j.get() == 166020696663385964490.0); } SECTION("issue #405 - Heap-buffer-overflow (OSS-Fuzz issue 342)")