From ea4891fb5cce5b366ebc57f9cbbec439b017fe61 Mon Sep 17 00:00:00 2001 From: Niels Lohmann Date: Wed, 31 Mar 2021 10:42:08 +0200 Subject: [PATCH] :ok_hand: implement some review comments --- doc/mkdocs/docs/api/basic_json/erase.md | 2 +- doc/mkdocs/docs/api/basic_json/value.md | 2 +- include/nlohmann/json.hpp | 16 +++++----------- single_include/nlohmann/json.hpp | 16 +++++----------- 4 files changed, 12 insertions(+), 24 deletions(-) diff --git a/doc/mkdocs/docs/api/basic_json/erase.md b/doc/mkdocs/docs/api/basic_json/erase.md index af53bf01f..30e25dfb3 100644 --- a/doc/mkdocs/docs/api/basic_json/erase.md +++ b/doc/mkdocs/docs/api/basic_json/erase.md @@ -11,7 +11,7 @@ const_iterator erase(const_iterator first, const_iterator last); // (3) template -size_type erase(KeyT && key); +size_type erase(const KeyT& key); // (4) void erase(const size_type idx); diff --git a/doc/mkdocs/docs/api/basic_json/value.md b/doc/mkdocs/docs/api/basic_json/value.md index 863bc44e2..4a6974182 100644 --- a/doc/mkdocs/docs/api/basic_json/value.md +++ b/doc/mkdocs/docs/api/basic_json/value.md @@ -3,7 +3,7 @@ ```cpp // (1) template -ValueType value(const KeyType& key, +ValueType value(KeyType && key, const ValueType& default_value) const; // (2) diff --git a/include/nlohmann/json.hpp b/include/nlohmann/json.hpp index 07c41aa16..32f480690 100644 --- a/include/nlohmann/json.hpp +++ b/include/nlohmann/json.hpp @@ -3694,13 +3694,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec // operator[] only works for objects if (JSON_HEDLEY_LIKELY(is_object())) { - auto it = m_value.object->find(key); - if (it != m_value.object->end()) - { - return it->second; - } - - auto result = m_value.object->emplace(key, nullptr); + auto result = m_value.object->emplace(std::forward(key), nullptr); return set_parent(result.first->second); } @@ -3809,13 +3803,13 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec template < class KeyType, class ValueType, typename detail::enable_if_t < detail::is_getable::value && !std::is_same::value&& detail::is_key_type::value > ... > - ValueType value(const KeyType& key, const ValueType& default_value) const + ValueType value(KeyType&& key, const ValueType& default_value) const { // at only works for objects if (JSON_HEDLEY_LIKELY(is_object())) { // if key is found, return value and given default value otherwise - const auto it = find(key); + const auto it = find(std::forward(key)); if (it != end()) { return it->template get(); @@ -4259,7 +4253,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec */ template < class KeyT, typename detail::enable_if_t < detail::is_key_type::value > ... > - size_type erase(KeyT&& key) + size_type erase(const KeyT& key) { // this erase only works for objects if (JSON_HEDLEY_UNLIKELY(!is_object())) @@ -4267,7 +4261,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec JSON_THROW(type_error::create(307, "cannot use erase() with " + std::string(type_name()), *this)); } - const auto it = m_value.object->find(std::forward(key)); + const auto it = m_value.object->find(key); if (it != m_value.object->end()) { m_value.object->erase(it); diff --git a/single_include/nlohmann/json.hpp b/single_include/nlohmann/json.hpp index 340ae7587..4b5774f27 100644 --- a/single_include/nlohmann/json.hpp +++ b/single_include/nlohmann/json.hpp @@ -20597,13 +20597,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec // operator[] only works for objects if (JSON_HEDLEY_LIKELY(is_object())) { - auto it = m_value.object->find(key); - if (it != m_value.object->end()) - { - return it->second; - } - - auto result = m_value.object->emplace(key, nullptr); + auto result = m_value.object->emplace(std::forward(key), nullptr); return set_parent(result.first->second); } @@ -20712,13 +20706,13 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec template < class KeyType, class ValueType, typename detail::enable_if_t < detail::is_getable::value && !std::is_same::value&& detail::is_key_type::value > ... > - ValueType value(const KeyType& key, const ValueType& default_value) const + ValueType value(KeyType&& key, const ValueType& default_value) const { // at only works for objects if (JSON_HEDLEY_LIKELY(is_object())) { // if key is found, return value and given default value otherwise - const auto it = find(key); + const auto it = find(std::forward(key)); if (it != end()) { return it->template get(); @@ -21162,7 +21156,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec */ template < class KeyT, typename detail::enable_if_t < detail::is_key_type::value > ... > - size_type erase(KeyT&& key) + size_type erase(const KeyT& key) { // this erase only works for objects if (JSON_HEDLEY_UNLIKELY(!is_object())) @@ -21170,7 +21164,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec JSON_THROW(type_error::create(307, "cannot use erase() with " + std::string(type_name()), *this)); } - const auto it = m_value.object->find(std::forward(key)); + const auto it = m_value.object->find(key); if (it != m_value.object->end()) { m_value.object->erase(it);