mirror of
https://github.com/nlohmann/json.git
synced 2026-10-27 00:08:55 +00:00
* json_view: view_mode enum instead of bool Editable, node_kind for node::kind basic_json_document and basic_json_view take a view_mode (read_only, the default, or editable) instead of a bool: basic_json_document<json, true> did not say what true means. The shortcut aliases are unchanged. The kind of a node is a node_kind (the value_t values plus link, 10 as before), which removes the static_cast<std::uint8_t>(value_t::...) of every comparison. The node and image layouts are unchanged. Signed-off-by: Niels Lohmann <mail@nlohmann.me> * json_view: node_kind in the node writers, spell out read_only, comment fixes The builder and the edit functions take and store a node_kind instead of casting a value_t; the numbering assertions and the comments now speak of node_kind, and the link kind notes that it follows value_t::discarded. The read-only aliases name view_mode::read_only like the editable ones. view_mode.md says the mode is a compile-time property of the type. Signed-off-by: Niels Lohmann <mail@nlohmann.me> * json_view: views of read-only documents convert to editable views A read-only document has no edits, so a view of it reads correctly as a view of an editable document before its first edit. The implicit conversion lets a function taking a json_editable_view accept the views of both modes. There is no conversion the other way: a read-only view of an editable document would read wrong values after the next edit. The mode comparisons in the cross-mode operator==/!= use an is_other_mode trait, which astyle keeps compact. Signed-off-by: Niels Lohmann <mail@nlohmann.me> --------- Signed-off-by: Niels Lohmann <mail@nlohmann.me>
53 lines
1.4 KiB
C++
53 lines
1.4 KiB
C++
// __ _____ _____ _____
|
|
// __| | __| | | | JSON for Modern C++
|
|
// | | |__ | | | | | | version 3.12.0
|
|
// |_____|_____|_____|_|___| https://github.com/nlohmann/json
|
|
//
|
|
// SPDX-FileCopyrightText: 2013-2026 Niels Lohmann <https://nlohmann.me>
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
#pragma once
|
|
|
|
#include <cstdint> // uint8_t
|
|
#include <type_traits> // false_type, true_type
|
|
|
|
#include <nlohmann/json.hpp>
|
|
|
|
NLOHMANN_JSON_NAMESPACE_BEGIN
|
|
|
|
/// whether a basic_json_document and its views can be edited
|
|
enum class view_mode : std::uint8_t
|
|
{
|
|
read_only, ///< parsed once, then only read (the default)
|
|
editable, ///< also has set(), push_back(), insert(), and erase()
|
|
};
|
|
|
|
template<typename BasicJsonType, view_mode Mode>
|
|
class basic_json_view;
|
|
|
|
namespace detail
|
|
{
|
|
namespace view
|
|
{
|
|
|
|
/// whether two view modes differ
|
|
template<view_mode A, view_mode B>
|
|
struct is_other_mode : std::true_type {};
|
|
|
|
template<view_mode A>
|
|
struct is_other_mode<A, A> : std::false_type {};
|
|
|
|
/// whether a view of mode From converts implicitly to one of mode To: a
|
|
/// read-only document has no edits, so a view of it is read correctly as a
|
|
/// view of an editable document that has not been edited yet
|
|
template<view_mode From, view_mode To>
|
|
struct is_widening_mode : std::false_type {};
|
|
|
|
template<>
|
|
struct is_widening_mode<view_mode::read_only, view_mode::editable> : std::true_type {};
|
|
|
|
} // namespace view
|
|
} // namespace detail
|
|
|
|
NLOHMANN_JSON_NAMESPACE_END
|