From 4e2e4f31849757a31bc3a41dd78e2669642c9b88 Mon Sep 17 00:00:00 2001 From: Niels Lohmann Date: Fri, 9 Oct 2026 23:51:18 +0200 Subject: [PATCH] Regenerate the amalgamated headers Signed-off-by: Niels Lohmann --- single_include/nlohmann/json_view.hpp | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/single_include/nlohmann/json_view.hpp b/single_include/nlohmann/json_view.hpp index 8557a6960..167ea6f57 100644 --- a/single_include/nlohmann/json_view.hpp +++ b/single_include/nlohmann/json_view.hpp @@ -503,6 +503,13 @@ struct document_data template struct navigation { + /// whether the walk follows edits (the template argument as a runtime + /// condition: `Editable && ...` is a constant condition for MSVC, C4127) + static NLOHMANN_VIEW_ALWAYS_INLINE bool editable() noexcept + { + return false; + } + static NLOHMANN_VIEW_ALWAYS_INLINE const node* first(const document_data& /*d*/, const node* n) noexcept { return n + 1; @@ -522,6 +529,11 @@ struct navigation template<> struct navigation { + static NLOHMANN_VIEW_ALWAYS_INLINE bool editable() noexcept + { + return true; + } + static NLOHMANN_VIEW_ALWAYS_INLINE const node* first(const document_data& d, const node* n) noexcept { return d.first_child_edited(n); @@ -3146,7 +3158,7 @@ template const node* find_member(const document_data& d, const node* object, const char* key, std::size_t n) noexcept { using nav = navigation; - if (NLOHMANN_VIEW_UNLIKELY(object->extra != 0) && (!Editable || (object->flags & node_flags::moved) == 0)) + if (NLOHMANN_VIEW_UNLIKELY(object->extra != 0) && (!nav::editable() || (object->flags & node_flags::moved) == 0)) { return find_indexed(d, object, key, n); // a large object (whose members have not been edited) } @@ -3197,8 +3209,9 @@ SizeType to_index(IntegerType idx) noexcept template const node* element_at(const document_data& d, const node* array, std::size_t idx) noexcept { - const node* e = navigation::first(d, array); - if (Editable && (array->flags & node_flags::moved) != 0 && d.edits->moved_cap[array->off] != 0) + using nav = navigation; + const node* e = nav::first(d, array); + if (nav::editable() && (array->flags & node_flags::moved) != 0 && d.edits->moved_cap[array->off] != 0) { return e + idx; // a growable block: one link per element }