From 0617bd248d3f8e0c50aab4ddb5dd41e9132093dc Mon Sep 17 00:00:00 2001 From: Niels Lohmann Date: Fri, 8 Jan 2021 11:10:24 +0100 Subject: [PATCH] :ok_hand: fix operator[] --- include/nlohmann/json.hpp | 13 +++++++++---- single_include/nlohmann/json.hpp | 13 +++++++++---- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/include/nlohmann/json.hpp b/include/nlohmann/json.hpp index a911a6229..46e70d3e7 100644 --- a/include/nlohmann/json.hpp +++ b/include/nlohmann/json.hpp @@ -3659,11 +3659,16 @@ class basic_json // fill up array with null values if given idx is outside range if (idx >= m_value.array->size()) { - m_value.array->insert(m_value.array->end(), - idx - m_value.array->size() + 1, - basic_json()); #if JSON_DIAGNOSTICS - for (std::size_t i = idx + 1; i < m_value.array->size(); ++i) + // remember array size before resizing + const auto previous_size = m_value.array->size(); +#endif + + m_value.array->resize(idx + 1); + +#if JSON_DIAGNOSTICS + // set parent for values added above + for (auto i = previous_size; i <= idx; ++i) { m_value.array->operator[](i).m_parent = this; } diff --git a/single_include/nlohmann/json.hpp b/single_include/nlohmann/json.hpp index 50e2581de..2f8c4a2cb 100644 --- a/single_include/nlohmann/json.hpp +++ b/single_include/nlohmann/json.hpp @@ -20295,11 +20295,16 @@ class basic_json // fill up array with null values if given idx is outside range if (idx >= m_value.array->size()) { - m_value.array->insert(m_value.array->end(), - idx - m_value.array->size() + 1, - basic_json()); #if JSON_DIAGNOSTICS - for (std::size_t i = idx + 1; i < m_value.array->size(); ++i) + // remember array size before resizing + const auto previous_size = m_value.array->size(); +#endif + + m_value.array->resize(idx + 1); + +#if JSON_DIAGNOSTICS + // set parent for values added above + for (auto i = previous_size; i <= idx; ++i) { m_value.array->operator[](i).m_parent = this; }