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>
2.9 KiB
nlohmann::view_mode
Defined in header <nlohmann/json_view.hpp>
enum class view_mode : std::uint8_t
{
read_only,
editable
};
The second template parameter of basic_json_document and
basic_json_view: whether a document can be changed after parsing, and whether a view is
of such a document.
read_only- the default: the document is parsed once and then only read. It carries none of the bookkeeping edits need, and
calling
set,push_back,insert, oreraseon it fails to compile. editable- the document also offers
set,push_back,insert, anderase; its views see every edit, see Edits.
The shortcuts name both modes: json_document and json_view are read-only,
json_editable_document and json_editable_view are editable
(and likewise for ordered_json).
Notes
The mode is a compile-time property of the document's and the view's type, not a setting of a call, and there is no conversion between the two modes: a read-only view reads a container in place, while a view of an editable document follows the links that edits leave behind. A function that accepts views therefore names the modes it accepts in its signature:
// views of editable documents only
template<typename BasicJsonType>
void f(basic_json_view<BasicJsonType, view_mode::editable> v);
// views of read-only documents only
template<typename BasicJsonType>
void f(basic_json_view<BasicJsonType, view_mode::read_only> v);
// either
template<typename BasicJsonType, view_mode Mode>
void f(basic_json_view<BasicJsonType, Mode> v);
A function that takes a json_view accepts neither an ordered_json_view
nor a json_editable_view. Views of the two modes still compare with
operator==.
Examples
??? example
The example below shows a function template that accepts the views of both modes, and one that accepts only
views of editable documents.
```cpp
--8<-- "examples/view_mode.cpp"
```
Output:
```
--8<-- "examples/view_mode.output"
```
See also
- basic_json_document - a parsed JSON text
- basic_json_view - a handle to one value of a document
- json_editable_document - an editable document of
json
Version history
Added in version 3.13.0.