annotate dep/json/json.hpp @ 260:dd211ff68b36

pages/seasons: add initial functionality the menu doesn't work yet, but it's a good start
author Paper <paper@paper.us.eu.org>
date Wed, 03 Apr 2024 19:48:38 -0400
parents 9b10175be389
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
175
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1 // __ _____ _____ _____
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2 // __| | __| | | | JSON for Modern C++
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3 // | | |__ | | | | | | version 3.11.3
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4 // |_____|_____|_____|_|___| https://github.com/nlohmann/json
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6 // SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7 // SPDX-License-Identifier: MIT
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9 /****************************************************************************\
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10 * Note on documentation: The source files contain links to the online *
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11 * documentation of the public API at https://json.nlohmann.me. This URL *
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12 * contains the most recent documentation and should also be applicable to *
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13 * previous versions; documentation for deprecated functions is not *
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14 * removed, but marked deprecated. See "Generate documentation" section in *
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15 * file docs/README.md. *
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16 \****************************************************************************/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18 #ifndef INCLUDE_NLOHMANN_JSON_HPP_
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19 #define INCLUDE_NLOHMANN_JSON_HPP_
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21 #include <algorithm> // all_of, find, for_each
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22 #include <cstddef> // nullptr_t, ptrdiff_t, size_t
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23 #include <functional> // hash, less
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24 #include <initializer_list> // initializer_list
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
25 #ifndef JSON_NO_IO
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
26 #include <iosfwd> // istream, ostream
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
27 #endif // JSON_NO_IO
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
28 #include <iterator> // random_access_iterator_tag
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
29 #include <memory> // unique_ptr
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
30 #include <string> // string, stoi, to_string
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
31 #include <utility> // declval, forward, move, pair, swap
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
32 #include <vector> // vector
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
33
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
34 // #include <nlohmann/adl_serializer.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
35 // __ _____ _____ _____
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
36 // __| | __| | | | JSON for Modern C++
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
37 // | | |__ | | | | | | version 3.11.3
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
38 // |_____|_____|_____|_|___| https://github.com/nlohmann/json
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
39 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
40 // SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
41 // SPDX-License-Identifier: MIT
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
42
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
43
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
44
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
45 #include <utility>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
46
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
47 // #include <nlohmann/detail/abi_macros.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
48 // __ _____ _____ _____
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
49 // __| | __| | | | JSON for Modern C++
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
50 // | | |__ | | | | | | version 3.11.3
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
51 // |_____|_____|_____|_|___| https://github.com/nlohmann/json
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
52 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
53 // SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
54 // SPDX-License-Identifier: MIT
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
55
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
56
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
57
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
58 // This file contains all macro definitions affecting or depending on the ABI
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
59
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
60 #ifndef JSON_SKIP_LIBRARY_VERSION_CHECK
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
61 #if defined(NLOHMANN_JSON_VERSION_MAJOR) && defined(NLOHMANN_JSON_VERSION_MINOR) && defined(NLOHMANN_JSON_VERSION_PATCH)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
62 #if NLOHMANN_JSON_VERSION_MAJOR != 3 || NLOHMANN_JSON_VERSION_MINOR != 11 || NLOHMANN_JSON_VERSION_PATCH != 3
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
63 #warning "Already included a different version of the library!"
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
64 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
65 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
66 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
67
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
68 #define NLOHMANN_JSON_VERSION_MAJOR 3 // NOLINT(modernize-macro-to-enum)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
69 #define NLOHMANN_JSON_VERSION_MINOR 11 // NOLINT(modernize-macro-to-enum)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
70 #define NLOHMANN_JSON_VERSION_PATCH 3 // NOLINT(modernize-macro-to-enum)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
71
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
72 #ifndef JSON_DIAGNOSTICS
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
73 #define JSON_DIAGNOSTICS 0
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
74 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
75
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
76 #ifndef JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
77 #define JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON 0
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
78 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
79
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
80 #if JSON_DIAGNOSTICS
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
81 #define NLOHMANN_JSON_ABI_TAG_DIAGNOSTICS _diag
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
82 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
83 #define NLOHMANN_JSON_ABI_TAG_DIAGNOSTICS
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
84 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
85
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
86 #if JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
87 #define NLOHMANN_JSON_ABI_TAG_LEGACY_DISCARDED_VALUE_COMPARISON _ldvcmp
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
88 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
89 #define NLOHMANN_JSON_ABI_TAG_LEGACY_DISCARDED_VALUE_COMPARISON
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
90 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
91
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
92 #ifndef NLOHMANN_JSON_NAMESPACE_NO_VERSION
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
93 #define NLOHMANN_JSON_NAMESPACE_NO_VERSION 0
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
94 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
95
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
96 // Construct the namespace ABI tags component
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
97 #define NLOHMANN_JSON_ABI_TAGS_CONCAT_EX(a, b) json_abi ## a ## b
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
98 #define NLOHMANN_JSON_ABI_TAGS_CONCAT(a, b) \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
99 NLOHMANN_JSON_ABI_TAGS_CONCAT_EX(a, b)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
100
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
101 #define NLOHMANN_JSON_ABI_TAGS \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
102 NLOHMANN_JSON_ABI_TAGS_CONCAT( \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
103 NLOHMANN_JSON_ABI_TAG_DIAGNOSTICS, \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
104 NLOHMANN_JSON_ABI_TAG_LEGACY_DISCARDED_VALUE_COMPARISON)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
105
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
106 // Construct the namespace version component
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
107 #define NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT_EX(major, minor, patch) \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
108 _v ## major ## _ ## minor ## _ ## patch
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
109 #define NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT(major, minor, patch) \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
110 NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT_EX(major, minor, patch)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
111
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
112 #if NLOHMANN_JSON_NAMESPACE_NO_VERSION
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
113 #define NLOHMANN_JSON_NAMESPACE_VERSION
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
114 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
115 #define NLOHMANN_JSON_NAMESPACE_VERSION \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
116 NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT(NLOHMANN_JSON_VERSION_MAJOR, \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
117 NLOHMANN_JSON_VERSION_MINOR, \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
118 NLOHMANN_JSON_VERSION_PATCH)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
119 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
120
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
121 // Combine namespace components
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
122 #define NLOHMANN_JSON_NAMESPACE_CONCAT_EX(a, b) a ## b
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
123 #define NLOHMANN_JSON_NAMESPACE_CONCAT(a, b) \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
124 NLOHMANN_JSON_NAMESPACE_CONCAT_EX(a, b)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
125
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
126 #ifndef NLOHMANN_JSON_NAMESPACE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
127 #define NLOHMANN_JSON_NAMESPACE \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
128 nlohmann::NLOHMANN_JSON_NAMESPACE_CONCAT( \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
129 NLOHMANN_JSON_ABI_TAGS, \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
130 NLOHMANN_JSON_NAMESPACE_VERSION)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
131 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
132
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
133 #ifndef NLOHMANN_JSON_NAMESPACE_BEGIN
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
134 #define NLOHMANN_JSON_NAMESPACE_BEGIN \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
135 namespace nlohmann \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
136 { \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
137 inline namespace NLOHMANN_JSON_NAMESPACE_CONCAT( \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
138 NLOHMANN_JSON_ABI_TAGS, \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
139 NLOHMANN_JSON_NAMESPACE_VERSION) \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
140 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
141 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
142
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
143 #ifndef NLOHMANN_JSON_NAMESPACE_END
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
144 #define NLOHMANN_JSON_NAMESPACE_END \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
145 } /* namespace (inline namespace) NOLINT(readability/namespace) */ \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
146 } // namespace nlohmann
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
147 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
148
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
149 // #include <nlohmann/detail/conversions/from_json.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
150 // __ _____ _____ _____
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
151 // __| | __| | | | JSON for Modern C++
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
152 // | | |__ | | | | | | version 3.11.3
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
153 // |_____|_____|_____|_|___| https://github.com/nlohmann/json
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
154 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
155 // SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
156 // SPDX-License-Identifier: MIT
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
157
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
158
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
159
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
160 #include <algorithm> // transform
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
161 #include <array> // array
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
162 #include <forward_list> // forward_list
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
163 #include <iterator> // inserter, front_inserter, end
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
164 #include <map> // map
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
165 #include <string> // string
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
166 #include <tuple> // tuple, make_tuple
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
167 #include <type_traits> // is_arithmetic, is_same, is_enum, underlying_type, is_convertible
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
168 #include <unordered_map> // unordered_map
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
169 #include <utility> // pair, declval
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
170 #include <valarray> // valarray
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
171
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
172 // #include <nlohmann/detail/exceptions.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
173 // __ _____ _____ _____
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
174 // __| | __| | | | JSON for Modern C++
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
175 // | | |__ | | | | | | version 3.11.3
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
176 // |_____|_____|_____|_|___| https://github.com/nlohmann/json
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
177 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
178 // SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
179 // SPDX-License-Identifier: MIT
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
180
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
181
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
182
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
183 #include <cstddef> // nullptr_t
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
184 #include <exception> // exception
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
185 #if JSON_DIAGNOSTICS
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
186 #include <numeric> // accumulate
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
187 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
188 #include <stdexcept> // runtime_error
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
189 #include <string> // to_string
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
190 #include <vector> // vector
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
191
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
192 // #include <nlohmann/detail/value_t.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
193 // __ _____ _____ _____
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
194 // __| | __| | | | JSON for Modern C++
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
195 // | | |__ | | | | | | version 3.11.3
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
196 // |_____|_____|_____|_|___| https://github.com/nlohmann/json
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
197 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
198 // SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
199 // SPDX-License-Identifier: MIT
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
200
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
201
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
202
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
203 #include <array> // array
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
204 #include <cstddef> // size_t
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
205 #include <cstdint> // uint8_t
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
206 #include <string> // string
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
207
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
208 // #include <nlohmann/detail/macro_scope.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
209 // __ _____ _____ _____
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
210 // __| | __| | | | JSON for Modern C++
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
211 // | | |__ | | | | | | version 3.11.3
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
212 // |_____|_____|_____|_|___| https://github.com/nlohmann/json
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
213 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
214 // SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
215 // SPDX-License-Identifier: MIT
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
216
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
217
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
218
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
219 #include <utility> // declval, pair
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
220 // #include <nlohmann/detail/meta/detected.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
221 // __ _____ _____ _____
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
222 // __| | __| | | | JSON for Modern C++
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
223 // | | |__ | | | | | | version 3.11.3
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
224 // |_____|_____|_____|_|___| https://github.com/nlohmann/json
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
225 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
226 // SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
227 // SPDX-License-Identifier: MIT
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
228
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
229
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
230
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
231 #include <type_traits>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
232
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
233 // #include <nlohmann/detail/meta/void_t.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
234 // __ _____ _____ _____
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
235 // __| | __| | | | JSON for Modern C++
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
236 // | | |__ | | | | | | version 3.11.3
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
237 // |_____|_____|_____|_|___| https://github.com/nlohmann/json
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
238 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
239 // SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
240 // SPDX-License-Identifier: MIT
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
241
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
242
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
243
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
244 // #include <nlohmann/detail/abi_macros.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
245
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
246
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
247 NLOHMANN_JSON_NAMESPACE_BEGIN
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
248 namespace detail
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
249 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
250
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
251 template<typename ...Ts> struct make_void
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
252 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
253 using type = void;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
254 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
255 template<typename ...Ts> using void_t = typename make_void<Ts...>::type;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
256
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
257 } // namespace detail
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
258 NLOHMANN_JSON_NAMESPACE_END
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
259
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
260
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
261 NLOHMANN_JSON_NAMESPACE_BEGIN
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
262 namespace detail
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
263 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
264
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
265 // https://en.cppreference.com/w/cpp/experimental/is_detected
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
266 struct nonesuch
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
267 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
268 nonesuch() = delete;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
269 ~nonesuch() = delete;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
270 nonesuch(nonesuch const&) = delete;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
271 nonesuch(nonesuch const&&) = delete;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
272 void operator=(nonesuch const&) = delete;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
273 void operator=(nonesuch&&) = delete;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
274 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
275
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
276 template<class Default,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
277 class AlwaysVoid,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
278 template<class...> class Op,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
279 class... Args>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
280 struct detector
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
281 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
282 using value_t = std::false_type;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
283 using type = Default;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
284 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
285
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
286 template<class Default, template<class...> class Op, class... Args>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
287 struct detector<Default, void_t<Op<Args...>>, Op, Args...>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
288 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
289 using value_t = std::true_type;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
290 using type = Op<Args...>;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
291 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
292
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
293 template<template<class...> class Op, class... Args>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
294 using is_detected = typename detector<nonesuch, void, Op, Args...>::value_t;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
295
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
296 template<template<class...> class Op, class... Args>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
297 struct is_detected_lazy : is_detected<Op, Args...> { };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
298
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
299 template<template<class...> class Op, class... Args>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
300 using detected_t = typename detector<nonesuch, void, Op, Args...>::type;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
301
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
302 template<class Default, template<class...> class Op, class... Args>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
303 using detected_or = detector<Default, void, Op, Args...>;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
304
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
305 template<class Default, template<class...> class Op, class... Args>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
306 using detected_or_t = typename detected_or<Default, Op, Args...>::type;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
307
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
308 template<class Expected, template<class...> class Op, class... Args>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
309 using is_detected_exact = std::is_same<Expected, detected_t<Op, Args...>>;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
310
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
311 template<class To, template<class...> class Op, class... Args>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
312 using is_detected_convertible =
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
313 std::is_convertible<detected_t<Op, Args...>, To>;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
314
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
315 } // namespace detail
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
316 NLOHMANN_JSON_NAMESPACE_END
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
317
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
318 // #include <nlohmann/thirdparty/hedley/hedley.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
319
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
320
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
321 // __ _____ _____ _____
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
322 // __| | __| | | | JSON for Modern C++
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
323 // | | |__ | | | | | | version 3.11.3
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
324 // |_____|_____|_____|_|___| https://github.com/nlohmann/json
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
325 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
326 // SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
327 // SPDX-FileCopyrightText: 2016-2021 Evan Nemerson <evan@nemerson.com>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
328 // SPDX-License-Identifier: MIT
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
329
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
330 /* Hedley - https://nemequ.github.io/hedley
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
331 * Created by Evan Nemerson <evan@nemerson.com>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
332 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
333
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
334 #if !defined(JSON_HEDLEY_VERSION) || (JSON_HEDLEY_VERSION < 15)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
335 #if defined(JSON_HEDLEY_VERSION)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
336 #undef JSON_HEDLEY_VERSION
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
337 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
338 #define JSON_HEDLEY_VERSION 15
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
339
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
340 #if defined(JSON_HEDLEY_STRINGIFY_EX)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
341 #undef JSON_HEDLEY_STRINGIFY_EX
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
342 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
343 #define JSON_HEDLEY_STRINGIFY_EX(x) #x
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
344
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
345 #if defined(JSON_HEDLEY_STRINGIFY)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
346 #undef JSON_HEDLEY_STRINGIFY
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
347 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
348 #define JSON_HEDLEY_STRINGIFY(x) JSON_HEDLEY_STRINGIFY_EX(x)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
349
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
350 #if defined(JSON_HEDLEY_CONCAT_EX)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
351 #undef JSON_HEDLEY_CONCAT_EX
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
352 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
353 #define JSON_HEDLEY_CONCAT_EX(a,b) a##b
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
354
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
355 #if defined(JSON_HEDLEY_CONCAT)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
356 #undef JSON_HEDLEY_CONCAT
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
357 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
358 #define JSON_HEDLEY_CONCAT(a,b) JSON_HEDLEY_CONCAT_EX(a,b)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
359
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
360 #if defined(JSON_HEDLEY_CONCAT3_EX)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
361 #undef JSON_HEDLEY_CONCAT3_EX
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
362 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
363 #define JSON_HEDLEY_CONCAT3_EX(a,b,c) a##b##c
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
364
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
365 #if defined(JSON_HEDLEY_CONCAT3)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
366 #undef JSON_HEDLEY_CONCAT3
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
367 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
368 #define JSON_HEDLEY_CONCAT3(a,b,c) JSON_HEDLEY_CONCAT3_EX(a,b,c)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
369
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
370 #if defined(JSON_HEDLEY_VERSION_ENCODE)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
371 #undef JSON_HEDLEY_VERSION_ENCODE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
372 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
373 #define JSON_HEDLEY_VERSION_ENCODE(major,minor,revision) (((major) * 1000000) + ((minor) * 1000) + (revision))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
374
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
375 #if defined(JSON_HEDLEY_VERSION_DECODE_MAJOR)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
376 #undef JSON_HEDLEY_VERSION_DECODE_MAJOR
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
377 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
378 #define JSON_HEDLEY_VERSION_DECODE_MAJOR(version) ((version) / 1000000)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
379
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
380 #if defined(JSON_HEDLEY_VERSION_DECODE_MINOR)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
381 #undef JSON_HEDLEY_VERSION_DECODE_MINOR
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
382 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
383 #define JSON_HEDLEY_VERSION_DECODE_MINOR(version) (((version) % 1000000) / 1000)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
384
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
385 #if defined(JSON_HEDLEY_VERSION_DECODE_REVISION)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
386 #undef JSON_HEDLEY_VERSION_DECODE_REVISION
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
387 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
388 #define JSON_HEDLEY_VERSION_DECODE_REVISION(version) ((version) % 1000)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
389
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
390 #if defined(JSON_HEDLEY_GNUC_VERSION)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
391 #undef JSON_HEDLEY_GNUC_VERSION
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
392 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
393 #if defined(__GNUC__) && defined(__GNUC_PATCHLEVEL__)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
394 #define JSON_HEDLEY_GNUC_VERSION JSON_HEDLEY_VERSION_ENCODE(__GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
395 #elif defined(__GNUC__)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
396 #define JSON_HEDLEY_GNUC_VERSION JSON_HEDLEY_VERSION_ENCODE(__GNUC__, __GNUC_MINOR__, 0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
397 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
398
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
399 #if defined(JSON_HEDLEY_GNUC_VERSION_CHECK)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
400 #undef JSON_HEDLEY_GNUC_VERSION_CHECK
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
401 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
402 #if defined(JSON_HEDLEY_GNUC_VERSION)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
403 #define JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_GNUC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
404 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
405 #define JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) (0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
406 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
407
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
408 #if defined(JSON_HEDLEY_MSVC_VERSION)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
409 #undef JSON_HEDLEY_MSVC_VERSION
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
410 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
411 #if defined(_MSC_FULL_VER) && (_MSC_FULL_VER >= 140000000) && !defined(__ICL)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
412 #define JSON_HEDLEY_MSVC_VERSION JSON_HEDLEY_VERSION_ENCODE(_MSC_FULL_VER / 10000000, (_MSC_FULL_VER % 10000000) / 100000, (_MSC_FULL_VER % 100000) / 100)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
413 #elif defined(_MSC_FULL_VER) && !defined(__ICL)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
414 #define JSON_HEDLEY_MSVC_VERSION JSON_HEDLEY_VERSION_ENCODE(_MSC_FULL_VER / 1000000, (_MSC_FULL_VER % 1000000) / 10000, (_MSC_FULL_VER % 10000) / 10)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
415 #elif defined(_MSC_VER) && !defined(__ICL)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
416 #define JSON_HEDLEY_MSVC_VERSION JSON_HEDLEY_VERSION_ENCODE(_MSC_VER / 100, _MSC_VER % 100, 0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
417 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
418
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
419 #if defined(JSON_HEDLEY_MSVC_VERSION_CHECK)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
420 #undef JSON_HEDLEY_MSVC_VERSION_CHECK
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
421 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
422 #if !defined(JSON_HEDLEY_MSVC_VERSION)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
423 #define JSON_HEDLEY_MSVC_VERSION_CHECK(major,minor,patch) (0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
424 #elif defined(_MSC_VER) && (_MSC_VER >= 1400)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
425 #define JSON_HEDLEY_MSVC_VERSION_CHECK(major,minor,patch) (_MSC_FULL_VER >= ((major * 10000000) + (minor * 100000) + (patch)))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
426 #elif defined(_MSC_VER) && (_MSC_VER >= 1200)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
427 #define JSON_HEDLEY_MSVC_VERSION_CHECK(major,minor,patch) (_MSC_FULL_VER >= ((major * 1000000) + (minor * 10000) + (patch)))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
428 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
429 #define JSON_HEDLEY_MSVC_VERSION_CHECK(major,minor,patch) (_MSC_VER >= ((major * 100) + (minor)))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
430 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
431
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
432 #if defined(JSON_HEDLEY_INTEL_VERSION)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
433 #undef JSON_HEDLEY_INTEL_VERSION
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
434 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
435 #if defined(__INTEL_COMPILER) && defined(__INTEL_COMPILER_UPDATE) && !defined(__ICL)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
436 #define JSON_HEDLEY_INTEL_VERSION JSON_HEDLEY_VERSION_ENCODE(__INTEL_COMPILER / 100, __INTEL_COMPILER % 100, __INTEL_COMPILER_UPDATE)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
437 #elif defined(__INTEL_COMPILER) && !defined(__ICL)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
438 #define JSON_HEDLEY_INTEL_VERSION JSON_HEDLEY_VERSION_ENCODE(__INTEL_COMPILER / 100, __INTEL_COMPILER % 100, 0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
439 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
440
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
441 #if defined(JSON_HEDLEY_INTEL_VERSION_CHECK)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
442 #undef JSON_HEDLEY_INTEL_VERSION_CHECK
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
443 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
444 #if defined(JSON_HEDLEY_INTEL_VERSION)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
445 #define JSON_HEDLEY_INTEL_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_INTEL_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
446 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
447 #define JSON_HEDLEY_INTEL_VERSION_CHECK(major,minor,patch) (0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
448 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
449
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
450 #if defined(JSON_HEDLEY_INTEL_CL_VERSION)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
451 #undef JSON_HEDLEY_INTEL_CL_VERSION
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
452 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
453 #if defined(__INTEL_COMPILER) && defined(__INTEL_COMPILER_UPDATE) && defined(__ICL)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
454 #define JSON_HEDLEY_INTEL_CL_VERSION JSON_HEDLEY_VERSION_ENCODE(__INTEL_COMPILER, __INTEL_COMPILER_UPDATE, 0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
455 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
456
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
457 #if defined(JSON_HEDLEY_INTEL_CL_VERSION_CHECK)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
458 #undef JSON_HEDLEY_INTEL_CL_VERSION_CHECK
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
459 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
460 #if defined(JSON_HEDLEY_INTEL_CL_VERSION)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
461 #define JSON_HEDLEY_INTEL_CL_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_INTEL_CL_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
462 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
463 #define JSON_HEDLEY_INTEL_CL_VERSION_CHECK(major,minor,patch) (0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
464 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
465
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
466 #if defined(JSON_HEDLEY_PGI_VERSION)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
467 #undef JSON_HEDLEY_PGI_VERSION
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
468 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
469 #if defined(__PGI) && defined(__PGIC__) && defined(__PGIC_MINOR__) && defined(__PGIC_PATCHLEVEL__)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
470 #define JSON_HEDLEY_PGI_VERSION JSON_HEDLEY_VERSION_ENCODE(__PGIC__, __PGIC_MINOR__, __PGIC_PATCHLEVEL__)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
471 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
472
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
473 #if defined(JSON_HEDLEY_PGI_VERSION_CHECK)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
474 #undef JSON_HEDLEY_PGI_VERSION_CHECK
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
475 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
476 #if defined(JSON_HEDLEY_PGI_VERSION)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
477 #define JSON_HEDLEY_PGI_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_PGI_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
478 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
479 #define JSON_HEDLEY_PGI_VERSION_CHECK(major,minor,patch) (0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
480 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
481
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
482 #if defined(JSON_HEDLEY_SUNPRO_VERSION)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
483 #undef JSON_HEDLEY_SUNPRO_VERSION
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
484 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
485 #if defined(__SUNPRO_C) && (__SUNPRO_C > 0x1000)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
486 #define JSON_HEDLEY_SUNPRO_VERSION JSON_HEDLEY_VERSION_ENCODE((((__SUNPRO_C >> 16) & 0xf) * 10) + ((__SUNPRO_C >> 12) & 0xf), (((__SUNPRO_C >> 8) & 0xf) * 10) + ((__SUNPRO_C >> 4) & 0xf), (__SUNPRO_C & 0xf) * 10)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
487 #elif defined(__SUNPRO_C)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
488 #define JSON_HEDLEY_SUNPRO_VERSION JSON_HEDLEY_VERSION_ENCODE((__SUNPRO_C >> 8) & 0xf, (__SUNPRO_C >> 4) & 0xf, (__SUNPRO_C) & 0xf)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
489 #elif defined(__SUNPRO_CC) && (__SUNPRO_CC > 0x1000)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
490 #define JSON_HEDLEY_SUNPRO_VERSION JSON_HEDLEY_VERSION_ENCODE((((__SUNPRO_CC >> 16) & 0xf) * 10) + ((__SUNPRO_CC >> 12) & 0xf), (((__SUNPRO_CC >> 8) & 0xf) * 10) + ((__SUNPRO_CC >> 4) & 0xf), (__SUNPRO_CC & 0xf) * 10)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
491 #elif defined(__SUNPRO_CC)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
492 #define JSON_HEDLEY_SUNPRO_VERSION JSON_HEDLEY_VERSION_ENCODE((__SUNPRO_CC >> 8) & 0xf, (__SUNPRO_CC >> 4) & 0xf, (__SUNPRO_CC) & 0xf)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
493 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
494
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
495 #if defined(JSON_HEDLEY_SUNPRO_VERSION_CHECK)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
496 #undef JSON_HEDLEY_SUNPRO_VERSION_CHECK
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
497 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
498 #if defined(JSON_HEDLEY_SUNPRO_VERSION)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
499 #define JSON_HEDLEY_SUNPRO_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_SUNPRO_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
500 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
501 #define JSON_HEDLEY_SUNPRO_VERSION_CHECK(major,minor,patch) (0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
502 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
503
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
504 #if defined(JSON_HEDLEY_EMSCRIPTEN_VERSION)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
505 #undef JSON_HEDLEY_EMSCRIPTEN_VERSION
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
506 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
507 #if defined(__EMSCRIPTEN__)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
508 #define JSON_HEDLEY_EMSCRIPTEN_VERSION JSON_HEDLEY_VERSION_ENCODE(__EMSCRIPTEN_major__, __EMSCRIPTEN_minor__, __EMSCRIPTEN_tiny__)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
509 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
510
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
511 #if defined(JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
512 #undef JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
513 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
514 #if defined(JSON_HEDLEY_EMSCRIPTEN_VERSION)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
515 #define JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_EMSCRIPTEN_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
516 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
517 #define JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK(major,minor,patch) (0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
518 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
519
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
520 #if defined(JSON_HEDLEY_ARM_VERSION)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
521 #undef JSON_HEDLEY_ARM_VERSION
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
522 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
523 #if defined(__CC_ARM) && defined(__ARMCOMPILER_VERSION)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
524 #define JSON_HEDLEY_ARM_VERSION JSON_HEDLEY_VERSION_ENCODE(__ARMCOMPILER_VERSION / 1000000, (__ARMCOMPILER_VERSION % 1000000) / 10000, (__ARMCOMPILER_VERSION % 10000) / 100)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
525 #elif defined(__CC_ARM) && defined(__ARMCC_VERSION)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
526 #define JSON_HEDLEY_ARM_VERSION JSON_HEDLEY_VERSION_ENCODE(__ARMCC_VERSION / 1000000, (__ARMCC_VERSION % 1000000) / 10000, (__ARMCC_VERSION % 10000) / 100)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
527 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
528
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
529 #if defined(JSON_HEDLEY_ARM_VERSION_CHECK)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
530 #undef JSON_HEDLEY_ARM_VERSION_CHECK
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
531 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
532 #if defined(JSON_HEDLEY_ARM_VERSION)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
533 #define JSON_HEDLEY_ARM_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_ARM_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
534 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
535 #define JSON_HEDLEY_ARM_VERSION_CHECK(major,minor,patch) (0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
536 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
537
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
538 #if defined(JSON_HEDLEY_IBM_VERSION)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
539 #undef JSON_HEDLEY_IBM_VERSION
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
540 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
541 #if defined(__ibmxl__)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
542 #define JSON_HEDLEY_IBM_VERSION JSON_HEDLEY_VERSION_ENCODE(__ibmxl_version__, __ibmxl_release__, __ibmxl_modification__)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
543 #elif defined(__xlC__) && defined(__xlC_ver__)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
544 #define JSON_HEDLEY_IBM_VERSION JSON_HEDLEY_VERSION_ENCODE(__xlC__ >> 8, __xlC__ & 0xff, (__xlC_ver__ >> 8) & 0xff)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
545 #elif defined(__xlC__)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
546 #define JSON_HEDLEY_IBM_VERSION JSON_HEDLEY_VERSION_ENCODE(__xlC__ >> 8, __xlC__ & 0xff, 0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
547 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
548
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
549 #if defined(JSON_HEDLEY_IBM_VERSION_CHECK)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
550 #undef JSON_HEDLEY_IBM_VERSION_CHECK
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
551 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
552 #if defined(JSON_HEDLEY_IBM_VERSION)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
553 #define JSON_HEDLEY_IBM_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_IBM_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
554 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
555 #define JSON_HEDLEY_IBM_VERSION_CHECK(major,minor,patch) (0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
556 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
557
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
558 #if defined(JSON_HEDLEY_TI_VERSION)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
559 #undef JSON_HEDLEY_TI_VERSION
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
560 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
561 #if \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
562 defined(__TI_COMPILER_VERSION__) && \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
563 ( \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
564 defined(__TMS470__) || defined(__TI_ARM__) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
565 defined(__MSP430__) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
566 defined(__TMS320C2000__) \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
567 )
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
568 #if (__TI_COMPILER_VERSION__ >= 16000000)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
569 #define JSON_HEDLEY_TI_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
570 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
571 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
572
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
573 #if defined(JSON_HEDLEY_TI_VERSION_CHECK)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
574 #undef JSON_HEDLEY_TI_VERSION_CHECK
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
575 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
576 #if defined(JSON_HEDLEY_TI_VERSION)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
577 #define JSON_HEDLEY_TI_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
578 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
579 #define JSON_HEDLEY_TI_VERSION_CHECK(major,minor,patch) (0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
580 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
581
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
582 #if defined(JSON_HEDLEY_TI_CL2000_VERSION)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
583 #undef JSON_HEDLEY_TI_CL2000_VERSION
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
584 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
585 #if defined(__TI_COMPILER_VERSION__) && defined(__TMS320C2000__)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
586 #define JSON_HEDLEY_TI_CL2000_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
587 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
588
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
589 #if defined(JSON_HEDLEY_TI_CL2000_VERSION_CHECK)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
590 #undef JSON_HEDLEY_TI_CL2000_VERSION_CHECK
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
591 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
592 #if defined(JSON_HEDLEY_TI_CL2000_VERSION)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
593 #define JSON_HEDLEY_TI_CL2000_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CL2000_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
594 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
595 #define JSON_HEDLEY_TI_CL2000_VERSION_CHECK(major,minor,patch) (0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
596 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
597
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
598 #if defined(JSON_HEDLEY_TI_CL430_VERSION)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
599 #undef JSON_HEDLEY_TI_CL430_VERSION
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
600 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
601 #if defined(__TI_COMPILER_VERSION__) && defined(__MSP430__)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
602 #define JSON_HEDLEY_TI_CL430_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
603 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
604
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
605 #if defined(JSON_HEDLEY_TI_CL430_VERSION_CHECK)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
606 #undef JSON_HEDLEY_TI_CL430_VERSION_CHECK
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
607 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
608 #if defined(JSON_HEDLEY_TI_CL430_VERSION)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
609 #define JSON_HEDLEY_TI_CL430_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CL430_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
610 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
611 #define JSON_HEDLEY_TI_CL430_VERSION_CHECK(major,minor,patch) (0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
612 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
613
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
614 #if defined(JSON_HEDLEY_TI_ARMCL_VERSION)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
615 #undef JSON_HEDLEY_TI_ARMCL_VERSION
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
616 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
617 #if defined(__TI_COMPILER_VERSION__) && (defined(__TMS470__) || defined(__TI_ARM__))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
618 #define JSON_HEDLEY_TI_ARMCL_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
619 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
620
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
621 #if defined(JSON_HEDLEY_TI_ARMCL_VERSION_CHECK)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
622 #undef JSON_HEDLEY_TI_ARMCL_VERSION_CHECK
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
623 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
624 #if defined(JSON_HEDLEY_TI_ARMCL_VERSION)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
625 #define JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_ARMCL_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
626 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
627 #define JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(major,minor,patch) (0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
628 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
629
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
630 #if defined(JSON_HEDLEY_TI_CL6X_VERSION)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
631 #undef JSON_HEDLEY_TI_CL6X_VERSION
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
632 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
633 #if defined(__TI_COMPILER_VERSION__) && defined(__TMS320C6X__)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
634 #define JSON_HEDLEY_TI_CL6X_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
635 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
636
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
637 #if defined(JSON_HEDLEY_TI_CL6X_VERSION_CHECK)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
638 #undef JSON_HEDLEY_TI_CL6X_VERSION_CHECK
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
639 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
640 #if defined(JSON_HEDLEY_TI_CL6X_VERSION)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
641 #define JSON_HEDLEY_TI_CL6X_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CL6X_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
642 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
643 #define JSON_HEDLEY_TI_CL6X_VERSION_CHECK(major,minor,patch) (0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
644 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
645
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
646 #if defined(JSON_HEDLEY_TI_CL7X_VERSION)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
647 #undef JSON_HEDLEY_TI_CL7X_VERSION
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
648 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
649 #if defined(__TI_COMPILER_VERSION__) && defined(__C7000__)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
650 #define JSON_HEDLEY_TI_CL7X_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
651 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
652
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
653 #if defined(JSON_HEDLEY_TI_CL7X_VERSION_CHECK)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
654 #undef JSON_HEDLEY_TI_CL7X_VERSION_CHECK
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
655 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
656 #if defined(JSON_HEDLEY_TI_CL7X_VERSION)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
657 #define JSON_HEDLEY_TI_CL7X_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CL7X_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
658 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
659 #define JSON_HEDLEY_TI_CL7X_VERSION_CHECK(major,minor,patch) (0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
660 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
661
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
662 #if defined(JSON_HEDLEY_TI_CLPRU_VERSION)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
663 #undef JSON_HEDLEY_TI_CLPRU_VERSION
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
664 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
665 #if defined(__TI_COMPILER_VERSION__) && defined(__PRU__)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
666 #define JSON_HEDLEY_TI_CLPRU_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
667 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
668
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
669 #if defined(JSON_HEDLEY_TI_CLPRU_VERSION_CHECK)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
670 #undef JSON_HEDLEY_TI_CLPRU_VERSION_CHECK
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
671 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
672 #if defined(JSON_HEDLEY_TI_CLPRU_VERSION)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
673 #define JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CLPRU_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
674 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
675 #define JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(major,minor,patch) (0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
676 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
677
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
678 #if defined(JSON_HEDLEY_CRAY_VERSION)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
679 #undef JSON_HEDLEY_CRAY_VERSION
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
680 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
681 #if defined(_CRAYC)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
682 #if defined(_RELEASE_PATCHLEVEL)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
683 #define JSON_HEDLEY_CRAY_VERSION JSON_HEDLEY_VERSION_ENCODE(_RELEASE_MAJOR, _RELEASE_MINOR, _RELEASE_PATCHLEVEL)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
684 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
685 #define JSON_HEDLEY_CRAY_VERSION JSON_HEDLEY_VERSION_ENCODE(_RELEASE_MAJOR, _RELEASE_MINOR, 0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
686 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
687 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
688
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
689 #if defined(JSON_HEDLEY_CRAY_VERSION_CHECK)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
690 #undef JSON_HEDLEY_CRAY_VERSION_CHECK
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
691 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
692 #if defined(JSON_HEDLEY_CRAY_VERSION)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
693 #define JSON_HEDLEY_CRAY_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_CRAY_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
694 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
695 #define JSON_HEDLEY_CRAY_VERSION_CHECK(major,minor,patch) (0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
696 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
697
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
698 #if defined(JSON_HEDLEY_IAR_VERSION)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
699 #undef JSON_HEDLEY_IAR_VERSION
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
700 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
701 #if defined(__IAR_SYSTEMS_ICC__)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
702 #if __VER__ > 1000
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
703 #define JSON_HEDLEY_IAR_VERSION JSON_HEDLEY_VERSION_ENCODE((__VER__ / 1000000), ((__VER__ / 1000) % 1000), (__VER__ % 1000))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
704 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
705 #define JSON_HEDLEY_IAR_VERSION JSON_HEDLEY_VERSION_ENCODE(__VER__ / 100, __VER__ % 100, 0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
706 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
707 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
708
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
709 #if defined(JSON_HEDLEY_IAR_VERSION_CHECK)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
710 #undef JSON_HEDLEY_IAR_VERSION_CHECK
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
711 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
712 #if defined(JSON_HEDLEY_IAR_VERSION)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
713 #define JSON_HEDLEY_IAR_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_IAR_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
714 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
715 #define JSON_HEDLEY_IAR_VERSION_CHECK(major,minor,patch) (0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
716 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
717
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
718 #if defined(JSON_HEDLEY_TINYC_VERSION)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
719 #undef JSON_HEDLEY_TINYC_VERSION
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
720 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
721 #if defined(__TINYC__)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
722 #define JSON_HEDLEY_TINYC_VERSION JSON_HEDLEY_VERSION_ENCODE(__TINYC__ / 1000, (__TINYC__ / 100) % 10, __TINYC__ % 100)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
723 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
724
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
725 #if defined(JSON_HEDLEY_TINYC_VERSION_CHECK)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
726 #undef JSON_HEDLEY_TINYC_VERSION_CHECK
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
727 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
728 #if defined(JSON_HEDLEY_TINYC_VERSION)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
729 #define JSON_HEDLEY_TINYC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TINYC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
730 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
731 #define JSON_HEDLEY_TINYC_VERSION_CHECK(major,minor,patch) (0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
732 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
733
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
734 #if defined(JSON_HEDLEY_DMC_VERSION)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
735 #undef JSON_HEDLEY_DMC_VERSION
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
736 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
737 #if defined(__DMC__)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
738 #define JSON_HEDLEY_DMC_VERSION JSON_HEDLEY_VERSION_ENCODE(__DMC__ >> 8, (__DMC__ >> 4) & 0xf, __DMC__ & 0xf)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
739 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
740
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
741 #if defined(JSON_HEDLEY_DMC_VERSION_CHECK)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
742 #undef JSON_HEDLEY_DMC_VERSION_CHECK
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
743 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
744 #if defined(JSON_HEDLEY_DMC_VERSION)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
745 #define JSON_HEDLEY_DMC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_DMC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
746 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
747 #define JSON_HEDLEY_DMC_VERSION_CHECK(major,minor,patch) (0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
748 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
749
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
750 #if defined(JSON_HEDLEY_COMPCERT_VERSION)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
751 #undef JSON_HEDLEY_COMPCERT_VERSION
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
752 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
753 #if defined(__COMPCERT_VERSION__)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
754 #define JSON_HEDLEY_COMPCERT_VERSION JSON_HEDLEY_VERSION_ENCODE(__COMPCERT_VERSION__ / 10000, (__COMPCERT_VERSION__ / 100) % 100, __COMPCERT_VERSION__ % 100)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
755 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
756
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
757 #if defined(JSON_HEDLEY_COMPCERT_VERSION_CHECK)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
758 #undef JSON_HEDLEY_COMPCERT_VERSION_CHECK
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
759 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
760 #if defined(JSON_HEDLEY_COMPCERT_VERSION)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
761 #define JSON_HEDLEY_COMPCERT_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_COMPCERT_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
762 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
763 #define JSON_HEDLEY_COMPCERT_VERSION_CHECK(major,minor,patch) (0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
764 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
765
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
766 #if defined(JSON_HEDLEY_PELLES_VERSION)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
767 #undef JSON_HEDLEY_PELLES_VERSION
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
768 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
769 #if defined(__POCC__)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
770 #define JSON_HEDLEY_PELLES_VERSION JSON_HEDLEY_VERSION_ENCODE(__POCC__ / 100, __POCC__ % 100, 0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
771 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
772
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
773 #if defined(JSON_HEDLEY_PELLES_VERSION_CHECK)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
774 #undef JSON_HEDLEY_PELLES_VERSION_CHECK
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
775 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
776 #if defined(JSON_HEDLEY_PELLES_VERSION)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
777 #define JSON_HEDLEY_PELLES_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_PELLES_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
778 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
779 #define JSON_HEDLEY_PELLES_VERSION_CHECK(major,minor,patch) (0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
780 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
781
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
782 #if defined(JSON_HEDLEY_MCST_LCC_VERSION)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
783 #undef JSON_HEDLEY_MCST_LCC_VERSION
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
784 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
785 #if defined(__LCC__) && defined(__LCC_MINOR__)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
786 #define JSON_HEDLEY_MCST_LCC_VERSION JSON_HEDLEY_VERSION_ENCODE(__LCC__ / 100, __LCC__ % 100, __LCC_MINOR__)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
787 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
788
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
789 #if defined(JSON_HEDLEY_MCST_LCC_VERSION_CHECK)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
790 #undef JSON_HEDLEY_MCST_LCC_VERSION_CHECK
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
791 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
792 #if defined(JSON_HEDLEY_MCST_LCC_VERSION)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
793 #define JSON_HEDLEY_MCST_LCC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_MCST_LCC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
794 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
795 #define JSON_HEDLEY_MCST_LCC_VERSION_CHECK(major,minor,patch) (0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
796 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
797
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
798 #if defined(JSON_HEDLEY_GCC_VERSION)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
799 #undef JSON_HEDLEY_GCC_VERSION
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
800 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
801 #if \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
802 defined(JSON_HEDLEY_GNUC_VERSION) && \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
803 !defined(__clang__) && \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
804 !defined(JSON_HEDLEY_INTEL_VERSION) && \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
805 !defined(JSON_HEDLEY_PGI_VERSION) && \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
806 !defined(JSON_HEDLEY_ARM_VERSION) && \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
807 !defined(JSON_HEDLEY_CRAY_VERSION) && \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
808 !defined(JSON_HEDLEY_TI_VERSION) && \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
809 !defined(JSON_HEDLEY_TI_ARMCL_VERSION) && \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
810 !defined(JSON_HEDLEY_TI_CL430_VERSION) && \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
811 !defined(JSON_HEDLEY_TI_CL2000_VERSION) && \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
812 !defined(JSON_HEDLEY_TI_CL6X_VERSION) && \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
813 !defined(JSON_HEDLEY_TI_CL7X_VERSION) && \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
814 !defined(JSON_HEDLEY_TI_CLPRU_VERSION) && \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
815 !defined(__COMPCERT__) && \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
816 !defined(JSON_HEDLEY_MCST_LCC_VERSION)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
817 #define JSON_HEDLEY_GCC_VERSION JSON_HEDLEY_GNUC_VERSION
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
818 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
819
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
820 #if defined(JSON_HEDLEY_GCC_VERSION_CHECK)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
821 #undef JSON_HEDLEY_GCC_VERSION_CHECK
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
822 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
823 #if defined(JSON_HEDLEY_GCC_VERSION)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
824 #define JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_GCC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
825 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
826 #define JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) (0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
827 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
828
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
829 #if defined(JSON_HEDLEY_HAS_ATTRIBUTE)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
830 #undef JSON_HEDLEY_HAS_ATTRIBUTE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
831 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
832 #if \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
833 defined(__has_attribute) && \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
834 ( \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
835 (!defined(JSON_HEDLEY_IAR_VERSION) || JSON_HEDLEY_IAR_VERSION_CHECK(8,5,9)) \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
836 )
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
837 # define JSON_HEDLEY_HAS_ATTRIBUTE(attribute) __has_attribute(attribute)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
838 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
839 # define JSON_HEDLEY_HAS_ATTRIBUTE(attribute) (0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
840 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
841
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
842 #if defined(JSON_HEDLEY_GNUC_HAS_ATTRIBUTE)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
843 #undef JSON_HEDLEY_GNUC_HAS_ATTRIBUTE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
844 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
845 #if defined(__has_attribute)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
846 #define JSON_HEDLEY_GNUC_HAS_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_HAS_ATTRIBUTE(attribute)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
847 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
848 #define JSON_HEDLEY_GNUC_HAS_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
849 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
850
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
851 #if defined(JSON_HEDLEY_GCC_HAS_ATTRIBUTE)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
852 #undef JSON_HEDLEY_GCC_HAS_ATTRIBUTE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
853 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
854 #if defined(__has_attribute)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
855 #define JSON_HEDLEY_GCC_HAS_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_HAS_ATTRIBUTE(attribute)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
856 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
857 #define JSON_HEDLEY_GCC_HAS_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
858 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
859
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
860 #if defined(JSON_HEDLEY_HAS_CPP_ATTRIBUTE)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
861 #undef JSON_HEDLEY_HAS_CPP_ATTRIBUTE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
862 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
863 #if \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
864 defined(__has_cpp_attribute) && \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
865 defined(__cplusplus) && \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
866 (!defined(JSON_HEDLEY_SUNPRO_VERSION) || JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,15,0))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
867 #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE(attribute) __has_cpp_attribute(attribute)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
868 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
869 #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE(attribute) (0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
870 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
871
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
872 #if defined(JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
873 #undef JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
874 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
875 #if !defined(__cplusplus) || !defined(__has_cpp_attribute)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
876 #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(ns,attribute) (0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
877 #elif \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
878 !defined(JSON_HEDLEY_PGI_VERSION) && \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
879 !defined(JSON_HEDLEY_IAR_VERSION) && \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
880 (!defined(JSON_HEDLEY_SUNPRO_VERSION) || JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,15,0)) && \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
881 (!defined(JSON_HEDLEY_MSVC_VERSION) || JSON_HEDLEY_MSVC_VERSION_CHECK(19,20,0))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
882 #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(ns,attribute) JSON_HEDLEY_HAS_CPP_ATTRIBUTE(ns::attribute)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
883 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
884 #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(ns,attribute) (0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
885 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
886
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
887 #if defined(JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
888 #undef JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
889 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
890 #if defined(__has_cpp_attribute) && defined(__cplusplus)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
891 #define JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) __has_cpp_attribute(attribute)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
892 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
893 #define JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
894 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
895
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
896 #if defined(JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
897 #undef JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
898 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
899 #if defined(__has_cpp_attribute) && defined(__cplusplus)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
900 #define JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) __has_cpp_attribute(attribute)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
901 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
902 #define JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
903 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
904
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
905 #if defined(JSON_HEDLEY_HAS_BUILTIN)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
906 #undef JSON_HEDLEY_HAS_BUILTIN
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
907 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
908 #if defined(__has_builtin)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
909 #define JSON_HEDLEY_HAS_BUILTIN(builtin) __has_builtin(builtin)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
910 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
911 #define JSON_HEDLEY_HAS_BUILTIN(builtin) (0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
912 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
913
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
914 #if defined(JSON_HEDLEY_GNUC_HAS_BUILTIN)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
915 #undef JSON_HEDLEY_GNUC_HAS_BUILTIN
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
916 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
917 #if defined(__has_builtin)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
918 #define JSON_HEDLEY_GNUC_HAS_BUILTIN(builtin,major,minor,patch) __has_builtin(builtin)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
919 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
920 #define JSON_HEDLEY_GNUC_HAS_BUILTIN(builtin,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
921 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
922
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
923 #if defined(JSON_HEDLEY_GCC_HAS_BUILTIN)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
924 #undef JSON_HEDLEY_GCC_HAS_BUILTIN
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
925 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
926 #if defined(__has_builtin)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
927 #define JSON_HEDLEY_GCC_HAS_BUILTIN(builtin,major,minor,patch) __has_builtin(builtin)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
928 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
929 #define JSON_HEDLEY_GCC_HAS_BUILTIN(builtin,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
930 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
931
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
932 #if defined(JSON_HEDLEY_HAS_FEATURE)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
933 #undef JSON_HEDLEY_HAS_FEATURE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
934 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
935 #if defined(__has_feature)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
936 #define JSON_HEDLEY_HAS_FEATURE(feature) __has_feature(feature)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
937 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
938 #define JSON_HEDLEY_HAS_FEATURE(feature) (0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
939 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
940
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
941 #if defined(JSON_HEDLEY_GNUC_HAS_FEATURE)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
942 #undef JSON_HEDLEY_GNUC_HAS_FEATURE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
943 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
944 #if defined(__has_feature)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
945 #define JSON_HEDLEY_GNUC_HAS_FEATURE(feature,major,minor,patch) __has_feature(feature)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
946 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
947 #define JSON_HEDLEY_GNUC_HAS_FEATURE(feature,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
948 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
949
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
950 #if defined(JSON_HEDLEY_GCC_HAS_FEATURE)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
951 #undef JSON_HEDLEY_GCC_HAS_FEATURE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
952 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
953 #if defined(__has_feature)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
954 #define JSON_HEDLEY_GCC_HAS_FEATURE(feature,major,minor,patch) __has_feature(feature)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
955 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
956 #define JSON_HEDLEY_GCC_HAS_FEATURE(feature,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
957 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
958
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
959 #if defined(JSON_HEDLEY_HAS_EXTENSION)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
960 #undef JSON_HEDLEY_HAS_EXTENSION
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
961 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
962 #if defined(__has_extension)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
963 #define JSON_HEDLEY_HAS_EXTENSION(extension) __has_extension(extension)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
964 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
965 #define JSON_HEDLEY_HAS_EXTENSION(extension) (0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
966 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
967
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
968 #if defined(JSON_HEDLEY_GNUC_HAS_EXTENSION)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
969 #undef JSON_HEDLEY_GNUC_HAS_EXTENSION
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
970 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
971 #if defined(__has_extension)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
972 #define JSON_HEDLEY_GNUC_HAS_EXTENSION(extension,major,minor,patch) __has_extension(extension)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
973 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
974 #define JSON_HEDLEY_GNUC_HAS_EXTENSION(extension,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
975 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
976
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
977 #if defined(JSON_HEDLEY_GCC_HAS_EXTENSION)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
978 #undef JSON_HEDLEY_GCC_HAS_EXTENSION
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
979 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
980 #if defined(__has_extension)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
981 #define JSON_HEDLEY_GCC_HAS_EXTENSION(extension,major,minor,patch) __has_extension(extension)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
982 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
983 #define JSON_HEDLEY_GCC_HAS_EXTENSION(extension,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
984 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
985
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
986 #if defined(JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
987 #undef JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
988 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
989 #if defined(__has_declspec_attribute)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
990 #define JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE(attribute) __has_declspec_attribute(attribute)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
991 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
992 #define JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE(attribute) (0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
993 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
994
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
995 #if defined(JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
996 #undef JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
997 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
998 #if defined(__has_declspec_attribute)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
999 #define JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) __has_declspec_attribute(attribute)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1000 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1001 #define JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1002 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1003
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1004 #if defined(JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1005 #undef JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1006 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1007 #if defined(__has_declspec_attribute)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1008 #define JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) __has_declspec_attribute(attribute)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1009 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1010 #define JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1011 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1012
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1013 #if defined(JSON_HEDLEY_HAS_WARNING)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1014 #undef JSON_HEDLEY_HAS_WARNING
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1015 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1016 #if defined(__has_warning)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1017 #define JSON_HEDLEY_HAS_WARNING(warning) __has_warning(warning)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1018 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1019 #define JSON_HEDLEY_HAS_WARNING(warning) (0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1020 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1021
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1022 #if defined(JSON_HEDLEY_GNUC_HAS_WARNING)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1023 #undef JSON_HEDLEY_GNUC_HAS_WARNING
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1024 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1025 #if defined(__has_warning)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1026 #define JSON_HEDLEY_GNUC_HAS_WARNING(warning,major,minor,patch) __has_warning(warning)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1027 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1028 #define JSON_HEDLEY_GNUC_HAS_WARNING(warning,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1029 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1030
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1031 #if defined(JSON_HEDLEY_GCC_HAS_WARNING)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1032 #undef JSON_HEDLEY_GCC_HAS_WARNING
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1033 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1034 #if defined(__has_warning)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1035 #define JSON_HEDLEY_GCC_HAS_WARNING(warning,major,minor,patch) __has_warning(warning)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1036 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1037 #define JSON_HEDLEY_GCC_HAS_WARNING(warning,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1038 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1039
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1040 #if \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1041 (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1042 defined(__clang__) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1043 JSON_HEDLEY_GCC_VERSION_CHECK(3,0,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1044 JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1045 JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1046 JSON_HEDLEY_PGI_VERSION_CHECK(18,4,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1047 JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1048 JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1049 JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,7,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1050 JSON_HEDLEY_TI_CL430_VERSION_CHECK(2,0,1) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1051 JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,1,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1052 JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,0,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1053 JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1054 JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1055 JSON_HEDLEY_CRAY_VERSION_CHECK(5,0,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1056 JSON_HEDLEY_TINYC_VERSION_CHECK(0,9,17) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1057 JSON_HEDLEY_SUNPRO_VERSION_CHECK(8,0,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1058 (JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) && defined(__C99_PRAGMA_OPERATOR))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1059 #define JSON_HEDLEY_PRAGMA(value) _Pragma(#value)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1060 #elif JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1061 #define JSON_HEDLEY_PRAGMA(value) __pragma(value)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1062 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1063 #define JSON_HEDLEY_PRAGMA(value)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1064 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1065
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1066 #if defined(JSON_HEDLEY_DIAGNOSTIC_PUSH)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1067 #undef JSON_HEDLEY_DIAGNOSTIC_PUSH
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1068 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1069 #if defined(JSON_HEDLEY_DIAGNOSTIC_POP)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1070 #undef JSON_HEDLEY_DIAGNOSTIC_POP
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1071 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1072 #if defined(__clang__)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1073 #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("clang diagnostic push")
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1074 #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("clang diagnostic pop")
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1075 #elif JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1076 #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("warning(push)")
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1077 #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("warning(pop)")
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1078 #elif JSON_HEDLEY_GCC_VERSION_CHECK(4,6,0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1079 #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("GCC diagnostic push")
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1080 #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("GCC diagnostic pop")
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1081 #elif \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1082 JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1083 JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1084 #define JSON_HEDLEY_DIAGNOSTIC_PUSH __pragma(warning(push))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1085 #define JSON_HEDLEY_DIAGNOSTIC_POP __pragma(warning(pop))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1086 #elif JSON_HEDLEY_ARM_VERSION_CHECK(5,6,0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1087 #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("push")
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1088 #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("pop")
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1089 #elif \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1090 JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1091 JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1092 JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,4,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1093 JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,1,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1094 JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1095 JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1096 #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("diag_push")
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1097 #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("diag_pop")
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1098 #elif JSON_HEDLEY_PELLES_VERSION_CHECK(2,90,0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1099 #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("warning(push)")
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1100 #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("warning(pop)")
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1101 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1102 #define JSON_HEDLEY_DIAGNOSTIC_PUSH
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1103 #define JSON_HEDLEY_DIAGNOSTIC_POP
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1104 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1105
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1106 /* JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_ is for
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1107 HEDLEY INTERNAL USE ONLY. API subject to change without notice. */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1108 #if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1109 #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1110 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1111 #if defined(__cplusplus)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1112 # if JSON_HEDLEY_HAS_WARNING("-Wc++98-compat")
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1113 # if JSON_HEDLEY_HAS_WARNING("-Wc++17-extensions")
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1114 # if JSON_HEDLEY_HAS_WARNING("-Wc++1z-extensions")
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1115 # define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(xpr) \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1116 JSON_HEDLEY_DIAGNOSTIC_PUSH \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1117 _Pragma("clang diagnostic ignored \"-Wc++98-compat\"") \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1118 _Pragma("clang diagnostic ignored \"-Wc++17-extensions\"") \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1119 _Pragma("clang diagnostic ignored \"-Wc++1z-extensions\"") \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1120 xpr \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1121 JSON_HEDLEY_DIAGNOSTIC_POP
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1122 # else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1123 # define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(xpr) \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1124 JSON_HEDLEY_DIAGNOSTIC_PUSH \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1125 _Pragma("clang diagnostic ignored \"-Wc++98-compat\"") \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1126 _Pragma("clang diagnostic ignored \"-Wc++17-extensions\"") \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1127 xpr \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1128 JSON_HEDLEY_DIAGNOSTIC_POP
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1129 # endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1130 # else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1131 # define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(xpr) \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1132 JSON_HEDLEY_DIAGNOSTIC_PUSH \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1133 _Pragma("clang diagnostic ignored \"-Wc++98-compat\"") \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1134 xpr \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1135 JSON_HEDLEY_DIAGNOSTIC_POP
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1136 # endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1137 # endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1138 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1139 #if !defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1140 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(x) x
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1141 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1142
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1143 #if defined(JSON_HEDLEY_CONST_CAST)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1144 #undef JSON_HEDLEY_CONST_CAST
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1145 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1146 #if defined(__cplusplus)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1147 # define JSON_HEDLEY_CONST_CAST(T, expr) (const_cast<T>(expr))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1148 #elif \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1149 JSON_HEDLEY_HAS_WARNING("-Wcast-qual") || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1150 JSON_HEDLEY_GCC_VERSION_CHECK(4,6,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1151 JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1152 # define JSON_HEDLEY_CONST_CAST(T, expr) (__extension__ ({ \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1153 JSON_HEDLEY_DIAGNOSTIC_PUSH \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1154 JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1155 ((T) (expr)); \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1156 JSON_HEDLEY_DIAGNOSTIC_POP \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1157 }))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1158 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1159 # define JSON_HEDLEY_CONST_CAST(T, expr) ((T) (expr))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1160 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1161
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1162 #if defined(JSON_HEDLEY_REINTERPRET_CAST)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1163 #undef JSON_HEDLEY_REINTERPRET_CAST
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1164 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1165 #if defined(__cplusplus)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1166 #define JSON_HEDLEY_REINTERPRET_CAST(T, expr) (reinterpret_cast<T>(expr))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1167 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1168 #define JSON_HEDLEY_REINTERPRET_CAST(T, expr) ((T) (expr))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1169 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1170
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1171 #if defined(JSON_HEDLEY_STATIC_CAST)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1172 #undef JSON_HEDLEY_STATIC_CAST
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1173 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1174 #if defined(__cplusplus)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1175 #define JSON_HEDLEY_STATIC_CAST(T, expr) (static_cast<T>(expr))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1176 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1177 #define JSON_HEDLEY_STATIC_CAST(T, expr) ((T) (expr))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1178 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1179
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1180 #if defined(JSON_HEDLEY_CPP_CAST)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1181 #undef JSON_HEDLEY_CPP_CAST
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1182 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1183 #if defined(__cplusplus)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1184 # if JSON_HEDLEY_HAS_WARNING("-Wold-style-cast")
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1185 # define JSON_HEDLEY_CPP_CAST(T, expr) \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1186 JSON_HEDLEY_DIAGNOSTIC_PUSH \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1187 _Pragma("clang diagnostic ignored \"-Wold-style-cast\"") \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1188 ((T) (expr)) \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1189 JSON_HEDLEY_DIAGNOSTIC_POP
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1190 # elif JSON_HEDLEY_IAR_VERSION_CHECK(8,3,0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1191 # define JSON_HEDLEY_CPP_CAST(T, expr) \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1192 JSON_HEDLEY_DIAGNOSTIC_PUSH \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1193 _Pragma("diag_suppress=Pe137") \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1194 JSON_HEDLEY_DIAGNOSTIC_POP
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1195 # else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1196 # define JSON_HEDLEY_CPP_CAST(T, expr) ((T) (expr))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1197 # endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1198 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1199 # define JSON_HEDLEY_CPP_CAST(T, expr) (expr)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1200 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1201
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1202 #if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1203 #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1204 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1205 #if JSON_HEDLEY_HAS_WARNING("-Wdeprecated-declarations")
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1206 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("clang diagnostic ignored \"-Wdeprecated-declarations\"")
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1207 #elif JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1208 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("warning(disable:1478 1786)")
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1209 #elif JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1210 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED __pragma(warning(disable:1478 1786))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1211 #elif JSON_HEDLEY_PGI_VERSION_CHECK(20,7,0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1212 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress 1215,1216,1444,1445")
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1213 #elif JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1214 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress 1215,1444")
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1215 #elif JSON_HEDLEY_GCC_VERSION_CHECK(4,3,0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1216 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"")
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1217 #elif JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1218 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED __pragma(warning(disable:4996))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1219 #elif JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1220 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress 1215,1444")
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1221 #elif \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1222 JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1223 (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1224 JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1225 (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1226 JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1227 (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1228 JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1229 (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1230 JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1231 JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1232 JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1233 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress 1291,1718")
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1234 #elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,13,0) && !defined(__cplusplus)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1235 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("error_messages(off,E_DEPRECATED_ATT,E_DEPRECATED_ATT_MESS)")
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1236 #elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,13,0) && defined(__cplusplus)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1237 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("error_messages(off,symdeprecated,symdeprecated2)")
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1238 #elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1239 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress=Pe1444,Pe1215")
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1240 #elif JSON_HEDLEY_PELLES_VERSION_CHECK(2,90,0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1241 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("warn(disable:2241)")
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1242 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1243 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1244 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1245
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1246 #if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1247 #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1248 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1249 #if JSON_HEDLEY_HAS_WARNING("-Wunknown-pragmas")
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1250 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("clang diagnostic ignored \"-Wunknown-pragmas\"")
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1251 #elif JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1252 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("warning(disable:161)")
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1253 #elif JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1254 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS __pragma(warning(disable:161))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1255 #elif JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1256 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 1675")
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1257 #elif JSON_HEDLEY_GCC_VERSION_CHECK(4,3,0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1258 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("GCC diagnostic ignored \"-Wunknown-pragmas\"")
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1259 #elif JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1260 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS __pragma(warning(disable:4068))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1261 #elif \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1262 JSON_HEDLEY_TI_VERSION_CHECK(16,9,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1263 JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,0,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1264 JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1265 JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,3,0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1266 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 163")
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1267 #elif JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,0,0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1268 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 163")
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1269 #elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1270 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress=Pe161")
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1271 #elif JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1272 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 161")
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1273 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1274 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1275 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1276
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1277 #if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1278 #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1279 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1280 #if JSON_HEDLEY_HAS_WARNING("-Wunknown-attributes")
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1281 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("clang diagnostic ignored \"-Wunknown-attributes\"")
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1282 #elif JSON_HEDLEY_GCC_VERSION_CHECK(4,6,0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1283 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"")
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1284 #elif JSON_HEDLEY_INTEL_VERSION_CHECK(17,0,0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1285 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("warning(disable:1292)")
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1286 #elif JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1287 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES __pragma(warning(disable:1292))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1288 #elif JSON_HEDLEY_MSVC_VERSION_CHECK(19,0,0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1289 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES __pragma(warning(disable:5030))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1290 #elif JSON_HEDLEY_PGI_VERSION_CHECK(20,7,0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1291 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress 1097,1098")
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1292 #elif JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1293 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress 1097")
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1294 #elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,14,0) && defined(__cplusplus)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1295 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("error_messages(off,attrskipunsup)")
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1296 #elif \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1297 JSON_HEDLEY_TI_VERSION_CHECK(18,1,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1298 JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,3,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1299 JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1300 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress 1173")
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1301 #elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1302 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress=Pe1097")
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1303 #elif JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1304 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress 1097")
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1305 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1306 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1307 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1308
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1309 #if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1310 #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1311 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1312 #if JSON_HEDLEY_HAS_WARNING("-Wcast-qual")
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1313 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL _Pragma("clang diagnostic ignored \"-Wcast-qual\"")
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1314 #elif JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1315 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL _Pragma("warning(disable:2203 2331)")
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1316 #elif JSON_HEDLEY_GCC_VERSION_CHECK(3,0,0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1317 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL _Pragma("GCC diagnostic ignored \"-Wcast-qual\"")
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1318 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1319 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1320 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1321
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1322 #if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1323 #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1324 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1325 #if JSON_HEDLEY_HAS_WARNING("-Wunused-function")
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1326 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION _Pragma("clang diagnostic ignored \"-Wunused-function\"")
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1327 #elif JSON_HEDLEY_GCC_VERSION_CHECK(3,4,0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1328 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION _Pragma("GCC diagnostic ignored \"-Wunused-function\"")
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1329 #elif JSON_HEDLEY_MSVC_VERSION_CHECK(1,0,0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1330 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION __pragma(warning(disable:4505))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1331 #elif JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1332 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION _Pragma("diag_suppress 3142")
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1333 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1334 #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1335 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1336
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1337 #if defined(JSON_HEDLEY_DEPRECATED)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1338 #undef JSON_HEDLEY_DEPRECATED
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1339 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1340 #if defined(JSON_HEDLEY_DEPRECATED_FOR)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1341 #undef JSON_HEDLEY_DEPRECATED_FOR
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1342 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1343 #if \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1344 JSON_HEDLEY_MSVC_VERSION_CHECK(14,0,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1345 JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1346 #define JSON_HEDLEY_DEPRECATED(since) __declspec(deprecated("Since " # since))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1347 #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __declspec(deprecated("Since " #since "; use " #replacement))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1348 #elif \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1349 (JSON_HEDLEY_HAS_EXTENSION(attribute_deprecated_with_message) && !defined(JSON_HEDLEY_IAR_VERSION)) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1350 JSON_HEDLEY_GCC_VERSION_CHECK(4,5,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1351 JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1352 JSON_HEDLEY_ARM_VERSION_CHECK(5,6,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1353 JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,13,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1354 JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1355 JSON_HEDLEY_TI_VERSION_CHECK(18,1,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1356 JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(18,1,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1357 JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,3,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1358 JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1359 JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,3,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1360 JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1361 #define JSON_HEDLEY_DEPRECATED(since) __attribute__((__deprecated__("Since " #since)))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1362 #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __attribute__((__deprecated__("Since " #since "; use " #replacement)))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1363 #elif defined(__cplusplus) && (__cplusplus >= 201402L)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1364 #define JSON_HEDLEY_DEPRECATED(since) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[deprecated("Since " #since)]])
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1365 #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[deprecated("Since " #since "; use " #replacement)]])
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1366 #elif \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1367 JSON_HEDLEY_HAS_ATTRIBUTE(deprecated) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1368 JSON_HEDLEY_GCC_VERSION_CHECK(3,1,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1369 JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1370 JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1371 (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1372 JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1373 (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1374 JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1375 (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1376 JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1377 (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1378 JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1379 JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1380 JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1381 JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1382 JSON_HEDLEY_IAR_VERSION_CHECK(8,10,0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1383 #define JSON_HEDLEY_DEPRECATED(since) __attribute__((__deprecated__))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1384 #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __attribute__((__deprecated__))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1385 #elif \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1386 JSON_HEDLEY_MSVC_VERSION_CHECK(13,10,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1387 JSON_HEDLEY_PELLES_VERSION_CHECK(6,50,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1388 JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1389 #define JSON_HEDLEY_DEPRECATED(since) __declspec(deprecated)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1390 #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __declspec(deprecated)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1391 #elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1392 #define JSON_HEDLEY_DEPRECATED(since) _Pragma("deprecated")
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1393 #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) _Pragma("deprecated")
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1394 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1395 #define JSON_HEDLEY_DEPRECATED(since)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1396 #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1397 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1398
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1399 #if defined(JSON_HEDLEY_UNAVAILABLE)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1400 #undef JSON_HEDLEY_UNAVAILABLE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1401 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1402 #if \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1403 JSON_HEDLEY_HAS_ATTRIBUTE(warning) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1404 JSON_HEDLEY_GCC_VERSION_CHECK(4,3,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1405 JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1406 JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1407 #define JSON_HEDLEY_UNAVAILABLE(available_since) __attribute__((__warning__("Not available until " #available_since)))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1408 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1409 #define JSON_HEDLEY_UNAVAILABLE(available_since)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1410 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1411
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1412 #if defined(JSON_HEDLEY_WARN_UNUSED_RESULT)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1413 #undef JSON_HEDLEY_WARN_UNUSED_RESULT
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1414 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1415 #if defined(JSON_HEDLEY_WARN_UNUSED_RESULT_MSG)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1416 #undef JSON_HEDLEY_WARN_UNUSED_RESULT_MSG
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1417 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1418 #if \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1419 JSON_HEDLEY_HAS_ATTRIBUTE(warn_unused_result) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1420 JSON_HEDLEY_GCC_VERSION_CHECK(3,4,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1421 JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1422 JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1423 (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1424 JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1425 (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1426 JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1427 (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1428 JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1429 (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1430 JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1431 JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1432 JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1433 (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,15,0) && defined(__cplusplus)) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1434 JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1435 JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1436 #define JSON_HEDLEY_WARN_UNUSED_RESULT __attribute__((__warn_unused_result__))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1437 #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) __attribute__((__warn_unused_result__))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1438 #elif (JSON_HEDLEY_HAS_CPP_ATTRIBUTE(nodiscard) >= 201907L)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1439 #define JSON_HEDLEY_WARN_UNUSED_RESULT JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard]])
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1440 #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard(msg)]])
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1441 #elif JSON_HEDLEY_HAS_CPP_ATTRIBUTE(nodiscard)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1442 #define JSON_HEDLEY_WARN_UNUSED_RESULT JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard]])
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1443 #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard]])
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1444 #elif defined(_Check_return_) /* SAL */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1445 #define JSON_HEDLEY_WARN_UNUSED_RESULT _Check_return_
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1446 #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) _Check_return_
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1447 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1448 #define JSON_HEDLEY_WARN_UNUSED_RESULT
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1449 #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1450 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1451
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1452 #if defined(JSON_HEDLEY_SENTINEL)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1453 #undef JSON_HEDLEY_SENTINEL
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1454 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1455 #if \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1456 JSON_HEDLEY_HAS_ATTRIBUTE(sentinel) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1457 JSON_HEDLEY_GCC_VERSION_CHECK(4,0,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1458 JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1459 JSON_HEDLEY_ARM_VERSION_CHECK(5,4,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1460 JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1461 #define JSON_HEDLEY_SENTINEL(position) __attribute__((__sentinel__(position)))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1462 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1463 #define JSON_HEDLEY_SENTINEL(position)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1464 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1465
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1466 #if defined(JSON_HEDLEY_NO_RETURN)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1467 #undef JSON_HEDLEY_NO_RETURN
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1468 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1469 #if JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1470 #define JSON_HEDLEY_NO_RETURN __noreturn
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1471 #elif \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1472 JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1473 JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1474 #define JSON_HEDLEY_NO_RETURN __attribute__((__noreturn__))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1475 #elif defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1476 #define JSON_HEDLEY_NO_RETURN _Noreturn
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1477 #elif defined(__cplusplus) && (__cplusplus >= 201103L)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1478 #define JSON_HEDLEY_NO_RETURN JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[noreturn]])
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1479 #elif \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1480 JSON_HEDLEY_HAS_ATTRIBUTE(noreturn) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1481 JSON_HEDLEY_GCC_VERSION_CHECK(3,2,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1482 JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1483 JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1484 JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1485 JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1486 (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1487 JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1488 (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1489 JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1490 (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1491 JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1492 (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1493 JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1494 JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1495 JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1496 JSON_HEDLEY_IAR_VERSION_CHECK(8,10,0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1497 #define JSON_HEDLEY_NO_RETURN __attribute__((__noreturn__))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1498 #elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1499 #define JSON_HEDLEY_NO_RETURN _Pragma("does_not_return")
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1500 #elif \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1501 JSON_HEDLEY_MSVC_VERSION_CHECK(13,10,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1502 JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1503 #define JSON_HEDLEY_NO_RETURN __declspec(noreturn)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1504 #elif JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,0,0) && defined(__cplusplus)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1505 #define JSON_HEDLEY_NO_RETURN _Pragma("FUNC_NEVER_RETURNS;")
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1506 #elif JSON_HEDLEY_COMPCERT_VERSION_CHECK(3,2,0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1507 #define JSON_HEDLEY_NO_RETURN __attribute((noreturn))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1508 #elif JSON_HEDLEY_PELLES_VERSION_CHECK(9,0,0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1509 #define JSON_HEDLEY_NO_RETURN __declspec(noreturn)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1510 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1511 #define JSON_HEDLEY_NO_RETURN
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1512 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1513
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1514 #if defined(JSON_HEDLEY_NO_ESCAPE)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1515 #undef JSON_HEDLEY_NO_ESCAPE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1516 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1517 #if JSON_HEDLEY_HAS_ATTRIBUTE(noescape)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1518 #define JSON_HEDLEY_NO_ESCAPE __attribute__((__noescape__))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1519 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1520 #define JSON_HEDLEY_NO_ESCAPE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1521 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1522
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1523 #if defined(JSON_HEDLEY_UNREACHABLE)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1524 #undef JSON_HEDLEY_UNREACHABLE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1525 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1526 #if defined(JSON_HEDLEY_UNREACHABLE_RETURN)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1527 #undef JSON_HEDLEY_UNREACHABLE_RETURN
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1528 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1529 #if defined(JSON_HEDLEY_ASSUME)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1530 #undef JSON_HEDLEY_ASSUME
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1531 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1532 #if \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1533 JSON_HEDLEY_MSVC_VERSION_CHECK(13,10,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1534 JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1535 JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1536 #define JSON_HEDLEY_ASSUME(expr) __assume(expr)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1537 #elif JSON_HEDLEY_HAS_BUILTIN(__builtin_assume)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1538 #define JSON_HEDLEY_ASSUME(expr) __builtin_assume(expr)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1539 #elif \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1540 JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,2,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1541 JSON_HEDLEY_TI_CL6X_VERSION_CHECK(4,0,0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1542 #if defined(__cplusplus)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1543 #define JSON_HEDLEY_ASSUME(expr) std::_nassert(expr)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1544 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1545 #define JSON_HEDLEY_ASSUME(expr) _nassert(expr)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1546 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1547 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1548 #if \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1549 (JSON_HEDLEY_HAS_BUILTIN(__builtin_unreachable) && (!defined(JSON_HEDLEY_ARM_VERSION))) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1550 JSON_HEDLEY_GCC_VERSION_CHECK(4,5,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1551 JSON_HEDLEY_PGI_VERSION_CHECK(18,10,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1552 JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1553 JSON_HEDLEY_IBM_VERSION_CHECK(13,1,5) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1554 JSON_HEDLEY_CRAY_VERSION_CHECK(10,0,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1555 JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1556 #define JSON_HEDLEY_UNREACHABLE() __builtin_unreachable()
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1557 #elif defined(JSON_HEDLEY_ASSUME)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1558 #define JSON_HEDLEY_UNREACHABLE() JSON_HEDLEY_ASSUME(0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1559 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1560 #if !defined(JSON_HEDLEY_ASSUME)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1561 #if defined(JSON_HEDLEY_UNREACHABLE)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1562 #define JSON_HEDLEY_ASSUME(expr) JSON_HEDLEY_STATIC_CAST(void, ((expr) ? 1 : (JSON_HEDLEY_UNREACHABLE(), 1)))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1563 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1564 #define JSON_HEDLEY_ASSUME(expr) JSON_HEDLEY_STATIC_CAST(void, expr)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1565 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1566 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1567 #if defined(JSON_HEDLEY_UNREACHABLE)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1568 #if \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1569 JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,2,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1570 JSON_HEDLEY_TI_CL6X_VERSION_CHECK(4,0,0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1571 #define JSON_HEDLEY_UNREACHABLE_RETURN(value) return (JSON_HEDLEY_STATIC_CAST(void, JSON_HEDLEY_ASSUME(0)), (value))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1572 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1573 #define JSON_HEDLEY_UNREACHABLE_RETURN(value) JSON_HEDLEY_UNREACHABLE()
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1574 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1575 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1576 #define JSON_HEDLEY_UNREACHABLE_RETURN(value) return (value)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1577 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1578 #if !defined(JSON_HEDLEY_UNREACHABLE)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1579 #define JSON_HEDLEY_UNREACHABLE() JSON_HEDLEY_ASSUME(0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1580 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1581
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1582 JSON_HEDLEY_DIAGNOSTIC_PUSH
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1583 #if JSON_HEDLEY_HAS_WARNING("-Wpedantic")
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1584 #pragma clang diagnostic ignored "-Wpedantic"
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1585 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1586 #if JSON_HEDLEY_HAS_WARNING("-Wc++98-compat-pedantic") && defined(__cplusplus)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1587 #pragma clang diagnostic ignored "-Wc++98-compat-pedantic"
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1588 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1589 #if JSON_HEDLEY_GCC_HAS_WARNING("-Wvariadic-macros",4,0,0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1590 #if defined(__clang__)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1591 #pragma clang diagnostic ignored "-Wvariadic-macros"
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1592 #elif defined(JSON_HEDLEY_GCC_VERSION)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1593 #pragma GCC diagnostic ignored "-Wvariadic-macros"
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1594 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1595 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1596 #if defined(JSON_HEDLEY_NON_NULL)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1597 #undef JSON_HEDLEY_NON_NULL
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1598 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1599 #if \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1600 JSON_HEDLEY_HAS_ATTRIBUTE(nonnull) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1601 JSON_HEDLEY_GCC_VERSION_CHECK(3,3,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1602 JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1603 JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1604 #define JSON_HEDLEY_NON_NULL(...) __attribute__((__nonnull__(__VA_ARGS__)))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1605 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1606 #define JSON_HEDLEY_NON_NULL(...)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1607 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1608 JSON_HEDLEY_DIAGNOSTIC_POP
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1609
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1610 #if defined(JSON_HEDLEY_PRINTF_FORMAT)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1611 #undef JSON_HEDLEY_PRINTF_FORMAT
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1612 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1613 #if defined(__MINGW32__) && JSON_HEDLEY_GCC_HAS_ATTRIBUTE(format,4,4,0) && !defined(__USE_MINGW_ANSI_STDIO)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1614 #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) __attribute__((__format__(ms_printf, string_idx, first_to_check)))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1615 #elif defined(__MINGW32__) && JSON_HEDLEY_GCC_HAS_ATTRIBUTE(format,4,4,0) && defined(__USE_MINGW_ANSI_STDIO)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1616 #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) __attribute__((__format__(gnu_printf, string_idx, first_to_check)))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1617 #elif \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1618 JSON_HEDLEY_HAS_ATTRIBUTE(format) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1619 JSON_HEDLEY_GCC_VERSION_CHECK(3,1,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1620 JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1621 JSON_HEDLEY_ARM_VERSION_CHECK(5,6,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1622 JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1623 JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1624 (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1625 JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1626 (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1627 JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1628 (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1629 JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1630 (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1631 JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1632 JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1633 JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1634 JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1635 #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) __attribute__((__format__(__printf__, string_idx, first_to_check)))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1636 #elif JSON_HEDLEY_PELLES_VERSION_CHECK(6,0,0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1637 #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) __declspec(vaformat(printf,string_idx,first_to_check))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1638 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1639 #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1640 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1641
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1642 #if defined(JSON_HEDLEY_CONSTEXPR)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1643 #undef JSON_HEDLEY_CONSTEXPR
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1644 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1645 #if defined(__cplusplus)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1646 #if __cplusplus >= 201103L
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1647 #define JSON_HEDLEY_CONSTEXPR JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(constexpr)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1648 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1649 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1650 #if !defined(JSON_HEDLEY_CONSTEXPR)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1651 #define JSON_HEDLEY_CONSTEXPR
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1652 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1653
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1654 #if defined(JSON_HEDLEY_PREDICT)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1655 #undef JSON_HEDLEY_PREDICT
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1656 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1657 #if defined(JSON_HEDLEY_LIKELY)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1658 #undef JSON_HEDLEY_LIKELY
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1659 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1660 #if defined(JSON_HEDLEY_UNLIKELY)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1661 #undef JSON_HEDLEY_UNLIKELY
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1662 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1663 #if defined(JSON_HEDLEY_UNPREDICTABLE)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1664 #undef JSON_HEDLEY_UNPREDICTABLE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1665 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1666 #if JSON_HEDLEY_HAS_BUILTIN(__builtin_unpredictable)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1667 #define JSON_HEDLEY_UNPREDICTABLE(expr) __builtin_unpredictable((expr))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1668 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1669 #if \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1670 (JSON_HEDLEY_HAS_BUILTIN(__builtin_expect_with_probability) && !defined(JSON_HEDLEY_PGI_VERSION)) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1671 JSON_HEDLEY_GCC_VERSION_CHECK(9,0,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1672 JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1673 # define JSON_HEDLEY_PREDICT(expr, value, probability) __builtin_expect_with_probability( (expr), (value), (probability))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1674 # define JSON_HEDLEY_PREDICT_TRUE(expr, probability) __builtin_expect_with_probability(!!(expr), 1 , (probability))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1675 # define JSON_HEDLEY_PREDICT_FALSE(expr, probability) __builtin_expect_with_probability(!!(expr), 0 , (probability))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1676 # define JSON_HEDLEY_LIKELY(expr) __builtin_expect (!!(expr), 1 )
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1677 # define JSON_HEDLEY_UNLIKELY(expr) __builtin_expect (!!(expr), 0 )
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1678 #elif \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1679 (JSON_HEDLEY_HAS_BUILTIN(__builtin_expect) && !defined(JSON_HEDLEY_INTEL_CL_VERSION)) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1680 JSON_HEDLEY_GCC_VERSION_CHECK(3,0,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1681 JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1682 (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,15,0) && defined(__cplusplus)) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1683 JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1684 JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1685 JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1686 JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,7,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1687 JSON_HEDLEY_TI_CL430_VERSION_CHECK(3,1,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1688 JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,1,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1689 JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,1,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1690 JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1691 JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1692 JSON_HEDLEY_TINYC_VERSION_CHECK(0,9,27) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1693 JSON_HEDLEY_CRAY_VERSION_CHECK(8,1,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1694 JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1695 # define JSON_HEDLEY_PREDICT(expr, expected, probability) \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1696 (((probability) >= 0.9) ? __builtin_expect((expr), (expected)) : (JSON_HEDLEY_STATIC_CAST(void, expected), (expr)))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1697 # define JSON_HEDLEY_PREDICT_TRUE(expr, probability) \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1698 (__extension__ ({ \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1699 double hedley_probability_ = (probability); \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1700 ((hedley_probability_ >= 0.9) ? __builtin_expect(!!(expr), 1) : ((hedley_probability_ <= 0.1) ? __builtin_expect(!!(expr), 0) : !!(expr))); \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1701 }))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1702 # define JSON_HEDLEY_PREDICT_FALSE(expr, probability) \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1703 (__extension__ ({ \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1704 double hedley_probability_ = (probability); \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1705 ((hedley_probability_ >= 0.9) ? __builtin_expect(!!(expr), 0) : ((hedley_probability_ <= 0.1) ? __builtin_expect(!!(expr), 1) : !!(expr))); \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1706 }))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1707 # define JSON_HEDLEY_LIKELY(expr) __builtin_expect(!!(expr), 1)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1708 # define JSON_HEDLEY_UNLIKELY(expr) __builtin_expect(!!(expr), 0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1709 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1710 # define JSON_HEDLEY_PREDICT(expr, expected, probability) (JSON_HEDLEY_STATIC_CAST(void, expected), (expr))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1711 # define JSON_HEDLEY_PREDICT_TRUE(expr, probability) (!!(expr))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1712 # define JSON_HEDLEY_PREDICT_FALSE(expr, probability) (!!(expr))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1713 # define JSON_HEDLEY_LIKELY(expr) (!!(expr))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1714 # define JSON_HEDLEY_UNLIKELY(expr) (!!(expr))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1715 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1716 #if !defined(JSON_HEDLEY_UNPREDICTABLE)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1717 #define JSON_HEDLEY_UNPREDICTABLE(expr) JSON_HEDLEY_PREDICT(expr, 1, 0.5)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1718 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1719
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1720 #if defined(JSON_HEDLEY_MALLOC)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1721 #undef JSON_HEDLEY_MALLOC
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1722 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1723 #if \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1724 JSON_HEDLEY_HAS_ATTRIBUTE(malloc) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1725 JSON_HEDLEY_GCC_VERSION_CHECK(3,1,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1726 JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1727 JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1728 JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1729 JSON_HEDLEY_IBM_VERSION_CHECK(12,1,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1730 JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1731 (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1732 JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1733 (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1734 JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1735 (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1736 JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1737 (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1738 JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1739 JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1740 JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1741 JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1742 #define JSON_HEDLEY_MALLOC __attribute__((__malloc__))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1743 #elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1744 #define JSON_HEDLEY_MALLOC _Pragma("returns_new_memory")
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1745 #elif \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1746 JSON_HEDLEY_MSVC_VERSION_CHECK(14,0,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1747 JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1748 #define JSON_HEDLEY_MALLOC __declspec(restrict)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1749 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1750 #define JSON_HEDLEY_MALLOC
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1751 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1752
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1753 #if defined(JSON_HEDLEY_PURE)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1754 #undef JSON_HEDLEY_PURE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1755 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1756 #if \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1757 JSON_HEDLEY_HAS_ATTRIBUTE(pure) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1758 JSON_HEDLEY_GCC_VERSION_CHECK(2,96,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1759 JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1760 JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1761 JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1762 JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1763 JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1764 (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1765 JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1766 (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1767 JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1768 (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1769 JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1770 (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1771 JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1772 JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1773 JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1774 JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1775 JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1776 # define JSON_HEDLEY_PURE __attribute__((__pure__))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1777 #elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1778 # define JSON_HEDLEY_PURE _Pragma("does_not_write_global_data")
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1779 #elif defined(__cplusplus) && \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1780 ( \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1781 JSON_HEDLEY_TI_CL430_VERSION_CHECK(2,0,1) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1782 JSON_HEDLEY_TI_CL6X_VERSION_CHECK(4,0,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1783 JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1784 )
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1785 # define JSON_HEDLEY_PURE _Pragma("FUNC_IS_PURE;")
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1786 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1787 # define JSON_HEDLEY_PURE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1788 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1789
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1790 #if defined(JSON_HEDLEY_CONST)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1791 #undef JSON_HEDLEY_CONST
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1792 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1793 #if \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1794 JSON_HEDLEY_HAS_ATTRIBUTE(const) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1795 JSON_HEDLEY_GCC_VERSION_CHECK(2,5,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1796 JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1797 JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1798 JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1799 JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1800 JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1801 (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1802 JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1803 (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1804 JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1805 (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1806 JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1807 (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1808 JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1809 JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1810 JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1811 JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1812 JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1813 #define JSON_HEDLEY_CONST __attribute__((__const__))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1814 #elif \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1815 JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1816 #define JSON_HEDLEY_CONST _Pragma("no_side_effect")
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1817 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1818 #define JSON_HEDLEY_CONST JSON_HEDLEY_PURE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1819 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1820
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1821 #if defined(JSON_HEDLEY_RESTRICT)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1822 #undef JSON_HEDLEY_RESTRICT
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1823 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1824 #if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && !defined(__cplusplus)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1825 #define JSON_HEDLEY_RESTRICT restrict
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1826 #elif \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1827 JSON_HEDLEY_GCC_VERSION_CHECK(3,1,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1828 JSON_HEDLEY_MSVC_VERSION_CHECK(14,0,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1829 JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1830 JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1831 JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1832 JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1833 JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1834 JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1835 JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,2,4) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1836 JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,1,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1837 JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1838 (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,14,0) && defined(__cplusplus)) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1839 JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1840 defined(__clang__) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1841 JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1842 #define JSON_HEDLEY_RESTRICT __restrict
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1843 #elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,3,0) && !defined(__cplusplus)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1844 #define JSON_HEDLEY_RESTRICT _Restrict
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1845 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1846 #define JSON_HEDLEY_RESTRICT
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1847 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1848
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1849 #if defined(JSON_HEDLEY_INLINE)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1850 #undef JSON_HEDLEY_INLINE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1851 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1852 #if \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1853 (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1854 (defined(__cplusplus) && (__cplusplus >= 199711L))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1855 #define JSON_HEDLEY_INLINE inline
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1856 #elif \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1857 defined(JSON_HEDLEY_GCC_VERSION) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1858 JSON_HEDLEY_ARM_VERSION_CHECK(6,2,0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1859 #define JSON_HEDLEY_INLINE __inline__
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1860 #elif \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1861 JSON_HEDLEY_MSVC_VERSION_CHECK(12,0,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1862 JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1863 JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1864 JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,1,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1865 JSON_HEDLEY_TI_CL430_VERSION_CHECK(3,1,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1866 JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,2,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1867 JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,0,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1868 JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1869 JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1870 JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1871 #define JSON_HEDLEY_INLINE __inline
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1872 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1873 #define JSON_HEDLEY_INLINE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1874 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1875
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1876 #if defined(JSON_HEDLEY_ALWAYS_INLINE)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1877 #undef JSON_HEDLEY_ALWAYS_INLINE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1878 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1879 #if \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1880 JSON_HEDLEY_HAS_ATTRIBUTE(always_inline) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1881 JSON_HEDLEY_GCC_VERSION_CHECK(4,0,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1882 JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1883 JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1884 JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1885 JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1886 JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1887 (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1888 JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1889 (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1890 JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1891 (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1892 JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1893 (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1894 JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1895 JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1896 JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1897 JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1898 JSON_HEDLEY_IAR_VERSION_CHECK(8,10,0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1899 # define JSON_HEDLEY_ALWAYS_INLINE __attribute__((__always_inline__)) JSON_HEDLEY_INLINE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1900 #elif \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1901 JSON_HEDLEY_MSVC_VERSION_CHECK(12,0,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1902 JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1903 # define JSON_HEDLEY_ALWAYS_INLINE __forceinline
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1904 #elif defined(__cplusplus) && \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1905 ( \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1906 JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1907 JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1908 JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1909 JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,1,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1910 JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1911 JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1912 )
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1913 # define JSON_HEDLEY_ALWAYS_INLINE _Pragma("FUNC_ALWAYS_INLINE;")
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1914 #elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1915 # define JSON_HEDLEY_ALWAYS_INLINE _Pragma("inline=forced")
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1916 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1917 # define JSON_HEDLEY_ALWAYS_INLINE JSON_HEDLEY_INLINE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1918 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1919
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1920 #if defined(JSON_HEDLEY_NEVER_INLINE)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1921 #undef JSON_HEDLEY_NEVER_INLINE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1922 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1923 #if \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1924 JSON_HEDLEY_HAS_ATTRIBUTE(noinline) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1925 JSON_HEDLEY_GCC_VERSION_CHECK(4,0,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1926 JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1927 JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1928 JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1929 JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1930 JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1931 (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1932 JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1933 (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1934 JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1935 (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1936 JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1937 (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1938 JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1939 JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1940 JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1941 JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1942 JSON_HEDLEY_IAR_VERSION_CHECK(8,10,0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1943 #define JSON_HEDLEY_NEVER_INLINE __attribute__((__noinline__))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1944 #elif \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1945 JSON_HEDLEY_MSVC_VERSION_CHECK(13,10,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1946 JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1947 #define JSON_HEDLEY_NEVER_INLINE __declspec(noinline)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1948 #elif JSON_HEDLEY_PGI_VERSION_CHECK(10,2,0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1949 #define JSON_HEDLEY_NEVER_INLINE _Pragma("noinline")
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1950 #elif JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,0,0) && defined(__cplusplus)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1951 #define JSON_HEDLEY_NEVER_INLINE _Pragma("FUNC_CANNOT_INLINE;")
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1952 #elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1953 #define JSON_HEDLEY_NEVER_INLINE _Pragma("inline=never")
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1954 #elif JSON_HEDLEY_COMPCERT_VERSION_CHECK(3,2,0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1955 #define JSON_HEDLEY_NEVER_INLINE __attribute((noinline))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1956 #elif JSON_HEDLEY_PELLES_VERSION_CHECK(9,0,0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1957 #define JSON_HEDLEY_NEVER_INLINE __declspec(noinline)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1958 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1959 #define JSON_HEDLEY_NEVER_INLINE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1960 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1961
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1962 #if defined(JSON_HEDLEY_PRIVATE)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1963 #undef JSON_HEDLEY_PRIVATE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1964 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1965 #if defined(JSON_HEDLEY_PUBLIC)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1966 #undef JSON_HEDLEY_PUBLIC
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1967 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1968 #if defined(JSON_HEDLEY_IMPORT)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1969 #undef JSON_HEDLEY_IMPORT
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1970 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1971 #if defined(_WIN32) || defined(__CYGWIN__)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1972 # define JSON_HEDLEY_PRIVATE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1973 # define JSON_HEDLEY_PUBLIC __declspec(dllexport)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1974 # define JSON_HEDLEY_IMPORT __declspec(dllimport)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1975 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1976 # if \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1977 JSON_HEDLEY_HAS_ATTRIBUTE(visibility) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1978 JSON_HEDLEY_GCC_VERSION_CHECK(3,3,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1979 JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1980 JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1981 JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1982 JSON_HEDLEY_IBM_VERSION_CHECK(13,1,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1983 ( \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1984 defined(__TI_EABI__) && \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1985 ( \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1986 (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1987 JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1988 ) \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1989 ) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1990 JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1991 # define JSON_HEDLEY_PRIVATE __attribute__((__visibility__("hidden")))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1992 # define JSON_HEDLEY_PUBLIC __attribute__((__visibility__("default")))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1993 # else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1994 # define JSON_HEDLEY_PRIVATE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1995 # define JSON_HEDLEY_PUBLIC
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1996 # endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1997 # define JSON_HEDLEY_IMPORT extern
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1998 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1999
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2000 #if defined(JSON_HEDLEY_NO_THROW)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2001 #undef JSON_HEDLEY_NO_THROW
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2002 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2003 #if \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2004 JSON_HEDLEY_HAS_ATTRIBUTE(nothrow) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2005 JSON_HEDLEY_GCC_VERSION_CHECK(3,3,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2006 JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2007 JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2008 #define JSON_HEDLEY_NO_THROW __attribute__((__nothrow__))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2009 #elif \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2010 JSON_HEDLEY_MSVC_VERSION_CHECK(13,1,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2011 JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2012 JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2013 #define JSON_HEDLEY_NO_THROW __declspec(nothrow)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2014 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2015 #define JSON_HEDLEY_NO_THROW
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2016 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2017
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2018 #if defined(JSON_HEDLEY_FALL_THROUGH)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2019 #undef JSON_HEDLEY_FALL_THROUGH
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2020 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2021 #if \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2022 JSON_HEDLEY_HAS_ATTRIBUTE(fallthrough) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2023 JSON_HEDLEY_GCC_VERSION_CHECK(7,0,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2024 JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2025 #define JSON_HEDLEY_FALL_THROUGH __attribute__((__fallthrough__))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2026 #elif JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(clang,fallthrough)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2027 #define JSON_HEDLEY_FALL_THROUGH JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[clang::fallthrough]])
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2028 #elif JSON_HEDLEY_HAS_CPP_ATTRIBUTE(fallthrough)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2029 #define JSON_HEDLEY_FALL_THROUGH JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[fallthrough]])
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2030 #elif defined(__fallthrough) /* SAL */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2031 #define JSON_HEDLEY_FALL_THROUGH __fallthrough
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2032 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2033 #define JSON_HEDLEY_FALL_THROUGH
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2034 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2035
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2036 #if defined(JSON_HEDLEY_RETURNS_NON_NULL)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2037 #undef JSON_HEDLEY_RETURNS_NON_NULL
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2038 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2039 #if \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2040 JSON_HEDLEY_HAS_ATTRIBUTE(returns_nonnull) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2041 JSON_HEDLEY_GCC_VERSION_CHECK(4,9,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2042 JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2043 #define JSON_HEDLEY_RETURNS_NON_NULL __attribute__((__returns_nonnull__))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2044 #elif defined(_Ret_notnull_) /* SAL */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2045 #define JSON_HEDLEY_RETURNS_NON_NULL _Ret_notnull_
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2046 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2047 #define JSON_HEDLEY_RETURNS_NON_NULL
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2048 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2049
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2050 #if defined(JSON_HEDLEY_ARRAY_PARAM)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2051 #undef JSON_HEDLEY_ARRAY_PARAM
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2052 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2053 #if \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2054 defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2055 !defined(__STDC_NO_VLA__) && \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2056 !defined(__cplusplus) && \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2057 !defined(JSON_HEDLEY_PGI_VERSION) && \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2058 !defined(JSON_HEDLEY_TINYC_VERSION)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2059 #define JSON_HEDLEY_ARRAY_PARAM(name) (name)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2060 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2061 #define JSON_HEDLEY_ARRAY_PARAM(name)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2062 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2063
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2064 #if defined(JSON_HEDLEY_IS_CONSTANT)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2065 #undef JSON_HEDLEY_IS_CONSTANT
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2066 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2067 #if defined(JSON_HEDLEY_REQUIRE_CONSTEXPR)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2068 #undef JSON_HEDLEY_REQUIRE_CONSTEXPR
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2069 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2070 /* JSON_HEDLEY_IS_CONSTEXPR_ is for
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2071 HEDLEY INTERNAL USE ONLY. API subject to change without notice. */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2072 #if defined(JSON_HEDLEY_IS_CONSTEXPR_)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2073 #undef JSON_HEDLEY_IS_CONSTEXPR_
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2074 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2075 #if \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2076 JSON_HEDLEY_HAS_BUILTIN(__builtin_constant_p) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2077 JSON_HEDLEY_GCC_VERSION_CHECK(3,4,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2078 JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2079 JSON_HEDLEY_TINYC_VERSION_CHECK(0,9,19) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2080 JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2081 JSON_HEDLEY_IBM_VERSION_CHECK(13,1,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2082 JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,1,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2083 (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0) && !defined(__cplusplus)) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2084 JSON_HEDLEY_CRAY_VERSION_CHECK(8,1,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2085 JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2086 #define JSON_HEDLEY_IS_CONSTANT(expr) __builtin_constant_p(expr)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2087 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2088 #if !defined(__cplusplus)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2089 # if \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2090 JSON_HEDLEY_HAS_BUILTIN(__builtin_types_compatible_p) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2091 JSON_HEDLEY_GCC_VERSION_CHECK(3,4,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2092 JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2093 JSON_HEDLEY_IBM_VERSION_CHECK(13,1,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2094 JSON_HEDLEY_CRAY_VERSION_CHECK(8,1,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2095 JSON_HEDLEY_ARM_VERSION_CHECK(5,4,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2096 JSON_HEDLEY_TINYC_VERSION_CHECK(0,9,24)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2097 #if defined(__INTPTR_TYPE__)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2098 #define JSON_HEDLEY_IS_CONSTEXPR_(expr) __builtin_types_compatible_p(__typeof__((1 ? (void*) ((__INTPTR_TYPE__) ((expr) * 0)) : (int*) 0)), int*)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2099 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2100 #include <stdint.h>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2101 #define JSON_HEDLEY_IS_CONSTEXPR_(expr) __builtin_types_compatible_p(__typeof__((1 ? (void*) ((intptr_t) ((expr) * 0)) : (int*) 0)), int*)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2102 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2103 # elif \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2104 ( \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2105 defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L) && \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2106 !defined(JSON_HEDLEY_SUNPRO_VERSION) && \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2107 !defined(JSON_HEDLEY_PGI_VERSION) && \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2108 !defined(JSON_HEDLEY_IAR_VERSION)) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2109 (JSON_HEDLEY_HAS_EXTENSION(c_generic_selections) && !defined(JSON_HEDLEY_IAR_VERSION)) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2110 JSON_HEDLEY_GCC_VERSION_CHECK(4,9,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2111 JSON_HEDLEY_INTEL_VERSION_CHECK(17,0,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2112 JSON_HEDLEY_IBM_VERSION_CHECK(12,1,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2113 JSON_HEDLEY_ARM_VERSION_CHECK(5,3,0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2114 #if defined(__INTPTR_TYPE__)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2115 #define JSON_HEDLEY_IS_CONSTEXPR_(expr) _Generic((1 ? (void*) ((__INTPTR_TYPE__) ((expr) * 0)) : (int*) 0), int*: 1, void*: 0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2116 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2117 #include <stdint.h>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2118 #define JSON_HEDLEY_IS_CONSTEXPR_(expr) _Generic((1 ? (void*) ((intptr_t) * 0) : (int*) 0), int*: 1, void*: 0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2119 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2120 # elif \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2121 defined(JSON_HEDLEY_GCC_VERSION) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2122 defined(JSON_HEDLEY_INTEL_VERSION) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2123 defined(JSON_HEDLEY_TINYC_VERSION) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2124 defined(JSON_HEDLEY_TI_ARMCL_VERSION) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2125 JSON_HEDLEY_TI_CL430_VERSION_CHECK(18,12,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2126 defined(JSON_HEDLEY_TI_CL2000_VERSION) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2127 defined(JSON_HEDLEY_TI_CL6X_VERSION) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2128 defined(JSON_HEDLEY_TI_CL7X_VERSION) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2129 defined(JSON_HEDLEY_TI_CLPRU_VERSION) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2130 defined(__clang__)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2131 # define JSON_HEDLEY_IS_CONSTEXPR_(expr) ( \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2132 sizeof(void) != \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2133 sizeof(*( \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2134 1 ? \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2135 ((void*) ((expr) * 0L) ) : \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2136 ((struct { char v[sizeof(void) * 2]; } *) 1) \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2137 ) \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2138 ) \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2139 )
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2140 # endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2141 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2142 #if defined(JSON_HEDLEY_IS_CONSTEXPR_)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2143 #if !defined(JSON_HEDLEY_IS_CONSTANT)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2144 #define JSON_HEDLEY_IS_CONSTANT(expr) JSON_HEDLEY_IS_CONSTEXPR_(expr)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2145 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2146 #define JSON_HEDLEY_REQUIRE_CONSTEXPR(expr) (JSON_HEDLEY_IS_CONSTEXPR_(expr) ? (expr) : (-1))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2147 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2148 #if !defined(JSON_HEDLEY_IS_CONSTANT)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2149 #define JSON_HEDLEY_IS_CONSTANT(expr) (0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2150 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2151 #define JSON_HEDLEY_REQUIRE_CONSTEXPR(expr) (expr)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2152 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2153
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2154 #if defined(JSON_HEDLEY_BEGIN_C_DECLS)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2155 #undef JSON_HEDLEY_BEGIN_C_DECLS
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2156 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2157 #if defined(JSON_HEDLEY_END_C_DECLS)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2158 #undef JSON_HEDLEY_END_C_DECLS
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2159 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2160 #if defined(JSON_HEDLEY_C_DECL)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2161 #undef JSON_HEDLEY_C_DECL
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2162 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2163 #if defined(__cplusplus)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2164 #define JSON_HEDLEY_BEGIN_C_DECLS extern "C" {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2165 #define JSON_HEDLEY_END_C_DECLS }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2166 #define JSON_HEDLEY_C_DECL extern "C"
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2167 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2168 #define JSON_HEDLEY_BEGIN_C_DECLS
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2169 #define JSON_HEDLEY_END_C_DECLS
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2170 #define JSON_HEDLEY_C_DECL
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2171 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2172
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2173 #if defined(JSON_HEDLEY_STATIC_ASSERT)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2174 #undef JSON_HEDLEY_STATIC_ASSERT
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2175 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2176 #if \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2177 !defined(__cplusplus) && ( \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2178 (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L)) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2179 (JSON_HEDLEY_HAS_FEATURE(c_static_assert) && !defined(JSON_HEDLEY_INTEL_CL_VERSION)) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2180 JSON_HEDLEY_GCC_VERSION_CHECK(6,0,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2181 JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2182 defined(_Static_assert) \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2183 )
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2184 # define JSON_HEDLEY_STATIC_ASSERT(expr, message) _Static_assert(expr, message)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2185 #elif \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2186 (defined(__cplusplus) && (__cplusplus >= 201103L)) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2187 JSON_HEDLEY_MSVC_VERSION_CHECK(16,0,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2188 JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2189 # define JSON_HEDLEY_STATIC_ASSERT(expr, message) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(static_assert(expr, message))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2190 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2191 # define JSON_HEDLEY_STATIC_ASSERT(expr, message)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2192 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2193
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2194 #if defined(JSON_HEDLEY_NULL)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2195 #undef JSON_HEDLEY_NULL
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2196 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2197 #if defined(__cplusplus)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2198 #if __cplusplus >= 201103L
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2199 #define JSON_HEDLEY_NULL JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(nullptr)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2200 #elif defined(NULL)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2201 #define JSON_HEDLEY_NULL NULL
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2202 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2203 #define JSON_HEDLEY_NULL JSON_HEDLEY_STATIC_CAST(void*, 0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2204 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2205 #elif defined(NULL)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2206 #define JSON_HEDLEY_NULL NULL
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2207 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2208 #define JSON_HEDLEY_NULL ((void*) 0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2209 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2210
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2211 #if defined(JSON_HEDLEY_MESSAGE)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2212 #undef JSON_HEDLEY_MESSAGE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2213 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2214 #if JSON_HEDLEY_HAS_WARNING("-Wunknown-pragmas")
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2215 # define JSON_HEDLEY_MESSAGE(msg) \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2216 JSON_HEDLEY_DIAGNOSTIC_PUSH \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2217 JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2218 JSON_HEDLEY_PRAGMA(message msg) \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2219 JSON_HEDLEY_DIAGNOSTIC_POP
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2220 #elif \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2221 JSON_HEDLEY_GCC_VERSION_CHECK(4,4,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2222 JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2223 # define JSON_HEDLEY_MESSAGE(msg) JSON_HEDLEY_PRAGMA(message msg)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2224 #elif JSON_HEDLEY_CRAY_VERSION_CHECK(5,0,0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2225 # define JSON_HEDLEY_MESSAGE(msg) JSON_HEDLEY_PRAGMA(_CRI message msg)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2226 #elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2227 # define JSON_HEDLEY_MESSAGE(msg) JSON_HEDLEY_PRAGMA(message(msg))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2228 #elif JSON_HEDLEY_PELLES_VERSION_CHECK(2,0,0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2229 # define JSON_HEDLEY_MESSAGE(msg) JSON_HEDLEY_PRAGMA(message(msg))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2230 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2231 # define JSON_HEDLEY_MESSAGE(msg)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2232 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2233
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2234 #if defined(JSON_HEDLEY_WARNING)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2235 #undef JSON_HEDLEY_WARNING
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2236 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2237 #if JSON_HEDLEY_HAS_WARNING("-Wunknown-pragmas")
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2238 # define JSON_HEDLEY_WARNING(msg) \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2239 JSON_HEDLEY_DIAGNOSTIC_PUSH \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2240 JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2241 JSON_HEDLEY_PRAGMA(clang warning msg) \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2242 JSON_HEDLEY_DIAGNOSTIC_POP
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2243 #elif \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2244 JSON_HEDLEY_GCC_VERSION_CHECK(4,8,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2245 JSON_HEDLEY_PGI_VERSION_CHECK(18,4,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2246 JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2247 # define JSON_HEDLEY_WARNING(msg) JSON_HEDLEY_PRAGMA(GCC warning msg)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2248 #elif \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2249 JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2250 JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2251 # define JSON_HEDLEY_WARNING(msg) JSON_HEDLEY_PRAGMA(message(msg))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2252 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2253 # define JSON_HEDLEY_WARNING(msg) JSON_HEDLEY_MESSAGE(msg)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2254 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2255
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2256 #if defined(JSON_HEDLEY_REQUIRE)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2257 #undef JSON_HEDLEY_REQUIRE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2258 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2259 #if defined(JSON_HEDLEY_REQUIRE_MSG)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2260 #undef JSON_HEDLEY_REQUIRE_MSG
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2261 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2262 #if JSON_HEDLEY_HAS_ATTRIBUTE(diagnose_if)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2263 # if JSON_HEDLEY_HAS_WARNING("-Wgcc-compat")
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2264 # define JSON_HEDLEY_REQUIRE(expr) \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2265 JSON_HEDLEY_DIAGNOSTIC_PUSH \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2266 _Pragma("clang diagnostic ignored \"-Wgcc-compat\"") \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2267 __attribute__((diagnose_if(!(expr), #expr, "error"))) \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2268 JSON_HEDLEY_DIAGNOSTIC_POP
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2269 # define JSON_HEDLEY_REQUIRE_MSG(expr,msg) \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2270 JSON_HEDLEY_DIAGNOSTIC_PUSH \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2271 _Pragma("clang diagnostic ignored \"-Wgcc-compat\"") \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2272 __attribute__((diagnose_if(!(expr), msg, "error"))) \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2273 JSON_HEDLEY_DIAGNOSTIC_POP
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2274 # else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2275 # define JSON_HEDLEY_REQUIRE(expr) __attribute__((diagnose_if(!(expr), #expr, "error")))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2276 # define JSON_HEDLEY_REQUIRE_MSG(expr,msg) __attribute__((diagnose_if(!(expr), msg, "error")))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2277 # endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2278 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2279 # define JSON_HEDLEY_REQUIRE(expr)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2280 # define JSON_HEDLEY_REQUIRE_MSG(expr,msg)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2281 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2282
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2283 #if defined(JSON_HEDLEY_FLAGS)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2284 #undef JSON_HEDLEY_FLAGS
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2285 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2286 #if JSON_HEDLEY_HAS_ATTRIBUTE(flag_enum) && (!defined(__cplusplus) || JSON_HEDLEY_HAS_WARNING("-Wbitfield-enum-conversion"))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2287 #define JSON_HEDLEY_FLAGS __attribute__((__flag_enum__))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2288 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2289 #define JSON_HEDLEY_FLAGS
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2290 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2291
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2292 #if defined(JSON_HEDLEY_FLAGS_CAST)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2293 #undef JSON_HEDLEY_FLAGS_CAST
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2294 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2295 #if JSON_HEDLEY_INTEL_VERSION_CHECK(19,0,0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2296 # define JSON_HEDLEY_FLAGS_CAST(T, expr) (__extension__ ({ \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2297 JSON_HEDLEY_DIAGNOSTIC_PUSH \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2298 _Pragma("warning(disable:188)") \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2299 ((T) (expr)); \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2300 JSON_HEDLEY_DIAGNOSTIC_POP \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2301 }))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2302 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2303 # define JSON_HEDLEY_FLAGS_CAST(T, expr) JSON_HEDLEY_STATIC_CAST(T, expr)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2304 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2305
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2306 #if defined(JSON_HEDLEY_EMPTY_BASES)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2307 #undef JSON_HEDLEY_EMPTY_BASES
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2308 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2309 #if \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2310 (JSON_HEDLEY_MSVC_VERSION_CHECK(19,0,23918) && !JSON_HEDLEY_MSVC_VERSION_CHECK(20,0,0)) || \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2311 JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2312 #define JSON_HEDLEY_EMPTY_BASES __declspec(empty_bases)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2313 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2314 #define JSON_HEDLEY_EMPTY_BASES
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2315 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2316
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2317 /* Remaining macros are deprecated. */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2318
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2319 #if defined(JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2320 #undef JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2321 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2322 #if defined(__clang__)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2323 #define JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK(major,minor,patch) (0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2324 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2325 #define JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK(major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2326 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2327
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2328 #if defined(JSON_HEDLEY_CLANG_HAS_ATTRIBUTE)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2329 #undef JSON_HEDLEY_CLANG_HAS_ATTRIBUTE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2330 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2331 #define JSON_HEDLEY_CLANG_HAS_ATTRIBUTE(attribute) JSON_HEDLEY_HAS_ATTRIBUTE(attribute)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2332
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2333 #if defined(JSON_HEDLEY_CLANG_HAS_CPP_ATTRIBUTE)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2334 #undef JSON_HEDLEY_CLANG_HAS_CPP_ATTRIBUTE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2335 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2336 #define JSON_HEDLEY_CLANG_HAS_CPP_ATTRIBUTE(attribute) JSON_HEDLEY_HAS_CPP_ATTRIBUTE(attribute)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2337
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2338 #if defined(JSON_HEDLEY_CLANG_HAS_BUILTIN)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2339 #undef JSON_HEDLEY_CLANG_HAS_BUILTIN
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2340 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2341 #define JSON_HEDLEY_CLANG_HAS_BUILTIN(builtin) JSON_HEDLEY_HAS_BUILTIN(builtin)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2342
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2343 #if defined(JSON_HEDLEY_CLANG_HAS_FEATURE)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2344 #undef JSON_HEDLEY_CLANG_HAS_FEATURE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2345 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2346 #define JSON_HEDLEY_CLANG_HAS_FEATURE(feature) JSON_HEDLEY_HAS_FEATURE(feature)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2347
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2348 #if defined(JSON_HEDLEY_CLANG_HAS_EXTENSION)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2349 #undef JSON_HEDLEY_CLANG_HAS_EXTENSION
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2350 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2351 #define JSON_HEDLEY_CLANG_HAS_EXTENSION(extension) JSON_HEDLEY_HAS_EXTENSION(extension)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2352
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2353 #if defined(JSON_HEDLEY_CLANG_HAS_DECLSPEC_DECLSPEC_ATTRIBUTE)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2354 #undef JSON_HEDLEY_CLANG_HAS_DECLSPEC_DECLSPEC_ATTRIBUTE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2355 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2356 #define JSON_HEDLEY_CLANG_HAS_DECLSPEC_ATTRIBUTE(attribute) JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE(attribute)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2357
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2358 #if defined(JSON_HEDLEY_CLANG_HAS_WARNING)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2359 #undef JSON_HEDLEY_CLANG_HAS_WARNING
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2360 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2361 #define JSON_HEDLEY_CLANG_HAS_WARNING(warning) JSON_HEDLEY_HAS_WARNING(warning)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2362
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2363 #endif /* !defined(JSON_HEDLEY_VERSION) || (JSON_HEDLEY_VERSION < X) */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2364
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2365
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2366 // This file contains all internal macro definitions (except those affecting ABI)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2367 // You MUST include macro_unscope.hpp at the end of json.hpp to undef all of them
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2368
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2369 // #include <nlohmann/detail/abi_macros.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2370
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2371
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2372 // exclude unsupported compilers
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2373 #if !defined(JSON_SKIP_UNSUPPORTED_COMPILER_CHECK)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2374 #if defined(__clang__)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2375 #if (__clang_major__ * 10000 + __clang_minor__ * 100 + __clang_patchlevel__) < 30400
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2376 #error "unsupported Clang version - see https://github.com/nlohmann/json#supported-compilers"
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2377 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2378 #elif defined(__GNUC__) && !(defined(__ICC) || defined(__INTEL_COMPILER))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2379 #if (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) < 40800
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2380 #error "unsupported GCC version - see https://github.com/nlohmann/json#supported-compilers"
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2381 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2382 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2383 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2384
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2385 // C++ language standard detection
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2386 // if the user manually specified the used c++ version this is skipped
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2387 #if !defined(JSON_HAS_CPP_20) && !defined(JSON_HAS_CPP_17) && !defined(JSON_HAS_CPP_14) && !defined(JSON_HAS_CPP_11)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2388 #if (defined(__cplusplus) && __cplusplus >= 202002L) || (defined(_MSVC_LANG) && _MSVC_LANG >= 202002L)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2389 #define JSON_HAS_CPP_20
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2390 #define JSON_HAS_CPP_17
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2391 #define JSON_HAS_CPP_14
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2392 #elif (defined(__cplusplus) && __cplusplus >= 201703L) || (defined(_HAS_CXX17) && _HAS_CXX17 == 1) // fix for issue #464
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2393 #define JSON_HAS_CPP_17
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2394 #define JSON_HAS_CPP_14
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2395 #elif (defined(__cplusplus) && __cplusplus >= 201402L) || (defined(_HAS_CXX14) && _HAS_CXX14 == 1)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2396 #define JSON_HAS_CPP_14
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2397 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2398 // the cpp 11 flag is always specified because it is the minimal required version
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2399 #define JSON_HAS_CPP_11
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2400 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2401
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2402 #ifdef __has_include
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2403 #if __has_include(<version>)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2404 #include <version>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2405 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2406 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2407
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2408 #if !defined(JSON_HAS_FILESYSTEM) && !defined(JSON_HAS_EXPERIMENTAL_FILESYSTEM)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2409 #ifdef JSON_HAS_CPP_17
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2410 #if defined(__cpp_lib_filesystem)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2411 #define JSON_HAS_FILESYSTEM 1
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2412 #elif defined(__cpp_lib_experimental_filesystem)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2413 #define JSON_HAS_EXPERIMENTAL_FILESYSTEM 1
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2414 #elif !defined(__has_include)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2415 #define JSON_HAS_EXPERIMENTAL_FILESYSTEM 1
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2416 #elif __has_include(<filesystem>)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2417 #define JSON_HAS_FILESYSTEM 1
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2418 #elif __has_include(<experimental/filesystem>)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2419 #define JSON_HAS_EXPERIMENTAL_FILESYSTEM 1
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2420 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2421
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2422 // std::filesystem does not work on MinGW GCC 8: https://sourceforge.net/p/mingw-w64/bugs/737/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2423 #if defined(__MINGW32__) && defined(__GNUC__) && __GNUC__ == 8
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2424 #undef JSON_HAS_FILESYSTEM
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2425 #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2426 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2427
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2428 // no filesystem support before GCC 8: https://en.cppreference.com/w/cpp/compiler_support
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2429 #if defined(__GNUC__) && !defined(__clang__) && __GNUC__ < 8
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2430 #undef JSON_HAS_FILESYSTEM
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2431 #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2432 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2433
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2434 // no filesystem support before Clang 7: https://en.cppreference.com/w/cpp/compiler_support
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2435 #if defined(__clang_major__) && __clang_major__ < 7
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2436 #undef JSON_HAS_FILESYSTEM
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2437 #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2438 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2439
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2440 // no filesystem support before MSVC 19.14: https://en.cppreference.com/w/cpp/compiler_support
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2441 #if defined(_MSC_VER) && _MSC_VER < 1914
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2442 #undef JSON_HAS_FILESYSTEM
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2443 #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2444 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2445
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2446 // no filesystem support before iOS 13
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2447 #if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) && __IPHONE_OS_VERSION_MIN_REQUIRED < 130000
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2448 #undef JSON_HAS_FILESYSTEM
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2449 #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2450 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2451
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2452 // no filesystem support before macOS Catalina
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2453 #if defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && __MAC_OS_X_VERSION_MIN_REQUIRED < 101500
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2454 #undef JSON_HAS_FILESYSTEM
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2455 #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2456 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2457 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2458 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2459
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2460 #ifndef JSON_HAS_EXPERIMENTAL_FILESYSTEM
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2461 #define JSON_HAS_EXPERIMENTAL_FILESYSTEM 0
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2462 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2463
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2464 #ifndef JSON_HAS_FILESYSTEM
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2465 #define JSON_HAS_FILESYSTEM 0
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2466 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2467
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2468 #ifndef JSON_HAS_THREE_WAY_COMPARISON
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2469 #if defined(__cpp_impl_three_way_comparison) && __cpp_impl_three_way_comparison >= 201907L \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2470 && defined(__cpp_lib_three_way_comparison) && __cpp_lib_three_way_comparison >= 201907L
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2471 #define JSON_HAS_THREE_WAY_COMPARISON 1
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2472 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2473 #define JSON_HAS_THREE_WAY_COMPARISON 0
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2474 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2475 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2476
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2477 #ifndef JSON_HAS_RANGES
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2478 // ranges header shipping in GCC 11.1.0 (released 2021-04-27) has syntax error
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2479 #if defined(__GLIBCXX__) && __GLIBCXX__ == 20210427
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2480 #define JSON_HAS_RANGES 0
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2481 #elif defined(__cpp_lib_ranges)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2482 #define JSON_HAS_RANGES 1
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2483 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2484 #define JSON_HAS_RANGES 0
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2485 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2486 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2487
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2488 #ifndef JSON_HAS_STATIC_RTTI
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2489 #if !defined(_HAS_STATIC_RTTI) || _HAS_STATIC_RTTI != 0
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2490 #define JSON_HAS_STATIC_RTTI 1
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2491 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2492 #define JSON_HAS_STATIC_RTTI 0
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2493 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2494 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2495
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2496 #ifdef JSON_HAS_CPP_17
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2497 #define JSON_INLINE_VARIABLE inline
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2498 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2499 #define JSON_INLINE_VARIABLE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2500 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2501
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2502 #if JSON_HEDLEY_HAS_ATTRIBUTE(no_unique_address)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2503 #define JSON_NO_UNIQUE_ADDRESS [[no_unique_address]]
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2504 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2505 #define JSON_NO_UNIQUE_ADDRESS
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2506 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2507
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2508 // disable documentation warnings on clang
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2509 #if defined(__clang__)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2510 #pragma clang diagnostic push
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2511 #pragma clang diagnostic ignored "-Wdocumentation"
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2512 #pragma clang diagnostic ignored "-Wdocumentation-unknown-command"
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2513 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2514
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2515 // allow disabling exceptions
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2516 #if (defined(__cpp_exceptions) || defined(__EXCEPTIONS) || defined(_CPPUNWIND)) && !defined(JSON_NOEXCEPTION)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2517 #define JSON_THROW(exception) throw exception
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2518 #define JSON_TRY try
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2519 #define JSON_CATCH(exception) catch(exception)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2520 #define JSON_INTERNAL_CATCH(exception) catch(exception)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2521 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2522 #include <cstdlib>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2523 #define JSON_THROW(exception) std::abort()
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2524 #define JSON_TRY if(true)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2525 #define JSON_CATCH(exception) if(false)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2526 #define JSON_INTERNAL_CATCH(exception) if(false)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2527 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2528
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2529 // override exception macros
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2530 #if defined(JSON_THROW_USER)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2531 #undef JSON_THROW
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2532 #define JSON_THROW JSON_THROW_USER
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2533 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2534 #if defined(JSON_TRY_USER)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2535 #undef JSON_TRY
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2536 #define JSON_TRY JSON_TRY_USER
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2537 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2538 #if defined(JSON_CATCH_USER)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2539 #undef JSON_CATCH
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2540 #define JSON_CATCH JSON_CATCH_USER
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2541 #undef JSON_INTERNAL_CATCH
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2542 #define JSON_INTERNAL_CATCH JSON_CATCH_USER
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2543 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2544 #if defined(JSON_INTERNAL_CATCH_USER)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2545 #undef JSON_INTERNAL_CATCH
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2546 #define JSON_INTERNAL_CATCH JSON_INTERNAL_CATCH_USER
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2547 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2548
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2549 // allow overriding assert
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2550 #if !defined(JSON_ASSERT)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2551 #include <cassert> // assert
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2552 #define JSON_ASSERT(x) assert(x)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2553 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2554
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2555 // allow to access some private functions (needed by the test suite)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2556 #if defined(JSON_TESTS_PRIVATE)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2557 #define JSON_PRIVATE_UNLESS_TESTED public
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2558 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2559 #define JSON_PRIVATE_UNLESS_TESTED private
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2560 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2561
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2562 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2563 @brief macro to briefly define a mapping between an enum and JSON
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2564 @def NLOHMANN_JSON_SERIALIZE_ENUM
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2565 @since version 3.4.0
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2566 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2567 #define NLOHMANN_JSON_SERIALIZE_ENUM(ENUM_TYPE, ...) \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2568 template<typename BasicJsonType> \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2569 inline void to_json(BasicJsonType& j, const ENUM_TYPE& e) \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2570 { \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2571 static_assert(std::is_enum<ENUM_TYPE>::value, #ENUM_TYPE " must be an enum!"); \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2572 static const std::pair<ENUM_TYPE, BasicJsonType> m[] = __VA_ARGS__; \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2573 auto it = std::find_if(std::begin(m), std::end(m), \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2574 [e](const std::pair<ENUM_TYPE, BasicJsonType>& ej_pair) -> bool \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2575 { \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2576 return ej_pair.first == e; \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2577 }); \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2578 j = ((it != std::end(m)) ? it : std::begin(m))->second; \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2579 } \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2580 template<typename BasicJsonType> \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2581 inline void from_json(const BasicJsonType& j, ENUM_TYPE& e) \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2582 { \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2583 static_assert(std::is_enum<ENUM_TYPE>::value, #ENUM_TYPE " must be an enum!"); \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2584 static const std::pair<ENUM_TYPE, BasicJsonType> m[] = __VA_ARGS__; \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2585 auto it = std::find_if(std::begin(m), std::end(m), \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2586 [&j](const std::pair<ENUM_TYPE, BasicJsonType>& ej_pair) -> bool \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2587 { \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2588 return ej_pair.second == j; \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2589 }); \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2590 e = ((it != std::end(m)) ? it : std::begin(m))->first; \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2591 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2592
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2593 // Ugly macros to avoid uglier copy-paste when specializing basic_json. They
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2594 // may be removed in the future once the class is split.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2595
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2596 #define NLOHMANN_BASIC_JSON_TPL_DECLARATION \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2597 template<template<typename, typename, typename...> class ObjectType, \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2598 template<typename, typename...> class ArrayType, \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2599 class StringType, class BooleanType, class NumberIntegerType, \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2600 class NumberUnsignedType, class NumberFloatType, \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2601 template<typename> class AllocatorType, \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2602 template<typename, typename = void> class JSONSerializer, \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2603 class BinaryType, \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2604 class CustomBaseClass>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2605
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2606 #define NLOHMANN_BASIC_JSON_TPL \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2607 basic_json<ObjectType, ArrayType, StringType, BooleanType, \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2608 NumberIntegerType, NumberUnsignedType, NumberFloatType, \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2609 AllocatorType, JSONSerializer, BinaryType, CustomBaseClass>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2610
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2611 // Macros to simplify conversion from/to types
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2612
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2613 #define NLOHMANN_JSON_EXPAND( x ) x
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2614 #define NLOHMANN_JSON_GET_MACRO(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51, _52, _53, _54, _55, _56, _57, _58, _59, _60, _61, _62, _63, _64, NAME,...) NAME
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2615 #define NLOHMANN_JSON_PASTE(...) NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_GET_MACRO(__VA_ARGS__, \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2616 NLOHMANN_JSON_PASTE64, \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2617 NLOHMANN_JSON_PASTE63, \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2618 NLOHMANN_JSON_PASTE62, \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2619 NLOHMANN_JSON_PASTE61, \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2620 NLOHMANN_JSON_PASTE60, \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2621 NLOHMANN_JSON_PASTE59, \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2622 NLOHMANN_JSON_PASTE58, \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2623 NLOHMANN_JSON_PASTE57, \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2624 NLOHMANN_JSON_PASTE56, \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2625 NLOHMANN_JSON_PASTE55, \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2626 NLOHMANN_JSON_PASTE54, \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2627 NLOHMANN_JSON_PASTE53, \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2628 NLOHMANN_JSON_PASTE52, \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2629 NLOHMANN_JSON_PASTE51, \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2630 NLOHMANN_JSON_PASTE50, \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2631 NLOHMANN_JSON_PASTE49, \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2632 NLOHMANN_JSON_PASTE48, \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2633 NLOHMANN_JSON_PASTE47, \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2634 NLOHMANN_JSON_PASTE46, \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2635 NLOHMANN_JSON_PASTE45, \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2636 NLOHMANN_JSON_PASTE44, \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2637 NLOHMANN_JSON_PASTE43, \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2638 NLOHMANN_JSON_PASTE42, \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2639 NLOHMANN_JSON_PASTE41, \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2640 NLOHMANN_JSON_PASTE40, \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2641 NLOHMANN_JSON_PASTE39, \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2642 NLOHMANN_JSON_PASTE38, \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2643 NLOHMANN_JSON_PASTE37, \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2644 NLOHMANN_JSON_PASTE36, \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2645 NLOHMANN_JSON_PASTE35, \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2646 NLOHMANN_JSON_PASTE34, \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2647 NLOHMANN_JSON_PASTE33, \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2648 NLOHMANN_JSON_PASTE32, \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2649 NLOHMANN_JSON_PASTE31, \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2650 NLOHMANN_JSON_PASTE30, \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2651 NLOHMANN_JSON_PASTE29, \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2652 NLOHMANN_JSON_PASTE28, \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2653 NLOHMANN_JSON_PASTE27, \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2654 NLOHMANN_JSON_PASTE26, \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2655 NLOHMANN_JSON_PASTE25, \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2656 NLOHMANN_JSON_PASTE24, \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2657 NLOHMANN_JSON_PASTE23, \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2658 NLOHMANN_JSON_PASTE22, \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2659 NLOHMANN_JSON_PASTE21, \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2660 NLOHMANN_JSON_PASTE20, \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2661 NLOHMANN_JSON_PASTE19, \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2662 NLOHMANN_JSON_PASTE18, \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2663 NLOHMANN_JSON_PASTE17, \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2664 NLOHMANN_JSON_PASTE16, \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2665 NLOHMANN_JSON_PASTE15, \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2666 NLOHMANN_JSON_PASTE14, \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2667 NLOHMANN_JSON_PASTE13, \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2668 NLOHMANN_JSON_PASTE12, \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2669 NLOHMANN_JSON_PASTE11, \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2670 NLOHMANN_JSON_PASTE10, \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2671 NLOHMANN_JSON_PASTE9, \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2672 NLOHMANN_JSON_PASTE8, \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2673 NLOHMANN_JSON_PASTE7, \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2674 NLOHMANN_JSON_PASTE6, \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2675 NLOHMANN_JSON_PASTE5, \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2676 NLOHMANN_JSON_PASTE4, \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2677 NLOHMANN_JSON_PASTE3, \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2678 NLOHMANN_JSON_PASTE2, \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2679 NLOHMANN_JSON_PASTE1)(__VA_ARGS__))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2680 #define NLOHMANN_JSON_PASTE2(func, v1) func(v1)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2681 #define NLOHMANN_JSON_PASTE3(func, v1, v2) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE2(func, v2)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2682 #define NLOHMANN_JSON_PASTE4(func, v1, v2, v3) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE3(func, v2, v3)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2683 #define NLOHMANN_JSON_PASTE5(func, v1, v2, v3, v4) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE4(func, v2, v3, v4)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2684 #define NLOHMANN_JSON_PASTE6(func, v1, v2, v3, v4, v5) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE5(func, v2, v3, v4, v5)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2685 #define NLOHMANN_JSON_PASTE7(func, v1, v2, v3, v4, v5, v6) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE6(func, v2, v3, v4, v5, v6)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2686 #define NLOHMANN_JSON_PASTE8(func, v1, v2, v3, v4, v5, v6, v7) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE7(func, v2, v3, v4, v5, v6, v7)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2687 #define NLOHMANN_JSON_PASTE9(func, v1, v2, v3, v4, v5, v6, v7, v8) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE8(func, v2, v3, v4, v5, v6, v7, v8)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2688 #define NLOHMANN_JSON_PASTE10(func, v1, v2, v3, v4, v5, v6, v7, v8, v9) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE9(func, v2, v3, v4, v5, v6, v7, v8, v9)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2689 #define NLOHMANN_JSON_PASTE11(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE10(func, v2, v3, v4, v5, v6, v7, v8, v9, v10)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2690 #define NLOHMANN_JSON_PASTE12(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE11(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2691 #define NLOHMANN_JSON_PASTE13(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE12(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2692 #define NLOHMANN_JSON_PASTE14(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE13(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2693 #define NLOHMANN_JSON_PASTE15(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE14(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2694 #define NLOHMANN_JSON_PASTE16(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE15(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2695 #define NLOHMANN_JSON_PASTE17(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE16(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2696 #define NLOHMANN_JSON_PASTE18(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE17(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2697 #define NLOHMANN_JSON_PASTE19(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE18(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2698 #define NLOHMANN_JSON_PASTE20(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE19(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2699 #define NLOHMANN_JSON_PASTE21(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE20(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2700 #define NLOHMANN_JSON_PASTE22(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE21(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2701 #define NLOHMANN_JSON_PASTE23(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE22(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2702 #define NLOHMANN_JSON_PASTE24(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE23(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2703 #define NLOHMANN_JSON_PASTE25(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE24(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2704 #define NLOHMANN_JSON_PASTE26(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE25(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2705 #define NLOHMANN_JSON_PASTE27(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE26(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2706 #define NLOHMANN_JSON_PASTE28(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE27(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2707 #define NLOHMANN_JSON_PASTE29(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE28(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2708 #define NLOHMANN_JSON_PASTE30(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE29(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2709 #define NLOHMANN_JSON_PASTE31(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE30(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2710 #define NLOHMANN_JSON_PASTE32(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE31(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2711 #define NLOHMANN_JSON_PASTE33(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE32(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2712 #define NLOHMANN_JSON_PASTE34(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE33(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2713 #define NLOHMANN_JSON_PASTE35(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE34(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2714 #define NLOHMANN_JSON_PASTE36(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE35(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2715 #define NLOHMANN_JSON_PASTE37(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE36(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2716 #define NLOHMANN_JSON_PASTE38(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE37(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2717 #define NLOHMANN_JSON_PASTE39(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE38(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2718 #define NLOHMANN_JSON_PASTE40(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE39(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2719 #define NLOHMANN_JSON_PASTE41(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE40(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2720 #define NLOHMANN_JSON_PASTE42(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE41(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2721 #define NLOHMANN_JSON_PASTE43(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE42(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2722 #define NLOHMANN_JSON_PASTE44(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE43(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2723 #define NLOHMANN_JSON_PASTE45(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE44(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2724 #define NLOHMANN_JSON_PASTE46(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE45(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2725 #define NLOHMANN_JSON_PASTE47(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE46(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2726 #define NLOHMANN_JSON_PASTE48(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE47(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2727 #define NLOHMANN_JSON_PASTE49(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE48(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2728 #define NLOHMANN_JSON_PASTE50(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE49(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2729 #define NLOHMANN_JSON_PASTE51(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE50(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2730 #define NLOHMANN_JSON_PASTE52(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE51(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2731 #define NLOHMANN_JSON_PASTE53(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE52(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2732 #define NLOHMANN_JSON_PASTE54(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE53(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2733 #define NLOHMANN_JSON_PASTE55(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE54(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2734 #define NLOHMANN_JSON_PASTE56(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE55(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2735 #define NLOHMANN_JSON_PASTE57(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE56(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2736 #define NLOHMANN_JSON_PASTE58(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE57(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2737 #define NLOHMANN_JSON_PASTE59(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE58(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2738 #define NLOHMANN_JSON_PASTE60(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE59(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2739 #define NLOHMANN_JSON_PASTE61(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE60(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2740 #define NLOHMANN_JSON_PASTE62(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE61(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2741 #define NLOHMANN_JSON_PASTE63(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE62(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2742 #define NLOHMANN_JSON_PASTE64(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62, v63) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE63(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62, v63)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2743
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2744 #define NLOHMANN_JSON_TO(v1) nlohmann_json_j[#v1] = nlohmann_json_t.v1;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2745 #define NLOHMANN_JSON_FROM(v1) nlohmann_json_j.at(#v1).get_to(nlohmann_json_t.v1);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2746 #define NLOHMANN_JSON_FROM_WITH_DEFAULT(v1) nlohmann_json_t.v1 = nlohmann_json_j.value(#v1, nlohmann_json_default_obj.v1);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2747
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2748 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2749 @brief macro
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2750 @def NLOHMANN_DEFINE_TYPE_INTRUSIVE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2751 @since version 3.9.0
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2752 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2753 #define NLOHMANN_DEFINE_TYPE_INTRUSIVE(Type, ...) \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2754 friend void to_json(nlohmann::json& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2755 friend void from_json(const nlohmann::json& nlohmann_json_j, Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM, __VA_ARGS__)) }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2756
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2757 #define NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT(Type, ...) \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2758 friend void to_json(nlohmann::json& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2759 friend void from_json(const nlohmann::json& nlohmann_json_j, Type& nlohmann_json_t) { const Type nlohmann_json_default_obj{}; NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM_WITH_DEFAULT, __VA_ARGS__)) }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2760
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2761 #define NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE(Type, ...) \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2762 friend void to_json(nlohmann::json& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2763
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2764 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2765 @brief macro
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2766 @def NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2767 @since version 3.9.0
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2768 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2769 #define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(Type, ...) \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2770 inline void to_json(nlohmann::json& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2771 inline void from_json(const nlohmann::json& nlohmann_json_j, Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM, __VA_ARGS__)) }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2772
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2773 #define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE(Type, ...) \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2774 inline void to_json(nlohmann::json& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2775
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2776 #define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT(Type, ...) \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2777 inline void to_json(nlohmann::json& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2778 inline void from_json(const nlohmann::json& nlohmann_json_j, Type& nlohmann_json_t) { const Type nlohmann_json_default_obj{}; NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM_WITH_DEFAULT, __VA_ARGS__)) }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2779
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2780 // inspired from https://stackoverflow.com/a/26745591
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2781 // allows to call any std function as if (e.g. with begin):
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2782 // using std::begin; begin(x);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2783 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2784 // it allows using the detected idiom to retrieve the return type
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2785 // of such an expression
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2786 #define NLOHMANN_CAN_CALL_STD_FUNC_IMPL(std_name) \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2787 namespace detail { \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2788 using std::std_name; \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2789 \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2790 template<typename... T> \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2791 using result_of_##std_name = decltype(std_name(std::declval<T>()...)); \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2792 } \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2793 \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2794 namespace detail2 { \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2795 struct std_name##_tag \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2796 { \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2797 }; \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2798 \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2799 template<typename... T> \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2800 std_name##_tag std_name(T&&...); \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2801 \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2802 template<typename... T> \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2803 using result_of_##std_name = decltype(std_name(std::declval<T>()...)); \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2804 \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2805 template<typename... T> \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2806 struct would_call_std_##std_name \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2807 { \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2808 static constexpr auto const value = ::nlohmann::detail:: \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2809 is_detected_exact<std_name##_tag, result_of_##std_name, T...>::value; \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2810 }; \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2811 } /* namespace detail2 */ \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2812 \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2813 template<typename... T> \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2814 struct would_call_std_##std_name : detail2::would_call_std_##std_name<T...> \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2815 { \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2816 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2817
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2818 #ifndef JSON_USE_IMPLICIT_CONVERSIONS
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2819 #define JSON_USE_IMPLICIT_CONVERSIONS 1
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2820 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2821
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2822 #if JSON_USE_IMPLICIT_CONVERSIONS
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2823 #define JSON_EXPLICIT
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2824 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2825 #define JSON_EXPLICIT explicit
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2826 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2827
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2828 #ifndef JSON_DISABLE_ENUM_SERIALIZATION
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2829 #define JSON_DISABLE_ENUM_SERIALIZATION 0
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2830 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2831
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2832 #ifndef JSON_USE_GLOBAL_UDLS
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2833 #define JSON_USE_GLOBAL_UDLS 1
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2834 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2835
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2836 #if JSON_HAS_THREE_WAY_COMPARISON
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2837 #include <compare> // partial_ordering
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2838 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2839
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2840 NLOHMANN_JSON_NAMESPACE_BEGIN
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2841 namespace detail
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2842 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2843
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2844 ///////////////////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2845 // JSON type enumeration //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2846 ///////////////////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2847
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2848 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2849 @brief the JSON type enumeration
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2850
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2851 This enumeration collects the different JSON types. It is internally used to
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2852 distinguish the stored values, and the functions @ref basic_json::is_null(),
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2853 @ref basic_json::is_object(), @ref basic_json::is_array(),
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2854 @ref basic_json::is_string(), @ref basic_json::is_boolean(),
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2855 @ref basic_json::is_number() (with @ref basic_json::is_number_integer(),
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2856 @ref basic_json::is_number_unsigned(), and @ref basic_json::is_number_float()),
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2857 @ref basic_json::is_discarded(), @ref basic_json::is_primitive(), and
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2858 @ref basic_json::is_structured() rely on it.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2859
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2860 @note There are three enumeration entries (number_integer, number_unsigned, and
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2861 number_float), because the library distinguishes these three types for numbers:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2862 @ref basic_json::number_unsigned_t is used for unsigned integers,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2863 @ref basic_json::number_integer_t is used for signed integers, and
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2864 @ref basic_json::number_float_t is used for floating-point numbers or to
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2865 approximate integers which do not fit in the limits of their respective type.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2866
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2867 @sa see @ref basic_json::basic_json(const value_t value_type) -- create a JSON
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2868 value with the default value for a given type
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2869
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2870 @since version 1.0.0
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2871 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2872 enum class value_t : std::uint8_t
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2873 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2874 null, ///< null value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2875 object, ///< object (unordered set of name/value pairs)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2876 array, ///< array (ordered collection of values)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2877 string, ///< string value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2878 boolean, ///< boolean value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2879 number_integer, ///< number value (signed integer)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2880 number_unsigned, ///< number value (unsigned integer)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2881 number_float, ///< number value (floating-point)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2882 binary, ///< binary array (ordered collection of bytes)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2883 discarded ///< discarded by the parser callback function
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2884 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2885
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2886 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2887 @brief comparison operator for JSON types
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2888
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2889 Returns an ordering that is similar to Python:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2890 - order: null < boolean < number < object < array < string < binary
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2891 - furthermore, each type is not smaller than itself
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2892 - discarded values are not comparable
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2893 - binary is represented as a b"" string in python and directly comparable to a
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2894 string; however, making a binary array directly comparable with a string would
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2895 be surprising behavior in a JSON file.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2896
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2897 @since version 1.0.0
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2898 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2899 #if JSON_HAS_THREE_WAY_COMPARISON
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2900 inline std::partial_ordering operator<=>(const value_t lhs, const value_t rhs) noexcept // *NOPAD*
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2901 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2902 inline bool operator<(const value_t lhs, const value_t rhs) noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2903 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2904 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2905 static constexpr std::array<std::uint8_t, 9> order = {{
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2906 0 /* null */, 3 /* object */, 4 /* array */, 5 /* string */,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2907 1 /* boolean */, 2 /* integer */, 2 /* unsigned */, 2 /* float */,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2908 6 /* binary */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2909 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2910 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2911
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2912 const auto l_index = static_cast<std::size_t>(lhs);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2913 const auto r_index = static_cast<std::size_t>(rhs);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2914 #if JSON_HAS_THREE_WAY_COMPARISON
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2915 if (l_index < order.size() && r_index < order.size())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2916 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2917 return order[l_index] <=> order[r_index]; // *NOPAD*
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2918 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2919 return std::partial_ordering::unordered;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2920 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2921 return l_index < order.size() && r_index < order.size() && order[l_index] < order[r_index];
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2922 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2923 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2924
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2925 // GCC selects the built-in operator< over an operator rewritten from
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2926 // a user-defined spaceship operator
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2927 // Clang, MSVC, and ICC select the rewritten candidate
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2928 // (see GCC bug https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105200)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2929 #if JSON_HAS_THREE_WAY_COMPARISON && defined(__GNUC__)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2930 inline bool operator<(const value_t lhs, const value_t rhs) noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2931 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2932 return std::is_lt(lhs <=> rhs); // *NOPAD*
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2933 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2934 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2935
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2936 } // namespace detail
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2937 NLOHMANN_JSON_NAMESPACE_END
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2938
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2939 // #include <nlohmann/detail/string_escape.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2940 // __ _____ _____ _____
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2941 // __| | __| | | | JSON for Modern C++
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2942 // | | |__ | | | | | | version 3.11.3
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2943 // |_____|_____|_____|_|___| https://github.com/nlohmann/json
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2944 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2945 // SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2946 // SPDX-License-Identifier: MIT
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2947
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2948
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2949
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2950 // #include <nlohmann/detail/abi_macros.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2951
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2952
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2953 NLOHMANN_JSON_NAMESPACE_BEGIN
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2954 namespace detail
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2955 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2956
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2957 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2958 @brief replace all occurrences of a substring by another string
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2959
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2960 @param[in,out] s the string to manipulate; changed so that all
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2961 occurrences of @a f are replaced with @a t
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2962 @param[in] f the substring to replace with @a t
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2963 @param[in] t the string to replace @a f
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2964
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2965 @pre The search string @a f must not be empty. **This precondition is
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2966 enforced with an assertion.**
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2967
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2968 @since version 2.0.0
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2969 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2970 template<typename StringType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2971 inline void replace_substring(StringType& s, const StringType& f,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2972 const StringType& t)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2973 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2974 JSON_ASSERT(!f.empty());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2975 for (auto pos = s.find(f); // find first occurrence of f
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2976 pos != StringType::npos; // make sure f was found
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2977 s.replace(pos, f.size(), t), // replace with t, and
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2978 pos = s.find(f, pos + t.size())) // find next occurrence of f
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2979 {}
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2980 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2981
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2982 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2983 * @brief string escaping as described in RFC 6901 (Sect. 4)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2984 * @param[in] s string to escape
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2985 * @return escaped string
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2986 *
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2987 * Note the order of escaping "~" to "~0" and "/" to "~1" is important.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2988 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2989 template<typename StringType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2990 inline StringType escape(StringType s)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2991 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2992 replace_substring(s, StringType{"~"}, StringType{"~0"});
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2993 replace_substring(s, StringType{"/"}, StringType{"~1"});
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2994 return s;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2995 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2996
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2997 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2998 * @brief string unescaping as described in RFC 6901 (Sect. 4)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2999 * @param[in] s string to unescape
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3000 * @return unescaped string
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3001 *
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3002 * Note the order of escaping "~1" to "/" and "~0" to "~" is important.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3003 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3004 template<typename StringType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3005 static void unescape(StringType& s)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3006 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3007 replace_substring(s, StringType{"~1"}, StringType{"/"});
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3008 replace_substring(s, StringType{"~0"}, StringType{"~"});
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3009 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3010
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3011 } // namespace detail
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3012 NLOHMANN_JSON_NAMESPACE_END
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3013
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3014 // #include <nlohmann/detail/input/position_t.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3015 // __ _____ _____ _____
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3016 // __| | __| | | | JSON for Modern C++
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3017 // | | |__ | | | | | | version 3.11.3
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3018 // |_____|_____|_____|_|___| https://github.com/nlohmann/json
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3019 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3020 // SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3021 // SPDX-License-Identifier: MIT
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3022
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3023
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3024
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3025 #include <cstddef> // size_t
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3026
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3027 // #include <nlohmann/detail/abi_macros.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3028
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3029
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3030 NLOHMANN_JSON_NAMESPACE_BEGIN
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3031 namespace detail
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3032 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3033
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3034 /// struct to capture the start position of the current token
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3035 struct position_t
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3036 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3037 /// the total number of characters read
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3038 std::size_t chars_read_total = 0;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3039 /// the number of characters read in the current line
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3040 std::size_t chars_read_current_line = 0;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3041 /// the number of lines read
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3042 std::size_t lines_read = 0;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3043
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3044 /// conversion to size_t to preserve SAX interface
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3045 constexpr operator size_t() const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3046 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3047 return chars_read_total;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3048 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3049 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3050
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3051 } // namespace detail
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3052 NLOHMANN_JSON_NAMESPACE_END
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3053
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3054 // #include <nlohmann/detail/macro_scope.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3055
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3056 // #include <nlohmann/detail/meta/cpp_future.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3057 // __ _____ _____ _____
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3058 // __| | __| | | | JSON for Modern C++
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3059 // | | |__ | | | | | | version 3.11.3
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3060 // |_____|_____|_____|_|___| https://github.com/nlohmann/json
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3061 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3062 // SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3063 // SPDX-FileCopyrightText: 2018 The Abseil Authors
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3064 // SPDX-License-Identifier: MIT
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3065
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3066
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3067
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3068 #include <array> // array
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3069 #include <cstddef> // size_t
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3070 #include <type_traits> // conditional, enable_if, false_type, integral_constant, is_constructible, is_integral, is_same, remove_cv, remove_reference, true_type
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3071 #include <utility> // index_sequence, make_index_sequence, index_sequence_for
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3072
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3073 // #include <nlohmann/detail/macro_scope.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3074
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3075
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3076 NLOHMANN_JSON_NAMESPACE_BEGIN
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3077 namespace detail
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3078 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3079
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3080 template<typename T>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3081 using uncvref_t = typename std::remove_cv<typename std::remove_reference<T>::type>::type;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3082
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3083 #ifdef JSON_HAS_CPP_14
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3084
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3085 // the following utilities are natively available in C++14
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3086 using std::enable_if_t;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3087 using std::index_sequence;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3088 using std::make_index_sequence;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3089 using std::index_sequence_for;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3090
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3091 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3092
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3093 // alias templates to reduce boilerplate
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3094 template<bool B, typename T = void>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3095 using enable_if_t = typename std::enable_if<B, T>::type;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3096
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3097 // The following code is taken from https://github.com/abseil/abseil-cpp/blob/10cb35e459f5ecca5b2ff107635da0bfa41011b4/absl/utility/utility.h
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3098 // which is part of Google Abseil (https://github.com/abseil/abseil-cpp), licensed under the Apache License 2.0.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3099
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3100 //// START OF CODE FROM GOOGLE ABSEIL
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3101
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3102 // integer_sequence
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3103 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3104 // Class template representing a compile-time integer sequence. An instantiation
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3105 // of `integer_sequence<T, Ints...>` has a sequence of integers encoded in its
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3106 // type through its template arguments (which is a common need when
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3107 // working with C++11 variadic templates). `absl::integer_sequence` is designed
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3108 // to be a drop-in replacement for C++14's `std::integer_sequence`.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3109 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3110 // Example:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3111 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3112 // template< class T, T... Ints >
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3113 // void user_function(integer_sequence<T, Ints...>);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3114 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3115 // int main()
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3116 // {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3117 // // user_function's `T` will be deduced to `int` and `Ints...`
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3118 // // will be deduced to `0, 1, 2, 3, 4`.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3119 // user_function(make_integer_sequence<int, 5>());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3120 // }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3121 template <typename T, T... Ints>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3122 struct integer_sequence
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3123 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3124 using value_type = T;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3125 static constexpr std::size_t size() noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3126 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3127 return sizeof...(Ints);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3128 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3129 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3130
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3131 // index_sequence
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3132 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3133 // A helper template for an `integer_sequence` of `size_t`,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3134 // `absl::index_sequence` is designed to be a drop-in replacement for C++14's
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3135 // `std::index_sequence`.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3136 template <size_t... Ints>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3137 using index_sequence = integer_sequence<size_t, Ints...>;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3138
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3139 namespace utility_internal
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3140 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3141
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3142 template <typename Seq, size_t SeqSize, size_t Rem>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3143 struct Extend;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3144
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3145 // Note that SeqSize == sizeof...(Ints). It's passed explicitly for efficiency.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3146 template <typename T, T... Ints, size_t SeqSize>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3147 struct Extend<integer_sequence<T, Ints...>, SeqSize, 0>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3148 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3149 using type = integer_sequence < T, Ints..., (Ints + SeqSize)... >;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3150 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3151
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3152 template <typename T, T... Ints, size_t SeqSize>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3153 struct Extend<integer_sequence<T, Ints...>, SeqSize, 1>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3154 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3155 using type = integer_sequence < T, Ints..., (Ints + SeqSize)..., 2 * SeqSize >;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3156 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3157
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3158 // Recursion helper for 'make_integer_sequence<T, N>'.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3159 // 'Gen<T, N>::type' is an alias for 'integer_sequence<T, 0, 1, ... N-1>'.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3160 template <typename T, size_t N>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3161 struct Gen
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3162 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3163 using type =
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3164 typename Extend < typename Gen < T, N / 2 >::type, N / 2, N % 2 >::type;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3165 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3166
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3167 template <typename T>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3168 struct Gen<T, 0>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3169 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3170 using type = integer_sequence<T>;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3171 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3172
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3173 } // namespace utility_internal
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3174
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3175 // Compile-time sequences of integers
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3176
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3177 // make_integer_sequence
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3178 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3179 // This template alias is equivalent to
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3180 // `integer_sequence<int, 0, 1, ..., N-1>`, and is designed to be a drop-in
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3181 // replacement for C++14's `std::make_integer_sequence`.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3182 template <typename T, T N>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3183 using make_integer_sequence = typename utility_internal::Gen<T, N>::type;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3184
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3185 // make_index_sequence
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3186 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3187 // This template alias is equivalent to `index_sequence<0, 1, ..., N-1>`,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3188 // and is designed to be a drop-in replacement for C++14's
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3189 // `std::make_index_sequence`.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3190 template <size_t N>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3191 using make_index_sequence = make_integer_sequence<size_t, N>;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3192
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3193 // index_sequence_for
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3194 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3195 // Converts a typename pack into an index sequence of the same length, and
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3196 // is designed to be a drop-in replacement for C++14's
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3197 // `std::index_sequence_for()`
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3198 template <typename... Ts>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3199 using index_sequence_for = make_index_sequence<sizeof...(Ts)>;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3200
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3201 //// END OF CODE FROM GOOGLE ABSEIL
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3202
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3203 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3204
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3205 // dispatch utility (taken from ranges-v3)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3206 template<unsigned N> struct priority_tag : priority_tag < N - 1 > {};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3207 template<> struct priority_tag<0> {};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3208
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3209 // taken from ranges-v3
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3210 template<typename T>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3211 struct static_const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3212 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3213 static JSON_INLINE_VARIABLE constexpr T value{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3214 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3215
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3216 #ifndef JSON_HAS_CPP_17
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3217 template<typename T>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3218 constexpr T static_const<T>::value;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3219 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3220
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3221 template<typename T, typename... Args>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3222 inline constexpr std::array<T, sizeof...(Args)> make_array(Args&& ... args)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3223 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3224 return std::array<T, sizeof...(Args)> {{static_cast<T>(std::forward<Args>(args))...}};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3225 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3226
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3227 } // namespace detail
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3228 NLOHMANN_JSON_NAMESPACE_END
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3229
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3230 // #include <nlohmann/detail/meta/type_traits.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3231 // __ _____ _____ _____
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3232 // __| | __| | | | JSON for Modern C++
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3233 // | | |__ | | | | | | version 3.11.3
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3234 // |_____|_____|_____|_|___| https://github.com/nlohmann/json
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3235 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3236 // SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3237 // SPDX-License-Identifier: MIT
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3238
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3239
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3240
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3241 #include <limits> // numeric_limits
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3242 #include <type_traits> // false_type, is_constructible, is_integral, is_same, true_type
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3243 #include <utility> // declval
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3244 #include <tuple> // tuple
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3245 #include <string> // char_traits
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3246
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3247 // #include <nlohmann/detail/iterators/iterator_traits.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3248 // __ _____ _____ _____
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3249 // __| | __| | | | JSON for Modern C++
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3250 // | | |__ | | | | | | version 3.11.3
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3251 // |_____|_____|_____|_|___| https://github.com/nlohmann/json
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3252 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3253 // SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3254 // SPDX-License-Identifier: MIT
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3255
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3256
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3257
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3258 #include <iterator> // random_access_iterator_tag
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3259
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3260 // #include <nlohmann/detail/abi_macros.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3261
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3262 // #include <nlohmann/detail/meta/void_t.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3263
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3264 // #include <nlohmann/detail/meta/cpp_future.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3265
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3266
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3267 NLOHMANN_JSON_NAMESPACE_BEGIN
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3268 namespace detail
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3269 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3270
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3271 template<typename It, typename = void>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3272 struct iterator_types {};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3273
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3274 template<typename It>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3275 struct iterator_types <
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3276 It,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3277 void_t<typename It::difference_type, typename It::value_type, typename It::pointer,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3278 typename It::reference, typename It::iterator_category >>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3279 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3280 using difference_type = typename It::difference_type;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3281 using value_type = typename It::value_type;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3282 using pointer = typename It::pointer;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3283 using reference = typename It::reference;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3284 using iterator_category = typename It::iterator_category;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3285 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3286
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3287 // This is required as some compilers implement std::iterator_traits in a way that
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3288 // doesn't work with SFINAE. See https://github.com/nlohmann/json/issues/1341.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3289 template<typename T, typename = void>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3290 struct iterator_traits
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3291 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3292 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3293
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3294 template<typename T>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3295 struct iterator_traits < T, enable_if_t < !std::is_pointer<T>::value >>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3296 : iterator_types<T>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3297 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3298 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3299
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3300 template<typename T>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3301 struct iterator_traits<T*, enable_if_t<std::is_object<T>::value>>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3302 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3303 using iterator_category = std::random_access_iterator_tag;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3304 using value_type = T;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3305 using difference_type = ptrdiff_t;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3306 using pointer = T*;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3307 using reference = T&;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3308 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3309
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3310 } // namespace detail
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3311 NLOHMANN_JSON_NAMESPACE_END
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3312
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3313 // #include <nlohmann/detail/macro_scope.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3314
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3315 // #include <nlohmann/detail/meta/call_std/begin.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3316 // __ _____ _____ _____
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3317 // __| | __| | | | JSON for Modern C++
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3318 // | | |__ | | | | | | version 3.11.3
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3319 // |_____|_____|_____|_|___| https://github.com/nlohmann/json
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3320 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3321 // SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3322 // SPDX-License-Identifier: MIT
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3323
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3324
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3325
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3326 // #include <nlohmann/detail/macro_scope.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3327
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3328
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3329 NLOHMANN_JSON_NAMESPACE_BEGIN
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3330
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3331 NLOHMANN_CAN_CALL_STD_FUNC_IMPL(begin);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3332
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3333 NLOHMANN_JSON_NAMESPACE_END
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3334
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3335 // #include <nlohmann/detail/meta/call_std/end.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3336 // __ _____ _____ _____
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3337 // __| | __| | | | JSON for Modern C++
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3338 // | | |__ | | | | | | version 3.11.3
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3339 // |_____|_____|_____|_|___| https://github.com/nlohmann/json
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3340 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3341 // SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3342 // SPDX-License-Identifier: MIT
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3343
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3344
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3345
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3346 // #include <nlohmann/detail/macro_scope.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3347
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3348
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3349 NLOHMANN_JSON_NAMESPACE_BEGIN
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3350
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3351 NLOHMANN_CAN_CALL_STD_FUNC_IMPL(end);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3352
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3353 NLOHMANN_JSON_NAMESPACE_END
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3354
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3355 // #include <nlohmann/detail/meta/cpp_future.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3356
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3357 // #include <nlohmann/detail/meta/detected.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3358
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3359 // #include <nlohmann/json_fwd.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3360 // __ _____ _____ _____
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3361 // __| | __| | | | JSON for Modern C++
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3362 // | | |__ | | | | | | version 3.11.3
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3363 // |_____|_____|_____|_|___| https://github.com/nlohmann/json
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3364 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3365 // SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3366 // SPDX-License-Identifier: MIT
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3367
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3368 #ifndef INCLUDE_NLOHMANN_JSON_FWD_HPP_
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3369 #define INCLUDE_NLOHMANN_JSON_FWD_HPP_
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3370
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3371 #include <cstdint> // int64_t, uint64_t
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3372 #include <map> // map
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3373 #include <memory> // allocator
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3374 #include <string> // string
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3375 #include <vector> // vector
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3376
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3377 // #include <nlohmann/detail/abi_macros.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3378
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3379
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3380 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3381 @brief namespace for Niels Lohmann
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3382 @see https://github.com/nlohmann
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3383 @since version 1.0.0
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3384 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3385 NLOHMANN_JSON_NAMESPACE_BEGIN
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3386
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3387 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3388 @brief default JSONSerializer template argument
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3389
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3390 This serializer ignores the template arguments and uses ADL
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3391 ([argument-dependent lookup](https://en.cppreference.com/w/cpp/language/adl))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3392 for serialization.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3393 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3394 template<typename T = void, typename SFINAE = void>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3395 struct adl_serializer;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3396
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3397 /// a class to store JSON values
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3398 /// @sa https://json.nlohmann.me/api/basic_json/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3399 template<template<typename U, typename V, typename... Args> class ObjectType =
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3400 std::map,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3401 template<typename U, typename... Args> class ArrayType = std::vector,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3402 class StringType = std::string, class BooleanType = bool,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3403 class NumberIntegerType = std::int64_t,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3404 class NumberUnsignedType = std::uint64_t,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3405 class NumberFloatType = double,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3406 template<typename U> class AllocatorType = std::allocator,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3407 template<typename T, typename SFINAE = void> class JSONSerializer =
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3408 adl_serializer,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3409 class BinaryType = std::vector<std::uint8_t>, // cppcheck-suppress syntaxError
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3410 class CustomBaseClass = void>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3411 class basic_json;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3412
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3413 /// @brief JSON Pointer defines a string syntax for identifying a specific value within a JSON document
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3414 /// @sa https://json.nlohmann.me/api/json_pointer/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3415 template<typename RefStringType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3416 class json_pointer;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3417
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3418 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3419 @brief default specialization
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3420 @sa https://json.nlohmann.me/api/json/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3421 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3422 using json = basic_json<>;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3423
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3424 /// @brief a minimal map-like container that preserves insertion order
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3425 /// @sa https://json.nlohmann.me/api/ordered_map/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3426 template<class Key, class T, class IgnoredLess, class Allocator>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3427 struct ordered_map;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3428
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3429 /// @brief specialization that maintains the insertion order of object keys
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3430 /// @sa https://json.nlohmann.me/api/ordered_json/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3431 using ordered_json = basic_json<nlohmann::ordered_map>;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3432
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3433 NLOHMANN_JSON_NAMESPACE_END
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3434
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3435 #endif // INCLUDE_NLOHMANN_JSON_FWD_HPP_
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3436
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3437
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3438 NLOHMANN_JSON_NAMESPACE_BEGIN
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3439 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3440 @brief detail namespace with internal helper functions
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3441
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3442 This namespace collects functions that should not be exposed,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3443 implementations of some @ref basic_json methods, and meta-programming helpers.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3444
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3445 @since version 2.1.0
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3446 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3447 namespace detail
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3448 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3449
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3450 /////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3451 // helpers //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3452 /////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3453
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3454 // Note to maintainers:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3455 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3456 // Every trait in this file expects a non CV-qualified type.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3457 // The only exceptions are in the 'aliases for detected' section
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3458 // (i.e. those of the form: decltype(T::member_function(std::declval<T>())))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3459 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3460 // In this case, T has to be properly CV-qualified to constraint the function arguments
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3461 // (e.g. to_json(BasicJsonType&, const T&))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3462
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3463 template<typename> struct is_basic_json : std::false_type {};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3464
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3465 NLOHMANN_BASIC_JSON_TPL_DECLARATION
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3466 struct is_basic_json<NLOHMANN_BASIC_JSON_TPL> : std::true_type {};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3467
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3468 // used by exceptions create() member functions
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3469 // true_type for pointer to possibly cv-qualified basic_json or std::nullptr_t
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3470 // false_type otherwise
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3471 template<typename BasicJsonContext>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3472 struct is_basic_json_context :
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3473 std::integral_constant < bool,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3474 is_basic_json<typename std::remove_cv<typename std::remove_pointer<BasicJsonContext>::type>::type>::value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3475 || std::is_same<BasicJsonContext, std::nullptr_t>::value >
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3476 {};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3477
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3478 //////////////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3479 // json_ref helpers //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3480 //////////////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3481
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3482 template<typename>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3483 class json_ref;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3484
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3485 template<typename>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3486 struct is_json_ref : std::false_type {};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3487
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3488 template<typename T>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3489 struct is_json_ref<json_ref<T>> : std::true_type {};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3490
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3491 //////////////////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3492 // aliases for detected //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3493 //////////////////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3494
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3495 template<typename T>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3496 using mapped_type_t = typename T::mapped_type;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3497
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3498 template<typename T>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3499 using key_type_t = typename T::key_type;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3500
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3501 template<typename T>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3502 using value_type_t = typename T::value_type;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3503
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3504 template<typename T>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3505 using difference_type_t = typename T::difference_type;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3506
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3507 template<typename T>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3508 using pointer_t = typename T::pointer;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3509
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3510 template<typename T>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3511 using reference_t = typename T::reference;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3512
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3513 template<typename T>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3514 using iterator_category_t = typename T::iterator_category;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3515
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3516 template<typename T, typename... Args>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3517 using to_json_function = decltype(T::to_json(std::declval<Args>()...));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3518
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3519 template<typename T, typename... Args>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3520 using from_json_function = decltype(T::from_json(std::declval<Args>()...));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3521
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3522 template<typename T, typename U>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3523 using get_template_function = decltype(std::declval<T>().template get<U>());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3524
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3525 // trait checking if JSONSerializer<T>::from_json(json const&, udt&) exists
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3526 template<typename BasicJsonType, typename T, typename = void>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3527 struct has_from_json : std::false_type {};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3528
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3529 // trait checking if j.get<T> is valid
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3530 // use this trait instead of std::is_constructible or std::is_convertible,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3531 // both rely on, or make use of implicit conversions, and thus fail when T
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3532 // has several constructors/operator= (see https://github.com/nlohmann/json/issues/958)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3533 template <typename BasicJsonType, typename T>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3534 struct is_getable
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3535 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3536 static constexpr bool value = is_detected<get_template_function, const BasicJsonType&, T>::value;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3537 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3538
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3539 template<typename BasicJsonType, typename T>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3540 struct has_from_json < BasicJsonType, T, enable_if_t < !is_basic_json<T>::value >>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3541 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3542 using serializer = typename BasicJsonType::template json_serializer<T, void>;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3543
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3544 static constexpr bool value =
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3545 is_detected_exact<void, from_json_function, serializer,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3546 const BasicJsonType&, T&>::value;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3547 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3548
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3549 // This trait checks if JSONSerializer<T>::from_json(json const&) exists
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3550 // this overload is used for non-default-constructible user-defined-types
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3551 template<typename BasicJsonType, typename T, typename = void>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3552 struct has_non_default_from_json : std::false_type {};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3553
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3554 template<typename BasicJsonType, typename T>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3555 struct has_non_default_from_json < BasicJsonType, T, enable_if_t < !is_basic_json<T>::value >>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3556 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3557 using serializer = typename BasicJsonType::template json_serializer<T, void>;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3558
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3559 static constexpr bool value =
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3560 is_detected_exact<T, from_json_function, serializer,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3561 const BasicJsonType&>::value;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3562 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3563
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3564 // This trait checks if BasicJsonType::json_serializer<T>::to_json exists
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3565 // Do not evaluate the trait when T is a basic_json type, to avoid template instantiation infinite recursion.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3566 template<typename BasicJsonType, typename T, typename = void>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3567 struct has_to_json : std::false_type {};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3568
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3569 template<typename BasicJsonType, typename T>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3570 struct has_to_json < BasicJsonType, T, enable_if_t < !is_basic_json<T>::value >>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3571 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3572 using serializer = typename BasicJsonType::template json_serializer<T, void>;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3573
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3574 static constexpr bool value =
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3575 is_detected_exact<void, to_json_function, serializer, BasicJsonType&,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3576 T>::value;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3577 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3578
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3579 template<typename T>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3580 using detect_key_compare = typename T::key_compare;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3581
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3582 template<typename T>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3583 struct has_key_compare : std::integral_constant<bool, is_detected<detect_key_compare, T>::value> {};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3584
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3585 // obtains the actual object key comparator
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3586 template<typename BasicJsonType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3587 struct actual_object_comparator
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3588 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3589 using object_t = typename BasicJsonType::object_t;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3590 using object_comparator_t = typename BasicJsonType::default_object_comparator_t;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3591 using type = typename std::conditional < has_key_compare<object_t>::value,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3592 typename object_t::key_compare, object_comparator_t>::type;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3593 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3594
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3595 template<typename BasicJsonType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3596 using actual_object_comparator_t = typename actual_object_comparator<BasicJsonType>::type;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3597
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3598 /////////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3599 // char_traits //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3600 /////////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3601
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3602 // Primary template of char_traits calls std char_traits
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3603 template<typename T>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3604 struct char_traits : std::char_traits<T>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3605 {};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3606
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3607 // Explicitly define char traits for unsigned char since it is not standard
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3608 template<>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3609 struct char_traits<unsigned char> : std::char_traits<char>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3610 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3611 using char_type = unsigned char;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3612 using int_type = uint64_t;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3613
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3614 // Redefine to_int_type function
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3615 static int_type to_int_type(char_type c) noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3616 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3617 return static_cast<int_type>(c);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3618 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3619
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3620 static char_type to_char_type(int_type i) noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3621 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3622 return static_cast<char_type>(i);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3623 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3624
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3625 static constexpr int_type eof() noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3626 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3627 return static_cast<int_type>(EOF);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3628 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3629 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3630
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3631 // Explicitly define char traits for signed char since it is not standard
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3632 template<>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3633 struct char_traits<signed char> : std::char_traits<char>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3634 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3635 using char_type = signed char;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3636 using int_type = uint64_t;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3637
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3638 // Redefine to_int_type function
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3639 static int_type to_int_type(char_type c) noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3640 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3641 return static_cast<int_type>(c);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3642 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3643
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3644 static char_type to_char_type(int_type i) noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3645 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3646 return static_cast<char_type>(i);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3647 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3648
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3649 static constexpr int_type eof() noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3650 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3651 return static_cast<int_type>(EOF);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3652 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3653 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3654
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3655 ///////////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3656 // is_ functions //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3657 ///////////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3658
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3659 // https://en.cppreference.com/w/cpp/types/conjunction
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3660 template<class...> struct conjunction : std::true_type { };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3661 template<class B> struct conjunction<B> : B { };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3662 template<class B, class... Bn>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3663 struct conjunction<B, Bn...>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3664 : std::conditional<static_cast<bool>(B::value), conjunction<Bn...>, B>::type {};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3665
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3666 // https://en.cppreference.com/w/cpp/types/negation
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3667 template<class B> struct negation : std::integral_constant < bool, !B::value > { };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3668
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3669 // Reimplementation of is_constructible and is_default_constructible, due to them being broken for
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3670 // std::pair and std::tuple until LWG 2367 fix (see https://cplusplus.github.io/LWG/lwg-defects.html#2367).
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3671 // This causes compile errors in e.g. clang 3.5 or gcc 4.9.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3672 template <typename T>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3673 struct is_default_constructible : std::is_default_constructible<T> {};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3674
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3675 template <typename T1, typename T2>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3676 struct is_default_constructible<std::pair<T1, T2>>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3677 : conjunction<is_default_constructible<T1>, is_default_constructible<T2>> {};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3678
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3679 template <typename T1, typename T2>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3680 struct is_default_constructible<const std::pair<T1, T2>>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3681 : conjunction<is_default_constructible<T1>, is_default_constructible<T2>> {};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3682
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3683 template <typename... Ts>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3684 struct is_default_constructible<std::tuple<Ts...>>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3685 : conjunction<is_default_constructible<Ts>...> {};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3686
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3687 template <typename... Ts>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3688 struct is_default_constructible<const std::tuple<Ts...>>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3689 : conjunction<is_default_constructible<Ts>...> {};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3690
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3691 template <typename T, typename... Args>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3692 struct is_constructible : std::is_constructible<T, Args...> {};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3693
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3694 template <typename T1, typename T2>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3695 struct is_constructible<std::pair<T1, T2>> : is_default_constructible<std::pair<T1, T2>> {};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3696
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3697 template <typename T1, typename T2>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3698 struct is_constructible<const std::pair<T1, T2>> : is_default_constructible<const std::pair<T1, T2>> {};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3699
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3700 template <typename... Ts>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3701 struct is_constructible<std::tuple<Ts...>> : is_default_constructible<std::tuple<Ts...>> {};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3702
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3703 template <typename... Ts>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3704 struct is_constructible<const std::tuple<Ts...>> : is_default_constructible<const std::tuple<Ts...>> {};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3705
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3706 template<typename T, typename = void>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3707 struct is_iterator_traits : std::false_type {};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3708
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3709 template<typename T>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3710 struct is_iterator_traits<iterator_traits<T>>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3711 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3712 private:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3713 using traits = iterator_traits<T>;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3714
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3715 public:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3716 static constexpr auto value =
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3717 is_detected<value_type_t, traits>::value &&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3718 is_detected<difference_type_t, traits>::value &&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3719 is_detected<pointer_t, traits>::value &&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3720 is_detected<iterator_category_t, traits>::value &&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3721 is_detected<reference_t, traits>::value;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3722 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3723
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3724 template<typename T>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3725 struct is_range
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3726 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3727 private:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3728 using t_ref = typename std::add_lvalue_reference<T>::type;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3729
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3730 using iterator = detected_t<result_of_begin, t_ref>;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3731 using sentinel = detected_t<result_of_end, t_ref>;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3732
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3733 // to be 100% correct, it should use https://en.cppreference.com/w/cpp/iterator/input_or_output_iterator
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3734 // and https://en.cppreference.com/w/cpp/iterator/sentinel_for
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3735 // but reimplementing these would be too much work, as a lot of other concepts are used underneath
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3736 static constexpr auto is_iterator_begin =
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3737 is_iterator_traits<iterator_traits<iterator>>::value;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3738
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3739 public:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3740 static constexpr bool value = !std::is_same<iterator, nonesuch>::value && !std::is_same<sentinel, nonesuch>::value && is_iterator_begin;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3741 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3742
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3743 template<typename R>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3744 using iterator_t = enable_if_t<is_range<R>::value, result_of_begin<decltype(std::declval<R&>())>>;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3745
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3746 template<typename T>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3747 using range_value_t = value_type_t<iterator_traits<iterator_t<T>>>;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3748
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3749 // The following implementation of is_complete_type is taken from
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3750 // https://blogs.msdn.microsoft.com/vcblog/2015/12/02/partial-support-for-expression-sfinae-in-vs-2015-update-1/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3751 // and is written by Xiang Fan who agreed to using it in this library.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3752
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3753 template<typename T, typename = void>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3754 struct is_complete_type : std::false_type {};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3755
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3756 template<typename T>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3757 struct is_complete_type<T, decltype(void(sizeof(T)))> : std::true_type {};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3758
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3759 template<typename BasicJsonType, typename CompatibleObjectType,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3760 typename = void>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3761 struct is_compatible_object_type_impl : std::false_type {};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3762
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3763 template<typename BasicJsonType, typename CompatibleObjectType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3764 struct is_compatible_object_type_impl <
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3765 BasicJsonType, CompatibleObjectType,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3766 enable_if_t < is_detected<mapped_type_t, CompatibleObjectType>::value&&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3767 is_detected<key_type_t, CompatibleObjectType>::value >>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3768 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3769 using object_t = typename BasicJsonType::object_t;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3770
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3771 // macOS's is_constructible does not play well with nonesuch...
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3772 static constexpr bool value =
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3773 is_constructible<typename object_t::key_type,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3774 typename CompatibleObjectType::key_type>::value &&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3775 is_constructible<typename object_t::mapped_type,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3776 typename CompatibleObjectType::mapped_type>::value;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3777 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3778
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3779 template<typename BasicJsonType, typename CompatibleObjectType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3780 struct is_compatible_object_type
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3781 : is_compatible_object_type_impl<BasicJsonType, CompatibleObjectType> {};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3782
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3783 template<typename BasicJsonType, typename ConstructibleObjectType,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3784 typename = void>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3785 struct is_constructible_object_type_impl : std::false_type {};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3786
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3787 template<typename BasicJsonType, typename ConstructibleObjectType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3788 struct is_constructible_object_type_impl <
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3789 BasicJsonType, ConstructibleObjectType,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3790 enable_if_t < is_detected<mapped_type_t, ConstructibleObjectType>::value&&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3791 is_detected<key_type_t, ConstructibleObjectType>::value >>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3792 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3793 using object_t = typename BasicJsonType::object_t;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3794
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3795 static constexpr bool value =
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3796 (is_default_constructible<ConstructibleObjectType>::value &&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3797 (std::is_move_assignable<ConstructibleObjectType>::value ||
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3798 std::is_copy_assignable<ConstructibleObjectType>::value) &&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3799 (is_constructible<typename ConstructibleObjectType::key_type,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3800 typename object_t::key_type>::value &&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3801 std::is_same <
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3802 typename object_t::mapped_type,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3803 typename ConstructibleObjectType::mapped_type >::value)) ||
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3804 (has_from_json<BasicJsonType,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3805 typename ConstructibleObjectType::mapped_type>::value ||
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3806 has_non_default_from_json <
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3807 BasicJsonType,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3808 typename ConstructibleObjectType::mapped_type >::value);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3809 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3810
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3811 template<typename BasicJsonType, typename ConstructibleObjectType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3812 struct is_constructible_object_type
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3813 : is_constructible_object_type_impl<BasicJsonType,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3814 ConstructibleObjectType> {};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3815
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3816 template<typename BasicJsonType, typename CompatibleStringType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3817 struct is_compatible_string_type
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3818 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3819 static constexpr auto value =
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3820 is_constructible<typename BasicJsonType::string_t, CompatibleStringType>::value;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3821 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3822
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3823 template<typename BasicJsonType, typename ConstructibleStringType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3824 struct is_constructible_string_type
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3825 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3826 // launder type through decltype() to fix compilation failure on ICPC
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3827 #ifdef __INTEL_COMPILER
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3828 using laundered_type = decltype(std::declval<ConstructibleStringType>());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3829 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3830 using laundered_type = ConstructibleStringType;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3831 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3832
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3833 static constexpr auto value =
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3834 conjunction <
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3835 is_constructible<laundered_type, typename BasicJsonType::string_t>,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3836 is_detected_exact<typename BasicJsonType::string_t::value_type,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3837 value_type_t, laundered_type >>::value;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3838 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3839
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3840 template<typename BasicJsonType, typename CompatibleArrayType, typename = void>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3841 struct is_compatible_array_type_impl : std::false_type {};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3842
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3843 template<typename BasicJsonType, typename CompatibleArrayType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3844 struct is_compatible_array_type_impl <
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3845 BasicJsonType, CompatibleArrayType,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3846 enable_if_t <
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3847 is_detected<iterator_t, CompatibleArrayType>::value&&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3848 is_iterator_traits<iterator_traits<detected_t<iterator_t, CompatibleArrayType>>>::value&&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3849 // special case for types like std::filesystem::path whose iterator's value_type are themselves
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3850 // c.f. https://github.com/nlohmann/json/pull/3073
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3851 !std::is_same<CompatibleArrayType, detected_t<range_value_t, CompatibleArrayType>>::value >>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3852 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3853 static constexpr bool value =
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3854 is_constructible<BasicJsonType,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3855 range_value_t<CompatibleArrayType>>::value;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3856 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3857
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3858 template<typename BasicJsonType, typename CompatibleArrayType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3859 struct is_compatible_array_type
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3860 : is_compatible_array_type_impl<BasicJsonType, CompatibleArrayType> {};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3861
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3862 template<typename BasicJsonType, typename ConstructibleArrayType, typename = void>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3863 struct is_constructible_array_type_impl : std::false_type {};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3864
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3865 template<typename BasicJsonType, typename ConstructibleArrayType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3866 struct is_constructible_array_type_impl <
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3867 BasicJsonType, ConstructibleArrayType,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3868 enable_if_t<std::is_same<ConstructibleArrayType,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3869 typename BasicJsonType::value_type>::value >>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3870 : std::true_type {};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3871
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3872 template<typename BasicJsonType, typename ConstructibleArrayType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3873 struct is_constructible_array_type_impl <
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3874 BasicJsonType, ConstructibleArrayType,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3875 enable_if_t < !std::is_same<ConstructibleArrayType,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3876 typename BasicJsonType::value_type>::value&&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3877 !is_compatible_string_type<BasicJsonType, ConstructibleArrayType>::value&&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3878 is_default_constructible<ConstructibleArrayType>::value&&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3879 (std::is_move_assignable<ConstructibleArrayType>::value ||
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3880 std::is_copy_assignable<ConstructibleArrayType>::value)&&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3881 is_detected<iterator_t, ConstructibleArrayType>::value&&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3882 is_iterator_traits<iterator_traits<detected_t<iterator_t, ConstructibleArrayType>>>::value&&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3883 is_detected<range_value_t, ConstructibleArrayType>::value&&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3884 // special case for types like std::filesystem::path whose iterator's value_type are themselves
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3885 // c.f. https://github.com/nlohmann/json/pull/3073
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3886 !std::is_same<ConstructibleArrayType, detected_t<range_value_t, ConstructibleArrayType>>::value&&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3887 is_complete_type <
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3888 detected_t<range_value_t, ConstructibleArrayType >>::value >>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3889 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3890 using value_type = range_value_t<ConstructibleArrayType>;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3891
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3892 static constexpr bool value =
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3893 std::is_same<value_type,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3894 typename BasicJsonType::array_t::value_type>::value ||
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3895 has_from_json<BasicJsonType,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3896 value_type>::value ||
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3897 has_non_default_from_json <
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3898 BasicJsonType,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3899 value_type >::value;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3900 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3901
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3902 template<typename BasicJsonType, typename ConstructibleArrayType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3903 struct is_constructible_array_type
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3904 : is_constructible_array_type_impl<BasicJsonType, ConstructibleArrayType> {};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3905
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3906 template<typename RealIntegerType, typename CompatibleNumberIntegerType,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3907 typename = void>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3908 struct is_compatible_integer_type_impl : std::false_type {};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3909
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3910 template<typename RealIntegerType, typename CompatibleNumberIntegerType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3911 struct is_compatible_integer_type_impl <
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3912 RealIntegerType, CompatibleNumberIntegerType,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3913 enable_if_t < std::is_integral<RealIntegerType>::value&&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3914 std::is_integral<CompatibleNumberIntegerType>::value&&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3915 !std::is_same<bool, CompatibleNumberIntegerType>::value >>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3916 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3917 // is there an assert somewhere on overflows?
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3918 using RealLimits = std::numeric_limits<RealIntegerType>;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3919 using CompatibleLimits = std::numeric_limits<CompatibleNumberIntegerType>;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3920
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3921 static constexpr auto value =
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3922 is_constructible<RealIntegerType,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3923 CompatibleNumberIntegerType>::value &&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3924 CompatibleLimits::is_integer &&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3925 RealLimits::is_signed == CompatibleLimits::is_signed;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3926 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3927
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3928 template<typename RealIntegerType, typename CompatibleNumberIntegerType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3929 struct is_compatible_integer_type
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3930 : is_compatible_integer_type_impl<RealIntegerType,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3931 CompatibleNumberIntegerType> {};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3932
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3933 template<typename BasicJsonType, typename CompatibleType, typename = void>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3934 struct is_compatible_type_impl: std::false_type {};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3935
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3936 template<typename BasicJsonType, typename CompatibleType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3937 struct is_compatible_type_impl <
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3938 BasicJsonType, CompatibleType,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3939 enable_if_t<is_complete_type<CompatibleType>::value >>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3940 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3941 static constexpr bool value =
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3942 has_to_json<BasicJsonType, CompatibleType>::value;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3943 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3944
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3945 template<typename BasicJsonType, typename CompatibleType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3946 struct is_compatible_type
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3947 : is_compatible_type_impl<BasicJsonType, CompatibleType> {};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3948
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3949 template<typename T1, typename T2>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3950 struct is_constructible_tuple : std::false_type {};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3951
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3952 template<typename T1, typename... Args>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3953 struct is_constructible_tuple<T1, std::tuple<Args...>> : conjunction<is_constructible<T1, Args>...> {};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3954
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3955 template<typename BasicJsonType, typename T>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3956 struct is_json_iterator_of : std::false_type {};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3957
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3958 template<typename BasicJsonType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3959 struct is_json_iterator_of<BasicJsonType, typename BasicJsonType::iterator> : std::true_type {};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3960
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3961 template<typename BasicJsonType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3962 struct is_json_iterator_of<BasicJsonType, typename BasicJsonType::const_iterator> : std::true_type
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3963 {};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3964
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3965 // checks if a given type T is a template specialization of Primary
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3966 template<template <typename...> class Primary, typename T>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3967 struct is_specialization_of : std::false_type {};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3968
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3969 template<template <typename...> class Primary, typename... Args>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3970 struct is_specialization_of<Primary, Primary<Args...>> : std::true_type {};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3971
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3972 template<typename T>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3973 using is_json_pointer = is_specialization_of<::nlohmann::json_pointer, uncvref_t<T>>;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3974
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3975 // checks if A and B are comparable using Compare functor
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3976 template<typename Compare, typename A, typename B, typename = void>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3977 struct is_comparable : std::false_type {};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3978
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3979 template<typename Compare, typename A, typename B>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3980 struct is_comparable<Compare, A, B, void_t<
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3981 decltype(std::declval<Compare>()(std::declval<A>(), std::declval<B>())),
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3982 decltype(std::declval<Compare>()(std::declval<B>(), std::declval<A>()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3983 >> : std::true_type {};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3984
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3985 template<typename T>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3986 using detect_is_transparent = typename T::is_transparent;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3987
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3988 // type trait to check if KeyType can be used as object key (without a BasicJsonType)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3989 // see is_usable_as_basic_json_key_type below
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3990 template<typename Comparator, typename ObjectKeyType, typename KeyTypeCVRef, bool RequireTransparentComparator = true,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3991 bool ExcludeObjectKeyType = RequireTransparentComparator, typename KeyType = uncvref_t<KeyTypeCVRef>>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3992 using is_usable_as_key_type = typename std::conditional <
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3993 is_comparable<Comparator, ObjectKeyType, KeyTypeCVRef>::value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3994 && !(ExcludeObjectKeyType && std::is_same<KeyType,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3995 ObjectKeyType>::value)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3996 && (!RequireTransparentComparator
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3997 || is_detected <detect_is_transparent, Comparator>::value)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3998 && !is_json_pointer<KeyType>::value,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3999 std::true_type,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4000 std::false_type >::type;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4001
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4002 // type trait to check if KeyType can be used as object key
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4003 // true if:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4004 // - KeyType is comparable with BasicJsonType::object_t::key_type
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4005 // - if ExcludeObjectKeyType is true, KeyType is not BasicJsonType::object_t::key_type
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4006 // - the comparator is transparent or RequireTransparentComparator is false
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4007 // - KeyType is not a JSON iterator or json_pointer
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4008 template<typename BasicJsonType, typename KeyTypeCVRef, bool RequireTransparentComparator = true,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4009 bool ExcludeObjectKeyType = RequireTransparentComparator, typename KeyType = uncvref_t<KeyTypeCVRef>>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4010 using is_usable_as_basic_json_key_type = typename std::conditional <
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4011 is_usable_as_key_type<typename BasicJsonType::object_comparator_t,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4012 typename BasicJsonType::object_t::key_type, KeyTypeCVRef,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4013 RequireTransparentComparator, ExcludeObjectKeyType>::value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4014 && !is_json_iterator_of<BasicJsonType, KeyType>::value,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4015 std::true_type,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4016 std::false_type >::type;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4017
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4018 template<typename ObjectType, typename KeyType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4019 using detect_erase_with_key_type = decltype(std::declval<ObjectType&>().erase(std::declval<KeyType>()));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4020
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4021 // type trait to check if object_t has an erase() member functions accepting KeyType
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4022 template<typename BasicJsonType, typename KeyType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4023 using has_erase_with_key_type = typename std::conditional <
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4024 is_detected <
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4025 detect_erase_with_key_type,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4026 typename BasicJsonType::object_t, KeyType >::value,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4027 std::true_type,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4028 std::false_type >::type;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4029
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4030 // a naive helper to check if a type is an ordered_map (exploits the fact that
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4031 // ordered_map inherits capacity() from std::vector)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4032 template <typename T>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4033 struct is_ordered_map
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4034 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4035 using one = char;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4036
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4037 struct two
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4038 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4039 char x[2]; // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4040 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4041
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4042 template <typename C> static one test( decltype(&C::capacity) ) ;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4043 template <typename C> static two test(...);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4044
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4045 enum { value = sizeof(test<T>(nullptr)) == sizeof(char) }; // NOLINT(cppcoreguidelines-pro-type-vararg,hicpp-vararg)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4046 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4047
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4048 // to avoid useless casts (see https://github.com/nlohmann/json/issues/2893#issuecomment-889152324)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4049 template < typename T, typename U, enable_if_t < !std::is_same<T, U>::value, int > = 0 >
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4050 T conditional_static_cast(U value)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4051 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4052 return static_cast<T>(value);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4053 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4054
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4055 template<typename T, typename U, enable_if_t<std::is_same<T, U>::value, int> = 0>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4056 T conditional_static_cast(U value)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4057 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4058 return value;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4059 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4060
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4061 template<typename... Types>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4062 using all_integral = conjunction<std::is_integral<Types>...>;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4063
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4064 template<typename... Types>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4065 using all_signed = conjunction<std::is_signed<Types>...>;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4066
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4067 template<typename... Types>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4068 using all_unsigned = conjunction<std::is_unsigned<Types>...>;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4069
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4070 // there's a disjunction trait in another PR; replace when merged
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4071 template<typename... Types>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4072 using same_sign = std::integral_constant < bool,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4073 all_signed<Types...>::value || all_unsigned<Types...>::value >;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4074
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4075 template<typename OfType, typename T>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4076 using never_out_of_range = std::integral_constant < bool,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4077 (std::is_signed<OfType>::value && (sizeof(T) < sizeof(OfType)))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4078 || (same_sign<OfType, T>::value && sizeof(OfType) == sizeof(T)) >;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4079
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4080 template<typename OfType, typename T,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4081 bool OfTypeSigned = std::is_signed<OfType>::value,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4082 bool TSigned = std::is_signed<T>::value>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4083 struct value_in_range_of_impl2;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4084
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4085 template<typename OfType, typename T>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4086 struct value_in_range_of_impl2<OfType, T, false, false>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4087 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4088 static constexpr bool test(T val)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4089 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4090 using CommonType = typename std::common_type<OfType, T>::type;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4091 return static_cast<CommonType>(val) <= static_cast<CommonType>((std::numeric_limits<OfType>::max)());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4092 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4093 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4094
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4095 template<typename OfType, typename T>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4096 struct value_in_range_of_impl2<OfType, T, true, false>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4097 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4098 static constexpr bool test(T val)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4099 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4100 using CommonType = typename std::common_type<OfType, T>::type;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4101 return static_cast<CommonType>(val) <= static_cast<CommonType>((std::numeric_limits<OfType>::max)());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4102 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4103 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4104
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4105 template<typename OfType, typename T>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4106 struct value_in_range_of_impl2<OfType, T, false, true>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4107 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4108 static constexpr bool test(T val)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4109 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4110 using CommonType = typename std::common_type<OfType, T>::type;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4111 return val >= 0 && static_cast<CommonType>(val) <= static_cast<CommonType>((std::numeric_limits<OfType>::max)());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4112 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4113 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4114
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4115 template<typename OfType, typename T>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4116 struct value_in_range_of_impl2<OfType, T, true, true>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4117 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4118 static constexpr bool test(T val)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4119 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4120 using CommonType = typename std::common_type<OfType, T>::type;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4121 return static_cast<CommonType>(val) >= static_cast<CommonType>((std::numeric_limits<OfType>::min)())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4122 && static_cast<CommonType>(val) <= static_cast<CommonType>((std::numeric_limits<OfType>::max)());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4123 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4124 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4125
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4126 template<typename OfType, typename T,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4127 bool NeverOutOfRange = never_out_of_range<OfType, T>::value,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4128 typename = detail::enable_if_t<all_integral<OfType, T>::value>>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4129 struct value_in_range_of_impl1;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4130
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4131 template<typename OfType, typename T>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4132 struct value_in_range_of_impl1<OfType, T, false>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4133 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4134 static constexpr bool test(T val)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4135 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4136 return value_in_range_of_impl2<OfType, T>::test(val);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4137 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4138 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4139
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4140 template<typename OfType, typename T>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4141 struct value_in_range_of_impl1<OfType, T, true>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4142 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4143 static constexpr bool test(T /*val*/)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4144 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4145 return true;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4146 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4147 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4148
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4149 template<typename OfType, typename T>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4150 inline constexpr bool value_in_range_of(T val)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4151 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4152 return value_in_range_of_impl1<OfType, T>::test(val);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4153 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4154
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4155 template<bool Value>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4156 using bool_constant = std::integral_constant<bool, Value>;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4157
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4158 ///////////////////////////////////////////////////////////////////////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4159 // is_c_string
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4160 ///////////////////////////////////////////////////////////////////////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4161
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4162 namespace impl
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4163 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4164
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4165 template<typename T>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4166 inline constexpr bool is_c_string()
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4167 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4168 using TUnExt = typename std::remove_extent<T>::type;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4169 using TUnCVExt = typename std::remove_cv<TUnExt>::type;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4170 using TUnPtr = typename std::remove_pointer<T>::type;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4171 using TUnCVPtr = typename std::remove_cv<TUnPtr>::type;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4172 return
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4173 (std::is_array<T>::value && std::is_same<TUnCVExt, char>::value)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4174 || (std::is_pointer<T>::value && std::is_same<TUnCVPtr, char>::value);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4175 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4176
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4177 } // namespace impl
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4178
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4179 // checks whether T is a [cv] char */[cv] char[] C string
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4180 template<typename T>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4181 struct is_c_string : bool_constant<impl::is_c_string<T>()> {};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4182
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4183 template<typename T>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4184 using is_c_string_uncvref = is_c_string<uncvref_t<T>>;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4185
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4186 ///////////////////////////////////////////////////////////////////////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4187 // is_transparent
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4188 ///////////////////////////////////////////////////////////////////////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4189
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4190 namespace impl
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4191 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4192
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4193 template<typename T>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4194 inline constexpr bool is_transparent()
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4195 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4196 return is_detected<detect_is_transparent, T>::value;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4197 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4198
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4199 } // namespace impl
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4200
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4201 // checks whether T has a member named is_transparent
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4202 template<typename T>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4203 struct is_transparent : bool_constant<impl::is_transparent<T>()> {};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4204
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4205 ///////////////////////////////////////////////////////////////////////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4206
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4207 } // namespace detail
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4208 NLOHMANN_JSON_NAMESPACE_END
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4209
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4210 // #include <nlohmann/detail/string_concat.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4211 // __ _____ _____ _____
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4212 // __| | __| | | | JSON for Modern C++
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4213 // | | |__ | | | | | | version 3.11.3
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4214 // |_____|_____|_____|_|___| https://github.com/nlohmann/json
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4215 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4216 // SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4217 // SPDX-License-Identifier: MIT
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4218
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4219
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4220
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4221 #include <cstring> // strlen
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4222 #include <string> // string
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4223 #include <utility> // forward
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4224
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4225 // #include <nlohmann/detail/meta/cpp_future.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4226
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4227 // #include <nlohmann/detail/meta/detected.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4228
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4229
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4230 NLOHMANN_JSON_NAMESPACE_BEGIN
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4231 namespace detail
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4232 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4233
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4234 inline std::size_t concat_length()
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4235 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4236 return 0;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4237 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4238
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4239 template<typename... Args>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4240 inline std::size_t concat_length(const char* cstr, const Args& ... rest);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4241
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4242 template<typename StringType, typename... Args>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4243 inline std::size_t concat_length(const StringType& str, const Args& ... rest);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4244
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4245 template<typename... Args>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4246 inline std::size_t concat_length(const char /*c*/, const Args& ... rest)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4247 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4248 return 1 + concat_length(rest...);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4249 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4250
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4251 template<typename... Args>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4252 inline std::size_t concat_length(const char* cstr, const Args& ... rest)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4253 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4254 // cppcheck-suppress ignoredReturnValue
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4255 return ::strlen(cstr) + concat_length(rest...);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4256 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4257
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4258 template<typename StringType, typename... Args>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4259 inline std::size_t concat_length(const StringType& str, const Args& ... rest)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4260 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4261 return str.size() + concat_length(rest...);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4262 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4263
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4264 template<typename OutStringType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4265 inline void concat_into(OutStringType& /*out*/)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4266 {}
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4267
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4268 template<typename StringType, typename Arg>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4269 using string_can_append = decltype(std::declval<StringType&>().append(std::declval < Arg && > ()));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4270
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4271 template<typename StringType, typename Arg>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4272 using detect_string_can_append = is_detected<string_can_append, StringType, Arg>;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4273
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4274 template<typename StringType, typename Arg>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4275 using string_can_append_op = decltype(std::declval<StringType&>() += std::declval < Arg && > ());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4276
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4277 template<typename StringType, typename Arg>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4278 using detect_string_can_append_op = is_detected<string_can_append_op, StringType, Arg>;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4279
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4280 template<typename StringType, typename Arg>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4281 using string_can_append_iter = decltype(std::declval<StringType&>().append(std::declval<const Arg&>().begin(), std::declval<const Arg&>().end()));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4282
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4283 template<typename StringType, typename Arg>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4284 using detect_string_can_append_iter = is_detected<string_can_append_iter, StringType, Arg>;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4285
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4286 template<typename StringType, typename Arg>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4287 using string_can_append_data = decltype(std::declval<StringType&>().append(std::declval<const Arg&>().data(), std::declval<const Arg&>().size()));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4288
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4289 template<typename StringType, typename Arg>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4290 using detect_string_can_append_data = is_detected<string_can_append_data, StringType, Arg>;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4291
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4292 template < typename OutStringType, typename Arg, typename... Args,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4293 enable_if_t < !detect_string_can_append<OutStringType, Arg>::value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4294 && detect_string_can_append_op<OutStringType, Arg>::value, int > = 0 >
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4295 inline void concat_into(OutStringType& out, Arg && arg, Args && ... rest);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4296
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4297 template < typename OutStringType, typename Arg, typename... Args,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4298 enable_if_t < !detect_string_can_append<OutStringType, Arg>::value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4299 && !detect_string_can_append_op<OutStringType, Arg>::value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4300 && detect_string_can_append_iter<OutStringType, Arg>::value, int > = 0 >
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4301 inline void concat_into(OutStringType& out, const Arg& arg, Args && ... rest);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4302
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4303 template < typename OutStringType, typename Arg, typename... Args,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4304 enable_if_t < !detect_string_can_append<OutStringType, Arg>::value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4305 && !detect_string_can_append_op<OutStringType, Arg>::value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4306 && !detect_string_can_append_iter<OutStringType, Arg>::value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4307 && detect_string_can_append_data<OutStringType, Arg>::value, int > = 0 >
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4308 inline void concat_into(OutStringType& out, const Arg& arg, Args && ... rest);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4309
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4310 template<typename OutStringType, typename Arg, typename... Args,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4311 enable_if_t<detect_string_can_append<OutStringType, Arg>::value, int> = 0>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4312 inline void concat_into(OutStringType& out, Arg && arg, Args && ... rest)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4313 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4314 out.append(std::forward<Arg>(arg));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4315 concat_into(out, std::forward<Args>(rest)...);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4316 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4317
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4318 template < typename OutStringType, typename Arg, typename... Args,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4319 enable_if_t < !detect_string_can_append<OutStringType, Arg>::value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4320 && detect_string_can_append_op<OutStringType, Arg>::value, int > >
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4321 inline void concat_into(OutStringType& out, Arg&& arg, Args&& ... rest)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4322 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4323 out += std::forward<Arg>(arg);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4324 concat_into(out, std::forward<Args>(rest)...);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4325 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4326
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4327 template < typename OutStringType, typename Arg, typename... Args,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4328 enable_if_t < !detect_string_can_append<OutStringType, Arg>::value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4329 && !detect_string_can_append_op<OutStringType, Arg>::value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4330 && detect_string_can_append_iter<OutStringType, Arg>::value, int > >
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4331 inline void concat_into(OutStringType& out, const Arg& arg, Args&& ... rest)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4332 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4333 out.append(arg.begin(), arg.end());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4334 concat_into(out, std::forward<Args>(rest)...);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4335 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4336
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4337 template < typename OutStringType, typename Arg, typename... Args,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4338 enable_if_t < !detect_string_can_append<OutStringType, Arg>::value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4339 && !detect_string_can_append_op<OutStringType, Arg>::value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4340 && !detect_string_can_append_iter<OutStringType, Arg>::value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4341 && detect_string_can_append_data<OutStringType, Arg>::value, int > >
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4342 inline void concat_into(OutStringType& out, const Arg& arg, Args&& ... rest)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4343 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4344 out.append(arg.data(), arg.size());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4345 concat_into(out, std::forward<Args>(rest)...);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4346 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4347
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4348 template<typename OutStringType = std::string, typename... Args>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4349 inline OutStringType concat(Args && ... args)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4350 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4351 OutStringType str;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4352 str.reserve(concat_length(args...));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4353 concat_into(str, std::forward<Args>(args)...);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4354 return str;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4355 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4356
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4357 } // namespace detail
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4358 NLOHMANN_JSON_NAMESPACE_END
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4359
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4360
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4361 NLOHMANN_JSON_NAMESPACE_BEGIN
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4362 namespace detail
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4363 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4364
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4365 ////////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4366 // exceptions //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4367 ////////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4368
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4369 /// @brief general exception of the @ref basic_json class
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4370 /// @sa https://json.nlohmann.me/api/basic_json/exception/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4371 class exception : public std::exception
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4372 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4373 public:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4374 /// returns the explanatory string
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4375 const char* what() const noexcept override
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4376 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4377 return m.what();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4378 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4379
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4380 /// the id of the exception
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4381 const int id; // NOLINT(cppcoreguidelines-non-private-member-variables-in-classes)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4382
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4383 protected:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4384 JSON_HEDLEY_NON_NULL(3)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4385 exception(int id_, const char* what_arg) : id(id_), m(what_arg) {} // NOLINT(bugprone-throw-keyword-missing)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4386
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4387 static std::string name(const std::string& ename, int id_)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4388 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4389 return concat("[json.exception.", ename, '.', std::to_string(id_), "] ");
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4390 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4391
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4392 static std::string diagnostics(std::nullptr_t /*leaf_element*/)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4393 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4394 return "";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4395 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4396
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4397 template<typename BasicJsonType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4398 static std::string diagnostics(const BasicJsonType* leaf_element)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4399 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4400 #if JSON_DIAGNOSTICS
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4401 std::vector<std::string> tokens;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4402 for (const auto* current = leaf_element; current != nullptr && current->m_parent != nullptr; current = current->m_parent)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4403 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4404 switch (current->m_parent->type())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4405 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4406 case value_t::array:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4407 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4408 for (std::size_t i = 0; i < current->m_parent->m_data.m_value.array->size(); ++i)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4409 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4410 if (&current->m_parent->m_data.m_value.array->operator[](i) == current)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4411 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4412 tokens.emplace_back(std::to_string(i));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4413 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4414 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4415 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4416 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4417 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4418
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4419 case value_t::object:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4420 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4421 for (const auto& element : *current->m_parent->m_data.m_value.object)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4422 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4423 if (&element.second == current)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4424 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4425 tokens.emplace_back(element.first.c_str());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4426 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4427 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4428 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4429 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4430 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4431
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4432 case value_t::null: // LCOV_EXCL_LINE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4433 case value_t::string: // LCOV_EXCL_LINE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4434 case value_t::boolean: // LCOV_EXCL_LINE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4435 case value_t::number_integer: // LCOV_EXCL_LINE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4436 case value_t::number_unsigned: // LCOV_EXCL_LINE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4437 case value_t::number_float: // LCOV_EXCL_LINE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4438 case value_t::binary: // LCOV_EXCL_LINE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4439 case value_t::discarded: // LCOV_EXCL_LINE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4440 default: // LCOV_EXCL_LINE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4441 break; // LCOV_EXCL_LINE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4442 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4443 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4444
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4445 if (tokens.empty())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4446 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4447 return "";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4448 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4449
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4450 auto str = std::accumulate(tokens.rbegin(), tokens.rend(), std::string{},
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4451 [](const std::string & a, const std::string & b)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4452 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4453 return concat(a, '/', detail::escape(b));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4454 });
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4455 return concat('(', str, ") ");
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4456 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4457 static_cast<void>(leaf_element);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4458 return "";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4459 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4460 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4461
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4462 private:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4463 /// an exception object as storage for error messages
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4464 std::runtime_error m;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4465 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4466
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4467 /// @brief exception indicating a parse error
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4468 /// @sa https://json.nlohmann.me/api/basic_json/parse_error/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4469 class parse_error : public exception
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4470 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4471 public:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4472 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4473 @brief create a parse error exception
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4474 @param[in] id_ the id of the exception
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4475 @param[in] pos the position where the error occurred (or with
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4476 chars_read_total=0 if the position cannot be
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4477 determined)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4478 @param[in] what_arg the explanatory string
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4479 @return parse_error object
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4480 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4481 template<typename BasicJsonContext, enable_if_t<is_basic_json_context<BasicJsonContext>::value, int> = 0>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4482 static parse_error create(int id_, const position_t& pos, const std::string& what_arg, BasicJsonContext context)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4483 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4484 const std::string w = concat(exception::name("parse_error", id_), "parse error",
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4485 position_string(pos), ": ", exception::diagnostics(context), what_arg);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4486 return {id_, pos.chars_read_total, w.c_str()};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4487 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4488
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4489 template<typename BasicJsonContext, enable_if_t<is_basic_json_context<BasicJsonContext>::value, int> = 0>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4490 static parse_error create(int id_, std::size_t byte_, const std::string& what_arg, BasicJsonContext context)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4491 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4492 const std::string w = concat(exception::name("parse_error", id_), "parse error",
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4493 (byte_ != 0 ? (concat(" at byte ", std::to_string(byte_))) : ""),
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4494 ": ", exception::diagnostics(context), what_arg);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4495 return {id_, byte_, w.c_str()};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4496 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4497
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4498 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4499 @brief byte index of the parse error
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4500
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4501 The byte index of the last read character in the input file.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4502
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4503 @note For an input with n bytes, 1 is the index of the first character and
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4504 n+1 is the index of the terminating null byte or the end of file.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4505 This also holds true when reading a byte vector (CBOR or MessagePack).
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4506 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4507 const std::size_t byte;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4508
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4509 private:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4510 parse_error(int id_, std::size_t byte_, const char* what_arg)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4511 : exception(id_, what_arg), byte(byte_) {}
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4512
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4513 static std::string position_string(const position_t& pos)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4514 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4515 return concat(" at line ", std::to_string(pos.lines_read + 1),
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4516 ", column ", std::to_string(pos.chars_read_current_line));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4517 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4518 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4519
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4520 /// @brief exception indicating errors with iterators
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4521 /// @sa https://json.nlohmann.me/api/basic_json/invalid_iterator/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4522 class invalid_iterator : public exception
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4523 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4524 public:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4525 template<typename BasicJsonContext, enable_if_t<is_basic_json_context<BasicJsonContext>::value, int> = 0>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4526 static invalid_iterator create(int id_, const std::string& what_arg, BasicJsonContext context)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4527 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4528 const std::string w = concat(exception::name("invalid_iterator", id_), exception::diagnostics(context), what_arg);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4529 return {id_, w.c_str()};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4530 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4531
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4532 private:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4533 JSON_HEDLEY_NON_NULL(3)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4534 invalid_iterator(int id_, const char* what_arg)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4535 : exception(id_, what_arg) {}
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4536 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4537
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4538 /// @brief exception indicating executing a member function with a wrong type
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4539 /// @sa https://json.nlohmann.me/api/basic_json/type_error/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4540 class type_error : public exception
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4541 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4542 public:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4543 template<typename BasicJsonContext, enable_if_t<is_basic_json_context<BasicJsonContext>::value, int> = 0>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4544 static type_error create(int id_, const std::string& what_arg, BasicJsonContext context)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4545 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4546 const std::string w = concat(exception::name("type_error", id_), exception::diagnostics(context), what_arg);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4547 return {id_, w.c_str()};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4548 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4549
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4550 private:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4551 JSON_HEDLEY_NON_NULL(3)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4552 type_error(int id_, const char* what_arg) : exception(id_, what_arg) {}
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4553 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4554
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4555 /// @brief exception indicating access out of the defined range
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4556 /// @sa https://json.nlohmann.me/api/basic_json/out_of_range/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4557 class out_of_range : public exception
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4558 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4559 public:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4560 template<typename BasicJsonContext, enable_if_t<is_basic_json_context<BasicJsonContext>::value, int> = 0>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4561 static out_of_range create(int id_, const std::string& what_arg, BasicJsonContext context)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4562 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4563 const std::string w = concat(exception::name("out_of_range", id_), exception::diagnostics(context), what_arg);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4564 return {id_, w.c_str()};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4565 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4566
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4567 private:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4568 JSON_HEDLEY_NON_NULL(3)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4569 out_of_range(int id_, const char* what_arg) : exception(id_, what_arg) {}
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4570 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4571
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4572 /// @brief exception indicating other library errors
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4573 /// @sa https://json.nlohmann.me/api/basic_json/other_error/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4574 class other_error : public exception
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4575 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4576 public:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4577 template<typename BasicJsonContext, enable_if_t<is_basic_json_context<BasicJsonContext>::value, int> = 0>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4578 static other_error create(int id_, const std::string& what_arg, BasicJsonContext context)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4579 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4580 const std::string w = concat(exception::name("other_error", id_), exception::diagnostics(context), what_arg);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4581 return {id_, w.c_str()};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4582 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4583
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4584 private:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4585 JSON_HEDLEY_NON_NULL(3)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4586 other_error(int id_, const char* what_arg) : exception(id_, what_arg) {}
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4587 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4588
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4589 } // namespace detail
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4590 NLOHMANN_JSON_NAMESPACE_END
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4591
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4592 // #include <nlohmann/detail/macro_scope.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4593
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4594 // #include <nlohmann/detail/meta/cpp_future.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4595
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4596 // #include <nlohmann/detail/meta/identity_tag.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4597 // __ _____ _____ _____
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4598 // __| | __| | | | JSON for Modern C++
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4599 // | | |__ | | | | | | version 3.11.3
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4600 // |_____|_____|_____|_|___| https://github.com/nlohmann/json
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4601 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4602 // SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4603 // SPDX-License-Identifier: MIT
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4604
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4605
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4606
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4607 // #include <nlohmann/detail/abi_macros.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4608
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4609
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4610 NLOHMANN_JSON_NAMESPACE_BEGIN
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4611 namespace detail
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4612 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4613
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4614 // dispatching helper struct
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4615 template <class T> struct identity_tag {};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4616
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4617 } // namespace detail
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4618 NLOHMANN_JSON_NAMESPACE_END
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4619
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4620 // #include <nlohmann/detail/meta/std_fs.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4621 // __ _____ _____ _____
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4622 // __| | __| | | | JSON for Modern C++
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4623 // | | |__ | | | | | | version 3.11.3
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4624 // |_____|_____|_____|_|___| https://github.com/nlohmann/json
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4625 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4626 // SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4627 // SPDX-License-Identifier: MIT
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4628
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4629
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4630
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4631 // #include <nlohmann/detail/macro_scope.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4632
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4633
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4634 #if JSON_HAS_EXPERIMENTAL_FILESYSTEM
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4635 #include <experimental/filesystem>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4636 NLOHMANN_JSON_NAMESPACE_BEGIN
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4637 namespace detail
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4638 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4639 namespace std_fs = std::experimental::filesystem;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4640 } // namespace detail
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4641 NLOHMANN_JSON_NAMESPACE_END
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4642 #elif JSON_HAS_FILESYSTEM
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4643 #include <filesystem>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4644 NLOHMANN_JSON_NAMESPACE_BEGIN
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4645 namespace detail
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4646 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4647 namespace std_fs = std::filesystem;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4648 } // namespace detail
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4649 NLOHMANN_JSON_NAMESPACE_END
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4650 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4651
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4652 // #include <nlohmann/detail/meta/type_traits.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4653
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4654 // #include <nlohmann/detail/string_concat.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4655
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4656 // #include <nlohmann/detail/value_t.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4657
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4658
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4659 NLOHMANN_JSON_NAMESPACE_BEGIN
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4660 namespace detail
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4661 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4662
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4663 template<typename BasicJsonType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4664 inline void from_json(const BasicJsonType& j, typename std::nullptr_t& n)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4665 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4666 if (JSON_HEDLEY_UNLIKELY(!j.is_null()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4667 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4668 JSON_THROW(type_error::create(302, concat("type must be null, but is ", j.type_name()), &j));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4669 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4670 n = nullptr;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4671 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4672
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4673 // overloads for basic_json template parameters
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4674 template < typename BasicJsonType, typename ArithmeticType,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4675 enable_if_t < std::is_arithmetic<ArithmeticType>::value&&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4676 !std::is_same<ArithmeticType, typename BasicJsonType::boolean_t>::value,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4677 int > = 0 >
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4678 void get_arithmetic_value(const BasicJsonType& j, ArithmeticType& val)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4679 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4680 switch (static_cast<value_t>(j))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4681 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4682 case value_t::number_unsigned:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4683 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4684 val = static_cast<ArithmeticType>(*j.template get_ptr<const typename BasicJsonType::number_unsigned_t*>());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4685 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4686 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4687 case value_t::number_integer:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4688 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4689 val = static_cast<ArithmeticType>(*j.template get_ptr<const typename BasicJsonType::number_integer_t*>());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4690 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4691 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4692 case value_t::number_float:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4693 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4694 val = static_cast<ArithmeticType>(*j.template get_ptr<const typename BasicJsonType::number_float_t*>());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4695 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4696 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4697
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4698 case value_t::null:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4699 case value_t::object:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4700 case value_t::array:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4701 case value_t::string:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4702 case value_t::boolean:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4703 case value_t::binary:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4704 case value_t::discarded:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4705 default:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4706 JSON_THROW(type_error::create(302, concat("type must be number, but is ", j.type_name()), &j));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4707 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4708 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4709
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4710 template<typename BasicJsonType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4711 inline void from_json(const BasicJsonType& j, typename BasicJsonType::boolean_t& b)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4712 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4713 if (JSON_HEDLEY_UNLIKELY(!j.is_boolean()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4714 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4715 JSON_THROW(type_error::create(302, concat("type must be boolean, but is ", j.type_name()), &j));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4716 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4717 b = *j.template get_ptr<const typename BasicJsonType::boolean_t*>();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4718 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4719
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4720 template<typename BasicJsonType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4721 inline void from_json(const BasicJsonType& j, typename BasicJsonType::string_t& s)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4722 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4723 if (JSON_HEDLEY_UNLIKELY(!j.is_string()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4724 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4725 JSON_THROW(type_error::create(302, concat("type must be string, but is ", j.type_name()), &j));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4726 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4727 s = *j.template get_ptr<const typename BasicJsonType::string_t*>();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4728 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4729
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4730 template <
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4731 typename BasicJsonType, typename StringType,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4732 enable_if_t <
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4733 std::is_assignable<StringType&, const typename BasicJsonType::string_t>::value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4734 && is_detected_exact<typename BasicJsonType::string_t::value_type, value_type_t, StringType>::value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4735 && !std::is_same<typename BasicJsonType::string_t, StringType>::value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4736 && !is_json_ref<StringType>::value, int > = 0 >
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4737 inline void from_json(const BasicJsonType& j, StringType& s)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4738 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4739 if (JSON_HEDLEY_UNLIKELY(!j.is_string()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4740 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4741 JSON_THROW(type_error::create(302, concat("type must be string, but is ", j.type_name()), &j));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4742 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4743
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4744 s = *j.template get_ptr<const typename BasicJsonType::string_t*>();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4745 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4746
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4747 template<typename BasicJsonType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4748 inline void from_json(const BasicJsonType& j, typename BasicJsonType::number_float_t& val)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4749 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4750 get_arithmetic_value(j, val);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4751 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4752
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4753 template<typename BasicJsonType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4754 inline void from_json(const BasicJsonType& j, typename BasicJsonType::number_unsigned_t& val)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4755 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4756 get_arithmetic_value(j, val);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4757 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4758
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4759 template<typename BasicJsonType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4760 inline void from_json(const BasicJsonType& j, typename BasicJsonType::number_integer_t& val)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4761 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4762 get_arithmetic_value(j, val);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4763 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4764
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4765 #if !JSON_DISABLE_ENUM_SERIALIZATION
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4766 template<typename BasicJsonType, typename EnumType,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4767 enable_if_t<std::is_enum<EnumType>::value, int> = 0>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4768 inline void from_json(const BasicJsonType& j, EnumType& e)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4769 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4770 typename std::underlying_type<EnumType>::type val;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4771 get_arithmetic_value(j, val);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4772 e = static_cast<EnumType>(val);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4773 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4774 #endif // JSON_DISABLE_ENUM_SERIALIZATION
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4775
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4776 // forward_list doesn't have an insert method
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4777 template<typename BasicJsonType, typename T, typename Allocator,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4778 enable_if_t<is_getable<BasicJsonType, T>::value, int> = 0>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4779 inline void from_json(const BasicJsonType& j, std::forward_list<T, Allocator>& l)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4780 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4781 if (JSON_HEDLEY_UNLIKELY(!j.is_array()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4782 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4783 JSON_THROW(type_error::create(302, concat("type must be array, but is ", j.type_name()), &j));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4784 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4785 l.clear();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4786 std::transform(j.rbegin(), j.rend(),
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4787 std::front_inserter(l), [](const BasicJsonType & i)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4788 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4789 return i.template get<T>();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4790 });
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4791 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4792
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4793 // valarray doesn't have an insert method
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4794 template<typename BasicJsonType, typename T,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4795 enable_if_t<is_getable<BasicJsonType, T>::value, int> = 0>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4796 inline void from_json(const BasicJsonType& j, std::valarray<T>& l)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4797 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4798 if (JSON_HEDLEY_UNLIKELY(!j.is_array()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4799 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4800 JSON_THROW(type_error::create(302, concat("type must be array, but is ", j.type_name()), &j));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4801 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4802 l.resize(j.size());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4803 std::transform(j.begin(), j.end(), std::begin(l),
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4804 [](const BasicJsonType & elem)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4805 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4806 return elem.template get<T>();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4807 });
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4808 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4809
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4810 template<typename BasicJsonType, typename T, std::size_t N>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4811 auto from_json(const BasicJsonType& j, T (&arr)[N]) // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4812 -> decltype(j.template get<T>(), void())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4813 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4814 for (std::size_t i = 0; i < N; ++i)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4815 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4816 arr[i] = j.at(i).template get<T>();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4817 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4818 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4819
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4820 template<typename BasicJsonType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4821 inline void from_json_array_impl(const BasicJsonType& j, typename BasicJsonType::array_t& arr, priority_tag<3> /*unused*/)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4822 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4823 arr = *j.template get_ptr<const typename BasicJsonType::array_t*>();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4824 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4825
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4826 template<typename BasicJsonType, typename T, std::size_t N>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4827 auto from_json_array_impl(const BasicJsonType& j, std::array<T, N>& arr,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4828 priority_tag<2> /*unused*/)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4829 -> decltype(j.template get<T>(), void())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4830 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4831 for (std::size_t i = 0; i < N; ++i)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4832 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4833 arr[i] = j.at(i).template get<T>();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4834 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4835 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4836
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4837 template<typename BasicJsonType, typename ConstructibleArrayType,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4838 enable_if_t<
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4839 std::is_assignable<ConstructibleArrayType&, ConstructibleArrayType>::value,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4840 int> = 0>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4841 auto from_json_array_impl(const BasicJsonType& j, ConstructibleArrayType& arr, priority_tag<1> /*unused*/)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4842 -> decltype(
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4843 arr.reserve(std::declval<typename ConstructibleArrayType::size_type>()),
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4844 j.template get<typename ConstructibleArrayType::value_type>(),
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4845 void())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4846 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4847 using std::end;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4848
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4849 ConstructibleArrayType ret;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4850 ret.reserve(j.size());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4851 std::transform(j.begin(), j.end(),
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4852 std::inserter(ret, end(ret)), [](const BasicJsonType & i)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4853 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4854 // get<BasicJsonType>() returns *this, this won't call a from_json
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4855 // method when value_type is BasicJsonType
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4856 return i.template get<typename ConstructibleArrayType::value_type>();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4857 });
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4858 arr = std::move(ret);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4859 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4860
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4861 template<typename BasicJsonType, typename ConstructibleArrayType,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4862 enable_if_t<
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4863 std::is_assignable<ConstructibleArrayType&, ConstructibleArrayType>::value,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4864 int> = 0>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4865 inline void from_json_array_impl(const BasicJsonType& j, ConstructibleArrayType& arr,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4866 priority_tag<0> /*unused*/)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4867 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4868 using std::end;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4869
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4870 ConstructibleArrayType ret;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4871 std::transform(
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4872 j.begin(), j.end(), std::inserter(ret, end(ret)),
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4873 [](const BasicJsonType & i)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4874 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4875 // get<BasicJsonType>() returns *this, this won't call a from_json
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4876 // method when value_type is BasicJsonType
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4877 return i.template get<typename ConstructibleArrayType::value_type>();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4878 });
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4879 arr = std::move(ret);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4880 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4881
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4882 template < typename BasicJsonType, typename ConstructibleArrayType,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4883 enable_if_t <
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4884 is_constructible_array_type<BasicJsonType, ConstructibleArrayType>::value&&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4885 !is_constructible_object_type<BasicJsonType, ConstructibleArrayType>::value&&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4886 !is_constructible_string_type<BasicJsonType, ConstructibleArrayType>::value&&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4887 !std::is_same<ConstructibleArrayType, typename BasicJsonType::binary_t>::value&&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4888 !is_basic_json<ConstructibleArrayType>::value,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4889 int > = 0 >
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4890 auto from_json(const BasicJsonType& j, ConstructibleArrayType& arr)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4891 -> decltype(from_json_array_impl(j, arr, priority_tag<3> {}),
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4892 j.template get<typename ConstructibleArrayType::value_type>(),
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4893 void())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4894 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4895 if (JSON_HEDLEY_UNLIKELY(!j.is_array()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4896 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4897 JSON_THROW(type_error::create(302, concat("type must be array, but is ", j.type_name()), &j));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4898 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4899
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4900 from_json_array_impl(j, arr, priority_tag<3> {});
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4901 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4902
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4903 template < typename BasicJsonType, typename T, std::size_t... Idx >
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4904 std::array<T, sizeof...(Idx)> from_json_inplace_array_impl(BasicJsonType&& j,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4905 identity_tag<std::array<T, sizeof...(Idx)>> /*unused*/, index_sequence<Idx...> /*unused*/)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4906 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4907 return { { std::forward<BasicJsonType>(j).at(Idx).template get<T>()... } };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4908 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4909
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4910 template < typename BasicJsonType, typename T, std::size_t N >
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4911 auto from_json(BasicJsonType&& j, identity_tag<std::array<T, N>> tag)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4912 -> decltype(from_json_inplace_array_impl(std::forward<BasicJsonType>(j), tag, make_index_sequence<N> {}))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4913 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4914 if (JSON_HEDLEY_UNLIKELY(!j.is_array()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4915 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4916 JSON_THROW(type_error::create(302, concat("type must be array, but is ", j.type_name()), &j));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4917 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4918
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4919 return from_json_inplace_array_impl(std::forward<BasicJsonType>(j), tag, make_index_sequence<N> {});
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4920 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4921
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4922 template<typename BasicJsonType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4923 inline void from_json(const BasicJsonType& j, typename BasicJsonType::binary_t& bin)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4924 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4925 if (JSON_HEDLEY_UNLIKELY(!j.is_binary()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4926 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4927 JSON_THROW(type_error::create(302, concat("type must be binary, but is ", j.type_name()), &j));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4928 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4929
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4930 bin = *j.template get_ptr<const typename BasicJsonType::binary_t*>();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4931 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4932
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4933 template<typename BasicJsonType, typename ConstructibleObjectType,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4934 enable_if_t<is_constructible_object_type<BasicJsonType, ConstructibleObjectType>::value, int> = 0>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4935 inline void from_json(const BasicJsonType& j, ConstructibleObjectType& obj)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4936 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4937 if (JSON_HEDLEY_UNLIKELY(!j.is_object()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4938 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4939 JSON_THROW(type_error::create(302, concat("type must be object, but is ", j.type_name()), &j));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4940 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4941
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4942 ConstructibleObjectType ret;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4943 const auto* inner_object = j.template get_ptr<const typename BasicJsonType::object_t*>();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4944 using value_type = typename ConstructibleObjectType::value_type;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4945 std::transform(
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4946 inner_object->begin(), inner_object->end(),
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4947 std::inserter(ret, ret.begin()),
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4948 [](typename BasicJsonType::object_t::value_type const & p)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4949 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4950 return value_type(p.first, p.second.template get<typename ConstructibleObjectType::mapped_type>());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4951 });
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4952 obj = std::move(ret);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4953 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4954
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4955 // overload for arithmetic types, not chosen for basic_json template arguments
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4956 // (BooleanType, etc..); note: Is it really necessary to provide explicit
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4957 // overloads for boolean_t etc. in case of a custom BooleanType which is not
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4958 // an arithmetic type?
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4959 template < typename BasicJsonType, typename ArithmeticType,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4960 enable_if_t <
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4961 std::is_arithmetic<ArithmeticType>::value&&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4962 !std::is_same<ArithmeticType, typename BasicJsonType::number_unsigned_t>::value&&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4963 !std::is_same<ArithmeticType, typename BasicJsonType::number_integer_t>::value&&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4964 !std::is_same<ArithmeticType, typename BasicJsonType::number_float_t>::value&&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4965 !std::is_same<ArithmeticType, typename BasicJsonType::boolean_t>::value,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4966 int > = 0 >
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4967 inline void from_json(const BasicJsonType& j, ArithmeticType& val)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4968 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4969 switch (static_cast<value_t>(j))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4970 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4971 case value_t::number_unsigned:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4972 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4973 val = static_cast<ArithmeticType>(*j.template get_ptr<const typename BasicJsonType::number_unsigned_t*>());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4974 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4975 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4976 case value_t::number_integer:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4977 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4978 val = static_cast<ArithmeticType>(*j.template get_ptr<const typename BasicJsonType::number_integer_t*>());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4979 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4980 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4981 case value_t::number_float:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4982 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4983 val = static_cast<ArithmeticType>(*j.template get_ptr<const typename BasicJsonType::number_float_t*>());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4984 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4985 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4986 case value_t::boolean:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4987 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4988 val = static_cast<ArithmeticType>(*j.template get_ptr<const typename BasicJsonType::boolean_t*>());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4989 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4990 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4991
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4992 case value_t::null:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4993 case value_t::object:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4994 case value_t::array:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4995 case value_t::string:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4996 case value_t::binary:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4997 case value_t::discarded:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4998 default:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4999 JSON_THROW(type_error::create(302, concat("type must be number, but is ", j.type_name()), &j));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5000 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5001 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5002
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5003 template<typename BasicJsonType, typename... Args, std::size_t... Idx>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5004 std::tuple<Args...> from_json_tuple_impl_base(BasicJsonType&& j, index_sequence<Idx...> /*unused*/)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5005 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5006 return std::make_tuple(std::forward<BasicJsonType>(j).at(Idx).template get<Args>()...);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5007 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5008
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5009 template < typename BasicJsonType, class A1, class A2 >
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5010 std::pair<A1, A2> from_json_tuple_impl(BasicJsonType&& j, identity_tag<std::pair<A1, A2>> /*unused*/, priority_tag<0> /*unused*/)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5011 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5012 return {std::forward<BasicJsonType>(j).at(0).template get<A1>(),
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5013 std::forward<BasicJsonType>(j).at(1).template get<A2>()};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5014 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5015
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5016 template<typename BasicJsonType, typename A1, typename A2>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5017 inline void from_json_tuple_impl(BasicJsonType&& j, std::pair<A1, A2>& p, priority_tag<1> /*unused*/)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5018 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5019 p = from_json_tuple_impl(std::forward<BasicJsonType>(j), identity_tag<std::pair<A1, A2>> {}, priority_tag<0> {});
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5020 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5021
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5022 template<typename BasicJsonType, typename... Args>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5023 std::tuple<Args...> from_json_tuple_impl(BasicJsonType&& j, identity_tag<std::tuple<Args...>> /*unused*/, priority_tag<2> /*unused*/)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5024 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5025 return from_json_tuple_impl_base<BasicJsonType, Args...>(std::forward<BasicJsonType>(j), index_sequence_for<Args...> {});
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5026 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5027
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5028 template<typename BasicJsonType, typename... Args>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5029 inline void from_json_tuple_impl(BasicJsonType&& j, std::tuple<Args...>& t, priority_tag<3> /*unused*/)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5030 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5031 t = from_json_tuple_impl_base<BasicJsonType, Args...>(std::forward<BasicJsonType>(j), index_sequence_for<Args...> {});
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5032 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5033
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5034 template<typename BasicJsonType, typename TupleRelated>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5035 auto from_json(BasicJsonType&& j, TupleRelated&& t)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5036 -> decltype(from_json_tuple_impl(std::forward<BasicJsonType>(j), std::forward<TupleRelated>(t), priority_tag<3> {}))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5037 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5038 if (JSON_HEDLEY_UNLIKELY(!j.is_array()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5039 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5040 JSON_THROW(type_error::create(302, concat("type must be array, but is ", j.type_name()), &j));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5041 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5042
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5043 return from_json_tuple_impl(std::forward<BasicJsonType>(j), std::forward<TupleRelated>(t), priority_tag<3> {});
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5044 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5045
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5046 template < typename BasicJsonType, typename Key, typename Value, typename Compare, typename Allocator,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5047 typename = enable_if_t < !std::is_constructible <
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5048 typename BasicJsonType::string_t, Key >::value >>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5049 inline void from_json(const BasicJsonType& j, std::map<Key, Value, Compare, Allocator>& m)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5050 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5051 if (JSON_HEDLEY_UNLIKELY(!j.is_array()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5052 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5053 JSON_THROW(type_error::create(302, concat("type must be array, but is ", j.type_name()), &j));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5054 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5055 m.clear();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5056 for (const auto& p : j)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5057 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5058 if (JSON_HEDLEY_UNLIKELY(!p.is_array()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5059 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5060 JSON_THROW(type_error::create(302, concat("type must be array, but is ", p.type_name()), &j));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5061 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5062 m.emplace(p.at(0).template get<Key>(), p.at(1).template get<Value>());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5063 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5064 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5065
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5066 template < typename BasicJsonType, typename Key, typename Value, typename Hash, typename KeyEqual, typename Allocator,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5067 typename = enable_if_t < !std::is_constructible <
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5068 typename BasicJsonType::string_t, Key >::value >>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5069 inline void from_json(const BasicJsonType& j, std::unordered_map<Key, Value, Hash, KeyEqual, Allocator>& m)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5070 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5071 if (JSON_HEDLEY_UNLIKELY(!j.is_array()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5072 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5073 JSON_THROW(type_error::create(302, concat("type must be array, but is ", j.type_name()), &j));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5074 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5075 m.clear();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5076 for (const auto& p : j)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5077 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5078 if (JSON_HEDLEY_UNLIKELY(!p.is_array()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5079 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5080 JSON_THROW(type_error::create(302, concat("type must be array, but is ", p.type_name()), &j));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5081 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5082 m.emplace(p.at(0).template get<Key>(), p.at(1).template get<Value>());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5083 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5084 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5085
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5086 #if JSON_HAS_FILESYSTEM || JSON_HAS_EXPERIMENTAL_FILESYSTEM
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5087 template<typename BasicJsonType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5088 inline void from_json(const BasicJsonType& j, std_fs::path& p)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5089 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5090 if (JSON_HEDLEY_UNLIKELY(!j.is_string()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5091 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5092 JSON_THROW(type_error::create(302, concat("type must be string, but is ", j.type_name()), &j));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5093 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5094 p = *j.template get_ptr<const typename BasicJsonType::string_t*>();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5095 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5096 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5097
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5098 struct from_json_fn
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5099 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5100 template<typename BasicJsonType, typename T>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5101 auto operator()(const BasicJsonType& j, T&& val) const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5102 noexcept(noexcept(from_json(j, std::forward<T>(val))))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5103 -> decltype(from_json(j, std::forward<T>(val)))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5104 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5105 return from_json(j, std::forward<T>(val));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5106 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5107 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5108
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5109 } // namespace detail
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5110
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5111 #ifndef JSON_HAS_CPP_17
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5112 /// namespace to hold default `from_json` function
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5113 /// to see why this is required:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5114 /// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4381.html
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5115 namespace // NOLINT(cert-dcl59-cpp,fuchsia-header-anon-namespaces,google-build-namespaces)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5116 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5117 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5118 JSON_INLINE_VARIABLE constexpr const auto& from_json = // NOLINT(misc-definitions-in-headers)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5119 detail::static_const<detail::from_json_fn>::value;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5120 #ifndef JSON_HAS_CPP_17
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5121 } // namespace
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5122 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5123
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5124 NLOHMANN_JSON_NAMESPACE_END
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5125
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5126 // #include <nlohmann/detail/conversions/to_json.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5127 // __ _____ _____ _____
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5128 // __| | __| | | | JSON for Modern C++
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5129 // | | |__ | | | | | | version 3.11.3
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5130 // |_____|_____|_____|_|___| https://github.com/nlohmann/json
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5131 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5132 // SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5133 // SPDX-License-Identifier: MIT
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5134
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5135
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5136
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5137 #include <algorithm> // copy
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5138 #include <iterator> // begin, end
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5139 #include <string> // string
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5140 #include <tuple> // tuple, get
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5141 #include <type_traits> // is_same, is_constructible, is_floating_point, is_enum, underlying_type
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5142 #include <utility> // move, forward, declval, pair
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5143 #include <valarray> // valarray
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5144 #include <vector> // vector
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5145
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5146 // #include <nlohmann/detail/iterators/iteration_proxy.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5147 // __ _____ _____ _____
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5148 // __| | __| | | | JSON for Modern C++
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5149 // | | |__ | | | | | | version 3.11.3
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5150 // |_____|_____|_____|_|___| https://github.com/nlohmann/json
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5151 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5152 // SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5153 // SPDX-License-Identifier: MIT
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5154
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5155
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5156
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5157 #include <cstddef> // size_t
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5158 #include <iterator> // input_iterator_tag
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5159 #include <string> // string, to_string
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5160 #include <tuple> // tuple_size, get, tuple_element
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5161 #include <utility> // move
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5162
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5163 #if JSON_HAS_RANGES
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5164 #include <ranges> // enable_borrowed_range
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5165 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5166
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5167 // #include <nlohmann/detail/abi_macros.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5168
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5169 // #include <nlohmann/detail/meta/type_traits.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5170
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5171 // #include <nlohmann/detail/value_t.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5172
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5173
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5174 NLOHMANN_JSON_NAMESPACE_BEGIN
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5175 namespace detail
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5176 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5177
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5178 template<typename string_type>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5179 void int_to_string( string_type& target, std::size_t value )
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5180 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5181 // For ADL
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5182 using std::to_string;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5183 target = to_string(value);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5184 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5185 template<typename IteratorType> class iteration_proxy_value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5186 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5187 public:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5188 using difference_type = std::ptrdiff_t;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5189 using value_type = iteration_proxy_value;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5190 using pointer = value_type *;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5191 using reference = value_type &;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5192 using iterator_category = std::input_iterator_tag;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5193 using string_type = typename std::remove_cv< typename std::remove_reference<decltype( std::declval<IteratorType>().key() ) >::type >::type;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5194
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5195 private:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5196 /// the iterator
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5197 IteratorType anchor{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5198 /// an index for arrays (used to create key names)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5199 std::size_t array_index = 0;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5200 /// last stringified array index
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5201 mutable std::size_t array_index_last = 0;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5202 /// a string representation of the array index
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5203 mutable string_type array_index_str = "0";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5204 /// an empty string (to return a reference for primitive values)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5205 string_type empty_str{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5206
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5207 public:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5208 explicit iteration_proxy_value() = default;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5209 explicit iteration_proxy_value(IteratorType it, std::size_t array_index_ = 0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5210 noexcept(std::is_nothrow_move_constructible<IteratorType>::value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5211 && std::is_nothrow_default_constructible<string_type>::value)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5212 : anchor(std::move(it))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5213 , array_index(array_index_)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5214 {}
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5215
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5216 iteration_proxy_value(iteration_proxy_value const&) = default;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5217 iteration_proxy_value& operator=(iteration_proxy_value const&) = default;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5218 // older GCCs are a bit fussy and require explicit noexcept specifiers on defaulted functions
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5219 iteration_proxy_value(iteration_proxy_value&&)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5220 noexcept(std::is_nothrow_move_constructible<IteratorType>::value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5221 && std::is_nothrow_move_constructible<string_type>::value) = default; // NOLINT(hicpp-noexcept-move,performance-noexcept-move-constructor,cppcoreguidelines-noexcept-move-operations)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5222 iteration_proxy_value& operator=(iteration_proxy_value&&)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5223 noexcept(std::is_nothrow_move_assignable<IteratorType>::value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5224 && std::is_nothrow_move_assignable<string_type>::value) = default; // NOLINT(hicpp-noexcept-move,performance-noexcept-move-constructor,cppcoreguidelines-noexcept-move-operations)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5225 ~iteration_proxy_value() = default;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5226
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5227 /// dereference operator (needed for range-based for)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5228 const iteration_proxy_value& operator*() const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5229 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5230 return *this;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5231 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5232
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5233 /// increment operator (needed for range-based for)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5234 iteration_proxy_value& operator++()
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5235 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5236 ++anchor;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5237 ++array_index;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5238
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5239 return *this;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5240 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5241
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5242 iteration_proxy_value operator++(int)& // NOLINT(cert-dcl21-cpp)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5243 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5244 auto tmp = iteration_proxy_value(anchor, array_index);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5245 ++anchor;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5246 ++array_index;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5247 return tmp;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5248 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5249
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5250 /// equality operator (needed for InputIterator)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5251 bool operator==(const iteration_proxy_value& o) const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5252 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5253 return anchor == o.anchor;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5254 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5255
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5256 /// inequality operator (needed for range-based for)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5257 bool operator!=(const iteration_proxy_value& o) const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5258 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5259 return anchor != o.anchor;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5260 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5261
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5262 /// return key of the iterator
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5263 const string_type& key() const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5264 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5265 JSON_ASSERT(anchor.m_object != nullptr);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5266
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5267 switch (anchor.m_object->type())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5268 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5269 // use integer array index as key
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5270 case value_t::array:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5271 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5272 if (array_index != array_index_last)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5273 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5274 int_to_string( array_index_str, array_index );
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5275 array_index_last = array_index;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5276 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5277 return array_index_str;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5278 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5279
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5280 // use key from the object
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5281 case value_t::object:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5282 return anchor.key();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5283
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5284 // use an empty key for all primitive types
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5285 case value_t::null:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5286 case value_t::string:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5287 case value_t::boolean:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5288 case value_t::number_integer:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5289 case value_t::number_unsigned:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5290 case value_t::number_float:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5291 case value_t::binary:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5292 case value_t::discarded:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5293 default:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5294 return empty_str;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5295 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5296 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5297
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5298 /// return value of the iterator
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5299 typename IteratorType::reference value() const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5300 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5301 return anchor.value();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5302 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5303 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5304
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5305 /// proxy class for the items() function
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5306 template<typename IteratorType> class iteration_proxy
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5307 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5308 private:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5309 /// the container to iterate
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5310 typename IteratorType::pointer container = nullptr;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5311
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5312 public:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5313 explicit iteration_proxy() = default;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5314
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5315 /// construct iteration proxy from a container
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5316 explicit iteration_proxy(typename IteratorType::reference cont) noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5317 : container(&cont) {}
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5318
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5319 iteration_proxy(iteration_proxy const&) = default;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5320 iteration_proxy& operator=(iteration_proxy const&) = default;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5321 iteration_proxy(iteration_proxy&&) noexcept = default;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5322 iteration_proxy& operator=(iteration_proxy&&) noexcept = default;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5323 ~iteration_proxy() = default;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5324
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5325 /// return iterator begin (needed for range-based for)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5326 iteration_proxy_value<IteratorType> begin() const noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5327 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5328 return iteration_proxy_value<IteratorType>(container->begin());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5329 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5330
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5331 /// return iterator end (needed for range-based for)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5332 iteration_proxy_value<IteratorType> end() const noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5333 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5334 return iteration_proxy_value<IteratorType>(container->end());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5335 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5336 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5337
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5338 // Structured Bindings Support
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5339 // For further reference see https://blog.tartanllama.xyz/structured-bindings/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5340 // And see https://github.com/nlohmann/json/pull/1391
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5341 template<std::size_t N, typename IteratorType, enable_if_t<N == 0, int> = 0>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5342 auto get(const nlohmann::detail::iteration_proxy_value<IteratorType>& i) -> decltype(i.key())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5343 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5344 return i.key();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5345 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5346 // Structured Bindings Support
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5347 // For further reference see https://blog.tartanllama.xyz/structured-bindings/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5348 // And see https://github.com/nlohmann/json/pull/1391
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5349 template<std::size_t N, typename IteratorType, enable_if_t<N == 1, int> = 0>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5350 auto get(const nlohmann::detail::iteration_proxy_value<IteratorType>& i) -> decltype(i.value())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5351 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5352 return i.value();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5353 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5354
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5355 } // namespace detail
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5356 NLOHMANN_JSON_NAMESPACE_END
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5357
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5358 // The Addition to the STD Namespace is required to add
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5359 // Structured Bindings Support to the iteration_proxy_value class
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5360 // For further reference see https://blog.tartanllama.xyz/structured-bindings/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5361 // And see https://github.com/nlohmann/json/pull/1391
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5362 namespace std
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5363 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5364
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5365 #if defined(__clang__)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5366 // Fix: https://github.com/nlohmann/json/issues/1401
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5367 #pragma clang diagnostic push
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5368 #pragma clang diagnostic ignored "-Wmismatched-tags"
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5369 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5370 template<typename IteratorType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5371 class tuple_size<::nlohmann::detail::iteration_proxy_value<IteratorType>> // NOLINT(cert-dcl58-cpp)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5372 : public std::integral_constant<std::size_t, 2> {};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5373
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5374 template<std::size_t N, typename IteratorType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5375 class tuple_element<N, ::nlohmann::detail::iteration_proxy_value<IteratorType >> // NOLINT(cert-dcl58-cpp)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5376 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5377 public:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5378 using type = decltype(
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5379 get<N>(std::declval <
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5380 ::nlohmann::detail::iteration_proxy_value<IteratorType >> ()));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5381 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5382 #if defined(__clang__)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5383 #pragma clang diagnostic pop
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5384 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5385
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5386 } // namespace std
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5387
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5388 #if JSON_HAS_RANGES
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5389 template <typename IteratorType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5390 inline constexpr bool ::std::ranges::enable_borrowed_range<::nlohmann::detail::iteration_proxy<IteratorType>> = true;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5391 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5392
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5393 // #include <nlohmann/detail/macro_scope.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5394
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5395 // #include <nlohmann/detail/meta/cpp_future.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5396
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5397 // #include <nlohmann/detail/meta/std_fs.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5398
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5399 // #include <nlohmann/detail/meta/type_traits.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5400
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5401 // #include <nlohmann/detail/value_t.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5402
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5403
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5404 NLOHMANN_JSON_NAMESPACE_BEGIN
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5405 namespace detail
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5406 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5407
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5408 //////////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5409 // constructors //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5410 //////////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5411
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5412 /*
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5413 * Note all external_constructor<>::construct functions need to call
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5414 * j.m_data.m_value.destroy(j.m_data.m_type) to avoid a memory leak in case j contains an
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5415 * allocated value (e.g., a string). See bug issue
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5416 * https://github.com/nlohmann/json/issues/2865 for more information.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5417 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5418
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5419 template<value_t> struct external_constructor;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5420
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5421 template<>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5422 struct external_constructor<value_t::boolean>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5423 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5424 template<typename BasicJsonType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5425 static void construct(BasicJsonType& j, typename BasicJsonType::boolean_t b) noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5426 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5427 j.m_data.m_value.destroy(j.m_data.m_type);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5428 j.m_data.m_type = value_t::boolean;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5429 j.m_data.m_value = b;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5430 j.assert_invariant();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5431 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5432 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5433
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5434 template<>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5435 struct external_constructor<value_t::string>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5436 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5437 template<typename BasicJsonType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5438 static void construct(BasicJsonType& j, const typename BasicJsonType::string_t& s)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5439 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5440 j.m_data.m_value.destroy(j.m_data.m_type);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5441 j.m_data.m_type = value_t::string;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5442 j.m_data.m_value = s;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5443 j.assert_invariant();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5444 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5445
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5446 template<typename BasicJsonType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5447 static void construct(BasicJsonType& j, typename BasicJsonType::string_t&& s)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5448 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5449 j.m_data.m_value.destroy(j.m_data.m_type);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5450 j.m_data.m_type = value_t::string;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5451 j.m_data.m_value = std::move(s);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5452 j.assert_invariant();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5453 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5454
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5455 template < typename BasicJsonType, typename CompatibleStringType,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5456 enable_if_t < !std::is_same<CompatibleStringType, typename BasicJsonType::string_t>::value,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5457 int > = 0 >
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5458 static void construct(BasicJsonType& j, const CompatibleStringType& str)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5459 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5460 j.m_data.m_value.destroy(j.m_data.m_type);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5461 j.m_data.m_type = value_t::string;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5462 j.m_data.m_value.string = j.template create<typename BasicJsonType::string_t>(str);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5463 j.assert_invariant();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5464 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5465 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5466
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5467 template<>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5468 struct external_constructor<value_t::binary>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5469 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5470 template<typename BasicJsonType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5471 static void construct(BasicJsonType& j, const typename BasicJsonType::binary_t& b)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5472 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5473 j.m_data.m_value.destroy(j.m_data.m_type);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5474 j.m_data.m_type = value_t::binary;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5475 j.m_data.m_value = typename BasicJsonType::binary_t(b);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5476 j.assert_invariant();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5477 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5478
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5479 template<typename BasicJsonType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5480 static void construct(BasicJsonType& j, typename BasicJsonType::binary_t&& b)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5481 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5482 j.m_data.m_value.destroy(j.m_data.m_type);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5483 j.m_data.m_type = value_t::binary;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5484 j.m_data.m_value = typename BasicJsonType::binary_t(std::move(b));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5485 j.assert_invariant();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5486 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5487 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5488
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5489 template<>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5490 struct external_constructor<value_t::number_float>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5491 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5492 template<typename BasicJsonType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5493 static void construct(BasicJsonType& j, typename BasicJsonType::number_float_t val) noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5494 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5495 j.m_data.m_value.destroy(j.m_data.m_type);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5496 j.m_data.m_type = value_t::number_float;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5497 j.m_data.m_value = val;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5498 j.assert_invariant();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5499 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5500 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5501
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5502 template<>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5503 struct external_constructor<value_t::number_unsigned>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5504 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5505 template<typename BasicJsonType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5506 static void construct(BasicJsonType& j, typename BasicJsonType::number_unsigned_t val) noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5507 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5508 j.m_data.m_value.destroy(j.m_data.m_type);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5509 j.m_data.m_type = value_t::number_unsigned;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5510 j.m_data.m_value = val;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5511 j.assert_invariant();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5512 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5513 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5514
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5515 template<>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5516 struct external_constructor<value_t::number_integer>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5517 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5518 template<typename BasicJsonType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5519 static void construct(BasicJsonType& j, typename BasicJsonType::number_integer_t val) noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5520 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5521 j.m_data.m_value.destroy(j.m_data.m_type);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5522 j.m_data.m_type = value_t::number_integer;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5523 j.m_data.m_value = val;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5524 j.assert_invariant();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5525 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5526 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5527
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5528 template<>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5529 struct external_constructor<value_t::array>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5530 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5531 template<typename BasicJsonType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5532 static void construct(BasicJsonType& j, const typename BasicJsonType::array_t& arr)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5533 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5534 j.m_data.m_value.destroy(j.m_data.m_type);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5535 j.m_data.m_type = value_t::array;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5536 j.m_data.m_value = arr;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5537 j.set_parents();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5538 j.assert_invariant();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5539 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5540
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5541 template<typename BasicJsonType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5542 static void construct(BasicJsonType& j, typename BasicJsonType::array_t&& arr)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5543 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5544 j.m_data.m_value.destroy(j.m_data.m_type);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5545 j.m_data.m_type = value_t::array;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5546 j.m_data.m_value = std::move(arr);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5547 j.set_parents();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5548 j.assert_invariant();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5549 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5550
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5551 template < typename BasicJsonType, typename CompatibleArrayType,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5552 enable_if_t < !std::is_same<CompatibleArrayType, typename BasicJsonType::array_t>::value,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5553 int > = 0 >
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5554 static void construct(BasicJsonType& j, const CompatibleArrayType& arr)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5555 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5556 using std::begin;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5557 using std::end;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5558
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5559 j.m_data.m_value.destroy(j.m_data.m_type);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5560 j.m_data.m_type = value_t::array;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5561 j.m_data.m_value.array = j.template create<typename BasicJsonType::array_t>(begin(arr), end(arr));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5562 j.set_parents();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5563 j.assert_invariant();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5564 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5565
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5566 template<typename BasicJsonType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5567 static void construct(BasicJsonType& j, const std::vector<bool>& arr)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5568 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5569 j.m_data.m_value.destroy(j.m_data.m_type);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5570 j.m_data.m_type = value_t::array;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5571 j.m_data.m_value = value_t::array;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5572 j.m_data.m_value.array->reserve(arr.size());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5573 for (const bool x : arr)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5574 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5575 j.m_data.m_value.array->push_back(x);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5576 j.set_parent(j.m_data.m_value.array->back());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5577 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5578 j.assert_invariant();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5579 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5580
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5581 template<typename BasicJsonType, typename T,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5582 enable_if_t<std::is_convertible<T, BasicJsonType>::value, int> = 0>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5583 static void construct(BasicJsonType& j, const std::valarray<T>& arr)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5584 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5585 j.m_data.m_value.destroy(j.m_data.m_type);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5586 j.m_data.m_type = value_t::array;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5587 j.m_data.m_value = value_t::array;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5588 j.m_data.m_value.array->resize(arr.size());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5589 if (arr.size() > 0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5590 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5591 std::copy(std::begin(arr), std::end(arr), j.m_data.m_value.array->begin());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5592 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5593 j.set_parents();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5594 j.assert_invariant();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5595 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5596 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5597
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5598 template<>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5599 struct external_constructor<value_t::object>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5600 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5601 template<typename BasicJsonType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5602 static void construct(BasicJsonType& j, const typename BasicJsonType::object_t& obj)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5603 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5604 j.m_data.m_value.destroy(j.m_data.m_type);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5605 j.m_data.m_type = value_t::object;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5606 j.m_data.m_value = obj;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5607 j.set_parents();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5608 j.assert_invariant();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5609 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5610
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5611 template<typename BasicJsonType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5612 static void construct(BasicJsonType& j, typename BasicJsonType::object_t&& obj)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5613 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5614 j.m_data.m_value.destroy(j.m_data.m_type);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5615 j.m_data.m_type = value_t::object;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5616 j.m_data.m_value = std::move(obj);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5617 j.set_parents();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5618 j.assert_invariant();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5619 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5620
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5621 template < typename BasicJsonType, typename CompatibleObjectType,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5622 enable_if_t < !std::is_same<CompatibleObjectType, typename BasicJsonType::object_t>::value, int > = 0 >
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5623 static void construct(BasicJsonType& j, const CompatibleObjectType& obj)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5624 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5625 using std::begin;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5626 using std::end;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5627
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5628 j.m_data.m_value.destroy(j.m_data.m_type);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5629 j.m_data.m_type = value_t::object;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5630 j.m_data.m_value.object = j.template create<typename BasicJsonType::object_t>(begin(obj), end(obj));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5631 j.set_parents();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5632 j.assert_invariant();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5633 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5634 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5635
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5636 /////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5637 // to_json //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5638 /////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5639
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5640 template<typename BasicJsonType, typename T,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5641 enable_if_t<std::is_same<T, typename BasicJsonType::boolean_t>::value, int> = 0>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5642 inline void to_json(BasicJsonType& j, T b) noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5643 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5644 external_constructor<value_t::boolean>::construct(j, b);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5645 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5646
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5647 template < typename BasicJsonType, typename BoolRef,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5648 enable_if_t <
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5649 ((std::is_same<std::vector<bool>::reference, BoolRef>::value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5650 && !std::is_same <std::vector<bool>::reference, typename BasicJsonType::boolean_t&>::value)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5651 || (std::is_same<std::vector<bool>::const_reference, BoolRef>::value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5652 && !std::is_same <detail::uncvref_t<std::vector<bool>::const_reference>,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5653 typename BasicJsonType::boolean_t >::value))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5654 && std::is_convertible<const BoolRef&, typename BasicJsonType::boolean_t>::value, int > = 0 >
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5655 inline void to_json(BasicJsonType& j, const BoolRef& b) noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5656 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5657 external_constructor<value_t::boolean>::construct(j, static_cast<typename BasicJsonType::boolean_t>(b));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5658 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5659
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5660 template<typename BasicJsonType, typename CompatibleString,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5661 enable_if_t<std::is_constructible<typename BasicJsonType::string_t, CompatibleString>::value, int> = 0>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5662 inline void to_json(BasicJsonType& j, const CompatibleString& s)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5663 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5664 external_constructor<value_t::string>::construct(j, s);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5665 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5666
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5667 template<typename BasicJsonType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5668 inline void to_json(BasicJsonType& j, typename BasicJsonType::string_t&& s)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5669 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5670 external_constructor<value_t::string>::construct(j, std::move(s));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5671 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5672
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5673 template<typename BasicJsonType, typename FloatType,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5674 enable_if_t<std::is_floating_point<FloatType>::value, int> = 0>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5675 inline void to_json(BasicJsonType& j, FloatType val) noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5676 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5677 external_constructor<value_t::number_float>::construct(j, static_cast<typename BasicJsonType::number_float_t>(val));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5678 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5679
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5680 template<typename BasicJsonType, typename CompatibleNumberUnsignedType,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5681 enable_if_t<is_compatible_integer_type<typename BasicJsonType::number_unsigned_t, CompatibleNumberUnsignedType>::value, int> = 0>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5682 inline void to_json(BasicJsonType& j, CompatibleNumberUnsignedType val) noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5683 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5684 external_constructor<value_t::number_unsigned>::construct(j, static_cast<typename BasicJsonType::number_unsigned_t>(val));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5685 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5686
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5687 template<typename BasicJsonType, typename CompatibleNumberIntegerType,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5688 enable_if_t<is_compatible_integer_type<typename BasicJsonType::number_integer_t, CompatibleNumberIntegerType>::value, int> = 0>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5689 inline void to_json(BasicJsonType& j, CompatibleNumberIntegerType val) noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5690 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5691 external_constructor<value_t::number_integer>::construct(j, static_cast<typename BasicJsonType::number_integer_t>(val));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5692 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5693
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5694 #if !JSON_DISABLE_ENUM_SERIALIZATION
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5695 template<typename BasicJsonType, typename EnumType,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5696 enable_if_t<std::is_enum<EnumType>::value, int> = 0>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5697 inline void to_json(BasicJsonType& j, EnumType e) noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5698 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5699 using underlying_type = typename std::underlying_type<EnumType>::type;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5700 external_constructor<value_t::number_integer>::construct(j, static_cast<underlying_type>(e));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5701 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5702 #endif // JSON_DISABLE_ENUM_SERIALIZATION
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5703
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5704 template<typename BasicJsonType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5705 inline void to_json(BasicJsonType& j, const std::vector<bool>& e)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5706 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5707 external_constructor<value_t::array>::construct(j, e);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5708 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5709
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5710 template < typename BasicJsonType, typename CompatibleArrayType,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5711 enable_if_t < is_compatible_array_type<BasicJsonType,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5712 CompatibleArrayType>::value&&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5713 !is_compatible_object_type<BasicJsonType, CompatibleArrayType>::value&&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5714 !is_compatible_string_type<BasicJsonType, CompatibleArrayType>::value&&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5715 !std::is_same<typename BasicJsonType::binary_t, CompatibleArrayType>::value&&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5716 !is_basic_json<CompatibleArrayType>::value,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5717 int > = 0 >
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5718 inline void to_json(BasicJsonType& j, const CompatibleArrayType& arr)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5719 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5720 external_constructor<value_t::array>::construct(j, arr);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5721 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5722
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5723 template<typename BasicJsonType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5724 inline void to_json(BasicJsonType& j, const typename BasicJsonType::binary_t& bin)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5725 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5726 external_constructor<value_t::binary>::construct(j, bin);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5727 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5728
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5729 template<typename BasicJsonType, typename T,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5730 enable_if_t<std::is_convertible<T, BasicJsonType>::value, int> = 0>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5731 inline void to_json(BasicJsonType& j, const std::valarray<T>& arr)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5732 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5733 external_constructor<value_t::array>::construct(j, std::move(arr));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5734 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5735
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5736 template<typename BasicJsonType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5737 inline void to_json(BasicJsonType& j, typename BasicJsonType::array_t&& arr)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5738 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5739 external_constructor<value_t::array>::construct(j, std::move(arr));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5740 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5741
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5742 template < typename BasicJsonType, typename CompatibleObjectType,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5743 enable_if_t < is_compatible_object_type<BasicJsonType, CompatibleObjectType>::value&& !is_basic_json<CompatibleObjectType>::value, int > = 0 >
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5744 inline void to_json(BasicJsonType& j, const CompatibleObjectType& obj)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5745 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5746 external_constructor<value_t::object>::construct(j, obj);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5747 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5748
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5749 template<typename BasicJsonType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5750 inline void to_json(BasicJsonType& j, typename BasicJsonType::object_t&& obj)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5751 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5752 external_constructor<value_t::object>::construct(j, std::move(obj));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5753 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5754
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5755 template <
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5756 typename BasicJsonType, typename T, std::size_t N,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5757 enable_if_t < !std::is_constructible<typename BasicJsonType::string_t,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5758 const T(&)[N]>::value, // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5759 int > = 0 >
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5760 inline void to_json(BasicJsonType& j, const T(&arr)[N]) // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5761 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5762 external_constructor<value_t::array>::construct(j, arr);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5763 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5764
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5765 template < typename BasicJsonType, typename T1, typename T2, enable_if_t < std::is_constructible<BasicJsonType, T1>::value&& std::is_constructible<BasicJsonType, T2>::value, int > = 0 >
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5766 inline void to_json(BasicJsonType& j, const std::pair<T1, T2>& p)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5767 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5768 j = { p.first, p.second };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5769 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5770
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5771 // for https://github.com/nlohmann/json/pull/1134
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5772 template<typename BasicJsonType, typename T,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5773 enable_if_t<std::is_same<T, iteration_proxy_value<typename BasicJsonType::iterator>>::value, int> = 0>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5774 inline void to_json(BasicJsonType& j, const T& b)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5775 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5776 j = { {b.key(), b.value()} };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5777 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5778
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5779 template<typename BasicJsonType, typename Tuple, std::size_t... Idx>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5780 inline void to_json_tuple_impl(BasicJsonType& j, const Tuple& t, index_sequence<Idx...> /*unused*/)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5781 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5782 j = { std::get<Idx>(t)... };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5783 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5784
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5785 template<typename BasicJsonType, typename T, enable_if_t<is_constructible_tuple<BasicJsonType, T>::value, int > = 0>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5786 inline void to_json(BasicJsonType& j, const T& t)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5787 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5788 to_json_tuple_impl(j, t, make_index_sequence<std::tuple_size<T>::value> {});
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5789 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5790
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5791 #if JSON_HAS_FILESYSTEM || JSON_HAS_EXPERIMENTAL_FILESYSTEM
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5792 template<typename BasicJsonType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5793 inline void to_json(BasicJsonType& j, const std_fs::path& p)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5794 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5795 j = p.string();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5796 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5797 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5798
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5799 struct to_json_fn
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5800 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5801 template<typename BasicJsonType, typename T>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5802 auto operator()(BasicJsonType& j, T&& val) const noexcept(noexcept(to_json(j, std::forward<T>(val))))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5803 -> decltype(to_json(j, std::forward<T>(val)), void())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5804 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5805 return to_json(j, std::forward<T>(val));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5806 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5807 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5808 } // namespace detail
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5809
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5810 #ifndef JSON_HAS_CPP_17
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5811 /// namespace to hold default `to_json` function
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5812 /// to see why this is required:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5813 /// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4381.html
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5814 namespace // NOLINT(cert-dcl59-cpp,fuchsia-header-anon-namespaces,google-build-namespaces)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5815 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5816 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5817 JSON_INLINE_VARIABLE constexpr const auto& to_json = // NOLINT(misc-definitions-in-headers)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5818 detail::static_const<detail::to_json_fn>::value;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5819 #ifndef JSON_HAS_CPP_17
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5820 } // namespace
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5821 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5822
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5823 NLOHMANN_JSON_NAMESPACE_END
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5824
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5825 // #include <nlohmann/detail/meta/identity_tag.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5826
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5827
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5828 NLOHMANN_JSON_NAMESPACE_BEGIN
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5829
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5830 /// @sa https://json.nlohmann.me/api/adl_serializer/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5831 template<typename ValueType, typename>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5832 struct adl_serializer
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5833 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5834 /// @brief convert a JSON value to any value type
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5835 /// @sa https://json.nlohmann.me/api/adl_serializer/from_json/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5836 template<typename BasicJsonType, typename TargetType = ValueType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5837 static auto from_json(BasicJsonType && j, TargetType& val) noexcept(
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5838 noexcept(::nlohmann::from_json(std::forward<BasicJsonType>(j), val)))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5839 -> decltype(::nlohmann::from_json(std::forward<BasicJsonType>(j), val), void())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5840 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5841 ::nlohmann::from_json(std::forward<BasicJsonType>(j), val);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5842 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5843
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5844 /// @brief convert a JSON value to any value type
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5845 /// @sa https://json.nlohmann.me/api/adl_serializer/from_json/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5846 template<typename BasicJsonType, typename TargetType = ValueType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5847 static auto from_json(BasicJsonType && j) noexcept(
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5848 noexcept(::nlohmann::from_json(std::forward<BasicJsonType>(j), detail::identity_tag<TargetType> {})))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5849 -> decltype(::nlohmann::from_json(std::forward<BasicJsonType>(j), detail::identity_tag<TargetType> {}))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5850 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5851 return ::nlohmann::from_json(std::forward<BasicJsonType>(j), detail::identity_tag<TargetType> {});
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5852 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5853
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5854 /// @brief convert any value type to a JSON value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5855 /// @sa https://json.nlohmann.me/api/adl_serializer/to_json/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5856 template<typename BasicJsonType, typename TargetType = ValueType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5857 static auto to_json(BasicJsonType& j, TargetType && val) noexcept(
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5858 noexcept(::nlohmann::to_json(j, std::forward<TargetType>(val))))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5859 -> decltype(::nlohmann::to_json(j, std::forward<TargetType>(val)), void())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5860 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5861 ::nlohmann::to_json(j, std::forward<TargetType>(val));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5862 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5863 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5864
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5865 NLOHMANN_JSON_NAMESPACE_END
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5866
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5867 // #include <nlohmann/byte_container_with_subtype.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5868 // __ _____ _____ _____
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5869 // __| | __| | | | JSON for Modern C++
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5870 // | | |__ | | | | | | version 3.11.3
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5871 // |_____|_____|_____|_|___| https://github.com/nlohmann/json
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5872 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5873 // SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5874 // SPDX-License-Identifier: MIT
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5875
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5876
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5877
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5878 #include <cstdint> // uint8_t, uint64_t
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5879 #include <tuple> // tie
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5880 #include <utility> // move
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5881
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5882 // #include <nlohmann/detail/abi_macros.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5883
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5884
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5885 NLOHMANN_JSON_NAMESPACE_BEGIN
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5886
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5887 /// @brief an internal type for a backed binary type
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5888 /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5889 template<typename BinaryType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5890 class byte_container_with_subtype : public BinaryType
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5891 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5892 public:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5893 using container_type = BinaryType;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5894 using subtype_type = std::uint64_t;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5895
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5896 /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/byte_container_with_subtype/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5897 byte_container_with_subtype() noexcept(noexcept(container_type()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5898 : container_type()
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5899 {}
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5900
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5901 /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/byte_container_with_subtype/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5902 byte_container_with_subtype(const container_type& b) noexcept(noexcept(container_type(b)))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5903 : container_type(b)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5904 {}
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5905
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5906 /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/byte_container_with_subtype/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5907 byte_container_with_subtype(container_type&& b) noexcept(noexcept(container_type(std::move(b))))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5908 : container_type(std::move(b))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5909 {}
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5910
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5911 /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/byte_container_with_subtype/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5912 byte_container_with_subtype(const container_type& b, subtype_type subtype_) noexcept(noexcept(container_type(b)))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5913 : container_type(b)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5914 , m_subtype(subtype_)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5915 , m_has_subtype(true)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5916 {}
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5917
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5918 /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/byte_container_with_subtype/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5919 byte_container_with_subtype(container_type&& b, subtype_type subtype_) noexcept(noexcept(container_type(std::move(b))))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5920 : container_type(std::move(b))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5921 , m_subtype(subtype_)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5922 , m_has_subtype(true)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5923 {}
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5924
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5925 bool operator==(const byte_container_with_subtype& rhs) const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5926 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5927 return std::tie(static_cast<const BinaryType&>(*this), m_subtype, m_has_subtype) ==
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5928 std::tie(static_cast<const BinaryType&>(rhs), rhs.m_subtype, rhs.m_has_subtype);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5929 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5930
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5931 bool operator!=(const byte_container_with_subtype& rhs) const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5932 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5933 return !(rhs == *this);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5934 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5935
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5936 /// @brief sets the binary subtype
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5937 /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/set_subtype/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5938 void set_subtype(subtype_type subtype_) noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5939 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5940 m_subtype = subtype_;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5941 m_has_subtype = true;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5942 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5943
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5944 /// @brief return the binary subtype
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5945 /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/subtype/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5946 constexpr subtype_type subtype() const noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5947 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5948 return m_has_subtype ? m_subtype : static_cast<subtype_type>(-1);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5949 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5950
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5951 /// @brief return whether the value has a subtype
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5952 /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/has_subtype/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5953 constexpr bool has_subtype() const noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5954 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5955 return m_has_subtype;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5956 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5957
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5958 /// @brief clears the binary subtype
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5959 /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/clear_subtype/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5960 void clear_subtype() noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5961 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5962 m_subtype = 0;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5963 m_has_subtype = false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5964 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5965
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5966 private:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5967 subtype_type m_subtype = 0;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5968 bool m_has_subtype = false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5969 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5970
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5971 NLOHMANN_JSON_NAMESPACE_END
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5972
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5973 // #include <nlohmann/detail/conversions/from_json.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5974
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5975 // #include <nlohmann/detail/conversions/to_json.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5976
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5977 // #include <nlohmann/detail/exceptions.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5978
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5979 // #include <nlohmann/detail/hash.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5980 // __ _____ _____ _____
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5981 // __| | __| | | | JSON for Modern C++
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5982 // | | |__ | | | | | | version 3.11.3
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5983 // |_____|_____|_____|_|___| https://github.com/nlohmann/json
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5984 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5985 // SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5986 // SPDX-License-Identifier: MIT
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5987
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5988
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5989
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5990 #include <cstdint> // uint8_t
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5991 #include <cstddef> // size_t
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5992 #include <functional> // hash
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5993
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5994 // #include <nlohmann/detail/abi_macros.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5995
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5996 // #include <nlohmann/detail/value_t.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5997
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5998
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5999 NLOHMANN_JSON_NAMESPACE_BEGIN
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6000 namespace detail
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6001 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6002
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6003 // boost::hash_combine
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6004 inline std::size_t combine(std::size_t seed, std::size_t h) noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6005 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6006 seed ^= h + 0x9e3779b9 + (seed << 6U) + (seed >> 2U);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6007 return seed;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6008 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6009
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6010 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6011 @brief hash a JSON value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6012
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6013 The hash function tries to rely on std::hash where possible. Furthermore, the
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6014 type of the JSON value is taken into account to have different hash values for
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6015 null, 0, 0U, and false, etc.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6016
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6017 @tparam BasicJsonType basic_json specialization
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6018 @param j JSON value to hash
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6019 @return hash value of j
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6020 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6021 template<typename BasicJsonType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6022 std::size_t hash(const BasicJsonType& j)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6023 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6024 using string_t = typename BasicJsonType::string_t;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6025 using number_integer_t = typename BasicJsonType::number_integer_t;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6026 using number_unsigned_t = typename BasicJsonType::number_unsigned_t;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6027 using number_float_t = typename BasicJsonType::number_float_t;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6028
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6029 const auto type = static_cast<std::size_t>(j.type());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6030 switch (j.type())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6031 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6032 case BasicJsonType::value_t::null:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6033 case BasicJsonType::value_t::discarded:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6034 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6035 return combine(type, 0);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6036 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6037
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6038 case BasicJsonType::value_t::object:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6039 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6040 auto seed = combine(type, j.size());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6041 for (const auto& element : j.items())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6042 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6043 const auto h = std::hash<string_t> {}(element.key());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6044 seed = combine(seed, h);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6045 seed = combine(seed, hash(element.value()));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6046 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6047 return seed;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6048 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6049
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6050 case BasicJsonType::value_t::array:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6051 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6052 auto seed = combine(type, j.size());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6053 for (const auto& element : j)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6054 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6055 seed = combine(seed, hash(element));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6056 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6057 return seed;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6058 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6059
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6060 case BasicJsonType::value_t::string:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6061 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6062 const auto h = std::hash<string_t> {}(j.template get_ref<const string_t&>());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6063 return combine(type, h);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6064 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6065
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6066 case BasicJsonType::value_t::boolean:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6067 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6068 const auto h = std::hash<bool> {}(j.template get<bool>());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6069 return combine(type, h);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6070 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6071
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6072 case BasicJsonType::value_t::number_integer:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6073 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6074 const auto h = std::hash<number_integer_t> {}(j.template get<number_integer_t>());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6075 return combine(type, h);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6076 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6077
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6078 case BasicJsonType::value_t::number_unsigned:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6079 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6080 const auto h = std::hash<number_unsigned_t> {}(j.template get<number_unsigned_t>());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6081 return combine(type, h);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6082 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6083
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6084 case BasicJsonType::value_t::number_float:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6085 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6086 const auto h = std::hash<number_float_t> {}(j.template get<number_float_t>());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6087 return combine(type, h);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6088 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6089
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6090 case BasicJsonType::value_t::binary:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6091 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6092 auto seed = combine(type, j.get_binary().size());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6093 const auto h = std::hash<bool> {}(j.get_binary().has_subtype());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6094 seed = combine(seed, h);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6095 seed = combine(seed, static_cast<std::size_t>(j.get_binary().subtype()));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6096 for (const auto byte : j.get_binary())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6097 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6098 seed = combine(seed, std::hash<std::uint8_t> {}(byte));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6099 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6100 return seed;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6101 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6102
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6103 default: // LCOV_EXCL_LINE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6104 JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6105 return 0; // LCOV_EXCL_LINE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6106 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6107 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6108
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6109 } // namespace detail
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6110 NLOHMANN_JSON_NAMESPACE_END
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6111
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6112 // #include <nlohmann/detail/input/binary_reader.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6113 // __ _____ _____ _____
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6114 // __| | __| | | | JSON for Modern C++
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6115 // | | |__ | | | | | | version 3.11.3
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6116 // |_____|_____|_____|_|___| https://github.com/nlohmann/json
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6117 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6118 // SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6119 // SPDX-License-Identifier: MIT
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6120
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6121
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6122
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6123 #include <algorithm> // generate_n
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6124 #include <array> // array
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6125 #include <cmath> // ldexp
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6126 #include <cstddef> // size_t
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6127 #include <cstdint> // uint8_t, uint16_t, uint32_t, uint64_t
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6128 #include <cstdio> // snprintf
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6129 #include <cstring> // memcpy
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6130 #include <iterator> // back_inserter
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6131 #include <limits> // numeric_limits
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6132 #include <string> // char_traits, string
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6133 #include <utility> // make_pair, move
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6134 #include <vector> // vector
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6135
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6136 // #include <nlohmann/detail/exceptions.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6137
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6138 // #include <nlohmann/detail/input/input_adapters.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6139 // __ _____ _____ _____
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6140 // __| | __| | | | JSON for Modern C++
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6141 // | | |__ | | | | | | version 3.11.3
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6142 // |_____|_____|_____|_|___| https://github.com/nlohmann/json
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6143 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6144 // SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6145 // SPDX-License-Identifier: MIT
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6146
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6147
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6148
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6149 #include <array> // array
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6150 #include <cstddef> // size_t
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6151 #include <cstring> // strlen
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6152 #include <iterator> // begin, end, iterator_traits, random_access_iterator_tag, distance, next
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6153 #include <memory> // shared_ptr, make_shared, addressof
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6154 #include <numeric> // accumulate
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6155 #include <string> // string, char_traits
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6156 #include <type_traits> // enable_if, is_base_of, is_pointer, is_integral, remove_pointer
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6157 #include <utility> // pair, declval
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6158
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6159 #ifndef JSON_NO_IO
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6160 #include <cstdio> // FILE *
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6161 #include <istream> // istream
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6162 #endif // JSON_NO_IO
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6163
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6164 // #include <nlohmann/detail/iterators/iterator_traits.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6165
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6166 // #include <nlohmann/detail/macro_scope.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6167
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6168 // #include <nlohmann/detail/meta/type_traits.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6169
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6170
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6171 NLOHMANN_JSON_NAMESPACE_BEGIN
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6172 namespace detail
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6173 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6174
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6175 /// the supported input formats
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6176 enum class input_format_t { json, cbor, msgpack, ubjson, bson, bjdata };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6177
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6178 ////////////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6179 // input adapters //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6180 ////////////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6181
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6182 #ifndef JSON_NO_IO
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6183 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6184 Input adapter for stdio file access. This adapter read only 1 byte and do not use any
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6185 buffer. This adapter is a very low level adapter.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6186 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6187 class file_input_adapter
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6188 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6189 public:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6190 using char_type = char;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6191
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6192 JSON_HEDLEY_NON_NULL(2)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6193 explicit file_input_adapter(std::FILE* f) noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6194 : m_file(f)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6195 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6196 JSON_ASSERT(m_file != nullptr);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6197 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6198
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6199 // make class move-only
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6200 file_input_adapter(const file_input_adapter&) = delete;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6201 file_input_adapter(file_input_adapter&&) noexcept = default;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6202 file_input_adapter& operator=(const file_input_adapter&) = delete;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6203 file_input_adapter& operator=(file_input_adapter&&) = delete;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6204 ~file_input_adapter() = default;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6205
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6206 std::char_traits<char>::int_type get_character() noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6207 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6208 return std::fgetc(m_file);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6209 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6210
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6211 private:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6212 /// the file pointer to read from
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6213 std::FILE* m_file;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6214 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6215
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6216 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6217 Input adapter for a (caching) istream. Ignores a UFT Byte Order Mark at
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6218 beginning of input. Does not support changing the underlying std::streambuf
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6219 in mid-input. Maintains underlying std::istream and std::streambuf to support
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6220 subsequent use of standard std::istream operations to process any input
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6221 characters following those used in parsing the JSON input. Clears the
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6222 std::istream flags; any input errors (e.g., EOF) will be detected by the first
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6223 subsequent call for input from the std::istream.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6224 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6225 class input_stream_adapter
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6226 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6227 public:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6228 using char_type = char;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6229
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6230 ~input_stream_adapter()
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6231 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6232 // clear stream flags; we use underlying streambuf I/O, do not
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6233 // maintain ifstream flags, except eof
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6234 if (is != nullptr)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6235 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6236 is->clear(is->rdstate() & std::ios::eofbit);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6237 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6238 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6239
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6240 explicit input_stream_adapter(std::istream& i)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6241 : is(&i), sb(i.rdbuf())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6242 {}
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6243
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6244 // delete because of pointer members
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6245 input_stream_adapter(const input_stream_adapter&) = delete;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6246 input_stream_adapter& operator=(input_stream_adapter&) = delete;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6247 input_stream_adapter& operator=(input_stream_adapter&&) = delete;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6248
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6249 input_stream_adapter(input_stream_adapter&& rhs) noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6250 : is(rhs.is), sb(rhs.sb)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6251 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6252 rhs.is = nullptr;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6253 rhs.sb = nullptr;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6254 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6255
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6256 // std::istream/std::streambuf use std::char_traits<char>::to_int_type, to
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6257 // ensure that std::char_traits<char>::eof() and the character 0xFF do not
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6258 // end up as the same value, e.g. 0xFFFFFFFF.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6259 std::char_traits<char>::int_type get_character()
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6260 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6261 auto res = sb->sbumpc();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6262 // set eof manually, as we don't use the istream interface.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6263 if (JSON_HEDLEY_UNLIKELY(res == std::char_traits<char>::eof()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6264 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6265 is->clear(is->rdstate() | std::ios::eofbit);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6266 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6267 return res;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6268 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6269
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6270 private:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6271 /// the associated input stream
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6272 std::istream* is = nullptr;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6273 std::streambuf* sb = nullptr;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6274 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6275 #endif // JSON_NO_IO
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6276
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6277 // General-purpose iterator-based adapter. It might not be as fast as
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6278 // theoretically possible for some containers, but it is extremely versatile.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6279 template<typename IteratorType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6280 class iterator_input_adapter
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6281 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6282 public:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6283 using char_type = typename std::iterator_traits<IteratorType>::value_type;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6284
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6285 iterator_input_adapter(IteratorType first, IteratorType last)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6286 : current(std::move(first)), end(std::move(last))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6287 {}
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6288
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6289 typename char_traits<char_type>::int_type get_character()
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6290 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6291 if (JSON_HEDLEY_LIKELY(current != end))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6292 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6293 auto result = char_traits<char_type>::to_int_type(*current);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6294 std::advance(current, 1);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6295 return result;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6296 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6297
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6298 return char_traits<char_type>::eof();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6299 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6300
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6301 private:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6302 IteratorType current;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6303 IteratorType end;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6304
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6305 template<typename BaseInputAdapter, size_t T>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6306 friend struct wide_string_input_helper;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6307
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6308 bool empty() const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6309 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6310 return current == end;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6311 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6312 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6313
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6314 template<typename BaseInputAdapter, size_t T>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6315 struct wide_string_input_helper;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6316
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6317 template<typename BaseInputAdapter>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6318 struct wide_string_input_helper<BaseInputAdapter, 4>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6319 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6320 // UTF-32
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6321 static void fill_buffer(BaseInputAdapter& input,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6322 std::array<std::char_traits<char>::int_type, 4>& utf8_bytes,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6323 size_t& utf8_bytes_index,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6324 size_t& utf8_bytes_filled)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6325 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6326 utf8_bytes_index = 0;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6327
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6328 if (JSON_HEDLEY_UNLIKELY(input.empty()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6329 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6330 utf8_bytes[0] = std::char_traits<char>::eof();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6331 utf8_bytes_filled = 1;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6332 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6333 else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6334 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6335 // get the current character
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6336 const auto wc = input.get_character();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6337
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6338 // UTF-32 to UTF-8 encoding
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6339 if (wc < 0x80)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6340 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6341 utf8_bytes[0] = static_cast<std::char_traits<char>::int_type>(wc);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6342 utf8_bytes_filled = 1;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6343 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6344 else if (wc <= 0x7FF)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6345 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6346 utf8_bytes[0] = static_cast<std::char_traits<char>::int_type>(0xC0u | ((static_cast<unsigned int>(wc) >> 6u) & 0x1Fu));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6347 utf8_bytes[1] = static_cast<std::char_traits<char>::int_type>(0x80u | (static_cast<unsigned int>(wc) & 0x3Fu));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6348 utf8_bytes_filled = 2;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6349 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6350 else if (wc <= 0xFFFF)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6351 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6352 utf8_bytes[0] = static_cast<std::char_traits<char>::int_type>(0xE0u | ((static_cast<unsigned int>(wc) >> 12u) & 0x0Fu));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6353 utf8_bytes[1] = static_cast<std::char_traits<char>::int_type>(0x80u | ((static_cast<unsigned int>(wc) >> 6u) & 0x3Fu));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6354 utf8_bytes[2] = static_cast<std::char_traits<char>::int_type>(0x80u | (static_cast<unsigned int>(wc) & 0x3Fu));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6355 utf8_bytes_filled = 3;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6356 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6357 else if (wc <= 0x10FFFF)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6358 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6359 utf8_bytes[0] = static_cast<std::char_traits<char>::int_type>(0xF0u | ((static_cast<unsigned int>(wc) >> 18u) & 0x07u));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6360 utf8_bytes[1] = static_cast<std::char_traits<char>::int_type>(0x80u | ((static_cast<unsigned int>(wc) >> 12u) & 0x3Fu));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6361 utf8_bytes[2] = static_cast<std::char_traits<char>::int_type>(0x80u | ((static_cast<unsigned int>(wc) >> 6u) & 0x3Fu));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6362 utf8_bytes[3] = static_cast<std::char_traits<char>::int_type>(0x80u | (static_cast<unsigned int>(wc) & 0x3Fu));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6363 utf8_bytes_filled = 4;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6364 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6365 else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6366 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6367 // unknown character
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6368 utf8_bytes[0] = static_cast<std::char_traits<char>::int_type>(wc);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6369 utf8_bytes_filled = 1;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6370 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6371 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6372 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6373 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6374
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6375 template<typename BaseInputAdapter>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6376 struct wide_string_input_helper<BaseInputAdapter, 2>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6377 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6378 // UTF-16
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6379 static void fill_buffer(BaseInputAdapter& input,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6380 std::array<std::char_traits<char>::int_type, 4>& utf8_bytes,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6381 size_t& utf8_bytes_index,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6382 size_t& utf8_bytes_filled)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6383 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6384 utf8_bytes_index = 0;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6385
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6386 if (JSON_HEDLEY_UNLIKELY(input.empty()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6387 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6388 utf8_bytes[0] = std::char_traits<char>::eof();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6389 utf8_bytes_filled = 1;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6390 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6391 else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6392 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6393 // get the current character
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6394 const auto wc = input.get_character();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6395
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6396 // UTF-16 to UTF-8 encoding
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6397 if (wc < 0x80)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6398 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6399 utf8_bytes[0] = static_cast<std::char_traits<char>::int_type>(wc);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6400 utf8_bytes_filled = 1;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6401 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6402 else if (wc <= 0x7FF)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6403 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6404 utf8_bytes[0] = static_cast<std::char_traits<char>::int_type>(0xC0u | ((static_cast<unsigned int>(wc) >> 6u)));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6405 utf8_bytes[1] = static_cast<std::char_traits<char>::int_type>(0x80u | (static_cast<unsigned int>(wc) & 0x3Fu));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6406 utf8_bytes_filled = 2;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6407 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6408 else if (0xD800 > wc || wc >= 0xE000)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6409 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6410 utf8_bytes[0] = static_cast<std::char_traits<char>::int_type>(0xE0u | ((static_cast<unsigned int>(wc) >> 12u)));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6411 utf8_bytes[1] = static_cast<std::char_traits<char>::int_type>(0x80u | ((static_cast<unsigned int>(wc) >> 6u) & 0x3Fu));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6412 utf8_bytes[2] = static_cast<std::char_traits<char>::int_type>(0x80u | (static_cast<unsigned int>(wc) & 0x3Fu));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6413 utf8_bytes_filled = 3;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6414 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6415 else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6416 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6417 if (JSON_HEDLEY_UNLIKELY(!input.empty()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6418 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6419 const auto wc2 = static_cast<unsigned int>(input.get_character());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6420 const auto charcode = 0x10000u + (((static_cast<unsigned int>(wc) & 0x3FFu) << 10u) | (wc2 & 0x3FFu));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6421 utf8_bytes[0] = static_cast<std::char_traits<char>::int_type>(0xF0u | (charcode >> 18u));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6422 utf8_bytes[1] = static_cast<std::char_traits<char>::int_type>(0x80u | ((charcode >> 12u) & 0x3Fu));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6423 utf8_bytes[2] = static_cast<std::char_traits<char>::int_type>(0x80u | ((charcode >> 6u) & 0x3Fu));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6424 utf8_bytes[3] = static_cast<std::char_traits<char>::int_type>(0x80u | (charcode & 0x3Fu));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6425 utf8_bytes_filled = 4;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6426 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6427 else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6428 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6429 utf8_bytes[0] = static_cast<std::char_traits<char>::int_type>(wc);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6430 utf8_bytes_filled = 1;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6431 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6432 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6433 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6434 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6435 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6436
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6437 // Wraps another input adapter to convert wide character types into individual bytes.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6438 template<typename BaseInputAdapter, typename WideCharType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6439 class wide_string_input_adapter
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6440 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6441 public:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6442 using char_type = char;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6443
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6444 wide_string_input_adapter(BaseInputAdapter base)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6445 : base_adapter(base) {}
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6446
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6447 typename std::char_traits<char>::int_type get_character() noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6448 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6449 // check if buffer needs to be filled
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6450 if (utf8_bytes_index == utf8_bytes_filled)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6451 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6452 fill_buffer<sizeof(WideCharType)>();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6453
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6454 JSON_ASSERT(utf8_bytes_filled > 0);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6455 JSON_ASSERT(utf8_bytes_index == 0);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6456 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6457
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6458 // use buffer
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6459 JSON_ASSERT(utf8_bytes_filled > 0);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6460 JSON_ASSERT(utf8_bytes_index < utf8_bytes_filled);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6461 return utf8_bytes[utf8_bytes_index++];
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6462 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6463
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6464 private:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6465 BaseInputAdapter base_adapter;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6466
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6467 template<size_t T>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6468 void fill_buffer()
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6469 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6470 wide_string_input_helper<BaseInputAdapter, T>::fill_buffer(base_adapter, utf8_bytes, utf8_bytes_index, utf8_bytes_filled);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6471 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6472
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6473 /// a buffer for UTF-8 bytes
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6474 std::array<std::char_traits<char>::int_type, 4> utf8_bytes = {{0, 0, 0, 0}};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6475
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6476 /// index to the utf8_codes array for the next valid byte
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6477 std::size_t utf8_bytes_index = 0;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6478 /// number of valid bytes in the utf8_codes array
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6479 std::size_t utf8_bytes_filled = 0;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6480 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6481
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6482 template<typename IteratorType, typename Enable = void>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6483 struct iterator_input_adapter_factory
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6484 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6485 using iterator_type = IteratorType;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6486 using char_type = typename std::iterator_traits<iterator_type>::value_type;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6487 using adapter_type = iterator_input_adapter<iterator_type>;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6488
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6489 static adapter_type create(IteratorType first, IteratorType last)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6490 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6491 return adapter_type(std::move(first), std::move(last));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6492 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6493 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6494
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6495 template<typename T>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6496 struct is_iterator_of_multibyte
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6497 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6498 using value_type = typename std::iterator_traits<T>::value_type;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6499 enum
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6500 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6501 value = sizeof(value_type) > 1
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6502 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6503 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6504
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6505 template<typename IteratorType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6506 struct iterator_input_adapter_factory<IteratorType, enable_if_t<is_iterator_of_multibyte<IteratorType>::value>>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6507 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6508 using iterator_type = IteratorType;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6509 using char_type = typename std::iterator_traits<iterator_type>::value_type;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6510 using base_adapter_type = iterator_input_adapter<iterator_type>;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6511 using adapter_type = wide_string_input_adapter<base_adapter_type, char_type>;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6512
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6513 static adapter_type create(IteratorType first, IteratorType last)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6514 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6515 return adapter_type(base_adapter_type(std::move(first), std::move(last)));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6516 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6517 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6518
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6519 // General purpose iterator-based input
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6520 template<typename IteratorType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6521 typename iterator_input_adapter_factory<IteratorType>::adapter_type input_adapter(IteratorType first, IteratorType last)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6522 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6523 using factory_type = iterator_input_adapter_factory<IteratorType>;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6524 return factory_type::create(first, last);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6525 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6526
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6527 // Convenience shorthand from container to iterator
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6528 // Enables ADL on begin(container) and end(container)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6529 // Encloses the using declarations in namespace for not to leak them to outside scope
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6530
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6531 namespace container_input_adapter_factory_impl
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6532 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6533
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6534 using std::begin;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6535 using std::end;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6536
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6537 template<typename ContainerType, typename Enable = void>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6538 struct container_input_adapter_factory {};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6539
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6540 template<typename ContainerType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6541 struct container_input_adapter_factory< ContainerType,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6542 void_t<decltype(begin(std::declval<ContainerType>()), end(std::declval<ContainerType>()))>>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6543 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6544 using adapter_type = decltype(input_adapter(begin(std::declval<ContainerType>()), end(std::declval<ContainerType>())));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6545
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6546 static adapter_type create(const ContainerType& container)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6547 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6548 return input_adapter(begin(container), end(container));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6549 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6550 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6551
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6552 } // namespace container_input_adapter_factory_impl
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6553
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6554 template<typename ContainerType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6555 typename container_input_adapter_factory_impl::container_input_adapter_factory<ContainerType>::adapter_type input_adapter(const ContainerType& container)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6556 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6557 return container_input_adapter_factory_impl::container_input_adapter_factory<ContainerType>::create(container);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6558 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6559
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6560 #ifndef JSON_NO_IO
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6561 // Special cases with fast paths
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6562 inline file_input_adapter input_adapter(std::FILE* file)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6563 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6564 return file_input_adapter(file);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6565 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6566
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6567 inline input_stream_adapter input_adapter(std::istream& stream)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6568 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6569 return input_stream_adapter(stream);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6570 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6571
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6572 inline input_stream_adapter input_adapter(std::istream&& stream)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6573 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6574 return input_stream_adapter(stream);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6575 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6576 #endif // JSON_NO_IO
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6577
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6578 using contiguous_bytes_input_adapter = decltype(input_adapter(std::declval<const char*>(), std::declval<const char*>()));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6579
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6580 // Null-delimited strings, and the like.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6581 template < typename CharT,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6582 typename std::enable_if <
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6583 std::is_pointer<CharT>::value&&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6584 !std::is_array<CharT>::value&&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6585 std::is_integral<typename std::remove_pointer<CharT>::type>::value&&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6586 sizeof(typename std::remove_pointer<CharT>::type) == 1,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6587 int >::type = 0 >
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6588 contiguous_bytes_input_adapter input_adapter(CharT b)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6589 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6590 auto length = std::strlen(reinterpret_cast<const char*>(b));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6591 const auto* ptr = reinterpret_cast<const char*>(b);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6592 return input_adapter(ptr, ptr + length);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6593 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6594
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6595 template<typename T, std::size_t N>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6596 auto input_adapter(T (&array)[N]) -> decltype(input_adapter(array, array + N)) // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6597 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6598 return input_adapter(array, array + N);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6599 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6600
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6601 // This class only handles inputs of input_buffer_adapter type.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6602 // It's required so that expressions like {ptr, len} can be implicitly cast
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6603 // to the correct adapter.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6604 class span_input_adapter
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6605 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6606 public:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6607 template < typename CharT,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6608 typename std::enable_if <
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6609 std::is_pointer<CharT>::value&&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6610 std::is_integral<typename std::remove_pointer<CharT>::type>::value&&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6611 sizeof(typename std::remove_pointer<CharT>::type) == 1,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6612 int >::type = 0 >
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6613 span_input_adapter(CharT b, std::size_t l)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6614 : ia(reinterpret_cast<const char*>(b), reinterpret_cast<const char*>(b) + l) {}
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6615
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6616 template<class IteratorType,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6617 typename std::enable_if<
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6618 std::is_same<typename iterator_traits<IteratorType>::iterator_category, std::random_access_iterator_tag>::value,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6619 int>::type = 0>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6620 span_input_adapter(IteratorType first, IteratorType last)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6621 : ia(input_adapter(first, last)) {}
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6622
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6623 contiguous_bytes_input_adapter&& get()
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6624 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6625 return std::move(ia); // NOLINT(hicpp-move-const-arg,performance-move-const-arg)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6626 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6627
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6628 private:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6629 contiguous_bytes_input_adapter ia;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6630 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6631
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6632 } // namespace detail
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6633 NLOHMANN_JSON_NAMESPACE_END
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6634
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6635 // #include <nlohmann/detail/input/json_sax.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6636 // __ _____ _____ _____
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6637 // __| | __| | | | JSON for Modern C++
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6638 // | | |__ | | | | | | version 3.11.3
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6639 // |_____|_____|_____|_|___| https://github.com/nlohmann/json
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6640 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6641 // SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6642 // SPDX-License-Identifier: MIT
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6643
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6644
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6645
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6646 #include <cstddef>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6647 #include <string> // string
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6648 #include <utility> // move
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6649 #include <vector> // vector
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6650
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6651 // #include <nlohmann/detail/exceptions.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6652
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6653 // #include <nlohmann/detail/macro_scope.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6654
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6655 // #include <nlohmann/detail/string_concat.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6656
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6657
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6658 NLOHMANN_JSON_NAMESPACE_BEGIN
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6659
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6660 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6661 @brief SAX interface
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6662
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6663 This class describes the SAX interface used by @ref nlohmann::json::sax_parse.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6664 Each function is called in different situations while the input is parsed. The
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6665 boolean return value informs the parser whether to continue processing the
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6666 input.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6667 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6668 template<typename BasicJsonType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6669 struct json_sax
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6670 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6671 using number_integer_t = typename BasicJsonType::number_integer_t;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6672 using number_unsigned_t = typename BasicJsonType::number_unsigned_t;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6673 using number_float_t = typename BasicJsonType::number_float_t;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6674 using string_t = typename BasicJsonType::string_t;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6675 using binary_t = typename BasicJsonType::binary_t;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6676
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6677 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6678 @brief a null value was read
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6679 @return whether parsing should proceed
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6680 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6681 virtual bool null() = 0;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6682
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6683 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6684 @brief a boolean value was read
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6685 @param[in] val boolean value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6686 @return whether parsing should proceed
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6687 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6688 virtual bool boolean(bool val) = 0;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6689
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6690 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6691 @brief an integer number was read
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6692 @param[in] val integer value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6693 @return whether parsing should proceed
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6694 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6695 virtual bool number_integer(number_integer_t val) = 0;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6696
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6697 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6698 @brief an unsigned integer number was read
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6699 @param[in] val unsigned integer value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6700 @return whether parsing should proceed
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6701 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6702 virtual bool number_unsigned(number_unsigned_t val) = 0;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6703
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6704 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6705 @brief a floating-point number was read
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6706 @param[in] val floating-point value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6707 @param[in] s raw token value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6708 @return whether parsing should proceed
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6709 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6710 virtual bool number_float(number_float_t val, const string_t& s) = 0;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6711
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6712 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6713 @brief a string value was read
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6714 @param[in] val string value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6715 @return whether parsing should proceed
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6716 @note It is safe to move the passed string value.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6717 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6718 virtual bool string(string_t& val) = 0;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6719
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6720 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6721 @brief a binary value was read
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6722 @param[in] val binary value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6723 @return whether parsing should proceed
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6724 @note It is safe to move the passed binary value.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6725 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6726 virtual bool binary(binary_t& val) = 0;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6727
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6728 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6729 @brief the beginning of an object was read
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6730 @param[in] elements number of object elements or -1 if unknown
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6731 @return whether parsing should proceed
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6732 @note binary formats may report the number of elements
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6733 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6734 virtual bool start_object(std::size_t elements) = 0;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6735
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6736 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6737 @brief an object key was read
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6738 @param[in] val object key
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6739 @return whether parsing should proceed
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6740 @note It is safe to move the passed string.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6741 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6742 virtual bool key(string_t& val) = 0;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6743
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6744 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6745 @brief the end of an object was read
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6746 @return whether parsing should proceed
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6747 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6748 virtual bool end_object() = 0;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6749
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6750 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6751 @brief the beginning of an array was read
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6752 @param[in] elements number of array elements or -1 if unknown
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6753 @return whether parsing should proceed
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6754 @note binary formats may report the number of elements
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6755 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6756 virtual bool start_array(std::size_t elements) = 0;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6757
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6758 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6759 @brief the end of an array was read
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6760 @return whether parsing should proceed
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6761 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6762 virtual bool end_array() = 0;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6763
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6764 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6765 @brief a parse error occurred
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6766 @param[in] position the position in the input where the error occurs
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6767 @param[in] last_token the last read token
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6768 @param[in] ex an exception object describing the error
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6769 @return whether parsing should proceed (must return false)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6770 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6771 virtual bool parse_error(std::size_t position,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6772 const std::string& last_token,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6773 const detail::exception& ex) = 0;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6774
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6775 json_sax() = default;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6776 json_sax(const json_sax&) = default;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6777 json_sax(json_sax&&) noexcept = default;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6778 json_sax& operator=(const json_sax&) = default;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6779 json_sax& operator=(json_sax&&) noexcept = default;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6780 virtual ~json_sax() = default;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6781 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6782
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6783 namespace detail
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6784 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6785 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6786 @brief SAX implementation to create a JSON value from SAX events
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6787
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6788 This class implements the @ref json_sax interface and processes the SAX events
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6789 to create a JSON value which makes it basically a DOM parser. The structure or
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6790 hierarchy of the JSON value is managed by the stack `ref_stack` which contains
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6791 a pointer to the respective array or object for each recursion depth.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6792
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6793 After successful parsing, the value that is passed by reference to the
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6794 constructor contains the parsed value.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6795
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6796 @tparam BasicJsonType the JSON type
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6797 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6798 template<typename BasicJsonType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6799 class json_sax_dom_parser
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6800 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6801 public:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6802 using number_integer_t = typename BasicJsonType::number_integer_t;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6803 using number_unsigned_t = typename BasicJsonType::number_unsigned_t;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6804 using number_float_t = typename BasicJsonType::number_float_t;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6805 using string_t = typename BasicJsonType::string_t;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6806 using binary_t = typename BasicJsonType::binary_t;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6807
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6808 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6809 @param[in,out] r reference to a JSON value that is manipulated while
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6810 parsing
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6811 @param[in] allow_exceptions_ whether parse errors yield exceptions
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6812 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6813 explicit json_sax_dom_parser(BasicJsonType& r, const bool allow_exceptions_ = true)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6814 : root(r), allow_exceptions(allow_exceptions_)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6815 {}
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6816
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6817 // make class move-only
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6818 json_sax_dom_parser(const json_sax_dom_parser&) = delete;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6819 json_sax_dom_parser(json_sax_dom_parser&&) = default; // NOLINT(hicpp-noexcept-move,performance-noexcept-move-constructor)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6820 json_sax_dom_parser& operator=(const json_sax_dom_parser&) = delete;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6821 json_sax_dom_parser& operator=(json_sax_dom_parser&&) = default; // NOLINT(hicpp-noexcept-move,performance-noexcept-move-constructor)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6822 ~json_sax_dom_parser() = default;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6823
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6824 bool null()
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6825 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6826 handle_value(nullptr);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6827 return true;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6828 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6829
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6830 bool boolean(bool val)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6831 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6832 handle_value(val);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6833 return true;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6834 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6835
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6836 bool number_integer(number_integer_t val)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6837 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6838 handle_value(val);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6839 return true;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6840 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6841
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6842 bool number_unsigned(number_unsigned_t val)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6843 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6844 handle_value(val);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6845 return true;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6846 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6847
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6848 bool number_float(number_float_t val, const string_t& /*unused*/)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6849 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6850 handle_value(val);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6851 return true;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6852 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6853
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6854 bool string(string_t& val)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6855 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6856 handle_value(val);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6857 return true;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6858 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6859
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6860 bool binary(binary_t& val)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6861 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6862 handle_value(std::move(val));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6863 return true;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6864 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6865
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6866 bool start_object(std::size_t len)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6867 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6868 ref_stack.push_back(handle_value(BasicJsonType::value_t::object));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6869
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6870 if (JSON_HEDLEY_UNLIKELY(len != static_cast<std::size_t>(-1) && len > ref_stack.back()->max_size()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6871 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6872 JSON_THROW(out_of_range::create(408, concat("excessive object size: ", std::to_string(len)), ref_stack.back()));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6873 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6874
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6875 return true;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6876 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6877
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6878 bool key(string_t& val)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6879 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6880 JSON_ASSERT(!ref_stack.empty());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6881 JSON_ASSERT(ref_stack.back()->is_object());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6882
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6883 // add null at given key and store the reference for later
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6884 object_element = &(ref_stack.back()->m_data.m_value.object->operator[](val));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6885 return true;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6886 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6887
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6888 bool end_object()
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6889 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6890 JSON_ASSERT(!ref_stack.empty());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6891 JSON_ASSERT(ref_stack.back()->is_object());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6892
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6893 ref_stack.back()->set_parents();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6894 ref_stack.pop_back();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6895 return true;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6896 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6897
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6898 bool start_array(std::size_t len)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6899 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6900 ref_stack.push_back(handle_value(BasicJsonType::value_t::array));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6901
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6902 if (JSON_HEDLEY_UNLIKELY(len != static_cast<std::size_t>(-1) && len > ref_stack.back()->max_size()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6903 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6904 JSON_THROW(out_of_range::create(408, concat("excessive array size: ", std::to_string(len)), ref_stack.back()));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6905 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6906
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6907 return true;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6908 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6909
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6910 bool end_array()
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6911 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6912 JSON_ASSERT(!ref_stack.empty());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6913 JSON_ASSERT(ref_stack.back()->is_array());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6914
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6915 ref_stack.back()->set_parents();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6916 ref_stack.pop_back();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6917 return true;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6918 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6919
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6920 template<class Exception>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6921 bool parse_error(std::size_t /*unused*/, const std::string& /*unused*/,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6922 const Exception& ex)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6923 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6924 errored = true;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6925 static_cast<void>(ex);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6926 if (allow_exceptions)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6927 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6928 JSON_THROW(ex);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6929 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6930 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6931 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6932
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6933 constexpr bool is_errored() const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6934 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6935 return errored;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6936 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6937
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6938 private:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6939 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6940 @invariant If the ref stack is empty, then the passed value will be the new
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6941 root.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6942 @invariant If the ref stack contains a value, then it is an array or an
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6943 object to which we can add elements
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6944 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6945 template<typename Value>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6946 JSON_HEDLEY_RETURNS_NON_NULL
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6947 BasicJsonType* handle_value(Value&& v)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6948 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6949 if (ref_stack.empty())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6950 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6951 root = BasicJsonType(std::forward<Value>(v));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6952 return &root;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6953 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6954
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6955 JSON_ASSERT(ref_stack.back()->is_array() || ref_stack.back()->is_object());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6956
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6957 if (ref_stack.back()->is_array())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6958 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6959 ref_stack.back()->m_data.m_value.array->emplace_back(std::forward<Value>(v));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6960 return &(ref_stack.back()->m_data.m_value.array->back());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6961 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6962
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6963 JSON_ASSERT(ref_stack.back()->is_object());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6964 JSON_ASSERT(object_element);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6965 *object_element = BasicJsonType(std::forward<Value>(v));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6966 return object_element;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6967 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6968
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6969 /// the parsed JSON value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6970 BasicJsonType& root;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6971 /// stack to model hierarchy of values
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6972 std::vector<BasicJsonType*> ref_stack {};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6973 /// helper to hold the reference for the next object element
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6974 BasicJsonType* object_element = nullptr;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6975 /// whether a syntax error occurred
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6976 bool errored = false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6977 /// whether to throw exceptions in case of errors
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6978 const bool allow_exceptions = true;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6979 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6980
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6981 template<typename BasicJsonType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6982 class json_sax_dom_callback_parser
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6983 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6984 public:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6985 using number_integer_t = typename BasicJsonType::number_integer_t;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6986 using number_unsigned_t = typename BasicJsonType::number_unsigned_t;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6987 using number_float_t = typename BasicJsonType::number_float_t;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6988 using string_t = typename BasicJsonType::string_t;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6989 using binary_t = typename BasicJsonType::binary_t;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6990 using parser_callback_t = typename BasicJsonType::parser_callback_t;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6991 using parse_event_t = typename BasicJsonType::parse_event_t;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6992
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6993 json_sax_dom_callback_parser(BasicJsonType& r,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6994 const parser_callback_t cb,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6995 const bool allow_exceptions_ = true)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6996 : root(r), callback(cb), allow_exceptions(allow_exceptions_)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6997 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6998 keep_stack.push_back(true);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6999 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7000
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7001 // make class move-only
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7002 json_sax_dom_callback_parser(const json_sax_dom_callback_parser&) = delete;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7003 json_sax_dom_callback_parser(json_sax_dom_callback_parser&&) = default; // NOLINT(hicpp-noexcept-move,performance-noexcept-move-constructor)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7004 json_sax_dom_callback_parser& operator=(const json_sax_dom_callback_parser&) = delete;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7005 json_sax_dom_callback_parser& operator=(json_sax_dom_callback_parser&&) = default; // NOLINT(hicpp-noexcept-move,performance-noexcept-move-constructor)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7006 ~json_sax_dom_callback_parser() = default;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7007
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7008 bool null()
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7009 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7010 handle_value(nullptr);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7011 return true;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7012 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7013
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7014 bool boolean(bool val)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7015 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7016 handle_value(val);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7017 return true;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7018 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7019
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7020 bool number_integer(number_integer_t val)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7021 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7022 handle_value(val);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7023 return true;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7024 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7025
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7026 bool number_unsigned(number_unsigned_t val)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7027 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7028 handle_value(val);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7029 return true;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7030 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7031
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7032 bool number_float(number_float_t val, const string_t& /*unused*/)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7033 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7034 handle_value(val);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7035 return true;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7036 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7037
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7038 bool string(string_t& val)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7039 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7040 handle_value(val);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7041 return true;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7042 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7043
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7044 bool binary(binary_t& val)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7045 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7046 handle_value(std::move(val));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7047 return true;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7048 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7049
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7050 bool start_object(std::size_t len)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7051 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7052 // check callback for object start
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7053 const bool keep = callback(static_cast<int>(ref_stack.size()), parse_event_t::object_start, discarded);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7054 keep_stack.push_back(keep);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7055
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7056 auto val = handle_value(BasicJsonType::value_t::object, true);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7057 ref_stack.push_back(val.second);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7058
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7059 // check object limit
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7060 if (ref_stack.back() && JSON_HEDLEY_UNLIKELY(len != static_cast<std::size_t>(-1) && len > ref_stack.back()->max_size()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7061 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7062 JSON_THROW(out_of_range::create(408, concat("excessive object size: ", std::to_string(len)), ref_stack.back()));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7063 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7064
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7065 return true;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7066 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7067
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7068 bool key(string_t& val)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7069 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7070 BasicJsonType k = BasicJsonType(val);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7071
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7072 // check callback for key
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7073 const bool keep = callback(static_cast<int>(ref_stack.size()), parse_event_t::key, k);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7074 key_keep_stack.push_back(keep);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7075
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7076 // add discarded value at given key and store the reference for later
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7077 if (keep && ref_stack.back())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7078 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7079 object_element = &(ref_stack.back()->m_data.m_value.object->operator[](val) = discarded);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7080 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7081
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7082 return true;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7083 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7084
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7085 bool end_object()
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7086 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7087 if (ref_stack.back())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7088 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7089 if (!callback(static_cast<int>(ref_stack.size()) - 1, parse_event_t::object_end, *ref_stack.back()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7090 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7091 // discard object
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7092 *ref_stack.back() = discarded;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7093 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7094 else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7095 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7096 ref_stack.back()->set_parents();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7097 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7098 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7099
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7100 JSON_ASSERT(!ref_stack.empty());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7101 JSON_ASSERT(!keep_stack.empty());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7102 ref_stack.pop_back();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7103 keep_stack.pop_back();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7104
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7105 if (!ref_stack.empty() && ref_stack.back() && ref_stack.back()->is_structured())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7106 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7107 // remove discarded value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7108 for (auto it = ref_stack.back()->begin(); it != ref_stack.back()->end(); ++it)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7109 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7110 if (it->is_discarded())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7111 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7112 ref_stack.back()->erase(it);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7113 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7114 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7115 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7116 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7117
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7118 return true;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7119 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7120
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7121 bool start_array(std::size_t len)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7122 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7123 const bool keep = callback(static_cast<int>(ref_stack.size()), parse_event_t::array_start, discarded);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7124 keep_stack.push_back(keep);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7125
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7126 auto val = handle_value(BasicJsonType::value_t::array, true);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7127 ref_stack.push_back(val.second);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7128
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7129 // check array limit
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7130 if (ref_stack.back() && JSON_HEDLEY_UNLIKELY(len != static_cast<std::size_t>(-1) && len > ref_stack.back()->max_size()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7131 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7132 JSON_THROW(out_of_range::create(408, concat("excessive array size: ", std::to_string(len)), ref_stack.back()));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7133 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7134
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7135 return true;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7136 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7137
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7138 bool end_array()
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7139 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7140 bool keep = true;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7141
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7142 if (ref_stack.back())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7143 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7144 keep = callback(static_cast<int>(ref_stack.size()) - 1, parse_event_t::array_end, *ref_stack.back());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7145 if (keep)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7146 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7147 ref_stack.back()->set_parents();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7148 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7149 else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7150 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7151 // discard array
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7152 *ref_stack.back() = discarded;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7153 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7154 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7155
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7156 JSON_ASSERT(!ref_stack.empty());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7157 JSON_ASSERT(!keep_stack.empty());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7158 ref_stack.pop_back();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7159 keep_stack.pop_back();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7160
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7161 // remove discarded value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7162 if (!keep && !ref_stack.empty() && ref_stack.back()->is_array())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7163 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7164 ref_stack.back()->m_data.m_value.array->pop_back();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7165 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7166
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7167 return true;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7168 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7169
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7170 template<class Exception>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7171 bool parse_error(std::size_t /*unused*/, const std::string& /*unused*/,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7172 const Exception& ex)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7173 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7174 errored = true;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7175 static_cast<void>(ex);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7176 if (allow_exceptions)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7177 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7178 JSON_THROW(ex);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7179 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7180 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7181 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7182
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7183 constexpr bool is_errored() const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7184 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7185 return errored;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7186 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7187
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7188 private:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7189 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7190 @param[in] v value to add to the JSON value we build during parsing
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7191 @param[in] skip_callback whether we should skip calling the callback
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7192 function; this is required after start_array() and
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7193 start_object() SAX events, because otherwise we would call the
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7194 callback function with an empty array or object, respectively.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7195
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7196 @invariant If the ref stack is empty, then the passed value will be the new
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7197 root.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7198 @invariant If the ref stack contains a value, then it is an array or an
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7199 object to which we can add elements
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7200
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7201 @return pair of boolean (whether value should be kept) and pointer (to the
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7202 passed value in the ref_stack hierarchy; nullptr if not kept)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7203 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7204 template<typename Value>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7205 std::pair<bool, BasicJsonType*> handle_value(Value&& v, const bool skip_callback = false)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7206 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7207 JSON_ASSERT(!keep_stack.empty());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7208
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7209 // do not handle this value if we know it would be added to a discarded
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7210 // container
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7211 if (!keep_stack.back())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7212 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7213 return {false, nullptr};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7214 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7215
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7216 // create value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7217 auto value = BasicJsonType(std::forward<Value>(v));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7218
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7219 // check callback
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7220 const bool keep = skip_callback || callback(static_cast<int>(ref_stack.size()), parse_event_t::value, value);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7221
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7222 // do not handle this value if we just learnt it shall be discarded
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7223 if (!keep)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7224 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7225 return {false, nullptr};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7226 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7227
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7228 if (ref_stack.empty())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7229 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7230 root = std::move(value);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7231 return {true, & root};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7232 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7233
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7234 // skip this value if we already decided to skip the parent
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7235 // (https://github.com/nlohmann/json/issues/971#issuecomment-413678360)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7236 if (!ref_stack.back())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7237 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7238 return {false, nullptr};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7239 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7240
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7241 // we now only expect arrays and objects
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7242 JSON_ASSERT(ref_stack.back()->is_array() || ref_stack.back()->is_object());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7243
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7244 // array
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7245 if (ref_stack.back()->is_array())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7246 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7247 ref_stack.back()->m_data.m_value.array->emplace_back(std::move(value));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7248 return {true, & (ref_stack.back()->m_data.m_value.array->back())};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7249 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7250
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7251 // object
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7252 JSON_ASSERT(ref_stack.back()->is_object());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7253 // check if we should store an element for the current key
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7254 JSON_ASSERT(!key_keep_stack.empty());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7255 const bool store_element = key_keep_stack.back();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7256 key_keep_stack.pop_back();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7257
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7258 if (!store_element)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7259 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7260 return {false, nullptr};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7261 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7262
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7263 JSON_ASSERT(object_element);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7264 *object_element = std::move(value);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7265 return {true, object_element};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7266 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7267
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7268 /// the parsed JSON value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7269 BasicJsonType& root;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7270 /// stack to model hierarchy of values
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7271 std::vector<BasicJsonType*> ref_stack {};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7272 /// stack to manage which values to keep
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7273 std::vector<bool> keep_stack {};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7274 /// stack to manage which object keys to keep
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7275 std::vector<bool> key_keep_stack {};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7276 /// helper to hold the reference for the next object element
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7277 BasicJsonType* object_element = nullptr;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7278 /// whether a syntax error occurred
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7279 bool errored = false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7280 /// callback function
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7281 const parser_callback_t callback = nullptr;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7282 /// whether to throw exceptions in case of errors
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7283 const bool allow_exceptions = true;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7284 /// a discarded value for the callback
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7285 BasicJsonType discarded = BasicJsonType::value_t::discarded;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7286 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7287
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7288 template<typename BasicJsonType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7289 class json_sax_acceptor
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7290 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7291 public:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7292 using number_integer_t = typename BasicJsonType::number_integer_t;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7293 using number_unsigned_t = typename BasicJsonType::number_unsigned_t;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7294 using number_float_t = typename BasicJsonType::number_float_t;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7295 using string_t = typename BasicJsonType::string_t;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7296 using binary_t = typename BasicJsonType::binary_t;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7297
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7298 bool null()
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7299 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7300 return true;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7301 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7302
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7303 bool boolean(bool /*unused*/)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7304 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7305 return true;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7306 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7307
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7308 bool number_integer(number_integer_t /*unused*/)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7309 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7310 return true;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7311 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7312
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7313 bool number_unsigned(number_unsigned_t /*unused*/)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7314 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7315 return true;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7316 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7317
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7318 bool number_float(number_float_t /*unused*/, const string_t& /*unused*/)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7319 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7320 return true;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7321 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7322
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7323 bool string(string_t& /*unused*/)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7324 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7325 return true;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7326 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7327
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7328 bool binary(binary_t& /*unused*/)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7329 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7330 return true;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7331 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7332
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7333 bool start_object(std::size_t /*unused*/ = static_cast<std::size_t>(-1))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7334 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7335 return true;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7336 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7337
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7338 bool key(string_t& /*unused*/)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7339 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7340 return true;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7341 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7342
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7343 bool end_object()
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7344 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7345 return true;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7346 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7347
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7348 bool start_array(std::size_t /*unused*/ = static_cast<std::size_t>(-1))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7349 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7350 return true;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7351 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7352
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7353 bool end_array()
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7354 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7355 return true;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7356 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7357
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7358 bool parse_error(std::size_t /*unused*/, const std::string& /*unused*/, const detail::exception& /*unused*/)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7359 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7360 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7361 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7362 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7363
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7364 } // namespace detail
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7365 NLOHMANN_JSON_NAMESPACE_END
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7366
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7367 // #include <nlohmann/detail/input/lexer.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7368 // __ _____ _____ _____
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7369 // __| | __| | | | JSON for Modern C++
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7370 // | | |__ | | | | | | version 3.11.3
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7371 // |_____|_____|_____|_|___| https://github.com/nlohmann/json
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7372 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7373 // SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7374 // SPDX-License-Identifier: MIT
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7375
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7376
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7377
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7378 #include <array> // array
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7379 #include <clocale> // localeconv
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7380 #include <cstddef> // size_t
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7381 #include <cstdio> // snprintf
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7382 #include <cstdlib> // strtof, strtod, strtold, strtoll, strtoull
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7383 #include <initializer_list> // initializer_list
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7384 #include <string> // char_traits, string
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7385 #include <utility> // move
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7386 #include <vector> // vector
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7387
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7388 // #include <nlohmann/detail/input/input_adapters.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7389
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7390 // #include <nlohmann/detail/input/position_t.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7391
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7392 // #include <nlohmann/detail/macro_scope.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7393
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7394 // #include <nlohmann/detail/meta/type_traits.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7395
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7396
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7397 NLOHMANN_JSON_NAMESPACE_BEGIN
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7398 namespace detail
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7399 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7400
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7401 ///////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7402 // lexer //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7403 ///////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7404
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7405 template<typename BasicJsonType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7406 class lexer_base
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7407 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7408 public:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7409 /// token types for the parser
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7410 enum class token_type
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7411 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7412 uninitialized, ///< indicating the scanner is uninitialized
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7413 literal_true, ///< the `true` literal
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7414 literal_false, ///< the `false` literal
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7415 literal_null, ///< the `null` literal
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7416 value_string, ///< a string -- use get_string() for actual value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7417 value_unsigned, ///< an unsigned integer -- use get_number_unsigned() for actual value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7418 value_integer, ///< a signed integer -- use get_number_integer() for actual value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7419 value_float, ///< an floating point number -- use get_number_float() for actual value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7420 begin_array, ///< the character for array begin `[`
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7421 begin_object, ///< the character for object begin `{`
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7422 end_array, ///< the character for array end `]`
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7423 end_object, ///< the character for object end `}`
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7424 name_separator, ///< the name separator `:`
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7425 value_separator, ///< the value separator `,`
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7426 parse_error, ///< indicating a parse error
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7427 end_of_input, ///< indicating the end of the input buffer
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7428 literal_or_value ///< a literal or the begin of a value (only for diagnostics)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7429 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7430
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7431 /// return name of values of type token_type (only used for errors)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7432 JSON_HEDLEY_RETURNS_NON_NULL
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7433 JSON_HEDLEY_CONST
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7434 static const char* token_type_name(const token_type t) noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7435 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7436 switch (t)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7437 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7438 case token_type::uninitialized:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7439 return "<uninitialized>";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7440 case token_type::literal_true:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7441 return "true literal";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7442 case token_type::literal_false:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7443 return "false literal";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7444 case token_type::literal_null:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7445 return "null literal";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7446 case token_type::value_string:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7447 return "string literal";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7448 case token_type::value_unsigned:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7449 case token_type::value_integer:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7450 case token_type::value_float:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7451 return "number literal";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7452 case token_type::begin_array:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7453 return "'['";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7454 case token_type::begin_object:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7455 return "'{'";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7456 case token_type::end_array:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7457 return "']'";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7458 case token_type::end_object:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7459 return "'}'";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7460 case token_type::name_separator:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7461 return "':'";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7462 case token_type::value_separator:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7463 return "','";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7464 case token_type::parse_error:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7465 return "<parse error>";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7466 case token_type::end_of_input:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7467 return "end of input";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7468 case token_type::literal_or_value:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7469 return "'[', '{', or a literal";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7470 // LCOV_EXCL_START
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7471 default: // catch non-enum values
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7472 return "unknown token";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7473 // LCOV_EXCL_STOP
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7474 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7475 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7476 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7477 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7478 @brief lexical analysis
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7479
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7480 This class organizes the lexical analysis during JSON deserialization.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7481 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7482 template<typename BasicJsonType, typename InputAdapterType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7483 class lexer : public lexer_base<BasicJsonType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7484 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7485 using number_integer_t = typename BasicJsonType::number_integer_t;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7486 using number_unsigned_t = typename BasicJsonType::number_unsigned_t;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7487 using number_float_t = typename BasicJsonType::number_float_t;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7488 using string_t = typename BasicJsonType::string_t;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7489 using char_type = typename InputAdapterType::char_type;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7490 using char_int_type = typename char_traits<char_type>::int_type;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7491
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7492 public:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7493 using token_type = typename lexer_base<BasicJsonType>::token_type;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7494
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7495 explicit lexer(InputAdapterType&& adapter, bool ignore_comments_ = false) noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7496 : ia(std::move(adapter))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7497 , ignore_comments(ignore_comments_)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7498 , decimal_point_char(static_cast<char_int_type>(get_decimal_point()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7499 {}
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7500
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7501 // delete because of pointer members
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7502 lexer(const lexer&) = delete;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7503 lexer(lexer&&) = default; // NOLINT(hicpp-noexcept-move,performance-noexcept-move-constructor)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7504 lexer& operator=(lexer&) = delete;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7505 lexer& operator=(lexer&&) = default; // NOLINT(hicpp-noexcept-move,performance-noexcept-move-constructor)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7506 ~lexer() = default;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7507
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7508 private:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7509 /////////////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7510 // locales
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7511 /////////////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7512
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7513 /// return the locale-dependent decimal point
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7514 JSON_HEDLEY_PURE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7515 static char get_decimal_point() noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7516 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7517 const auto* loc = localeconv();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7518 JSON_ASSERT(loc != nullptr);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7519 return (loc->decimal_point == nullptr) ? '.' : *(loc->decimal_point);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7520 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7521
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7522 /////////////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7523 // scan functions
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7524 /////////////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7525
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7526 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7527 @brief get codepoint from 4 hex characters following `\u`
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7528
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7529 For input "\u c1 c2 c3 c4" the codepoint is:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7530 (c1 * 0x1000) + (c2 * 0x0100) + (c3 * 0x0010) + c4
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7531 = (c1 << 12) + (c2 << 8) + (c3 << 4) + (c4 << 0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7532
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7533 Furthermore, the possible characters '0'..'9', 'A'..'F', and 'a'..'f'
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7534 must be converted to the integers 0x0..0x9, 0xA..0xF, 0xA..0xF, resp. The
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7535 conversion is done by subtracting the offset (0x30, 0x37, and 0x57)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7536 between the ASCII value of the character and the desired integer value.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7537
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7538 @return codepoint (0x0000..0xFFFF) or -1 in case of an error (e.g. EOF or
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7539 non-hex character)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7540 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7541 int get_codepoint()
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7542 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7543 // this function only makes sense after reading `\u`
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7544 JSON_ASSERT(current == 'u');
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7545 int codepoint = 0;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7546
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7547 const auto factors = { 12u, 8u, 4u, 0u };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7548 for (const auto factor : factors)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7549 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7550 get();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7551
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7552 if (current >= '0' && current <= '9')
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7553 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7554 codepoint += static_cast<int>((static_cast<unsigned int>(current) - 0x30u) << factor);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7555 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7556 else if (current >= 'A' && current <= 'F')
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7557 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7558 codepoint += static_cast<int>((static_cast<unsigned int>(current) - 0x37u) << factor);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7559 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7560 else if (current >= 'a' && current <= 'f')
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7561 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7562 codepoint += static_cast<int>((static_cast<unsigned int>(current) - 0x57u) << factor);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7563 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7564 else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7565 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7566 return -1;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7567 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7568 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7569
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7570 JSON_ASSERT(0x0000 <= codepoint && codepoint <= 0xFFFF);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7571 return codepoint;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7572 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7573
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7574 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7575 @brief check if the next byte(s) are inside a given range
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7576
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7577 Adds the current byte and, for each passed range, reads a new byte and
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7578 checks if it is inside the range. If a violation was detected, set up an
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7579 error message and return false. Otherwise, return true.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7580
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7581 @param[in] ranges list of integers; interpreted as list of pairs of
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7582 inclusive lower and upper bound, respectively
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7583
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7584 @pre The passed list @a ranges must have 2, 4, or 6 elements; that is,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7585 1, 2, or 3 pairs. This precondition is enforced by an assertion.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7586
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7587 @return true if and only if no range violation was detected
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7588 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7589 bool next_byte_in_range(std::initializer_list<char_int_type> ranges)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7590 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7591 JSON_ASSERT(ranges.size() == 2 || ranges.size() == 4 || ranges.size() == 6);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7592 add(current);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7593
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7594 for (auto range = ranges.begin(); range != ranges.end(); ++range)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7595 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7596 get();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7597 if (JSON_HEDLEY_LIKELY(*range <= current && current <= *(++range))) // NOLINT(bugprone-inc-dec-in-conditions)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7598 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7599 add(current);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7600 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7601 else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7602 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7603 error_message = "invalid string: ill-formed UTF-8 byte";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7604 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7605 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7606 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7607
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7608 return true;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7609 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7610
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7611 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7612 @brief scan a string literal
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7613
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7614 This function scans a string according to Sect. 7 of RFC 8259. While
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7615 scanning, bytes are escaped and copied into buffer token_buffer. Then the
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7616 function returns successfully, token_buffer is *not* null-terminated (as it
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7617 may contain \0 bytes), and token_buffer.size() is the number of bytes in the
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7618 string.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7619
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7620 @return token_type::value_string if string could be successfully scanned,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7621 token_type::parse_error otherwise
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7622
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7623 @note In case of errors, variable error_message contains a textual
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7624 description.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7625 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7626 token_type scan_string()
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7627 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7628 // reset token_buffer (ignore opening quote)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7629 reset();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7630
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7631 // we entered the function by reading an open quote
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7632 JSON_ASSERT(current == '\"');
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7633
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7634 while (true)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7635 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7636 // get next character
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7637 switch (get())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7638 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7639 // end of file while parsing string
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7640 case char_traits<char_type>::eof():
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7641 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7642 error_message = "invalid string: missing closing quote";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7643 return token_type::parse_error;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7644 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7645
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7646 // closing quote
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7647 case '\"':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7648 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7649 return token_type::value_string;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7650 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7651
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7652 // escapes
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7653 case '\\':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7654 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7655 switch (get())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7656 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7657 // quotation mark
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7658 case '\"':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7659 add('\"');
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7660 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7661 // reverse solidus
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7662 case '\\':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7663 add('\\');
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7664 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7665 // solidus
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7666 case '/':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7667 add('/');
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7668 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7669 // backspace
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7670 case 'b':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7671 add('\b');
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7672 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7673 // form feed
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7674 case 'f':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7675 add('\f');
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7676 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7677 // line feed
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7678 case 'n':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7679 add('\n');
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7680 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7681 // carriage return
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7682 case 'r':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7683 add('\r');
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7684 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7685 // tab
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7686 case 't':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7687 add('\t');
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7688 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7689
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7690 // unicode escapes
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7691 case 'u':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7692 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7693 const int codepoint1 = get_codepoint();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7694 int codepoint = codepoint1; // start with codepoint1
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7695
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7696 if (JSON_HEDLEY_UNLIKELY(codepoint1 == -1))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7697 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7698 error_message = "invalid string: '\\u' must be followed by 4 hex digits";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7699 return token_type::parse_error;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7700 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7701
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7702 // check if code point is a high surrogate
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7703 if (0xD800 <= codepoint1 && codepoint1 <= 0xDBFF)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7704 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7705 // expect next \uxxxx entry
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7706 if (JSON_HEDLEY_LIKELY(get() == '\\' && get() == 'u'))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7707 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7708 const int codepoint2 = get_codepoint();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7709
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7710 if (JSON_HEDLEY_UNLIKELY(codepoint2 == -1))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7711 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7712 error_message = "invalid string: '\\u' must be followed by 4 hex digits";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7713 return token_type::parse_error;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7714 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7715
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7716 // check if codepoint2 is a low surrogate
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7717 if (JSON_HEDLEY_LIKELY(0xDC00 <= codepoint2 && codepoint2 <= 0xDFFF))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7718 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7719 // overwrite codepoint
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7720 codepoint = static_cast<int>(
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7721 // high surrogate occupies the most significant 22 bits
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7722 (static_cast<unsigned int>(codepoint1) << 10u)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7723 // low surrogate occupies the least significant 15 bits
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7724 + static_cast<unsigned int>(codepoint2)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7725 // there is still the 0xD800, 0xDC00 and 0x10000 noise
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7726 // in the result, so we have to subtract with:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7727 // (0xD800 << 10) + DC00 - 0x10000 = 0x35FDC00
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7728 - 0x35FDC00u);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7729 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7730 else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7731 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7732 error_message = "invalid string: surrogate U+D800..U+DBFF must be followed by U+DC00..U+DFFF";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7733 return token_type::parse_error;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7734 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7735 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7736 else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7737 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7738 error_message = "invalid string: surrogate U+D800..U+DBFF must be followed by U+DC00..U+DFFF";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7739 return token_type::parse_error;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7740 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7741 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7742 else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7743 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7744 if (JSON_HEDLEY_UNLIKELY(0xDC00 <= codepoint1 && codepoint1 <= 0xDFFF))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7745 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7746 error_message = "invalid string: surrogate U+DC00..U+DFFF must follow U+D800..U+DBFF";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7747 return token_type::parse_error;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7748 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7749 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7750
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7751 // result of the above calculation yields a proper codepoint
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7752 JSON_ASSERT(0x00 <= codepoint && codepoint <= 0x10FFFF);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7753
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7754 // translate codepoint into bytes
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7755 if (codepoint < 0x80)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7756 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7757 // 1-byte characters: 0xxxxxxx (ASCII)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7758 add(static_cast<char_int_type>(codepoint));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7759 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7760 else if (codepoint <= 0x7FF)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7761 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7762 // 2-byte characters: 110xxxxx 10xxxxxx
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7763 add(static_cast<char_int_type>(0xC0u | (static_cast<unsigned int>(codepoint) >> 6u)));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7764 add(static_cast<char_int_type>(0x80u | (static_cast<unsigned int>(codepoint) & 0x3Fu)));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7765 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7766 else if (codepoint <= 0xFFFF)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7767 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7768 // 3-byte characters: 1110xxxx 10xxxxxx 10xxxxxx
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7769 add(static_cast<char_int_type>(0xE0u | (static_cast<unsigned int>(codepoint) >> 12u)));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7770 add(static_cast<char_int_type>(0x80u | ((static_cast<unsigned int>(codepoint) >> 6u) & 0x3Fu)));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7771 add(static_cast<char_int_type>(0x80u | (static_cast<unsigned int>(codepoint) & 0x3Fu)));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7772 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7773 else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7774 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7775 // 4-byte characters: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7776 add(static_cast<char_int_type>(0xF0u | (static_cast<unsigned int>(codepoint) >> 18u)));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7777 add(static_cast<char_int_type>(0x80u | ((static_cast<unsigned int>(codepoint) >> 12u) & 0x3Fu)));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7778 add(static_cast<char_int_type>(0x80u | ((static_cast<unsigned int>(codepoint) >> 6u) & 0x3Fu)));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7779 add(static_cast<char_int_type>(0x80u | (static_cast<unsigned int>(codepoint) & 0x3Fu)));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7780 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7781
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7782 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7783 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7784
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7785 // other characters after escape
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7786 default:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7787 error_message = "invalid string: forbidden character after backslash";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7788 return token_type::parse_error;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7789 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7790
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7791 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7792 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7793
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7794 // invalid control characters
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7795 case 0x00:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7796 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7797 error_message = "invalid string: control character U+0000 (NUL) must be escaped to \\u0000";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7798 return token_type::parse_error;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7799 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7800
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7801 case 0x01:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7802 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7803 error_message = "invalid string: control character U+0001 (SOH) must be escaped to \\u0001";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7804 return token_type::parse_error;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7805 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7806
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7807 case 0x02:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7808 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7809 error_message = "invalid string: control character U+0002 (STX) must be escaped to \\u0002";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7810 return token_type::parse_error;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7811 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7812
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7813 case 0x03:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7814 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7815 error_message = "invalid string: control character U+0003 (ETX) must be escaped to \\u0003";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7816 return token_type::parse_error;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7817 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7818
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7819 case 0x04:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7820 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7821 error_message = "invalid string: control character U+0004 (EOT) must be escaped to \\u0004";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7822 return token_type::parse_error;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7823 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7824
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7825 case 0x05:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7826 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7827 error_message = "invalid string: control character U+0005 (ENQ) must be escaped to \\u0005";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7828 return token_type::parse_error;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7829 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7830
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7831 case 0x06:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7832 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7833 error_message = "invalid string: control character U+0006 (ACK) must be escaped to \\u0006";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7834 return token_type::parse_error;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7835 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7836
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7837 case 0x07:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7838 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7839 error_message = "invalid string: control character U+0007 (BEL) must be escaped to \\u0007";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7840 return token_type::parse_error;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7841 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7842
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7843 case 0x08:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7844 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7845 error_message = "invalid string: control character U+0008 (BS) must be escaped to \\u0008 or \\b";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7846 return token_type::parse_error;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7847 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7848
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7849 case 0x09:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7850 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7851 error_message = "invalid string: control character U+0009 (HT) must be escaped to \\u0009 or \\t";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7852 return token_type::parse_error;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7853 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7854
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7855 case 0x0A:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7856 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7857 error_message = "invalid string: control character U+000A (LF) must be escaped to \\u000A or \\n";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7858 return token_type::parse_error;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7859 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7860
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7861 case 0x0B:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7862 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7863 error_message = "invalid string: control character U+000B (VT) must be escaped to \\u000B";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7864 return token_type::parse_error;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7865 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7866
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7867 case 0x0C:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7868 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7869 error_message = "invalid string: control character U+000C (FF) must be escaped to \\u000C or \\f";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7870 return token_type::parse_error;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7871 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7872
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7873 case 0x0D:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7874 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7875 error_message = "invalid string: control character U+000D (CR) must be escaped to \\u000D or \\r";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7876 return token_type::parse_error;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7877 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7878
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7879 case 0x0E:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7880 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7881 error_message = "invalid string: control character U+000E (SO) must be escaped to \\u000E";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7882 return token_type::parse_error;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7883 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7884
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7885 case 0x0F:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7886 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7887 error_message = "invalid string: control character U+000F (SI) must be escaped to \\u000F";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7888 return token_type::parse_error;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7889 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7890
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7891 case 0x10:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7892 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7893 error_message = "invalid string: control character U+0010 (DLE) must be escaped to \\u0010";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7894 return token_type::parse_error;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7895 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7896
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7897 case 0x11:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7898 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7899 error_message = "invalid string: control character U+0011 (DC1) must be escaped to \\u0011";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7900 return token_type::parse_error;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7901 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7902
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7903 case 0x12:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7904 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7905 error_message = "invalid string: control character U+0012 (DC2) must be escaped to \\u0012";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7906 return token_type::parse_error;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7907 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7908
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7909 case 0x13:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7910 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7911 error_message = "invalid string: control character U+0013 (DC3) must be escaped to \\u0013";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7912 return token_type::parse_error;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7913 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7914
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7915 case 0x14:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7916 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7917 error_message = "invalid string: control character U+0014 (DC4) must be escaped to \\u0014";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7918 return token_type::parse_error;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7919 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7920
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7921 case 0x15:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7922 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7923 error_message = "invalid string: control character U+0015 (NAK) must be escaped to \\u0015";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7924 return token_type::parse_error;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7925 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7926
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7927 case 0x16:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7928 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7929 error_message = "invalid string: control character U+0016 (SYN) must be escaped to \\u0016";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7930 return token_type::parse_error;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7931 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7932
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7933 case 0x17:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7934 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7935 error_message = "invalid string: control character U+0017 (ETB) must be escaped to \\u0017";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7936 return token_type::parse_error;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7937 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7938
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7939 case 0x18:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7940 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7941 error_message = "invalid string: control character U+0018 (CAN) must be escaped to \\u0018";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7942 return token_type::parse_error;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7943 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7944
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7945 case 0x19:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7946 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7947 error_message = "invalid string: control character U+0019 (EM) must be escaped to \\u0019";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7948 return token_type::parse_error;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7949 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7950
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7951 case 0x1A:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7952 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7953 error_message = "invalid string: control character U+001A (SUB) must be escaped to \\u001A";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7954 return token_type::parse_error;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7955 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7956
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7957 case 0x1B:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7958 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7959 error_message = "invalid string: control character U+001B (ESC) must be escaped to \\u001B";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7960 return token_type::parse_error;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7961 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7962
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7963 case 0x1C:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7964 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7965 error_message = "invalid string: control character U+001C (FS) must be escaped to \\u001C";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7966 return token_type::parse_error;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7967 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7968
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7969 case 0x1D:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7970 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7971 error_message = "invalid string: control character U+001D (GS) must be escaped to \\u001D";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7972 return token_type::parse_error;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7973 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7974
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7975 case 0x1E:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7976 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7977 error_message = "invalid string: control character U+001E (RS) must be escaped to \\u001E";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7978 return token_type::parse_error;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7979 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7980
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7981 case 0x1F:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7982 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7983 error_message = "invalid string: control character U+001F (US) must be escaped to \\u001F";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7984 return token_type::parse_error;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7985 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7986
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7987 // U+0020..U+007F (except U+0022 (quote) and U+005C (backspace))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7988 case 0x20:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7989 case 0x21:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7990 case 0x23:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7991 case 0x24:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7992 case 0x25:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7993 case 0x26:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7994 case 0x27:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7995 case 0x28:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7996 case 0x29:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7997 case 0x2A:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7998 case 0x2B:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7999 case 0x2C:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8000 case 0x2D:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8001 case 0x2E:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8002 case 0x2F:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8003 case 0x30:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8004 case 0x31:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8005 case 0x32:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8006 case 0x33:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8007 case 0x34:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8008 case 0x35:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8009 case 0x36:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8010 case 0x37:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8011 case 0x38:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8012 case 0x39:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8013 case 0x3A:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8014 case 0x3B:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8015 case 0x3C:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8016 case 0x3D:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8017 case 0x3E:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8018 case 0x3F:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8019 case 0x40:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8020 case 0x41:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8021 case 0x42:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8022 case 0x43:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8023 case 0x44:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8024 case 0x45:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8025 case 0x46:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8026 case 0x47:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8027 case 0x48:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8028 case 0x49:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8029 case 0x4A:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8030 case 0x4B:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8031 case 0x4C:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8032 case 0x4D:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8033 case 0x4E:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8034 case 0x4F:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8035 case 0x50:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8036 case 0x51:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8037 case 0x52:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8038 case 0x53:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8039 case 0x54:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8040 case 0x55:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8041 case 0x56:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8042 case 0x57:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8043 case 0x58:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8044 case 0x59:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8045 case 0x5A:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8046 case 0x5B:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8047 case 0x5D:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8048 case 0x5E:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8049 case 0x5F:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8050 case 0x60:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8051 case 0x61:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8052 case 0x62:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8053 case 0x63:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8054 case 0x64:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8055 case 0x65:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8056 case 0x66:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8057 case 0x67:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8058 case 0x68:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8059 case 0x69:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8060 case 0x6A:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8061 case 0x6B:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8062 case 0x6C:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8063 case 0x6D:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8064 case 0x6E:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8065 case 0x6F:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8066 case 0x70:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8067 case 0x71:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8068 case 0x72:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8069 case 0x73:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8070 case 0x74:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8071 case 0x75:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8072 case 0x76:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8073 case 0x77:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8074 case 0x78:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8075 case 0x79:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8076 case 0x7A:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8077 case 0x7B:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8078 case 0x7C:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8079 case 0x7D:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8080 case 0x7E:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8081 case 0x7F:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8082 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8083 add(current);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8084 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8085 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8086
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8087 // U+0080..U+07FF: bytes C2..DF 80..BF
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8088 case 0xC2:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8089 case 0xC3:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8090 case 0xC4:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8091 case 0xC5:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8092 case 0xC6:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8093 case 0xC7:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8094 case 0xC8:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8095 case 0xC9:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8096 case 0xCA:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8097 case 0xCB:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8098 case 0xCC:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8099 case 0xCD:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8100 case 0xCE:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8101 case 0xCF:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8102 case 0xD0:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8103 case 0xD1:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8104 case 0xD2:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8105 case 0xD3:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8106 case 0xD4:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8107 case 0xD5:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8108 case 0xD6:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8109 case 0xD7:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8110 case 0xD8:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8111 case 0xD9:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8112 case 0xDA:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8113 case 0xDB:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8114 case 0xDC:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8115 case 0xDD:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8116 case 0xDE:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8117 case 0xDF:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8118 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8119 if (JSON_HEDLEY_UNLIKELY(!next_byte_in_range({0x80, 0xBF})))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8120 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8121 return token_type::parse_error;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8122 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8123 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8124 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8125
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8126 // U+0800..U+0FFF: bytes E0 A0..BF 80..BF
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8127 case 0xE0:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8128 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8129 if (JSON_HEDLEY_UNLIKELY(!(next_byte_in_range({0xA0, 0xBF, 0x80, 0xBF}))))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8130 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8131 return token_type::parse_error;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8132 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8133 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8134 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8135
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8136 // U+1000..U+CFFF: bytes E1..EC 80..BF 80..BF
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8137 // U+E000..U+FFFF: bytes EE..EF 80..BF 80..BF
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8138 case 0xE1:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8139 case 0xE2:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8140 case 0xE3:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8141 case 0xE4:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8142 case 0xE5:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8143 case 0xE6:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8144 case 0xE7:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8145 case 0xE8:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8146 case 0xE9:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8147 case 0xEA:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8148 case 0xEB:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8149 case 0xEC:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8150 case 0xEE:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8151 case 0xEF:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8152 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8153 if (JSON_HEDLEY_UNLIKELY(!(next_byte_in_range({0x80, 0xBF, 0x80, 0xBF}))))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8154 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8155 return token_type::parse_error;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8156 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8157 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8158 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8159
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8160 // U+D000..U+D7FF: bytes ED 80..9F 80..BF
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8161 case 0xED:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8162 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8163 if (JSON_HEDLEY_UNLIKELY(!(next_byte_in_range({0x80, 0x9F, 0x80, 0xBF}))))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8164 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8165 return token_type::parse_error;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8166 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8167 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8168 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8169
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8170 // U+10000..U+3FFFF F0 90..BF 80..BF 80..BF
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8171 case 0xF0:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8172 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8173 if (JSON_HEDLEY_UNLIKELY(!(next_byte_in_range({0x90, 0xBF, 0x80, 0xBF, 0x80, 0xBF}))))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8174 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8175 return token_type::parse_error;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8176 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8177 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8178 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8179
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8180 // U+40000..U+FFFFF F1..F3 80..BF 80..BF 80..BF
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8181 case 0xF1:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8182 case 0xF2:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8183 case 0xF3:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8184 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8185 if (JSON_HEDLEY_UNLIKELY(!(next_byte_in_range({0x80, 0xBF, 0x80, 0xBF, 0x80, 0xBF}))))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8186 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8187 return token_type::parse_error;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8188 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8189 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8190 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8191
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8192 // U+100000..U+10FFFF F4 80..8F 80..BF 80..BF
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8193 case 0xF4:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8194 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8195 if (JSON_HEDLEY_UNLIKELY(!(next_byte_in_range({0x80, 0x8F, 0x80, 0xBF, 0x80, 0xBF}))))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8196 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8197 return token_type::parse_error;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8198 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8199 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8200 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8201
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8202 // remaining bytes (80..C1 and F5..FF) are ill-formed
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8203 default:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8204 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8205 error_message = "invalid string: ill-formed UTF-8 byte";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8206 return token_type::parse_error;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8207 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8208 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8209 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8210 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8211
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8212 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8213 * @brief scan a comment
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8214 * @return whether comment could be scanned successfully
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8215 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8216 bool scan_comment()
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8217 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8218 switch (get())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8219 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8220 // single-line comments skip input until a newline or EOF is read
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8221 case '/':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8222 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8223 while (true)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8224 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8225 switch (get())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8226 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8227 case '\n':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8228 case '\r':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8229 case char_traits<char_type>::eof():
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8230 case '\0':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8231 return true;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8232
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8233 default:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8234 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8235 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8236 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8237 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8238
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8239 // multi-line comments skip input until */ is read
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8240 case '*':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8241 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8242 while (true)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8243 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8244 switch (get())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8245 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8246 case char_traits<char_type>::eof():
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8247 case '\0':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8248 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8249 error_message = "invalid comment; missing closing '*/'";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8250 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8251 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8252
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8253 case '*':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8254 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8255 switch (get())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8256 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8257 case '/':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8258 return true;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8259
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8260 default:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8261 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8262 unget();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8263 continue;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8264 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8265 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8266 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8267
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8268 default:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8269 continue;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8270 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8271 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8272 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8273
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8274 // unexpected character after reading '/'
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8275 default:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8276 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8277 error_message = "invalid comment; expecting '/' or '*' after '/'";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8278 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8279 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8280 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8281 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8282
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8283 JSON_HEDLEY_NON_NULL(2)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8284 static void strtof(float& f, const char* str, char** endptr) noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8285 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8286 f = std::strtof(str, endptr);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8287 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8288
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8289 JSON_HEDLEY_NON_NULL(2)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8290 static void strtof(double& f, const char* str, char** endptr) noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8291 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8292 f = std::strtod(str, endptr);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8293 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8294
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8295 JSON_HEDLEY_NON_NULL(2)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8296 static void strtof(long double& f, const char* str, char** endptr) noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8297 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8298 f = std::strtold(str, endptr);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8299 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8300
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8301 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8302 @brief scan a number literal
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8303
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8304 This function scans a string according to Sect. 6 of RFC 8259.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8305
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8306 The function is realized with a deterministic finite state machine derived
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8307 from the grammar described in RFC 8259. Starting in state "init", the
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8308 input is read and used to determined the next state. Only state "done"
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8309 accepts the number. State "error" is a trap state to model errors. In the
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8310 table below, "anything" means any character but the ones listed before.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8311
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8312 state | 0 | 1-9 | e E | + | - | . | anything
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8313 ---------|----------|----------|----------|---------|---------|----------|-----------
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8314 init | zero | any1 | [error] | [error] | minus | [error] | [error]
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8315 minus | zero | any1 | [error] | [error] | [error] | [error] | [error]
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8316 zero | done | done | exponent | done | done | decimal1 | done
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8317 any1 | any1 | any1 | exponent | done | done | decimal1 | done
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8318 decimal1 | decimal2 | decimal2 | [error] | [error] | [error] | [error] | [error]
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8319 decimal2 | decimal2 | decimal2 | exponent | done | done | done | done
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8320 exponent | any2 | any2 | [error] | sign | sign | [error] | [error]
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8321 sign | any2 | any2 | [error] | [error] | [error] | [error] | [error]
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8322 any2 | any2 | any2 | done | done | done | done | done
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8323
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8324 The state machine is realized with one label per state (prefixed with
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8325 "scan_number_") and `goto` statements between them. The state machine
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8326 contains cycles, but any cycle can be left when EOF is read. Therefore,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8327 the function is guaranteed to terminate.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8328
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8329 During scanning, the read bytes are stored in token_buffer. This string is
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8330 then converted to a signed integer, an unsigned integer, or a
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8331 floating-point number.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8332
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8333 @return token_type::value_unsigned, token_type::value_integer, or
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8334 token_type::value_float if number could be successfully scanned,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8335 token_type::parse_error otherwise
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8336
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8337 @note The scanner is independent of the current locale. Internally, the
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8338 locale's decimal point is used instead of `.` to work with the
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8339 locale-dependent converters.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8340 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8341 token_type scan_number() // lgtm [cpp/use-of-goto]
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8342 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8343 // reset token_buffer to store the number's bytes
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8344 reset();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8345
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8346 // the type of the parsed number; initially set to unsigned; will be
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8347 // changed if minus sign, decimal point or exponent is read
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8348 token_type number_type = token_type::value_unsigned;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8349
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8350 // state (init): we just found out we need to scan a number
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8351 switch (current)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8352 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8353 case '-':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8354 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8355 add(current);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8356 goto scan_number_minus;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8357 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8358
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8359 case '0':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8360 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8361 add(current);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8362 goto scan_number_zero;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8363 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8364
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8365 case '1':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8366 case '2':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8367 case '3':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8368 case '4':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8369 case '5':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8370 case '6':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8371 case '7':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8372 case '8':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8373 case '9':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8374 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8375 add(current);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8376 goto scan_number_any1;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8377 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8378
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8379 // all other characters are rejected outside scan_number()
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8380 default: // LCOV_EXCL_LINE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8381 JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8382 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8383
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8384 scan_number_minus:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8385 // state: we just parsed a leading minus sign
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8386 number_type = token_type::value_integer;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8387 switch (get())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8388 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8389 case '0':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8390 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8391 add(current);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8392 goto scan_number_zero;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8393 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8394
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8395 case '1':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8396 case '2':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8397 case '3':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8398 case '4':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8399 case '5':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8400 case '6':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8401 case '7':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8402 case '8':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8403 case '9':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8404 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8405 add(current);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8406 goto scan_number_any1;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8407 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8408
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8409 default:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8410 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8411 error_message = "invalid number; expected digit after '-'";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8412 return token_type::parse_error;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8413 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8414 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8415
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8416 scan_number_zero:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8417 // state: we just parse a zero (maybe with a leading minus sign)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8418 switch (get())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8419 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8420 case '.':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8421 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8422 add(decimal_point_char);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8423 goto scan_number_decimal1;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8424 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8425
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8426 case 'e':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8427 case 'E':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8428 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8429 add(current);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8430 goto scan_number_exponent;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8431 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8432
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8433 default:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8434 goto scan_number_done;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8435 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8436
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8437 scan_number_any1:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8438 // state: we just parsed a number 0-9 (maybe with a leading minus sign)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8439 switch (get())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8440 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8441 case '0':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8442 case '1':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8443 case '2':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8444 case '3':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8445 case '4':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8446 case '5':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8447 case '6':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8448 case '7':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8449 case '8':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8450 case '9':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8451 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8452 add(current);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8453 goto scan_number_any1;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8454 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8455
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8456 case '.':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8457 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8458 add(decimal_point_char);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8459 goto scan_number_decimal1;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8460 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8461
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8462 case 'e':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8463 case 'E':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8464 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8465 add(current);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8466 goto scan_number_exponent;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8467 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8468
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8469 default:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8470 goto scan_number_done;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8471 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8472
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8473 scan_number_decimal1:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8474 // state: we just parsed a decimal point
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8475 number_type = token_type::value_float;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8476 switch (get())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8477 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8478 case '0':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8479 case '1':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8480 case '2':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8481 case '3':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8482 case '4':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8483 case '5':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8484 case '6':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8485 case '7':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8486 case '8':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8487 case '9':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8488 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8489 add(current);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8490 goto scan_number_decimal2;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8491 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8492
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8493 default:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8494 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8495 error_message = "invalid number; expected digit after '.'";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8496 return token_type::parse_error;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8497 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8498 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8499
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8500 scan_number_decimal2:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8501 // we just parsed at least one number after a decimal point
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8502 switch (get())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8503 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8504 case '0':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8505 case '1':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8506 case '2':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8507 case '3':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8508 case '4':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8509 case '5':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8510 case '6':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8511 case '7':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8512 case '8':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8513 case '9':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8514 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8515 add(current);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8516 goto scan_number_decimal2;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8517 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8518
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8519 case 'e':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8520 case 'E':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8521 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8522 add(current);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8523 goto scan_number_exponent;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8524 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8525
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8526 default:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8527 goto scan_number_done;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8528 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8529
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8530 scan_number_exponent:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8531 // we just parsed an exponent
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8532 number_type = token_type::value_float;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8533 switch (get())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8534 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8535 case '+':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8536 case '-':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8537 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8538 add(current);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8539 goto scan_number_sign;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8540 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8541
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8542 case '0':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8543 case '1':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8544 case '2':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8545 case '3':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8546 case '4':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8547 case '5':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8548 case '6':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8549 case '7':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8550 case '8':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8551 case '9':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8552 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8553 add(current);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8554 goto scan_number_any2;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8555 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8556
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8557 default:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8558 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8559 error_message =
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8560 "invalid number; expected '+', '-', or digit after exponent";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8561 return token_type::parse_error;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8562 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8563 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8564
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8565 scan_number_sign:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8566 // we just parsed an exponent sign
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8567 switch (get())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8568 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8569 case '0':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8570 case '1':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8571 case '2':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8572 case '3':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8573 case '4':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8574 case '5':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8575 case '6':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8576 case '7':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8577 case '8':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8578 case '9':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8579 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8580 add(current);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8581 goto scan_number_any2;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8582 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8583
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8584 default:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8585 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8586 error_message = "invalid number; expected digit after exponent sign";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8587 return token_type::parse_error;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8588 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8589 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8590
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8591 scan_number_any2:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8592 // we just parsed a number after the exponent or exponent sign
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8593 switch (get())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8594 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8595 case '0':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8596 case '1':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8597 case '2':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8598 case '3':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8599 case '4':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8600 case '5':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8601 case '6':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8602 case '7':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8603 case '8':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8604 case '9':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8605 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8606 add(current);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8607 goto scan_number_any2;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8608 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8609
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8610 default:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8611 goto scan_number_done;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8612 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8613
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8614 scan_number_done:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8615 // unget the character after the number (we only read it to know that
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8616 // we are done scanning a number)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8617 unget();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8618
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8619 char* endptr = nullptr; // NOLINT(cppcoreguidelines-pro-type-vararg,hicpp-vararg)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8620 errno = 0;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8621
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8622 // try to parse integers first and fall back to floats
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8623 if (number_type == token_type::value_unsigned)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8624 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8625 const auto x = std::strtoull(token_buffer.data(), &endptr, 10);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8626
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8627 // we checked the number format before
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8628 JSON_ASSERT(endptr == token_buffer.data() + token_buffer.size());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8629
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8630 if (errno == 0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8631 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8632 value_unsigned = static_cast<number_unsigned_t>(x);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8633 if (value_unsigned == x)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8634 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8635 return token_type::value_unsigned;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8636 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8637 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8638 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8639 else if (number_type == token_type::value_integer)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8640 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8641 const auto x = std::strtoll(token_buffer.data(), &endptr, 10);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8642
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8643 // we checked the number format before
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8644 JSON_ASSERT(endptr == token_buffer.data() + token_buffer.size());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8645
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8646 if (errno == 0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8647 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8648 value_integer = static_cast<number_integer_t>(x);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8649 if (value_integer == x)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8650 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8651 return token_type::value_integer;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8652 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8653 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8654 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8655
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8656 // this code is reached if we parse a floating-point number or if an
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8657 // integer conversion above failed
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8658 strtof(value_float, token_buffer.data(), &endptr);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8659
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8660 // we checked the number format before
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8661 JSON_ASSERT(endptr == token_buffer.data() + token_buffer.size());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8662
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8663 return token_type::value_float;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8664 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8665
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8666 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8667 @param[in] literal_text the literal text to expect
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8668 @param[in] length the length of the passed literal text
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8669 @param[in] return_type the token type to return on success
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8670 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8671 JSON_HEDLEY_NON_NULL(2)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8672 token_type scan_literal(const char_type* literal_text, const std::size_t length,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8673 token_type return_type)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8674 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8675 JSON_ASSERT(char_traits<char_type>::to_char_type(current) == literal_text[0]);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8676 for (std::size_t i = 1; i < length; ++i)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8677 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8678 if (JSON_HEDLEY_UNLIKELY(char_traits<char_type>::to_char_type(get()) != literal_text[i]))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8679 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8680 error_message = "invalid literal";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8681 return token_type::parse_error;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8682 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8683 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8684 return return_type;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8685 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8686
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8687 /////////////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8688 // input management
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8689 /////////////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8690
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8691 /// reset token_buffer; current character is beginning of token
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8692 void reset() noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8693 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8694 token_buffer.clear();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8695 token_string.clear();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8696 token_string.push_back(char_traits<char_type>::to_char_type(current));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8697 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8698
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8699 /*
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8700 @brief get next character from the input
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8701
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8702 This function provides the interface to the used input adapter. It does
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8703 not throw in case the input reached EOF, but returns a
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8704 `char_traits<char>::eof()` in that case. Stores the scanned characters
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8705 for use in error messages.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8706
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8707 @return character read from the input
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8708 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8709 char_int_type get()
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8710 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8711 ++position.chars_read_total;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8712 ++position.chars_read_current_line;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8713
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8714 if (next_unget)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8715 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8716 // just reset the next_unget variable and work with current
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8717 next_unget = false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8718 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8719 else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8720 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8721 current = ia.get_character();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8722 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8723
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8724 if (JSON_HEDLEY_LIKELY(current != char_traits<char_type>::eof()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8725 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8726 token_string.push_back(char_traits<char_type>::to_char_type(current));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8727 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8728
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8729 if (current == '\n')
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8730 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8731 ++position.lines_read;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8732 position.chars_read_current_line = 0;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8733 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8734
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8735 return current;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8736 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8737
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8738 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8739 @brief unget current character (read it again on next get)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8740
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8741 We implement unget by setting variable next_unget to true. The input is not
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8742 changed - we just simulate ungetting by modifying chars_read_total,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8743 chars_read_current_line, and token_string. The next call to get() will
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8744 behave as if the unget character is read again.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8745 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8746 void unget()
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8747 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8748 next_unget = true;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8749
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8750 --position.chars_read_total;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8751
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8752 // in case we "unget" a newline, we have to also decrement the lines_read
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8753 if (position.chars_read_current_line == 0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8754 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8755 if (position.lines_read > 0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8756 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8757 --position.lines_read;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8758 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8759 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8760 else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8761 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8762 --position.chars_read_current_line;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8763 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8764
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8765 if (JSON_HEDLEY_LIKELY(current != char_traits<char_type>::eof()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8766 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8767 JSON_ASSERT(!token_string.empty());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8768 token_string.pop_back();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8769 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8770 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8771
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8772 /// add a character to token_buffer
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8773 void add(char_int_type c)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8774 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8775 token_buffer.push_back(static_cast<typename string_t::value_type>(c));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8776 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8777
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8778 public:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8779 /////////////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8780 // value getters
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8781 /////////////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8782
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8783 /// return integer value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8784 constexpr number_integer_t get_number_integer() const noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8785 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8786 return value_integer;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8787 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8788
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8789 /// return unsigned integer value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8790 constexpr number_unsigned_t get_number_unsigned() const noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8791 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8792 return value_unsigned;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8793 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8794
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8795 /// return floating-point value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8796 constexpr number_float_t get_number_float() const noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8797 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8798 return value_float;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8799 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8800
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8801 /// return current string value (implicitly resets the token; useful only once)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8802 string_t& get_string()
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8803 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8804 return token_buffer;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8805 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8806
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8807 /////////////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8808 // diagnostics
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8809 /////////////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8810
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8811 /// return position of last read token
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8812 constexpr position_t get_position() const noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8813 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8814 return position;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8815 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8816
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8817 /// return the last read token (for errors only). Will never contain EOF
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8818 /// (an arbitrary value that is not a valid char value, often -1), because
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8819 /// 255 may legitimately occur. May contain NUL, which should be escaped.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8820 std::string get_token_string() const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8821 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8822 // escape control characters
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8823 std::string result;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8824 for (const auto c : token_string)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8825 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8826 if (static_cast<unsigned char>(c) <= '\x1F')
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8827 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8828 // escape control characters
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8829 std::array<char, 9> cs{{}};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8830 static_cast<void>((std::snprintf)(cs.data(), cs.size(), "<U+%.4X>", static_cast<unsigned char>(c))); // NOLINT(cppcoreguidelines-pro-type-vararg,hicpp-vararg)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8831 result += cs.data();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8832 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8833 else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8834 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8835 // add character as is
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8836 result.push_back(static_cast<std::string::value_type>(c));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8837 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8838 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8839
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8840 return result;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8841 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8842
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8843 /// return syntax error message
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8844 JSON_HEDLEY_RETURNS_NON_NULL
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8845 constexpr const char* get_error_message() const noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8846 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8847 return error_message;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8848 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8849
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8850 /////////////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8851 // actual scanner
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8852 /////////////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8853
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8854 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8855 @brief skip the UTF-8 byte order mark
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8856 @return true iff there is no BOM or the correct BOM has been skipped
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8857 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8858 bool skip_bom()
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8859 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8860 if (get() == 0xEF)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8861 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8862 // check if we completely parse the BOM
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8863 return get() == 0xBB && get() == 0xBF;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8864 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8865
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8866 // the first character is not the beginning of the BOM; unget it to
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8867 // process is later
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8868 unget();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8869 return true;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8870 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8871
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8872 void skip_whitespace()
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8873 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8874 do
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8875 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8876 get();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8877 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8878 while (current == ' ' || current == '\t' || current == '\n' || current == '\r');
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8879 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8880
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8881 token_type scan()
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8882 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8883 // initially, skip the BOM
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8884 if (position.chars_read_total == 0 && !skip_bom())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8885 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8886 error_message = "invalid BOM; must be 0xEF 0xBB 0xBF if given";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8887 return token_type::parse_error;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8888 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8889
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8890 // read next character and ignore whitespace
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8891 skip_whitespace();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8892
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8893 // ignore comments
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8894 while (ignore_comments && current == '/')
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8895 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8896 if (!scan_comment())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8897 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8898 return token_type::parse_error;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8899 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8900
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8901 // skip following whitespace
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8902 skip_whitespace();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8903 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8904
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8905 switch (current)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8906 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8907 // structural characters
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8908 case '[':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8909 return token_type::begin_array;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8910 case ']':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8911 return token_type::end_array;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8912 case '{':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8913 return token_type::begin_object;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8914 case '}':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8915 return token_type::end_object;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8916 case ':':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8917 return token_type::name_separator;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8918 case ',':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8919 return token_type::value_separator;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8920
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8921 // literals
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8922 case 't':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8923 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8924 std::array<char_type, 4> true_literal = {{static_cast<char_type>('t'), static_cast<char_type>('r'), static_cast<char_type>('u'), static_cast<char_type>('e')}};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8925 return scan_literal(true_literal.data(), true_literal.size(), token_type::literal_true);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8926 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8927 case 'f':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8928 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8929 std::array<char_type, 5> false_literal = {{static_cast<char_type>('f'), static_cast<char_type>('a'), static_cast<char_type>('l'), static_cast<char_type>('s'), static_cast<char_type>('e')}};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8930 return scan_literal(false_literal.data(), false_literal.size(), token_type::literal_false);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8931 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8932 case 'n':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8933 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8934 std::array<char_type, 4> null_literal = {{static_cast<char_type>('n'), static_cast<char_type>('u'), static_cast<char_type>('l'), static_cast<char_type>('l')}};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8935 return scan_literal(null_literal.data(), null_literal.size(), token_type::literal_null);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8936 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8937
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8938 // string
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8939 case '\"':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8940 return scan_string();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8941
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8942 // number
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8943 case '-':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8944 case '0':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8945 case '1':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8946 case '2':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8947 case '3':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8948 case '4':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8949 case '5':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8950 case '6':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8951 case '7':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8952 case '8':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8953 case '9':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8954 return scan_number();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8955
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8956 // end of input (the null byte is needed when parsing from
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8957 // string literals)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8958 case '\0':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8959 case char_traits<char_type>::eof():
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8960 return token_type::end_of_input;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8961
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8962 // error
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8963 default:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8964 error_message = "invalid literal";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8965 return token_type::parse_error;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8966 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8967 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8968
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8969 private:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8970 /// input adapter
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8971 InputAdapterType ia;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8972
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8973 /// whether comments should be ignored (true) or signaled as errors (false)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8974 const bool ignore_comments = false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8975
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8976 /// the current character
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8977 char_int_type current = char_traits<char_type>::eof();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8978
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8979 /// whether the next get() call should just return current
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8980 bool next_unget = false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8981
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8982 /// the start position of the current token
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8983 position_t position {};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8984
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8985 /// raw input token string (for error messages)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8986 std::vector<char_type> token_string {};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8987
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8988 /// buffer for variable-length tokens (numbers, strings)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8989 string_t token_buffer {};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8990
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8991 /// a description of occurred lexer errors
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8992 const char* error_message = "";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8993
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8994 // number values
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8995 number_integer_t value_integer = 0;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8996 number_unsigned_t value_unsigned = 0;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8997 number_float_t value_float = 0;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8998
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8999 /// the decimal point
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9000 const char_int_type decimal_point_char = '.';
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9001 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9002
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9003 } // namespace detail
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9004 NLOHMANN_JSON_NAMESPACE_END
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9005
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9006 // #include <nlohmann/detail/macro_scope.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9007
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9008 // #include <nlohmann/detail/meta/is_sax.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9009 // __ _____ _____ _____
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9010 // __| | __| | | | JSON for Modern C++
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9011 // | | |__ | | | | | | version 3.11.3
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9012 // |_____|_____|_____|_|___| https://github.com/nlohmann/json
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9013 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9014 // SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9015 // SPDX-License-Identifier: MIT
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9016
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9017
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9018
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9019 #include <cstdint> // size_t
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9020 #include <utility> // declval
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9021 #include <string> // string
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9022
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9023 // #include <nlohmann/detail/abi_macros.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9024
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9025 // #include <nlohmann/detail/meta/detected.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9026
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9027 // #include <nlohmann/detail/meta/type_traits.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9028
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9029
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9030 NLOHMANN_JSON_NAMESPACE_BEGIN
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9031 namespace detail
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9032 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9033
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9034 template<typename T>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9035 using null_function_t = decltype(std::declval<T&>().null());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9036
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9037 template<typename T>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9038 using boolean_function_t =
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9039 decltype(std::declval<T&>().boolean(std::declval<bool>()));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9040
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9041 template<typename T, typename Integer>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9042 using number_integer_function_t =
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9043 decltype(std::declval<T&>().number_integer(std::declval<Integer>()));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9044
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9045 template<typename T, typename Unsigned>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9046 using number_unsigned_function_t =
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9047 decltype(std::declval<T&>().number_unsigned(std::declval<Unsigned>()));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9048
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9049 template<typename T, typename Float, typename String>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9050 using number_float_function_t = decltype(std::declval<T&>().number_float(
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9051 std::declval<Float>(), std::declval<const String&>()));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9052
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9053 template<typename T, typename String>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9054 using string_function_t =
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9055 decltype(std::declval<T&>().string(std::declval<String&>()));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9056
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9057 template<typename T, typename Binary>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9058 using binary_function_t =
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9059 decltype(std::declval<T&>().binary(std::declval<Binary&>()));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9060
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9061 template<typename T>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9062 using start_object_function_t =
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9063 decltype(std::declval<T&>().start_object(std::declval<std::size_t>()));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9064
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9065 template<typename T, typename String>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9066 using key_function_t =
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9067 decltype(std::declval<T&>().key(std::declval<String&>()));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9068
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9069 template<typename T>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9070 using end_object_function_t = decltype(std::declval<T&>().end_object());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9071
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9072 template<typename T>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9073 using start_array_function_t =
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9074 decltype(std::declval<T&>().start_array(std::declval<std::size_t>()));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9075
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9076 template<typename T>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9077 using end_array_function_t = decltype(std::declval<T&>().end_array());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9078
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9079 template<typename T, typename Exception>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9080 using parse_error_function_t = decltype(std::declval<T&>().parse_error(
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9081 std::declval<std::size_t>(), std::declval<const std::string&>(),
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9082 std::declval<const Exception&>()));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9083
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9084 template<typename SAX, typename BasicJsonType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9085 struct is_sax
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9086 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9087 private:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9088 static_assert(is_basic_json<BasicJsonType>::value,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9089 "BasicJsonType must be of type basic_json<...>");
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9090
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9091 using number_integer_t = typename BasicJsonType::number_integer_t;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9092 using number_unsigned_t = typename BasicJsonType::number_unsigned_t;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9093 using number_float_t = typename BasicJsonType::number_float_t;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9094 using string_t = typename BasicJsonType::string_t;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9095 using binary_t = typename BasicJsonType::binary_t;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9096 using exception_t = typename BasicJsonType::exception;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9097
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9098 public:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9099 static constexpr bool value =
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9100 is_detected_exact<bool, null_function_t, SAX>::value &&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9101 is_detected_exact<bool, boolean_function_t, SAX>::value &&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9102 is_detected_exact<bool, number_integer_function_t, SAX, number_integer_t>::value &&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9103 is_detected_exact<bool, number_unsigned_function_t, SAX, number_unsigned_t>::value &&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9104 is_detected_exact<bool, number_float_function_t, SAX, number_float_t, string_t>::value &&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9105 is_detected_exact<bool, string_function_t, SAX, string_t>::value &&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9106 is_detected_exact<bool, binary_function_t, SAX, binary_t>::value &&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9107 is_detected_exact<bool, start_object_function_t, SAX>::value &&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9108 is_detected_exact<bool, key_function_t, SAX, string_t>::value &&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9109 is_detected_exact<bool, end_object_function_t, SAX>::value &&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9110 is_detected_exact<bool, start_array_function_t, SAX>::value &&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9111 is_detected_exact<bool, end_array_function_t, SAX>::value &&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9112 is_detected_exact<bool, parse_error_function_t, SAX, exception_t>::value;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9113 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9114
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9115 template<typename SAX, typename BasicJsonType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9116 struct is_sax_static_asserts
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9117 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9118 private:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9119 static_assert(is_basic_json<BasicJsonType>::value,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9120 "BasicJsonType must be of type basic_json<...>");
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9121
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9122 using number_integer_t = typename BasicJsonType::number_integer_t;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9123 using number_unsigned_t = typename BasicJsonType::number_unsigned_t;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9124 using number_float_t = typename BasicJsonType::number_float_t;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9125 using string_t = typename BasicJsonType::string_t;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9126 using binary_t = typename BasicJsonType::binary_t;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9127 using exception_t = typename BasicJsonType::exception;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9128
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9129 public:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9130 static_assert(is_detected_exact<bool, null_function_t, SAX>::value,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9131 "Missing/invalid function: bool null()");
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9132 static_assert(is_detected_exact<bool, boolean_function_t, SAX>::value,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9133 "Missing/invalid function: bool boolean(bool)");
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9134 static_assert(is_detected_exact<bool, boolean_function_t, SAX>::value,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9135 "Missing/invalid function: bool boolean(bool)");
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9136 static_assert(
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9137 is_detected_exact<bool, number_integer_function_t, SAX,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9138 number_integer_t>::value,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9139 "Missing/invalid function: bool number_integer(number_integer_t)");
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9140 static_assert(
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9141 is_detected_exact<bool, number_unsigned_function_t, SAX,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9142 number_unsigned_t>::value,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9143 "Missing/invalid function: bool number_unsigned(number_unsigned_t)");
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9144 static_assert(is_detected_exact<bool, number_float_function_t, SAX,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9145 number_float_t, string_t>::value,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9146 "Missing/invalid function: bool number_float(number_float_t, const string_t&)");
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9147 static_assert(
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9148 is_detected_exact<bool, string_function_t, SAX, string_t>::value,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9149 "Missing/invalid function: bool string(string_t&)");
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9150 static_assert(
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9151 is_detected_exact<bool, binary_function_t, SAX, binary_t>::value,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9152 "Missing/invalid function: bool binary(binary_t&)");
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9153 static_assert(is_detected_exact<bool, start_object_function_t, SAX>::value,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9154 "Missing/invalid function: bool start_object(std::size_t)");
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9155 static_assert(is_detected_exact<bool, key_function_t, SAX, string_t>::value,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9156 "Missing/invalid function: bool key(string_t&)");
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9157 static_assert(is_detected_exact<bool, end_object_function_t, SAX>::value,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9158 "Missing/invalid function: bool end_object()");
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9159 static_assert(is_detected_exact<bool, start_array_function_t, SAX>::value,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9160 "Missing/invalid function: bool start_array(std::size_t)");
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9161 static_assert(is_detected_exact<bool, end_array_function_t, SAX>::value,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9162 "Missing/invalid function: bool end_array()");
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9163 static_assert(
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9164 is_detected_exact<bool, parse_error_function_t, SAX, exception_t>::value,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9165 "Missing/invalid function: bool parse_error(std::size_t, const "
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9166 "std::string&, const exception&)");
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9167 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9168
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9169 } // namespace detail
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9170 NLOHMANN_JSON_NAMESPACE_END
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9171
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9172 // #include <nlohmann/detail/meta/type_traits.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9173
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9174 // #include <nlohmann/detail/string_concat.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9175
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9176 // #include <nlohmann/detail/value_t.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9177
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9178
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9179 NLOHMANN_JSON_NAMESPACE_BEGIN
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9180 namespace detail
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9181 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9182
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9183 /// how to treat CBOR tags
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9184 enum class cbor_tag_handler_t
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9185 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9186 error, ///< throw a parse_error exception in case of a tag
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9187 ignore, ///< ignore tags
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9188 store ///< store tags as binary type
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9189 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9190
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9191 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9192 @brief determine system byte order
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9193
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9194 @return true if and only if system's byte order is little endian
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9195
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9196 @note from https://stackoverflow.com/a/1001328/266378
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9197 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9198 static inline bool little_endianness(int num = 1) noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9199 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9200 return *reinterpret_cast<char*>(&num) == 1;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9201 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9202
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9203 ///////////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9204 // binary reader //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9205 ///////////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9206
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9207 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9208 @brief deserialization of CBOR, MessagePack, and UBJSON values
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9209 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9210 template<typename BasicJsonType, typename InputAdapterType, typename SAX = json_sax_dom_parser<BasicJsonType>>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9211 class binary_reader
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9212 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9213 using number_integer_t = typename BasicJsonType::number_integer_t;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9214 using number_unsigned_t = typename BasicJsonType::number_unsigned_t;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9215 using number_float_t = typename BasicJsonType::number_float_t;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9216 using string_t = typename BasicJsonType::string_t;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9217 using binary_t = typename BasicJsonType::binary_t;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9218 using json_sax_t = SAX;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9219 using char_type = typename InputAdapterType::char_type;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9220 using char_int_type = typename char_traits<char_type>::int_type;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9221
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9222 public:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9223 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9224 @brief create a binary reader
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9225
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9226 @param[in] adapter input adapter to read from
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9227 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9228 explicit binary_reader(InputAdapterType&& adapter, const input_format_t format = input_format_t::json) noexcept : ia(std::move(adapter)), input_format(format)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9229 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9230 (void)detail::is_sax_static_asserts<SAX, BasicJsonType> {};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9231 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9232
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9233 // make class move-only
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9234 binary_reader(const binary_reader&) = delete;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9235 binary_reader(binary_reader&&) = default; // NOLINT(hicpp-noexcept-move,performance-noexcept-move-constructor)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9236 binary_reader& operator=(const binary_reader&) = delete;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9237 binary_reader& operator=(binary_reader&&) = default; // NOLINT(hicpp-noexcept-move,performance-noexcept-move-constructor)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9238 ~binary_reader() = default;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9239
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9240 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9241 @param[in] format the binary format to parse
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9242 @param[in] sax_ a SAX event processor
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9243 @param[in] strict whether to expect the input to be consumed completed
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9244 @param[in] tag_handler how to treat CBOR tags
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9245
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9246 @return whether parsing was successful
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9247 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9248 JSON_HEDLEY_NON_NULL(3)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9249 bool sax_parse(const input_format_t format,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9250 json_sax_t* sax_,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9251 const bool strict = true,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9252 const cbor_tag_handler_t tag_handler = cbor_tag_handler_t::error)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9253 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9254 sax = sax_;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9255 bool result = false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9256
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9257 switch (format)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9258 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9259 case input_format_t::bson:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9260 result = parse_bson_internal();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9261 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9262
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9263 case input_format_t::cbor:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9264 result = parse_cbor_internal(true, tag_handler);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9265 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9266
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9267 case input_format_t::msgpack:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9268 result = parse_msgpack_internal();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9269 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9270
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9271 case input_format_t::ubjson:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9272 case input_format_t::bjdata:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9273 result = parse_ubjson_internal();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9274 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9275
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9276 case input_format_t::json: // LCOV_EXCL_LINE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9277 default: // LCOV_EXCL_LINE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9278 JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9279 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9280
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9281 // strict mode: next byte must be EOF
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9282 if (result && strict)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9283 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9284 if (input_format == input_format_t::ubjson || input_format == input_format_t::bjdata)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9285 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9286 get_ignore_noop();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9287 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9288 else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9289 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9290 get();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9291 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9292
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9293 if (JSON_HEDLEY_UNLIKELY(current != char_traits<char_type>::eof()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9294 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9295 return sax->parse_error(chars_read, get_token_string(), parse_error::create(110, chars_read,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9296 exception_message(input_format, concat("expected end of input; last byte: 0x", get_token_string()), "value"), nullptr));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9297 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9298 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9299
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9300 return result;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9301 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9302
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9303 private:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9304 //////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9305 // BSON //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9306 //////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9307
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9308 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9309 @brief Reads in a BSON-object and passes it to the SAX-parser.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9310 @return whether a valid BSON-value was passed to the SAX parser
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9311 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9312 bool parse_bson_internal()
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9313 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9314 std::int32_t document_size{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9315 get_number<std::int32_t, true>(input_format_t::bson, document_size);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9316
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9317 if (JSON_HEDLEY_UNLIKELY(!sax->start_object(static_cast<std::size_t>(-1))))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9318 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9319 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9320 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9321
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9322 if (JSON_HEDLEY_UNLIKELY(!parse_bson_element_list(/*is_array*/false)))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9323 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9324 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9325 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9326
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9327 return sax->end_object();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9328 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9329
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9330 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9331 @brief Parses a C-style string from the BSON input.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9332 @param[in,out] result A reference to the string variable where the read
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9333 string is to be stored.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9334 @return `true` if the \x00-byte indicating the end of the string was
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9335 encountered before the EOF; false` indicates an unexpected EOF.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9336 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9337 bool get_bson_cstr(string_t& result)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9338 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9339 auto out = std::back_inserter(result);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9340 while (true)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9341 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9342 get();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9343 if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::bson, "cstring")))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9344 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9345 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9346 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9347 if (current == 0x00)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9348 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9349 return true;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9350 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9351 *out++ = static_cast<typename string_t::value_type>(current);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9352 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9353 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9354
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9355 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9356 @brief Parses a zero-terminated string of length @a len from the BSON
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9357 input.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9358 @param[in] len The length (including the zero-byte at the end) of the
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9359 string to be read.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9360 @param[in,out] result A reference to the string variable where the read
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9361 string is to be stored.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9362 @tparam NumberType The type of the length @a len
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9363 @pre len >= 1
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9364 @return `true` if the string was successfully parsed
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9365 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9366 template<typename NumberType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9367 bool get_bson_string(const NumberType len, string_t& result)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9368 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9369 if (JSON_HEDLEY_UNLIKELY(len < 1))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9370 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9371 auto last_token = get_token_string();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9372 return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9373 exception_message(input_format_t::bson, concat("string length must be at least 1, is ", std::to_string(len)), "string"), nullptr));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9374 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9375
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9376 return get_string(input_format_t::bson, len - static_cast<NumberType>(1), result) && get() != char_traits<char_type>::eof();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9377 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9378
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9379 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9380 @brief Parses a byte array input of length @a len from the BSON input.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9381 @param[in] len The length of the byte array to be read.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9382 @param[in,out] result A reference to the binary variable where the read
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9383 array is to be stored.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9384 @tparam NumberType The type of the length @a len
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9385 @pre len >= 0
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9386 @return `true` if the byte array was successfully parsed
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9387 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9388 template<typename NumberType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9389 bool get_bson_binary(const NumberType len, binary_t& result)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9390 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9391 if (JSON_HEDLEY_UNLIKELY(len < 0))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9392 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9393 auto last_token = get_token_string();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9394 return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9395 exception_message(input_format_t::bson, concat("byte array length cannot be negative, is ", std::to_string(len)), "binary"), nullptr));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9396 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9397
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9398 // All BSON binary values have a subtype
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9399 std::uint8_t subtype{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9400 get_number<std::uint8_t>(input_format_t::bson, subtype);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9401 result.set_subtype(subtype);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9402
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9403 return get_binary(input_format_t::bson, len, result);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9404 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9405
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9406 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9407 @brief Read a BSON document element of the given @a element_type.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9408 @param[in] element_type The BSON element type, c.f. http://bsonspec.org/spec.html
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9409 @param[in] element_type_parse_position The position in the input stream,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9410 where the `element_type` was read.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9411 @warning Not all BSON element types are supported yet. An unsupported
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9412 @a element_type will give rise to a parse_error.114:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9413 Unsupported BSON record type 0x...
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9414 @return whether a valid BSON-object/array was passed to the SAX parser
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9415 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9416 bool parse_bson_element_internal(const char_int_type element_type,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9417 const std::size_t element_type_parse_position)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9418 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9419 switch (element_type)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9420 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9421 case 0x01: // double
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9422 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9423 double number{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9424 return get_number<double, true>(input_format_t::bson, number) && sax->number_float(static_cast<number_float_t>(number), "");
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9425 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9426
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9427 case 0x02: // string
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9428 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9429 std::int32_t len{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9430 string_t value;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9431 return get_number<std::int32_t, true>(input_format_t::bson, len) && get_bson_string(len, value) && sax->string(value);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9432 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9433
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9434 case 0x03: // object
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9435 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9436 return parse_bson_internal();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9437 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9438
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9439 case 0x04: // array
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9440 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9441 return parse_bson_array();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9442 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9443
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9444 case 0x05: // binary
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9445 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9446 std::int32_t len{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9447 binary_t value;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9448 return get_number<std::int32_t, true>(input_format_t::bson, len) && get_bson_binary(len, value) && sax->binary(value);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9449 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9450
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9451 case 0x08: // boolean
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9452 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9453 return sax->boolean(get() != 0);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9454 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9455
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9456 case 0x0A: // null
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9457 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9458 return sax->null();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9459 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9460
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9461 case 0x10: // int32
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9462 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9463 std::int32_t value{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9464 return get_number<std::int32_t, true>(input_format_t::bson, value) && sax->number_integer(value);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9465 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9466
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9467 case 0x12: // int64
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9468 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9469 std::int64_t value{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9470 return get_number<std::int64_t, true>(input_format_t::bson, value) && sax->number_integer(value);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9471 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9472
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9473 default: // anything else not supported (yet)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9474 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9475 std::array<char, 3> cr{{}};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9476 static_cast<void>((std::snprintf)(cr.data(), cr.size(), "%.2hhX", static_cast<unsigned char>(element_type))); // NOLINT(cppcoreguidelines-pro-type-vararg,hicpp-vararg)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9477 const std::string cr_str{cr.data()};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9478 return sax->parse_error(element_type_parse_position, cr_str,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9479 parse_error::create(114, element_type_parse_position, concat("Unsupported BSON record type 0x", cr_str), nullptr));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9480 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9481 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9482 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9483
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9484 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9485 @brief Read a BSON element list (as specified in the BSON-spec)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9486
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9487 The same binary layout is used for objects and arrays, hence it must be
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9488 indicated with the argument @a is_array which one is expected
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9489 (true --> array, false --> object).
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9490
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9491 @param[in] is_array Determines if the element list being read is to be
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9492 treated as an object (@a is_array == false), or as an
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9493 array (@a is_array == true).
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9494 @return whether a valid BSON-object/array was passed to the SAX parser
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9495 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9496 bool parse_bson_element_list(const bool is_array)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9497 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9498 string_t key;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9499
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9500 while (auto element_type = get())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9501 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9502 if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::bson, "element list")))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9503 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9504 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9505 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9506
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9507 const std::size_t element_type_parse_position = chars_read;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9508 if (JSON_HEDLEY_UNLIKELY(!get_bson_cstr(key)))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9509 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9510 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9511 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9512
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9513 if (!is_array && !sax->key(key))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9514 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9515 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9516 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9517
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9518 if (JSON_HEDLEY_UNLIKELY(!parse_bson_element_internal(element_type, element_type_parse_position)))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9519 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9520 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9521 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9522
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9523 // get_bson_cstr only appends
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9524 key.clear();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9525 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9526
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9527 return true;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9528 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9529
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9530 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9531 @brief Reads an array from the BSON input and passes it to the SAX-parser.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9532 @return whether a valid BSON-array was passed to the SAX parser
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9533 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9534 bool parse_bson_array()
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9535 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9536 std::int32_t document_size{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9537 get_number<std::int32_t, true>(input_format_t::bson, document_size);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9538
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9539 if (JSON_HEDLEY_UNLIKELY(!sax->start_array(static_cast<std::size_t>(-1))))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9540 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9541 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9542 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9543
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9544 if (JSON_HEDLEY_UNLIKELY(!parse_bson_element_list(/*is_array*/true)))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9545 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9546 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9547 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9548
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9549 return sax->end_array();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9550 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9551
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9552 //////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9553 // CBOR //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9554 //////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9555
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9556 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9557 @param[in] get_char whether a new character should be retrieved from the
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9558 input (true) or whether the last read character should
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9559 be considered instead (false)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9560 @param[in] tag_handler how CBOR tags should be treated
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9561
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9562 @return whether a valid CBOR value was passed to the SAX parser
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9563 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9564 bool parse_cbor_internal(const bool get_char,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9565 const cbor_tag_handler_t tag_handler)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9566 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9567 switch (get_char ? get() : current)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9568 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9569 // EOF
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9570 case char_traits<char_type>::eof():
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9571 return unexpect_eof(input_format_t::cbor, "value");
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9572
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9573 // Integer 0x00..0x17 (0..23)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9574 case 0x00:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9575 case 0x01:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9576 case 0x02:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9577 case 0x03:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9578 case 0x04:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9579 case 0x05:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9580 case 0x06:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9581 case 0x07:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9582 case 0x08:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9583 case 0x09:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9584 case 0x0A:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9585 case 0x0B:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9586 case 0x0C:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9587 case 0x0D:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9588 case 0x0E:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9589 case 0x0F:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9590 case 0x10:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9591 case 0x11:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9592 case 0x12:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9593 case 0x13:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9594 case 0x14:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9595 case 0x15:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9596 case 0x16:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9597 case 0x17:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9598 return sax->number_unsigned(static_cast<number_unsigned_t>(current));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9599
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9600 case 0x18: // Unsigned integer (one-byte uint8_t follows)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9601 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9602 std::uint8_t number{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9603 return get_number(input_format_t::cbor, number) && sax->number_unsigned(number);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9604 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9605
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9606 case 0x19: // Unsigned integer (two-byte uint16_t follows)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9607 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9608 std::uint16_t number{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9609 return get_number(input_format_t::cbor, number) && sax->number_unsigned(number);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9610 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9611
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9612 case 0x1A: // Unsigned integer (four-byte uint32_t follows)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9613 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9614 std::uint32_t number{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9615 return get_number(input_format_t::cbor, number) && sax->number_unsigned(number);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9616 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9617
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9618 case 0x1B: // Unsigned integer (eight-byte uint64_t follows)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9619 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9620 std::uint64_t number{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9621 return get_number(input_format_t::cbor, number) && sax->number_unsigned(number);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9622 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9623
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9624 // Negative integer -1-0x00..-1-0x17 (-1..-24)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9625 case 0x20:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9626 case 0x21:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9627 case 0x22:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9628 case 0x23:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9629 case 0x24:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9630 case 0x25:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9631 case 0x26:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9632 case 0x27:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9633 case 0x28:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9634 case 0x29:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9635 case 0x2A:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9636 case 0x2B:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9637 case 0x2C:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9638 case 0x2D:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9639 case 0x2E:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9640 case 0x2F:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9641 case 0x30:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9642 case 0x31:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9643 case 0x32:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9644 case 0x33:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9645 case 0x34:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9646 case 0x35:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9647 case 0x36:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9648 case 0x37:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9649 return sax->number_integer(static_cast<std::int8_t>(0x20 - 1 - current));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9650
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9651 case 0x38: // Negative integer (one-byte uint8_t follows)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9652 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9653 std::uint8_t number{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9654 return get_number(input_format_t::cbor, number) && sax->number_integer(static_cast<number_integer_t>(-1) - number);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9655 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9656
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9657 case 0x39: // Negative integer -1-n (two-byte uint16_t follows)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9658 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9659 std::uint16_t number{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9660 return get_number(input_format_t::cbor, number) && sax->number_integer(static_cast<number_integer_t>(-1) - number);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9661 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9662
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9663 case 0x3A: // Negative integer -1-n (four-byte uint32_t follows)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9664 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9665 std::uint32_t number{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9666 return get_number(input_format_t::cbor, number) && sax->number_integer(static_cast<number_integer_t>(-1) - number);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9667 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9668
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9669 case 0x3B: // Negative integer -1-n (eight-byte uint64_t follows)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9670 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9671 std::uint64_t number{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9672 return get_number(input_format_t::cbor, number) && sax->number_integer(static_cast<number_integer_t>(-1)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9673 - static_cast<number_integer_t>(number));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9674 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9675
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9676 // Binary data (0x00..0x17 bytes follow)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9677 case 0x40:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9678 case 0x41:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9679 case 0x42:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9680 case 0x43:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9681 case 0x44:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9682 case 0x45:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9683 case 0x46:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9684 case 0x47:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9685 case 0x48:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9686 case 0x49:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9687 case 0x4A:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9688 case 0x4B:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9689 case 0x4C:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9690 case 0x4D:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9691 case 0x4E:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9692 case 0x4F:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9693 case 0x50:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9694 case 0x51:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9695 case 0x52:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9696 case 0x53:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9697 case 0x54:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9698 case 0x55:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9699 case 0x56:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9700 case 0x57:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9701 case 0x58: // Binary data (one-byte uint8_t for n follows)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9702 case 0x59: // Binary data (two-byte uint16_t for n follow)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9703 case 0x5A: // Binary data (four-byte uint32_t for n follow)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9704 case 0x5B: // Binary data (eight-byte uint64_t for n follow)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9705 case 0x5F: // Binary data (indefinite length)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9706 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9707 binary_t b;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9708 return get_cbor_binary(b) && sax->binary(b);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9709 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9710
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9711 // UTF-8 string (0x00..0x17 bytes follow)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9712 case 0x60:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9713 case 0x61:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9714 case 0x62:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9715 case 0x63:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9716 case 0x64:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9717 case 0x65:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9718 case 0x66:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9719 case 0x67:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9720 case 0x68:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9721 case 0x69:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9722 case 0x6A:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9723 case 0x6B:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9724 case 0x6C:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9725 case 0x6D:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9726 case 0x6E:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9727 case 0x6F:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9728 case 0x70:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9729 case 0x71:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9730 case 0x72:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9731 case 0x73:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9732 case 0x74:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9733 case 0x75:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9734 case 0x76:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9735 case 0x77:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9736 case 0x78: // UTF-8 string (one-byte uint8_t for n follows)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9737 case 0x79: // UTF-8 string (two-byte uint16_t for n follow)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9738 case 0x7A: // UTF-8 string (four-byte uint32_t for n follow)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9739 case 0x7B: // UTF-8 string (eight-byte uint64_t for n follow)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9740 case 0x7F: // UTF-8 string (indefinite length)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9741 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9742 string_t s;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9743 return get_cbor_string(s) && sax->string(s);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9744 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9745
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9746 // array (0x00..0x17 data items follow)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9747 case 0x80:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9748 case 0x81:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9749 case 0x82:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9750 case 0x83:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9751 case 0x84:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9752 case 0x85:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9753 case 0x86:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9754 case 0x87:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9755 case 0x88:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9756 case 0x89:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9757 case 0x8A:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9758 case 0x8B:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9759 case 0x8C:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9760 case 0x8D:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9761 case 0x8E:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9762 case 0x8F:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9763 case 0x90:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9764 case 0x91:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9765 case 0x92:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9766 case 0x93:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9767 case 0x94:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9768 case 0x95:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9769 case 0x96:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9770 case 0x97:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9771 return get_cbor_array(
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9772 conditional_static_cast<std::size_t>(static_cast<unsigned int>(current) & 0x1Fu), tag_handler);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9773
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9774 case 0x98: // array (one-byte uint8_t for n follows)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9775 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9776 std::uint8_t len{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9777 return get_number(input_format_t::cbor, len) && get_cbor_array(static_cast<std::size_t>(len), tag_handler);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9778 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9779
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9780 case 0x99: // array (two-byte uint16_t for n follow)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9781 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9782 std::uint16_t len{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9783 return get_number(input_format_t::cbor, len) && get_cbor_array(static_cast<std::size_t>(len), tag_handler);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9784 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9785
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9786 case 0x9A: // array (four-byte uint32_t for n follow)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9787 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9788 std::uint32_t len{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9789 return get_number(input_format_t::cbor, len) && get_cbor_array(conditional_static_cast<std::size_t>(len), tag_handler);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9790 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9791
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9792 case 0x9B: // array (eight-byte uint64_t for n follow)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9793 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9794 std::uint64_t len{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9795 return get_number(input_format_t::cbor, len) && get_cbor_array(conditional_static_cast<std::size_t>(len), tag_handler);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9796 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9797
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9798 case 0x9F: // array (indefinite length)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9799 return get_cbor_array(static_cast<std::size_t>(-1), tag_handler);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9800
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9801 // map (0x00..0x17 pairs of data items follow)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9802 case 0xA0:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9803 case 0xA1:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9804 case 0xA2:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9805 case 0xA3:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9806 case 0xA4:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9807 case 0xA5:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9808 case 0xA6:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9809 case 0xA7:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9810 case 0xA8:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9811 case 0xA9:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9812 case 0xAA:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9813 case 0xAB:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9814 case 0xAC:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9815 case 0xAD:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9816 case 0xAE:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9817 case 0xAF:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9818 case 0xB0:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9819 case 0xB1:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9820 case 0xB2:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9821 case 0xB3:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9822 case 0xB4:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9823 case 0xB5:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9824 case 0xB6:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9825 case 0xB7:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9826 return get_cbor_object(conditional_static_cast<std::size_t>(static_cast<unsigned int>(current) & 0x1Fu), tag_handler);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9827
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9828 case 0xB8: // map (one-byte uint8_t for n follows)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9829 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9830 std::uint8_t len{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9831 return get_number(input_format_t::cbor, len) && get_cbor_object(static_cast<std::size_t>(len), tag_handler);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9832 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9833
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9834 case 0xB9: // map (two-byte uint16_t for n follow)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9835 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9836 std::uint16_t len{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9837 return get_number(input_format_t::cbor, len) && get_cbor_object(static_cast<std::size_t>(len), tag_handler);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9838 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9839
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9840 case 0xBA: // map (four-byte uint32_t for n follow)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9841 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9842 std::uint32_t len{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9843 return get_number(input_format_t::cbor, len) && get_cbor_object(conditional_static_cast<std::size_t>(len), tag_handler);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9844 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9845
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9846 case 0xBB: // map (eight-byte uint64_t for n follow)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9847 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9848 std::uint64_t len{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9849 return get_number(input_format_t::cbor, len) && get_cbor_object(conditional_static_cast<std::size_t>(len), tag_handler);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9850 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9851
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9852 case 0xBF: // map (indefinite length)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9853 return get_cbor_object(static_cast<std::size_t>(-1), tag_handler);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9854
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9855 case 0xC6: // tagged item
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9856 case 0xC7:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9857 case 0xC8:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9858 case 0xC9:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9859 case 0xCA:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9860 case 0xCB:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9861 case 0xCC:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9862 case 0xCD:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9863 case 0xCE:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9864 case 0xCF:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9865 case 0xD0:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9866 case 0xD1:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9867 case 0xD2:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9868 case 0xD3:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9869 case 0xD4:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9870 case 0xD8: // tagged item (1 bytes follow)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9871 case 0xD9: // tagged item (2 bytes follow)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9872 case 0xDA: // tagged item (4 bytes follow)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9873 case 0xDB: // tagged item (8 bytes follow)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9874 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9875 switch (tag_handler)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9876 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9877 case cbor_tag_handler_t::error:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9878 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9879 auto last_token = get_token_string();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9880 return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9881 exception_message(input_format_t::cbor, concat("invalid byte: 0x", last_token), "value"), nullptr));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9882 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9883
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9884 case cbor_tag_handler_t::ignore:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9885 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9886 // ignore binary subtype
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9887 switch (current)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9888 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9889 case 0xD8:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9890 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9891 std::uint8_t subtype_to_ignore{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9892 get_number(input_format_t::cbor, subtype_to_ignore);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9893 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9894 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9895 case 0xD9:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9896 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9897 std::uint16_t subtype_to_ignore{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9898 get_number(input_format_t::cbor, subtype_to_ignore);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9899 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9900 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9901 case 0xDA:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9902 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9903 std::uint32_t subtype_to_ignore{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9904 get_number(input_format_t::cbor, subtype_to_ignore);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9905 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9906 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9907 case 0xDB:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9908 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9909 std::uint64_t subtype_to_ignore{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9910 get_number(input_format_t::cbor, subtype_to_ignore);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9911 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9912 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9913 default:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9914 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9915 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9916 return parse_cbor_internal(true, tag_handler);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9917 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9918
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9919 case cbor_tag_handler_t::store:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9920 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9921 binary_t b;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9922 // use binary subtype and store in binary container
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9923 switch (current)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9924 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9925 case 0xD8:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9926 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9927 std::uint8_t subtype{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9928 get_number(input_format_t::cbor, subtype);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9929 b.set_subtype(detail::conditional_static_cast<typename binary_t::subtype_type>(subtype));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9930 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9931 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9932 case 0xD9:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9933 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9934 std::uint16_t subtype{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9935 get_number(input_format_t::cbor, subtype);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9936 b.set_subtype(detail::conditional_static_cast<typename binary_t::subtype_type>(subtype));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9937 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9938 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9939 case 0xDA:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9940 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9941 std::uint32_t subtype{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9942 get_number(input_format_t::cbor, subtype);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9943 b.set_subtype(detail::conditional_static_cast<typename binary_t::subtype_type>(subtype));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9944 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9945 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9946 case 0xDB:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9947 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9948 std::uint64_t subtype{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9949 get_number(input_format_t::cbor, subtype);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9950 b.set_subtype(detail::conditional_static_cast<typename binary_t::subtype_type>(subtype));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9951 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9952 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9953 default:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9954 return parse_cbor_internal(true, tag_handler);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9955 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9956 get();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9957 return get_cbor_binary(b) && sax->binary(b);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9958 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9959
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9960 default: // LCOV_EXCL_LINE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9961 JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9962 return false; // LCOV_EXCL_LINE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9963 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9964 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9965
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9966 case 0xF4: // false
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9967 return sax->boolean(false);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9968
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9969 case 0xF5: // true
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9970 return sax->boolean(true);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9971
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9972 case 0xF6: // null
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9973 return sax->null();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9974
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9975 case 0xF9: // Half-Precision Float (two-byte IEEE 754)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9976 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9977 const auto byte1_raw = get();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9978 if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::cbor, "number")))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9979 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9980 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9981 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9982 const auto byte2_raw = get();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9983 if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::cbor, "number")))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9984 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9985 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9986 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9987
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9988 const auto byte1 = static_cast<unsigned char>(byte1_raw);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9989 const auto byte2 = static_cast<unsigned char>(byte2_raw);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9990
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9991 // code from RFC 7049, Appendix D, Figure 3:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9992 // As half-precision floating-point numbers were only added
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9993 // to IEEE 754 in 2008, today's programming platforms often
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9994 // still only have limited support for them. It is very
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9995 // easy to include at least decoding support for them even
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9996 // without such support. An example of a small decoder for
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9997 // half-precision floating-point numbers in the C language
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9998 // is shown in Fig. 3.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9999 const auto half = static_cast<unsigned int>((byte1 << 8u) + byte2);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10000 const double val = [&half]
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10001 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10002 const int exp = (half >> 10u) & 0x1Fu;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10003 const unsigned int mant = half & 0x3FFu;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10004 JSON_ASSERT(0 <= exp&& exp <= 32);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10005 JSON_ASSERT(mant <= 1024);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10006 switch (exp)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10007 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10008 case 0:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10009 return std::ldexp(mant, -24);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10010 case 31:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10011 return (mant == 0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10012 ? std::numeric_limits<double>::infinity()
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10013 : std::numeric_limits<double>::quiet_NaN();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10014 default:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10015 return std::ldexp(mant + 1024, exp - 25);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10016 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10017 }();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10018 return sax->number_float((half & 0x8000u) != 0
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10019 ? static_cast<number_float_t>(-val)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10020 : static_cast<number_float_t>(val), "");
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10021 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10022
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10023 case 0xFA: // Single-Precision Float (four-byte IEEE 754)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10024 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10025 float number{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10026 return get_number(input_format_t::cbor, number) && sax->number_float(static_cast<number_float_t>(number), "");
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10027 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10028
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10029 case 0xFB: // Double-Precision Float (eight-byte IEEE 754)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10030 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10031 double number{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10032 return get_number(input_format_t::cbor, number) && sax->number_float(static_cast<number_float_t>(number), "");
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10033 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10034
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10035 default: // anything else (0xFF is handled inside the other types)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10036 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10037 auto last_token = get_token_string();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10038 return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10039 exception_message(input_format_t::cbor, concat("invalid byte: 0x", last_token), "value"), nullptr));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10040 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10041 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10042 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10043
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10044 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10045 @brief reads a CBOR string
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10046
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10047 This function first reads starting bytes to determine the expected
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10048 string length and then copies this number of bytes into a string.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10049 Additionally, CBOR's strings with indefinite lengths are supported.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10050
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10051 @param[out] result created string
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10052
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10053 @return whether string creation completed
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10054 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10055 bool get_cbor_string(string_t& result)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10056 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10057 if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::cbor, "string")))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10058 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10059 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10060 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10061
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10062 switch (current)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10063 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10064 // UTF-8 string (0x00..0x17 bytes follow)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10065 case 0x60:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10066 case 0x61:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10067 case 0x62:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10068 case 0x63:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10069 case 0x64:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10070 case 0x65:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10071 case 0x66:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10072 case 0x67:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10073 case 0x68:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10074 case 0x69:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10075 case 0x6A:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10076 case 0x6B:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10077 case 0x6C:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10078 case 0x6D:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10079 case 0x6E:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10080 case 0x6F:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10081 case 0x70:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10082 case 0x71:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10083 case 0x72:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10084 case 0x73:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10085 case 0x74:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10086 case 0x75:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10087 case 0x76:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10088 case 0x77:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10089 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10090 return get_string(input_format_t::cbor, static_cast<unsigned int>(current) & 0x1Fu, result);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10091 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10092
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10093 case 0x78: // UTF-8 string (one-byte uint8_t for n follows)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10094 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10095 std::uint8_t len{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10096 return get_number(input_format_t::cbor, len) && get_string(input_format_t::cbor, len, result);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10097 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10098
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10099 case 0x79: // UTF-8 string (two-byte uint16_t for n follow)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10100 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10101 std::uint16_t len{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10102 return get_number(input_format_t::cbor, len) && get_string(input_format_t::cbor, len, result);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10103 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10104
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10105 case 0x7A: // UTF-8 string (four-byte uint32_t for n follow)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10106 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10107 std::uint32_t len{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10108 return get_number(input_format_t::cbor, len) && get_string(input_format_t::cbor, len, result);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10109 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10110
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10111 case 0x7B: // UTF-8 string (eight-byte uint64_t for n follow)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10112 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10113 std::uint64_t len{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10114 return get_number(input_format_t::cbor, len) && get_string(input_format_t::cbor, len, result);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10115 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10116
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10117 case 0x7F: // UTF-8 string (indefinite length)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10118 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10119 while (get() != 0xFF)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10120 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10121 string_t chunk;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10122 if (!get_cbor_string(chunk))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10123 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10124 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10125 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10126 result.append(chunk);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10127 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10128 return true;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10129 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10130
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10131 default:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10132 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10133 auto last_token = get_token_string();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10134 return sax->parse_error(chars_read, last_token, parse_error::create(113, chars_read,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10135 exception_message(input_format_t::cbor, concat("expected length specification (0x60-0x7B) or indefinite string type (0x7F); last byte: 0x", last_token), "string"), nullptr));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10136 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10137 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10138 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10139
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10140 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10141 @brief reads a CBOR byte array
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10142
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10143 This function first reads starting bytes to determine the expected
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10144 byte array length and then copies this number of bytes into the byte array.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10145 Additionally, CBOR's byte arrays with indefinite lengths are supported.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10146
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10147 @param[out] result created byte array
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10148
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10149 @return whether byte array creation completed
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10150 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10151 bool get_cbor_binary(binary_t& result)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10152 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10153 if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::cbor, "binary")))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10154 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10155 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10156 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10157
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10158 switch (current)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10159 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10160 // Binary data (0x00..0x17 bytes follow)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10161 case 0x40:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10162 case 0x41:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10163 case 0x42:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10164 case 0x43:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10165 case 0x44:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10166 case 0x45:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10167 case 0x46:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10168 case 0x47:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10169 case 0x48:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10170 case 0x49:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10171 case 0x4A:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10172 case 0x4B:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10173 case 0x4C:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10174 case 0x4D:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10175 case 0x4E:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10176 case 0x4F:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10177 case 0x50:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10178 case 0x51:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10179 case 0x52:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10180 case 0x53:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10181 case 0x54:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10182 case 0x55:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10183 case 0x56:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10184 case 0x57:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10185 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10186 return get_binary(input_format_t::cbor, static_cast<unsigned int>(current) & 0x1Fu, result);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10187 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10188
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10189 case 0x58: // Binary data (one-byte uint8_t for n follows)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10190 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10191 std::uint8_t len{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10192 return get_number(input_format_t::cbor, len) &&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10193 get_binary(input_format_t::cbor, len, result);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10194 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10195
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10196 case 0x59: // Binary data (two-byte uint16_t for n follow)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10197 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10198 std::uint16_t len{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10199 return get_number(input_format_t::cbor, len) &&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10200 get_binary(input_format_t::cbor, len, result);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10201 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10202
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10203 case 0x5A: // Binary data (four-byte uint32_t for n follow)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10204 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10205 std::uint32_t len{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10206 return get_number(input_format_t::cbor, len) &&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10207 get_binary(input_format_t::cbor, len, result);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10208 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10209
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10210 case 0x5B: // Binary data (eight-byte uint64_t for n follow)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10211 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10212 std::uint64_t len{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10213 return get_number(input_format_t::cbor, len) &&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10214 get_binary(input_format_t::cbor, len, result);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10215 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10216
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10217 case 0x5F: // Binary data (indefinite length)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10218 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10219 while (get() != 0xFF)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10220 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10221 binary_t chunk;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10222 if (!get_cbor_binary(chunk))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10223 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10224 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10225 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10226 result.insert(result.end(), chunk.begin(), chunk.end());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10227 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10228 return true;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10229 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10230
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10231 default:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10232 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10233 auto last_token = get_token_string();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10234 return sax->parse_error(chars_read, last_token, parse_error::create(113, chars_read,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10235 exception_message(input_format_t::cbor, concat("expected length specification (0x40-0x5B) or indefinite binary array type (0x5F); last byte: 0x", last_token), "binary"), nullptr));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10236 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10237 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10238 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10239
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10240 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10241 @param[in] len the length of the array or static_cast<std::size_t>(-1) for an
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10242 array of indefinite size
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10243 @param[in] tag_handler how CBOR tags should be treated
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10244 @return whether array creation completed
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10245 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10246 bool get_cbor_array(const std::size_t len,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10247 const cbor_tag_handler_t tag_handler)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10248 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10249 if (JSON_HEDLEY_UNLIKELY(!sax->start_array(len)))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10250 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10251 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10252 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10253
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10254 if (len != static_cast<std::size_t>(-1))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10255 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10256 for (std::size_t i = 0; i < len; ++i)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10257 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10258 if (JSON_HEDLEY_UNLIKELY(!parse_cbor_internal(true, tag_handler)))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10259 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10260 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10261 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10262 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10263 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10264 else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10265 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10266 while (get() != 0xFF)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10267 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10268 if (JSON_HEDLEY_UNLIKELY(!parse_cbor_internal(false, tag_handler)))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10269 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10270 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10271 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10272 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10273 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10274
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10275 return sax->end_array();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10276 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10277
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10278 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10279 @param[in] len the length of the object or static_cast<std::size_t>(-1) for an
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10280 object of indefinite size
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10281 @param[in] tag_handler how CBOR tags should be treated
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10282 @return whether object creation completed
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10283 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10284 bool get_cbor_object(const std::size_t len,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10285 const cbor_tag_handler_t tag_handler)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10286 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10287 if (JSON_HEDLEY_UNLIKELY(!sax->start_object(len)))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10288 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10289 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10290 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10291
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10292 if (len != 0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10293 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10294 string_t key;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10295 if (len != static_cast<std::size_t>(-1))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10296 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10297 for (std::size_t i = 0; i < len; ++i)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10298 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10299 get();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10300 if (JSON_HEDLEY_UNLIKELY(!get_cbor_string(key) || !sax->key(key)))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10301 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10302 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10303 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10304
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10305 if (JSON_HEDLEY_UNLIKELY(!parse_cbor_internal(true, tag_handler)))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10306 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10307 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10308 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10309 key.clear();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10310 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10311 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10312 else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10313 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10314 while (get() != 0xFF)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10315 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10316 if (JSON_HEDLEY_UNLIKELY(!get_cbor_string(key) || !sax->key(key)))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10317 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10318 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10319 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10320
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10321 if (JSON_HEDLEY_UNLIKELY(!parse_cbor_internal(true, tag_handler)))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10322 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10323 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10324 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10325 key.clear();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10326 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10327 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10328 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10329
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10330 return sax->end_object();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10331 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10332
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10333 /////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10334 // MsgPack //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10335 /////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10336
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10337 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10338 @return whether a valid MessagePack value was passed to the SAX parser
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10339 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10340 bool parse_msgpack_internal()
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10341 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10342 switch (get())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10343 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10344 // EOF
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10345 case char_traits<char_type>::eof():
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10346 return unexpect_eof(input_format_t::msgpack, "value");
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10347
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10348 // positive fixint
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10349 case 0x00:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10350 case 0x01:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10351 case 0x02:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10352 case 0x03:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10353 case 0x04:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10354 case 0x05:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10355 case 0x06:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10356 case 0x07:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10357 case 0x08:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10358 case 0x09:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10359 case 0x0A:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10360 case 0x0B:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10361 case 0x0C:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10362 case 0x0D:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10363 case 0x0E:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10364 case 0x0F:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10365 case 0x10:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10366 case 0x11:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10367 case 0x12:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10368 case 0x13:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10369 case 0x14:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10370 case 0x15:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10371 case 0x16:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10372 case 0x17:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10373 case 0x18:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10374 case 0x19:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10375 case 0x1A:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10376 case 0x1B:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10377 case 0x1C:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10378 case 0x1D:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10379 case 0x1E:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10380 case 0x1F:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10381 case 0x20:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10382 case 0x21:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10383 case 0x22:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10384 case 0x23:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10385 case 0x24:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10386 case 0x25:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10387 case 0x26:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10388 case 0x27:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10389 case 0x28:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10390 case 0x29:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10391 case 0x2A:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10392 case 0x2B:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10393 case 0x2C:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10394 case 0x2D:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10395 case 0x2E:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10396 case 0x2F:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10397 case 0x30:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10398 case 0x31:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10399 case 0x32:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10400 case 0x33:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10401 case 0x34:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10402 case 0x35:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10403 case 0x36:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10404 case 0x37:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10405 case 0x38:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10406 case 0x39:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10407 case 0x3A:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10408 case 0x3B:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10409 case 0x3C:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10410 case 0x3D:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10411 case 0x3E:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10412 case 0x3F:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10413 case 0x40:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10414 case 0x41:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10415 case 0x42:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10416 case 0x43:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10417 case 0x44:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10418 case 0x45:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10419 case 0x46:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10420 case 0x47:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10421 case 0x48:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10422 case 0x49:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10423 case 0x4A:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10424 case 0x4B:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10425 case 0x4C:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10426 case 0x4D:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10427 case 0x4E:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10428 case 0x4F:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10429 case 0x50:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10430 case 0x51:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10431 case 0x52:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10432 case 0x53:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10433 case 0x54:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10434 case 0x55:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10435 case 0x56:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10436 case 0x57:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10437 case 0x58:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10438 case 0x59:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10439 case 0x5A:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10440 case 0x5B:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10441 case 0x5C:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10442 case 0x5D:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10443 case 0x5E:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10444 case 0x5F:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10445 case 0x60:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10446 case 0x61:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10447 case 0x62:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10448 case 0x63:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10449 case 0x64:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10450 case 0x65:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10451 case 0x66:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10452 case 0x67:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10453 case 0x68:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10454 case 0x69:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10455 case 0x6A:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10456 case 0x6B:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10457 case 0x6C:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10458 case 0x6D:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10459 case 0x6E:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10460 case 0x6F:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10461 case 0x70:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10462 case 0x71:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10463 case 0x72:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10464 case 0x73:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10465 case 0x74:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10466 case 0x75:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10467 case 0x76:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10468 case 0x77:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10469 case 0x78:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10470 case 0x79:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10471 case 0x7A:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10472 case 0x7B:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10473 case 0x7C:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10474 case 0x7D:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10475 case 0x7E:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10476 case 0x7F:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10477 return sax->number_unsigned(static_cast<number_unsigned_t>(current));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10478
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10479 // fixmap
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10480 case 0x80:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10481 case 0x81:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10482 case 0x82:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10483 case 0x83:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10484 case 0x84:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10485 case 0x85:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10486 case 0x86:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10487 case 0x87:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10488 case 0x88:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10489 case 0x89:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10490 case 0x8A:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10491 case 0x8B:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10492 case 0x8C:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10493 case 0x8D:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10494 case 0x8E:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10495 case 0x8F:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10496 return get_msgpack_object(conditional_static_cast<std::size_t>(static_cast<unsigned int>(current) & 0x0Fu));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10497
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10498 // fixarray
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10499 case 0x90:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10500 case 0x91:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10501 case 0x92:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10502 case 0x93:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10503 case 0x94:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10504 case 0x95:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10505 case 0x96:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10506 case 0x97:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10507 case 0x98:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10508 case 0x99:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10509 case 0x9A:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10510 case 0x9B:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10511 case 0x9C:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10512 case 0x9D:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10513 case 0x9E:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10514 case 0x9F:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10515 return get_msgpack_array(conditional_static_cast<std::size_t>(static_cast<unsigned int>(current) & 0x0Fu));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10516
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10517 // fixstr
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10518 case 0xA0:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10519 case 0xA1:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10520 case 0xA2:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10521 case 0xA3:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10522 case 0xA4:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10523 case 0xA5:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10524 case 0xA6:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10525 case 0xA7:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10526 case 0xA8:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10527 case 0xA9:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10528 case 0xAA:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10529 case 0xAB:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10530 case 0xAC:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10531 case 0xAD:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10532 case 0xAE:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10533 case 0xAF:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10534 case 0xB0:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10535 case 0xB1:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10536 case 0xB2:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10537 case 0xB3:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10538 case 0xB4:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10539 case 0xB5:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10540 case 0xB6:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10541 case 0xB7:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10542 case 0xB8:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10543 case 0xB9:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10544 case 0xBA:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10545 case 0xBB:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10546 case 0xBC:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10547 case 0xBD:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10548 case 0xBE:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10549 case 0xBF:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10550 case 0xD9: // str 8
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10551 case 0xDA: // str 16
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10552 case 0xDB: // str 32
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10553 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10554 string_t s;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10555 return get_msgpack_string(s) && sax->string(s);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10556 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10557
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10558 case 0xC0: // nil
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10559 return sax->null();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10560
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10561 case 0xC2: // false
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10562 return sax->boolean(false);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10563
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10564 case 0xC3: // true
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10565 return sax->boolean(true);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10566
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10567 case 0xC4: // bin 8
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10568 case 0xC5: // bin 16
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10569 case 0xC6: // bin 32
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10570 case 0xC7: // ext 8
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10571 case 0xC8: // ext 16
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10572 case 0xC9: // ext 32
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10573 case 0xD4: // fixext 1
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10574 case 0xD5: // fixext 2
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10575 case 0xD6: // fixext 4
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10576 case 0xD7: // fixext 8
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10577 case 0xD8: // fixext 16
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10578 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10579 binary_t b;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10580 return get_msgpack_binary(b) && sax->binary(b);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10581 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10582
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10583 case 0xCA: // float 32
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10584 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10585 float number{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10586 return get_number(input_format_t::msgpack, number) && sax->number_float(static_cast<number_float_t>(number), "");
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10587 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10588
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10589 case 0xCB: // float 64
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10590 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10591 double number{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10592 return get_number(input_format_t::msgpack, number) && sax->number_float(static_cast<number_float_t>(number), "");
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10593 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10594
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10595 case 0xCC: // uint 8
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10596 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10597 std::uint8_t number{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10598 return get_number(input_format_t::msgpack, number) && sax->number_unsigned(number);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10599 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10600
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10601 case 0xCD: // uint 16
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10602 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10603 std::uint16_t number{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10604 return get_number(input_format_t::msgpack, number) && sax->number_unsigned(number);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10605 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10606
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10607 case 0xCE: // uint 32
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10608 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10609 std::uint32_t number{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10610 return get_number(input_format_t::msgpack, number) && sax->number_unsigned(number);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10611 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10612
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10613 case 0xCF: // uint 64
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10614 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10615 std::uint64_t number{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10616 return get_number(input_format_t::msgpack, number) && sax->number_unsigned(number);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10617 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10618
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10619 case 0xD0: // int 8
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10620 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10621 std::int8_t number{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10622 return get_number(input_format_t::msgpack, number) && sax->number_integer(number);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10623 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10624
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10625 case 0xD1: // int 16
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10626 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10627 std::int16_t number{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10628 return get_number(input_format_t::msgpack, number) && sax->number_integer(number);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10629 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10630
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10631 case 0xD2: // int 32
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10632 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10633 std::int32_t number{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10634 return get_number(input_format_t::msgpack, number) && sax->number_integer(number);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10635 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10636
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10637 case 0xD3: // int 64
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10638 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10639 std::int64_t number{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10640 return get_number(input_format_t::msgpack, number) && sax->number_integer(number);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10641 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10642
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10643 case 0xDC: // array 16
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10644 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10645 std::uint16_t len{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10646 return get_number(input_format_t::msgpack, len) && get_msgpack_array(static_cast<std::size_t>(len));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10647 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10648
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10649 case 0xDD: // array 32
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10650 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10651 std::uint32_t len{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10652 return get_number(input_format_t::msgpack, len) && get_msgpack_array(conditional_static_cast<std::size_t>(len));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10653 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10654
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10655 case 0xDE: // map 16
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10656 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10657 std::uint16_t len{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10658 return get_number(input_format_t::msgpack, len) && get_msgpack_object(static_cast<std::size_t>(len));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10659 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10660
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10661 case 0xDF: // map 32
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10662 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10663 std::uint32_t len{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10664 return get_number(input_format_t::msgpack, len) && get_msgpack_object(conditional_static_cast<std::size_t>(len));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10665 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10666
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10667 // negative fixint
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10668 case 0xE0:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10669 case 0xE1:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10670 case 0xE2:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10671 case 0xE3:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10672 case 0xE4:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10673 case 0xE5:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10674 case 0xE6:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10675 case 0xE7:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10676 case 0xE8:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10677 case 0xE9:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10678 case 0xEA:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10679 case 0xEB:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10680 case 0xEC:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10681 case 0xED:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10682 case 0xEE:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10683 case 0xEF:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10684 case 0xF0:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10685 case 0xF1:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10686 case 0xF2:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10687 case 0xF3:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10688 case 0xF4:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10689 case 0xF5:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10690 case 0xF6:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10691 case 0xF7:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10692 case 0xF8:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10693 case 0xF9:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10694 case 0xFA:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10695 case 0xFB:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10696 case 0xFC:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10697 case 0xFD:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10698 case 0xFE:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10699 case 0xFF:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10700 return sax->number_integer(static_cast<std::int8_t>(current));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10701
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10702 default: // anything else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10703 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10704 auto last_token = get_token_string();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10705 return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10706 exception_message(input_format_t::msgpack, concat("invalid byte: 0x", last_token), "value"), nullptr));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10707 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10708 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10709 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10710
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10711 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10712 @brief reads a MessagePack string
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10713
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10714 This function first reads starting bytes to determine the expected
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10715 string length and then copies this number of bytes into a string.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10716
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10717 @param[out] result created string
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10718
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10719 @return whether string creation completed
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10720 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10721 bool get_msgpack_string(string_t& result)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10722 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10723 if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::msgpack, "string")))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10724 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10725 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10726 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10727
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10728 switch (current)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10729 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10730 // fixstr
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10731 case 0xA0:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10732 case 0xA1:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10733 case 0xA2:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10734 case 0xA3:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10735 case 0xA4:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10736 case 0xA5:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10737 case 0xA6:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10738 case 0xA7:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10739 case 0xA8:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10740 case 0xA9:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10741 case 0xAA:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10742 case 0xAB:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10743 case 0xAC:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10744 case 0xAD:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10745 case 0xAE:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10746 case 0xAF:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10747 case 0xB0:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10748 case 0xB1:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10749 case 0xB2:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10750 case 0xB3:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10751 case 0xB4:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10752 case 0xB5:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10753 case 0xB6:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10754 case 0xB7:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10755 case 0xB8:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10756 case 0xB9:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10757 case 0xBA:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10758 case 0xBB:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10759 case 0xBC:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10760 case 0xBD:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10761 case 0xBE:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10762 case 0xBF:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10763 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10764 return get_string(input_format_t::msgpack, static_cast<unsigned int>(current) & 0x1Fu, result);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10765 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10766
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10767 case 0xD9: // str 8
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10768 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10769 std::uint8_t len{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10770 return get_number(input_format_t::msgpack, len) && get_string(input_format_t::msgpack, len, result);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10771 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10772
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10773 case 0xDA: // str 16
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10774 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10775 std::uint16_t len{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10776 return get_number(input_format_t::msgpack, len) && get_string(input_format_t::msgpack, len, result);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10777 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10778
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10779 case 0xDB: // str 32
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10780 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10781 std::uint32_t len{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10782 return get_number(input_format_t::msgpack, len) && get_string(input_format_t::msgpack, len, result);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10783 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10784
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10785 default:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10786 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10787 auto last_token = get_token_string();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10788 return sax->parse_error(chars_read, last_token, parse_error::create(113, chars_read,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10789 exception_message(input_format_t::msgpack, concat("expected length specification (0xA0-0xBF, 0xD9-0xDB); last byte: 0x", last_token), "string"), nullptr));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10790 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10791 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10792 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10793
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10794 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10795 @brief reads a MessagePack byte array
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10796
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10797 This function first reads starting bytes to determine the expected
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10798 byte array length and then copies this number of bytes into a byte array.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10799
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10800 @param[out] result created byte array
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10801
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10802 @return whether byte array creation completed
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10803 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10804 bool get_msgpack_binary(binary_t& result)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10805 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10806 // helper function to set the subtype
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10807 auto assign_and_return_true = [&result](std::int8_t subtype)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10808 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10809 result.set_subtype(static_cast<std::uint8_t>(subtype));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10810 return true;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10811 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10812
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10813 switch (current)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10814 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10815 case 0xC4: // bin 8
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10816 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10817 std::uint8_t len{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10818 return get_number(input_format_t::msgpack, len) &&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10819 get_binary(input_format_t::msgpack, len, result);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10820 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10821
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10822 case 0xC5: // bin 16
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10823 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10824 std::uint16_t len{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10825 return get_number(input_format_t::msgpack, len) &&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10826 get_binary(input_format_t::msgpack, len, result);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10827 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10828
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10829 case 0xC6: // bin 32
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10830 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10831 std::uint32_t len{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10832 return get_number(input_format_t::msgpack, len) &&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10833 get_binary(input_format_t::msgpack, len, result);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10834 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10835
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10836 case 0xC7: // ext 8
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10837 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10838 std::uint8_t len{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10839 std::int8_t subtype{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10840 return get_number(input_format_t::msgpack, len) &&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10841 get_number(input_format_t::msgpack, subtype) &&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10842 get_binary(input_format_t::msgpack, len, result) &&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10843 assign_and_return_true(subtype);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10844 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10845
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10846 case 0xC8: // ext 16
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10847 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10848 std::uint16_t len{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10849 std::int8_t subtype{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10850 return get_number(input_format_t::msgpack, len) &&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10851 get_number(input_format_t::msgpack, subtype) &&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10852 get_binary(input_format_t::msgpack, len, result) &&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10853 assign_and_return_true(subtype);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10854 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10855
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10856 case 0xC9: // ext 32
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10857 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10858 std::uint32_t len{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10859 std::int8_t subtype{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10860 return get_number(input_format_t::msgpack, len) &&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10861 get_number(input_format_t::msgpack, subtype) &&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10862 get_binary(input_format_t::msgpack, len, result) &&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10863 assign_and_return_true(subtype);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10864 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10865
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10866 case 0xD4: // fixext 1
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10867 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10868 std::int8_t subtype{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10869 return get_number(input_format_t::msgpack, subtype) &&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10870 get_binary(input_format_t::msgpack, 1, result) &&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10871 assign_and_return_true(subtype);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10872 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10873
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10874 case 0xD5: // fixext 2
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10875 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10876 std::int8_t subtype{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10877 return get_number(input_format_t::msgpack, subtype) &&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10878 get_binary(input_format_t::msgpack, 2, result) &&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10879 assign_and_return_true(subtype);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10880 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10881
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10882 case 0xD6: // fixext 4
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10883 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10884 std::int8_t subtype{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10885 return get_number(input_format_t::msgpack, subtype) &&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10886 get_binary(input_format_t::msgpack, 4, result) &&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10887 assign_and_return_true(subtype);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10888 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10889
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10890 case 0xD7: // fixext 8
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10891 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10892 std::int8_t subtype{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10893 return get_number(input_format_t::msgpack, subtype) &&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10894 get_binary(input_format_t::msgpack, 8, result) &&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10895 assign_and_return_true(subtype);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10896 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10897
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10898 case 0xD8: // fixext 16
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10899 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10900 std::int8_t subtype{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10901 return get_number(input_format_t::msgpack, subtype) &&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10902 get_binary(input_format_t::msgpack, 16, result) &&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10903 assign_and_return_true(subtype);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10904 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10905
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10906 default: // LCOV_EXCL_LINE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10907 return false; // LCOV_EXCL_LINE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10908 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10909 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10910
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10911 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10912 @param[in] len the length of the array
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10913 @return whether array creation completed
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10914 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10915 bool get_msgpack_array(const std::size_t len)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10916 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10917 if (JSON_HEDLEY_UNLIKELY(!sax->start_array(len)))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10918 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10919 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10920 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10921
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10922 for (std::size_t i = 0; i < len; ++i)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10923 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10924 if (JSON_HEDLEY_UNLIKELY(!parse_msgpack_internal()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10925 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10926 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10927 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10928 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10929
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10930 return sax->end_array();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10931 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10932
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10933 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10934 @param[in] len the length of the object
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10935 @return whether object creation completed
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10936 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10937 bool get_msgpack_object(const std::size_t len)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10938 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10939 if (JSON_HEDLEY_UNLIKELY(!sax->start_object(len)))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10940 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10941 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10942 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10943
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10944 string_t key;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10945 for (std::size_t i = 0; i < len; ++i)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10946 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10947 get();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10948 if (JSON_HEDLEY_UNLIKELY(!get_msgpack_string(key) || !sax->key(key)))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10949 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10950 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10951 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10952
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10953 if (JSON_HEDLEY_UNLIKELY(!parse_msgpack_internal()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10954 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10955 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10956 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10957 key.clear();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10958 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10959
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10960 return sax->end_object();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10961 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10962
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10963 ////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10964 // UBJSON //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10965 ////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10966
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10967 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10968 @param[in] get_char whether a new character should be retrieved from the
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10969 input (true, default) or whether the last read
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10970 character should be considered instead
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10971
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10972 @return whether a valid UBJSON value was passed to the SAX parser
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10973 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10974 bool parse_ubjson_internal(const bool get_char = true)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10975 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10976 return get_ubjson_value(get_char ? get_ignore_noop() : current);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10977 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10978
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10979 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10980 @brief reads a UBJSON string
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10981
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10982 This function is either called after reading the 'S' byte explicitly
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10983 indicating a string, or in case of an object key where the 'S' byte can be
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10984 left out.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10985
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10986 @param[out] result created string
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10987 @param[in] get_char whether a new character should be retrieved from the
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10988 input (true, default) or whether the last read
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10989 character should be considered instead
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10990
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10991 @return whether string creation completed
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10992 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10993 bool get_ubjson_string(string_t& result, const bool get_char = true)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10994 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10995 if (get_char)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10996 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10997 get(); // TODO(niels): may we ignore N here?
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10998 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10999
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11000 if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format, "value")))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11001 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11002 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11003 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11004
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11005 switch (current)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11006 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11007 case 'U':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11008 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11009 std::uint8_t len{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11010 return get_number(input_format, len) && get_string(input_format, len, result);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11011 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11012
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11013 case 'i':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11014 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11015 std::int8_t len{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11016 return get_number(input_format, len) && get_string(input_format, len, result);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11017 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11018
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11019 case 'I':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11020 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11021 std::int16_t len{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11022 return get_number(input_format, len) && get_string(input_format, len, result);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11023 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11024
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11025 case 'l':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11026 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11027 std::int32_t len{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11028 return get_number(input_format, len) && get_string(input_format, len, result);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11029 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11030
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11031 case 'L':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11032 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11033 std::int64_t len{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11034 return get_number(input_format, len) && get_string(input_format, len, result);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11035 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11036
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11037 case 'u':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11038 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11039 if (input_format != input_format_t::bjdata)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11040 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11041 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11042 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11043 std::uint16_t len{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11044 return get_number(input_format, len) && get_string(input_format, len, result);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11045 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11046
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11047 case 'm':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11048 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11049 if (input_format != input_format_t::bjdata)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11050 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11051 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11052 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11053 std::uint32_t len{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11054 return get_number(input_format, len) && get_string(input_format, len, result);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11055 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11056
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11057 case 'M':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11058 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11059 if (input_format != input_format_t::bjdata)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11060 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11061 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11062 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11063 std::uint64_t len{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11064 return get_number(input_format, len) && get_string(input_format, len, result);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11065 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11066
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11067 default:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11068 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11069 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11070 auto last_token = get_token_string();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11071 std::string message;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11072
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11073 if (input_format != input_format_t::bjdata)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11074 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11075 message = "expected length type specification (U, i, I, l, L); last byte: 0x" + last_token;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11076 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11077 else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11078 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11079 message = "expected length type specification (U, i, u, I, m, l, M, L); last byte: 0x" + last_token;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11080 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11081 return sax->parse_error(chars_read, last_token, parse_error::create(113, chars_read, exception_message(input_format, message, "string"), nullptr));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11082 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11083
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11084 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11085 @param[out] dim an integer vector storing the ND array dimensions
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11086 @return whether reading ND array size vector is successful
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11087 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11088 bool get_ubjson_ndarray_size(std::vector<size_t>& dim)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11089 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11090 std::pair<std::size_t, char_int_type> size_and_type;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11091 size_t dimlen = 0;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11092 bool no_ndarray = true;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11093
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11094 if (JSON_HEDLEY_UNLIKELY(!get_ubjson_size_type(size_and_type, no_ndarray)))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11095 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11096 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11097 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11098
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11099 if (size_and_type.first != npos)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11100 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11101 if (size_and_type.second != 0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11102 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11103 if (size_and_type.second != 'N')
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11104 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11105 for (std::size_t i = 0; i < size_and_type.first; ++i)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11106 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11107 if (JSON_HEDLEY_UNLIKELY(!get_ubjson_size_value(dimlen, no_ndarray, size_and_type.second)))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11108 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11109 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11110 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11111 dim.push_back(dimlen);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11112 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11113 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11114 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11115 else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11116 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11117 for (std::size_t i = 0; i < size_and_type.first; ++i)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11118 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11119 if (JSON_HEDLEY_UNLIKELY(!get_ubjson_size_value(dimlen, no_ndarray)))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11120 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11121 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11122 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11123 dim.push_back(dimlen);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11124 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11125 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11126 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11127 else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11128 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11129 while (current != ']')
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11130 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11131 if (JSON_HEDLEY_UNLIKELY(!get_ubjson_size_value(dimlen, no_ndarray, current)))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11132 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11133 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11134 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11135 dim.push_back(dimlen);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11136 get_ignore_noop();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11137 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11138 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11139 return true;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11140 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11141
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11142 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11143 @param[out] result determined size
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11144 @param[in,out] is_ndarray for input, `true` means already inside an ndarray vector
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11145 or ndarray dimension is not allowed; `false` means ndarray
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11146 is allowed; for output, `true` means an ndarray is found;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11147 is_ndarray can only return `true` when its initial value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11148 is `false`
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11149 @param[in] prefix type marker if already read, otherwise set to 0
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11150
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11151 @return whether size determination completed
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11152 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11153 bool get_ubjson_size_value(std::size_t& result, bool& is_ndarray, char_int_type prefix = 0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11154 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11155 if (prefix == 0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11156 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11157 prefix = get_ignore_noop();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11158 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11159
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11160 switch (prefix)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11161 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11162 case 'U':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11163 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11164 std::uint8_t number{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11165 if (JSON_HEDLEY_UNLIKELY(!get_number(input_format, number)))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11166 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11167 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11168 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11169 result = static_cast<std::size_t>(number);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11170 return true;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11171 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11172
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11173 case 'i':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11174 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11175 std::int8_t number{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11176 if (JSON_HEDLEY_UNLIKELY(!get_number(input_format, number)))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11177 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11178 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11179 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11180 if (number < 0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11181 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11182 return sax->parse_error(chars_read, get_token_string(), parse_error::create(113, chars_read,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11183 exception_message(input_format, "count in an optimized container must be positive", "size"), nullptr));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11184 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11185 result = static_cast<std::size_t>(number); // NOLINT(bugprone-signed-char-misuse,cert-str34-c): number is not a char
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11186 return true;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11187 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11188
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11189 case 'I':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11190 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11191 std::int16_t number{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11192 if (JSON_HEDLEY_UNLIKELY(!get_number(input_format, number)))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11193 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11194 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11195 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11196 if (number < 0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11197 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11198 return sax->parse_error(chars_read, get_token_string(), parse_error::create(113, chars_read,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11199 exception_message(input_format, "count in an optimized container must be positive", "size"), nullptr));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11200 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11201 result = static_cast<std::size_t>(number);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11202 return true;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11203 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11204
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11205 case 'l':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11206 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11207 std::int32_t number{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11208 if (JSON_HEDLEY_UNLIKELY(!get_number(input_format, number)))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11209 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11210 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11211 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11212 if (number < 0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11213 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11214 return sax->parse_error(chars_read, get_token_string(), parse_error::create(113, chars_read,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11215 exception_message(input_format, "count in an optimized container must be positive", "size"), nullptr));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11216 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11217 result = static_cast<std::size_t>(number);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11218 return true;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11219 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11220
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11221 case 'L':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11222 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11223 std::int64_t number{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11224 if (JSON_HEDLEY_UNLIKELY(!get_number(input_format, number)))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11225 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11226 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11227 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11228 if (number < 0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11229 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11230 return sax->parse_error(chars_read, get_token_string(), parse_error::create(113, chars_read,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11231 exception_message(input_format, "count in an optimized container must be positive", "size"), nullptr));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11232 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11233 if (!value_in_range_of<std::size_t>(number))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11234 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11235 return sax->parse_error(chars_read, get_token_string(), out_of_range::create(408,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11236 exception_message(input_format, "integer value overflow", "size"), nullptr));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11237 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11238 result = static_cast<std::size_t>(number);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11239 return true;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11240 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11241
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11242 case 'u':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11243 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11244 if (input_format != input_format_t::bjdata)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11245 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11246 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11247 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11248 std::uint16_t number{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11249 if (JSON_HEDLEY_UNLIKELY(!get_number(input_format, number)))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11250 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11251 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11252 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11253 result = static_cast<std::size_t>(number);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11254 return true;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11255 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11256
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11257 case 'm':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11258 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11259 if (input_format != input_format_t::bjdata)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11260 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11261 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11262 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11263 std::uint32_t number{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11264 if (JSON_HEDLEY_UNLIKELY(!get_number(input_format, number)))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11265 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11266 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11267 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11268 result = conditional_static_cast<std::size_t>(number);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11269 return true;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11270 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11271
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11272 case 'M':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11273 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11274 if (input_format != input_format_t::bjdata)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11275 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11276 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11277 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11278 std::uint64_t number{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11279 if (JSON_HEDLEY_UNLIKELY(!get_number(input_format, number)))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11280 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11281 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11282 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11283 if (!value_in_range_of<std::size_t>(number))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11284 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11285 return sax->parse_error(chars_read, get_token_string(), out_of_range::create(408,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11286 exception_message(input_format, "integer value overflow", "size"), nullptr));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11287 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11288 result = detail::conditional_static_cast<std::size_t>(number);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11289 return true;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11290 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11291
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11292 case '[':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11293 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11294 if (input_format != input_format_t::bjdata)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11295 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11296 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11297 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11298 if (is_ndarray) // ndarray dimensional vector can only contain integers, and can not embed another array
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11299 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11300 return sax->parse_error(chars_read, get_token_string(), parse_error::create(113, chars_read, exception_message(input_format, "ndarray dimensional vector is not allowed", "size"), nullptr));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11301 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11302 std::vector<size_t> dim;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11303 if (JSON_HEDLEY_UNLIKELY(!get_ubjson_ndarray_size(dim)))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11304 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11305 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11306 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11307 if (dim.size() == 1 || (dim.size() == 2 && dim.at(0) == 1)) // return normal array size if 1D row vector
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11308 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11309 result = dim.at(dim.size() - 1);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11310 return true;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11311 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11312 if (!dim.empty()) // if ndarray, convert to an object in JData annotated array format
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11313 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11314 for (auto i : dim) // test if any dimension in an ndarray is 0, if so, return a 1D empty container
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11315 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11316 if ( i == 0 )
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11317 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11318 result = 0;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11319 return true;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11320 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11321 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11322
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11323 string_t key = "_ArraySize_";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11324 if (JSON_HEDLEY_UNLIKELY(!sax->start_object(3) || !sax->key(key) || !sax->start_array(dim.size())))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11325 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11326 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11327 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11328 result = 1;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11329 for (auto i : dim)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11330 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11331 result *= i;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11332 if (result == 0 || result == npos) // because dim elements shall not have zeros, result = 0 means overflow happened; it also can't be npos as it is used to initialize size in get_ubjson_size_type()
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11333 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11334 return sax->parse_error(chars_read, get_token_string(), out_of_range::create(408, exception_message(input_format, "excessive ndarray size caused overflow", "size"), nullptr));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11335 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11336 if (JSON_HEDLEY_UNLIKELY(!sax->number_unsigned(static_cast<number_unsigned_t>(i))))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11337 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11338 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11339 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11340 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11341 is_ndarray = true;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11342 return sax->end_array();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11343 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11344 result = 0;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11345 return true;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11346 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11347
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11348 default:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11349 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11350 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11351 auto last_token = get_token_string();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11352 std::string message;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11353
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11354 if (input_format != input_format_t::bjdata)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11355 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11356 message = "expected length type specification (U, i, I, l, L) after '#'; last byte: 0x" + last_token;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11357 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11358 else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11359 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11360 message = "expected length type specification (U, i, u, I, m, l, M, L) after '#'; last byte: 0x" + last_token;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11361 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11362 return sax->parse_error(chars_read, last_token, parse_error::create(113, chars_read, exception_message(input_format, message, "size"), nullptr));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11363 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11364
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11365 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11366 @brief determine the type and size for a container
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11367
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11368 In the optimized UBJSON format, a type and a size can be provided to allow
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11369 for a more compact representation.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11370
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11371 @param[out] result pair of the size and the type
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11372 @param[in] inside_ndarray whether the parser is parsing an ND array dimensional vector
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11373
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11374 @return whether pair creation completed
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11375 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11376 bool get_ubjson_size_type(std::pair<std::size_t, char_int_type>& result, bool inside_ndarray = false)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11377 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11378 result.first = npos; // size
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11379 result.second = 0; // type
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11380 bool is_ndarray = false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11381
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11382 get_ignore_noop();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11383
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11384 if (current == '$')
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11385 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11386 result.second = get(); // must not ignore 'N', because 'N' maybe the type
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11387 if (input_format == input_format_t::bjdata
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11388 && JSON_HEDLEY_UNLIKELY(std::binary_search(bjd_optimized_type_markers.begin(), bjd_optimized_type_markers.end(), result.second)))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11389 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11390 auto last_token = get_token_string();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11391 return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11392 exception_message(input_format, concat("marker 0x", last_token, " is not a permitted optimized array type"), "type"), nullptr));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11393 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11394
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11395 if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format, "type")))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11396 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11397 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11398 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11399
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11400 get_ignore_noop();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11401 if (JSON_HEDLEY_UNLIKELY(current != '#'))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11402 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11403 if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format, "value")))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11404 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11405 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11406 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11407 auto last_token = get_token_string();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11408 return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11409 exception_message(input_format, concat("expected '#' after type information; last byte: 0x", last_token), "size"), nullptr));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11410 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11411
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11412 const bool is_error = get_ubjson_size_value(result.first, is_ndarray);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11413 if (input_format == input_format_t::bjdata && is_ndarray)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11414 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11415 if (inside_ndarray)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11416 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11417 return sax->parse_error(chars_read, get_token_string(), parse_error::create(112, chars_read,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11418 exception_message(input_format, "ndarray can not be recursive", "size"), nullptr));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11419 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11420 result.second |= (1 << 8); // use bit 8 to indicate ndarray, all UBJSON and BJData markers should be ASCII letters
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11421 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11422 return is_error;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11423 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11424
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11425 if (current == '#')
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11426 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11427 const bool is_error = get_ubjson_size_value(result.first, is_ndarray);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11428 if (input_format == input_format_t::bjdata && is_ndarray)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11429 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11430 return sax->parse_error(chars_read, get_token_string(), parse_error::create(112, chars_read,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11431 exception_message(input_format, "ndarray requires both type and size", "size"), nullptr));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11432 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11433 return is_error;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11434 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11435
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11436 return true;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11437 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11438
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11439 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11440 @param prefix the previously read or set type prefix
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11441 @return whether value creation completed
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11442 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11443 bool get_ubjson_value(const char_int_type prefix)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11444 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11445 switch (prefix)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11446 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11447 case char_traits<char_type>::eof(): // EOF
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11448 return unexpect_eof(input_format, "value");
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11449
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11450 case 'T': // true
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11451 return sax->boolean(true);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11452 case 'F': // false
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11453 return sax->boolean(false);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11454
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11455 case 'Z': // null
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11456 return sax->null();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11457
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11458 case 'U':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11459 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11460 std::uint8_t number{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11461 return get_number(input_format, number) && sax->number_unsigned(number);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11462 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11463
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11464 case 'i':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11465 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11466 std::int8_t number{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11467 return get_number(input_format, number) && sax->number_integer(number);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11468 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11469
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11470 case 'I':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11471 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11472 std::int16_t number{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11473 return get_number(input_format, number) && sax->number_integer(number);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11474 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11475
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11476 case 'l':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11477 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11478 std::int32_t number{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11479 return get_number(input_format, number) && sax->number_integer(number);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11480 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11481
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11482 case 'L':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11483 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11484 std::int64_t number{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11485 return get_number(input_format, number) && sax->number_integer(number);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11486 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11487
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11488 case 'u':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11489 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11490 if (input_format != input_format_t::bjdata)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11491 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11492 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11493 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11494 std::uint16_t number{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11495 return get_number(input_format, number) && sax->number_unsigned(number);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11496 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11497
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11498 case 'm':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11499 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11500 if (input_format != input_format_t::bjdata)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11501 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11502 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11503 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11504 std::uint32_t number{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11505 return get_number(input_format, number) && sax->number_unsigned(number);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11506 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11507
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11508 case 'M':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11509 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11510 if (input_format != input_format_t::bjdata)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11511 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11512 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11513 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11514 std::uint64_t number{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11515 return get_number(input_format, number) && sax->number_unsigned(number);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11516 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11517
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11518 case 'h':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11519 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11520 if (input_format != input_format_t::bjdata)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11521 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11522 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11523 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11524 const auto byte1_raw = get();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11525 if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format, "number")))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11526 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11527 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11528 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11529 const auto byte2_raw = get();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11530 if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format, "number")))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11531 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11532 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11533 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11534
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11535 const auto byte1 = static_cast<unsigned char>(byte1_raw);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11536 const auto byte2 = static_cast<unsigned char>(byte2_raw);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11537
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11538 // code from RFC 7049, Appendix D, Figure 3:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11539 // As half-precision floating-point numbers were only added
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11540 // to IEEE 754 in 2008, today's programming platforms often
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11541 // still only have limited support for them. It is very
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11542 // easy to include at least decoding support for them even
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11543 // without such support. An example of a small decoder for
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11544 // half-precision floating-point numbers in the C language
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11545 // is shown in Fig. 3.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11546 const auto half = static_cast<unsigned int>((byte2 << 8u) + byte1);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11547 const double val = [&half]
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11548 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11549 const int exp = (half >> 10u) & 0x1Fu;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11550 const unsigned int mant = half & 0x3FFu;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11551 JSON_ASSERT(0 <= exp&& exp <= 32);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11552 JSON_ASSERT(mant <= 1024);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11553 switch (exp)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11554 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11555 case 0:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11556 return std::ldexp(mant, -24);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11557 case 31:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11558 return (mant == 0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11559 ? std::numeric_limits<double>::infinity()
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11560 : std::numeric_limits<double>::quiet_NaN();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11561 default:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11562 return std::ldexp(mant + 1024, exp - 25);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11563 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11564 }();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11565 return sax->number_float((half & 0x8000u) != 0
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11566 ? static_cast<number_float_t>(-val)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11567 : static_cast<number_float_t>(val), "");
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11568 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11569
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11570 case 'd':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11571 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11572 float number{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11573 return get_number(input_format, number) && sax->number_float(static_cast<number_float_t>(number), "");
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11574 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11575
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11576 case 'D':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11577 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11578 double number{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11579 return get_number(input_format, number) && sax->number_float(static_cast<number_float_t>(number), "");
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11580 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11581
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11582 case 'H':
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11583 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11584 return get_ubjson_high_precision_number();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11585 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11586
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11587 case 'C': // char
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11588 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11589 get();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11590 if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format, "char")))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11591 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11592 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11593 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11594 if (JSON_HEDLEY_UNLIKELY(current > 127))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11595 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11596 auto last_token = get_token_string();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11597 return sax->parse_error(chars_read, last_token, parse_error::create(113, chars_read,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11598 exception_message(input_format, concat("byte after 'C' must be in range 0x00..0x7F; last byte: 0x", last_token), "char"), nullptr));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11599 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11600 string_t s(1, static_cast<typename string_t::value_type>(current));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11601 return sax->string(s);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11602 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11603
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11604 case 'S': // string
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11605 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11606 string_t s;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11607 return get_ubjson_string(s) && sax->string(s);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11608 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11609
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11610 case '[': // array
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11611 return get_ubjson_array();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11612
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11613 case '{': // object
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11614 return get_ubjson_object();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11615
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11616 default: // anything else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11617 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11618 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11619 auto last_token = get_token_string();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11620 return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, exception_message(input_format, "invalid byte: 0x" + last_token, "value"), nullptr));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11621 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11622
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11623 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11624 @return whether array creation completed
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11625 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11626 bool get_ubjson_array()
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11627 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11628 std::pair<std::size_t, char_int_type> size_and_type;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11629 if (JSON_HEDLEY_UNLIKELY(!get_ubjson_size_type(size_and_type)))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11630 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11631 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11632 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11633
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11634 // if bit-8 of size_and_type.second is set to 1, encode bjdata ndarray as an object in JData annotated array format (https://github.com/NeuroJSON/jdata):
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11635 // {"_ArrayType_" : "typeid", "_ArraySize_" : [n1, n2, ...], "_ArrayData_" : [v1, v2, ...]}
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11636
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11637 if (input_format == input_format_t::bjdata && size_and_type.first != npos && (size_and_type.second & (1 << 8)) != 0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11638 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11639 size_and_type.second &= ~(static_cast<char_int_type>(1) << 8); // use bit 8 to indicate ndarray, here we remove the bit to restore the type marker
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11640 auto it = std::lower_bound(bjd_types_map.begin(), bjd_types_map.end(), size_and_type.second, [](const bjd_type & p, char_int_type t)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11641 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11642 return p.first < t;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11643 });
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11644 string_t key = "_ArrayType_";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11645 if (JSON_HEDLEY_UNLIKELY(it == bjd_types_map.end() || it->first != size_and_type.second))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11646 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11647 auto last_token = get_token_string();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11648 return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11649 exception_message(input_format, "invalid byte: 0x" + last_token, "type"), nullptr));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11650 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11651
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11652 string_t type = it->second; // sax->string() takes a reference
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11653 if (JSON_HEDLEY_UNLIKELY(!sax->key(key) || !sax->string(type)))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11654 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11655 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11656 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11657
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11658 if (size_and_type.second == 'C')
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11659 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11660 size_and_type.second = 'U';
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11661 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11662
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11663 key = "_ArrayData_";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11664 if (JSON_HEDLEY_UNLIKELY(!sax->key(key) || !sax->start_array(size_and_type.first) ))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11665 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11666 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11667 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11668
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11669 for (std::size_t i = 0; i < size_and_type.first; ++i)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11670 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11671 if (JSON_HEDLEY_UNLIKELY(!get_ubjson_value(size_and_type.second)))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11672 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11673 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11674 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11675 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11676
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11677 return (sax->end_array() && sax->end_object());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11678 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11679
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11680 if (size_and_type.first != npos)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11681 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11682 if (JSON_HEDLEY_UNLIKELY(!sax->start_array(size_and_type.first)))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11683 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11684 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11685 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11686
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11687 if (size_and_type.second != 0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11688 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11689 if (size_and_type.second != 'N')
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11690 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11691 for (std::size_t i = 0; i < size_and_type.first; ++i)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11692 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11693 if (JSON_HEDLEY_UNLIKELY(!get_ubjson_value(size_and_type.second)))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11694 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11695 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11696 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11697 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11698 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11699 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11700 else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11701 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11702 for (std::size_t i = 0; i < size_and_type.first; ++i)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11703 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11704 if (JSON_HEDLEY_UNLIKELY(!parse_ubjson_internal()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11705 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11706 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11707 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11708 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11709 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11710 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11711 else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11712 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11713 if (JSON_HEDLEY_UNLIKELY(!sax->start_array(static_cast<std::size_t>(-1))))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11714 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11715 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11716 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11717
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11718 while (current != ']')
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11719 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11720 if (JSON_HEDLEY_UNLIKELY(!parse_ubjson_internal(false)))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11721 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11722 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11723 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11724 get_ignore_noop();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11725 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11726 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11727
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11728 return sax->end_array();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11729 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11730
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11731 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11732 @return whether object creation completed
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11733 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11734 bool get_ubjson_object()
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11735 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11736 std::pair<std::size_t, char_int_type> size_and_type;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11737 if (JSON_HEDLEY_UNLIKELY(!get_ubjson_size_type(size_and_type)))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11738 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11739 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11740 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11741
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11742 // do not accept ND-array size in objects in BJData
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11743 if (input_format == input_format_t::bjdata && size_and_type.first != npos && (size_and_type.second & (1 << 8)) != 0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11744 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11745 auto last_token = get_token_string();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11746 return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11747 exception_message(input_format, "BJData object does not support ND-array size in optimized format", "object"), nullptr));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11748 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11749
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11750 string_t key;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11751 if (size_and_type.first != npos)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11752 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11753 if (JSON_HEDLEY_UNLIKELY(!sax->start_object(size_and_type.first)))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11754 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11755 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11756 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11757
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11758 if (size_and_type.second != 0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11759 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11760 for (std::size_t i = 0; i < size_and_type.first; ++i)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11761 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11762 if (JSON_HEDLEY_UNLIKELY(!get_ubjson_string(key) || !sax->key(key)))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11763 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11764 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11765 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11766 if (JSON_HEDLEY_UNLIKELY(!get_ubjson_value(size_and_type.second)))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11767 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11768 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11769 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11770 key.clear();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11771 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11772 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11773 else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11774 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11775 for (std::size_t i = 0; i < size_and_type.first; ++i)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11776 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11777 if (JSON_HEDLEY_UNLIKELY(!get_ubjson_string(key) || !sax->key(key)))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11778 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11779 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11780 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11781 if (JSON_HEDLEY_UNLIKELY(!parse_ubjson_internal()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11782 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11783 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11784 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11785 key.clear();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11786 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11787 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11788 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11789 else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11790 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11791 if (JSON_HEDLEY_UNLIKELY(!sax->start_object(static_cast<std::size_t>(-1))))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11792 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11793 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11794 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11795
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11796 while (current != '}')
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11797 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11798 if (JSON_HEDLEY_UNLIKELY(!get_ubjson_string(key, false) || !sax->key(key)))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11799 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11800 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11801 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11802 if (JSON_HEDLEY_UNLIKELY(!parse_ubjson_internal()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11803 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11804 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11805 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11806 get_ignore_noop();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11807 key.clear();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11808 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11809 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11810
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11811 return sax->end_object();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11812 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11813
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11814 // Note, no reader for UBJSON binary types is implemented because they do
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11815 // not exist
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11816
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11817 bool get_ubjson_high_precision_number()
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11818 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11819 // get size of following number string
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11820 std::size_t size{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11821 bool no_ndarray = true;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11822 auto res = get_ubjson_size_value(size, no_ndarray);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11823 if (JSON_HEDLEY_UNLIKELY(!res))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11824 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11825 return res;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11826 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11827
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11828 // get number string
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11829 std::vector<char> number_vector;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11830 for (std::size_t i = 0; i < size; ++i)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11831 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11832 get();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11833 if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format, "number")))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11834 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11835 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11836 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11837 number_vector.push_back(static_cast<char>(current));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11838 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11839
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11840 // parse number string
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11841 using ia_type = decltype(detail::input_adapter(number_vector));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11842 auto number_lexer = detail::lexer<BasicJsonType, ia_type>(detail::input_adapter(number_vector), false);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11843 const auto result_number = number_lexer.scan();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11844 const auto number_string = number_lexer.get_token_string();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11845 const auto result_remainder = number_lexer.scan();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11846
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11847 using token_type = typename detail::lexer_base<BasicJsonType>::token_type;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11848
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11849 if (JSON_HEDLEY_UNLIKELY(result_remainder != token_type::end_of_input))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11850 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11851 return sax->parse_error(chars_read, number_string, parse_error::create(115, chars_read,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11852 exception_message(input_format, concat("invalid number text: ", number_lexer.get_token_string()), "high-precision number"), nullptr));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11853 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11854
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11855 switch (result_number)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11856 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11857 case token_type::value_integer:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11858 return sax->number_integer(number_lexer.get_number_integer());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11859 case token_type::value_unsigned:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11860 return sax->number_unsigned(number_lexer.get_number_unsigned());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11861 case token_type::value_float:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11862 return sax->number_float(number_lexer.get_number_float(), std::move(number_string));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11863 case token_type::uninitialized:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11864 case token_type::literal_true:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11865 case token_type::literal_false:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11866 case token_type::literal_null:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11867 case token_type::value_string:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11868 case token_type::begin_array:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11869 case token_type::begin_object:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11870 case token_type::end_array:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11871 case token_type::end_object:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11872 case token_type::name_separator:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11873 case token_type::value_separator:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11874 case token_type::parse_error:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11875 case token_type::end_of_input:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11876 case token_type::literal_or_value:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11877 default:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11878 return sax->parse_error(chars_read, number_string, parse_error::create(115, chars_read,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11879 exception_message(input_format, concat("invalid number text: ", number_lexer.get_token_string()), "high-precision number"), nullptr));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11880 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11881 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11882
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11883 ///////////////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11884 // Utility functions //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11885 ///////////////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11886
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11887 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11888 @brief get next character from the input
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11889
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11890 This function provides the interface to the used input adapter. It does
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11891 not throw in case the input reached EOF, but returns a -'ve valued
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11892 `char_traits<char_type>::eof()` in that case.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11893
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11894 @return character read from the input
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11895 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11896 char_int_type get()
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11897 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11898 ++chars_read;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11899 return current = ia.get_character();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11900 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11901
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11902 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11903 @return character read from the input after ignoring all 'N' entries
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11904 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11905 char_int_type get_ignore_noop()
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11906 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11907 do
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11908 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11909 get();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11910 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11911 while (current == 'N');
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11912
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11913 return current;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11914 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11915
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11916 /*
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11917 @brief read a number from the input
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11918
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11919 @tparam NumberType the type of the number
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11920 @param[in] format the current format (for diagnostics)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11921 @param[out] result number of type @a NumberType
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11922
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11923 @return whether conversion completed
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11924
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11925 @note This function needs to respect the system's endianness, because
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11926 bytes in CBOR, MessagePack, and UBJSON are stored in network order
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11927 (big endian) and therefore need reordering on little endian systems.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11928 On the other hand, BSON and BJData use little endian and should reorder
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11929 on big endian systems.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11930 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11931 template<typename NumberType, bool InputIsLittleEndian = false>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11932 bool get_number(const input_format_t format, NumberType& result)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11933 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11934 // step 1: read input into array with system's byte order
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11935 std::array<std::uint8_t, sizeof(NumberType)> vec{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11936 for (std::size_t i = 0; i < sizeof(NumberType); ++i)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11937 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11938 get();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11939 if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(format, "number")))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11940 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11941 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11942 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11943
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11944 // reverse byte order prior to conversion if necessary
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11945 if (is_little_endian != (InputIsLittleEndian || format == input_format_t::bjdata))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11946 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11947 vec[sizeof(NumberType) - i - 1] = static_cast<std::uint8_t>(current);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11948 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11949 else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11950 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11951 vec[i] = static_cast<std::uint8_t>(current); // LCOV_EXCL_LINE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11952 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11953 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11954
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11955 // step 2: convert array into number of type T and return
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11956 std::memcpy(&result, vec.data(), sizeof(NumberType));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11957 return true;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11958 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11959
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11960 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11961 @brief create a string by reading characters from the input
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11962
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11963 @tparam NumberType the type of the number
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11964 @param[in] format the current format (for diagnostics)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11965 @param[in] len number of characters to read
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11966 @param[out] result string created by reading @a len bytes
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11967
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11968 @return whether string creation completed
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11969
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11970 @note We can not reserve @a len bytes for the result, because @a len
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11971 may be too large. Usually, @ref unexpect_eof() detects the end of
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11972 the input before we run out of string memory.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11973 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11974 template<typename NumberType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11975 bool get_string(const input_format_t format,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11976 const NumberType len,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11977 string_t& result)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11978 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11979 bool success = true;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11980 for (NumberType i = 0; i < len; i++)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11981 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11982 get();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11983 if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(format, "string")))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11984 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11985 success = false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11986 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11987 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11988 result.push_back(static_cast<typename string_t::value_type>(current));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11989 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11990 return success;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11991 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11992
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11993 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11994 @brief create a byte array by reading bytes from the input
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11995
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11996 @tparam NumberType the type of the number
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11997 @param[in] format the current format (for diagnostics)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11998 @param[in] len number of bytes to read
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11999 @param[out] result byte array created by reading @a len bytes
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12000
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12001 @return whether byte array creation completed
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12002
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12003 @note We can not reserve @a len bytes for the result, because @a len
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12004 may be too large. Usually, @ref unexpect_eof() detects the end of
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12005 the input before we run out of memory.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12006 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12007 template<typename NumberType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12008 bool get_binary(const input_format_t format,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12009 const NumberType len,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12010 binary_t& result)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12011 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12012 bool success = true;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12013 for (NumberType i = 0; i < len; i++)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12014 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12015 get();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12016 if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(format, "binary")))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12017 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12018 success = false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12019 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12020 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12021 result.push_back(static_cast<std::uint8_t>(current));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12022 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12023 return success;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12024 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12025
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12026 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12027 @param[in] format the current format (for diagnostics)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12028 @param[in] context further context information (for diagnostics)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12029 @return whether the last read character is not EOF
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12030 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12031 JSON_HEDLEY_NON_NULL(3)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12032 bool unexpect_eof(const input_format_t format, const char* context) const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12033 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12034 if (JSON_HEDLEY_UNLIKELY(current == char_traits<char_type>::eof()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12035 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12036 return sax->parse_error(chars_read, "<end of file>",
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12037 parse_error::create(110, chars_read, exception_message(format, "unexpected end of input", context), nullptr));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12038 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12039 return true;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12040 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12041
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12042 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12043 @return a string representation of the last read byte
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12044 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12045 std::string get_token_string() const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12046 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12047 std::array<char, 3> cr{{}};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12048 static_cast<void>((std::snprintf)(cr.data(), cr.size(), "%.2hhX", static_cast<unsigned char>(current))); // NOLINT(cppcoreguidelines-pro-type-vararg,hicpp-vararg)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12049 return std::string{cr.data()};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12050 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12051
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12052 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12053 @param[in] format the current format
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12054 @param[in] detail a detailed error message
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12055 @param[in] context further context information
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12056 @return a message string to use in the parse_error exceptions
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12057 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12058 std::string exception_message(const input_format_t format,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12059 const std::string& detail,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12060 const std::string& context) const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12061 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12062 std::string error_msg = "syntax error while parsing ";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12063
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12064 switch (format)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12065 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12066 case input_format_t::cbor:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12067 error_msg += "CBOR";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12068 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12069
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12070 case input_format_t::msgpack:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12071 error_msg += "MessagePack";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12072 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12073
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12074 case input_format_t::ubjson:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12075 error_msg += "UBJSON";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12076 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12077
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12078 case input_format_t::bson:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12079 error_msg += "BSON";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12080 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12081
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12082 case input_format_t::bjdata:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12083 error_msg += "BJData";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12084 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12085
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12086 case input_format_t::json: // LCOV_EXCL_LINE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12087 default: // LCOV_EXCL_LINE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12088 JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12089 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12090
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12091 return concat(error_msg, ' ', context, ": ", detail);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12092 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12093
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12094 private:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12095 static JSON_INLINE_VARIABLE constexpr std::size_t npos = static_cast<std::size_t>(-1);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12096
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12097 /// input adapter
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12098 InputAdapterType ia;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12099
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12100 /// the current character
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12101 char_int_type current = char_traits<char_type>::eof();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12102
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12103 /// the number of characters read
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12104 std::size_t chars_read = 0;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12105
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12106 /// whether we can assume little endianness
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12107 const bool is_little_endian = little_endianness();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12108
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12109 /// input format
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12110 const input_format_t input_format = input_format_t::json;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12111
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12112 /// the SAX parser
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12113 json_sax_t* sax = nullptr;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12114
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12115 // excluded markers in bjdata optimized type
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12116 #define JSON_BINARY_READER_MAKE_BJD_OPTIMIZED_TYPE_MARKERS_ \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12117 make_array<char_int_type>('F', 'H', 'N', 'S', 'T', 'Z', '[', '{')
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12118
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12119 #define JSON_BINARY_READER_MAKE_BJD_TYPES_MAP_ \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12120 make_array<bjd_type>( \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12121 bjd_type{'C', "char"}, \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12122 bjd_type{'D', "double"}, \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12123 bjd_type{'I', "int16"}, \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12124 bjd_type{'L', "int64"}, \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12125 bjd_type{'M', "uint64"}, \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12126 bjd_type{'U', "uint8"}, \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12127 bjd_type{'d', "single"}, \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12128 bjd_type{'i', "int8"}, \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12129 bjd_type{'l', "int32"}, \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12130 bjd_type{'m', "uint32"}, \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12131 bjd_type{'u', "uint16"})
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12132
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12133 JSON_PRIVATE_UNLESS_TESTED:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12134 // lookup tables
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12135 // NOLINTNEXTLINE(cppcoreguidelines-non-private-member-variables-in-classes)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12136 const decltype(JSON_BINARY_READER_MAKE_BJD_OPTIMIZED_TYPE_MARKERS_) bjd_optimized_type_markers =
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12137 JSON_BINARY_READER_MAKE_BJD_OPTIMIZED_TYPE_MARKERS_;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12138
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12139 using bjd_type = std::pair<char_int_type, string_t>;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12140 // NOLINTNEXTLINE(cppcoreguidelines-non-private-member-variables-in-classes)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12141 const decltype(JSON_BINARY_READER_MAKE_BJD_TYPES_MAP_) bjd_types_map =
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12142 JSON_BINARY_READER_MAKE_BJD_TYPES_MAP_;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12143
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12144 #undef JSON_BINARY_READER_MAKE_BJD_OPTIMIZED_TYPE_MARKERS_
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12145 #undef JSON_BINARY_READER_MAKE_BJD_TYPES_MAP_
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12146 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12147
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12148 #ifndef JSON_HAS_CPP_17
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12149 template<typename BasicJsonType, typename InputAdapterType, typename SAX>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12150 constexpr std::size_t binary_reader<BasicJsonType, InputAdapterType, SAX>::npos;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12151 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12152
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12153 } // namespace detail
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12154 NLOHMANN_JSON_NAMESPACE_END
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12155
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12156 // #include <nlohmann/detail/input/input_adapters.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12157
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12158 // #include <nlohmann/detail/input/lexer.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12159
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12160 // #include <nlohmann/detail/input/parser.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12161 // __ _____ _____ _____
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12162 // __| | __| | | | JSON for Modern C++
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12163 // | | |__ | | | | | | version 3.11.3
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12164 // |_____|_____|_____|_|___| https://github.com/nlohmann/json
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12165 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12166 // SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12167 // SPDX-License-Identifier: MIT
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12168
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12169
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12170
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12171 #include <cmath> // isfinite
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12172 #include <cstdint> // uint8_t
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12173 #include <functional> // function
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12174 #include <string> // string
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12175 #include <utility> // move
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12176 #include <vector> // vector
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12177
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12178 // #include <nlohmann/detail/exceptions.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12179
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12180 // #include <nlohmann/detail/input/input_adapters.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12181
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12182 // #include <nlohmann/detail/input/json_sax.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12183
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12184 // #include <nlohmann/detail/input/lexer.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12185
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12186 // #include <nlohmann/detail/macro_scope.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12187
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12188 // #include <nlohmann/detail/meta/is_sax.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12189
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12190 // #include <nlohmann/detail/string_concat.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12191
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12192 // #include <nlohmann/detail/value_t.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12193
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12194
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12195 NLOHMANN_JSON_NAMESPACE_BEGIN
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12196 namespace detail
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12197 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12198 ////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12199 // parser //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12200 ////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12201
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12202 enum class parse_event_t : std::uint8_t
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12203 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12204 /// the parser read `{` and started to process a JSON object
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12205 object_start,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12206 /// the parser read `}` and finished processing a JSON object
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12207 object_end,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12208 /// the parser read `[` and started to process a JSON array
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12209 array_start,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12210 /// the parser read `]` and finished processing a JSON array
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12211 array_end,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12212 /// the parser read a key of a value in an object
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12213 key,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12214 /// the parser finished reading a JSON value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12215 value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12216 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12217
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12218 template<typename BasicJsonType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12219 using parser_callback_t =
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12220 std::function<bool(int /*depth*/, parse_event_t /*event*/, BasicJsonType& /*parsed*/)>;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12221
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12222 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12223 @brief syntax analysis
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12224
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12225 This class implements a recursive descent parser.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12226 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12227 template<typename BasicJsonType, typename InputAdapterType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12228 class parser
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12229 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12230 using number_integer_t = typename BasicJsonType::number_integer_t;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12231 using number_unsigned_t = typename BasicJsonType::number_unsigned_t;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12232 using number_float_t = typename BasicJsonType::number_float_t;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12233 using string_t = typename BasicJsonType::string_t;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12234 using lexer_t = lexer<BasicJsonType, InputAdapterType>;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12235 using token_type = typename lexer_t::token_type;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12236
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12237 public:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12238 /// a parser reading from an input adapter
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12239 explicit parser(InputAdapterType&& adapter,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12240 const parser_callback_t<BasicJsonType> cb = nullptr,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12241 const bool allow_exceptions_ = true,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12242 const bool skip_comments = false)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12243 : callback(cb)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12244 , m_lexer(std::move(adapter), skip_comments)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12245 , allow_exceptions(allow_exceptions_)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12246 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12247 // read first token
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12248 get_token();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12249 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12250
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12251 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12252 @brief public parser interface
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12253
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12254 @param[in] strict whether to expect the last token to be EOF
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12255 @param[in,out] result parsed JSON value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12256
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12257 @throw parse_error.101 in case of an unexpected token
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12258 @throw parse_error.102 if to_unicode fails or surrogate error
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12259 @throw parse_error.103 if to_unicode fails
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12260 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12261 void parse(const bool strict, BasicJsonType& result)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12262 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12263 if (callback)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12264 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12265 json_sax_dom_callback_parser<BasicJsonType> sdp(result, callback, allow_exceptions);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12266 sax_parse_internal(&sdp);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12267
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12268 // in strict mode, input must be completely read
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12269 if (strict && (get_token() != token_type::end_of_input))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12270 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12271 sdp.parse_error(m_lexer.get_position(),
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12272 m_lexer.get_token_string(),
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12273 parse_error::create(101, m_lexer.get_position(),
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12274 exception_message(token_type::end_of_input, "value"), nullptr));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12275 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12276
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12277 // in case of an error, return discarded value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12278 if (sdp.is_errored())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12279 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12280 result = value_t::discarded;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12281 return;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12282 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12283
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12284 // set top-level value to null if it was discarded by the callback
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12285 // function
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12286 if (result.is_discarded())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12287 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12288 result = nullptr;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12289 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12290 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12291 else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12292 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12293 json_sax_dom_parser<BasicJsonType> sdp(result, allow_exceptions);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12294 sax_parse_internal(&sdp);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12295
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12296 // in strict mode, input must be completely read
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12297 if (strict && (get_token() != token_type::end_of_input))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12298 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12299 sdp.parse_error(m_lexer.get_position(),
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12300 m_lexer.get_token_string(),
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12301 parse_error::create(101, m_lexer.get_position(), exception_message(token_type::end_of_input, "value"), nullptr));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12302 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12303
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12304 // in case of an error, return discarded value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12305 if (sdp.is_errored())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12306 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12307 result = value_t::discarded;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12308 return;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12309 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12310 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12311
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12312 result.assert_invariant();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12313 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12314
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12315 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12316 @brief public accept interface
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12317
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12318 @param[in] strict whether to expect the last token to be EOF
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12319 @return whether the input is a proper JSON text
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12320 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12321 bool accept(const bool strict = true)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12322 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12323 json_sax_acceptor<BasicJsonType> sax_acceptor;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12324 return sax_parse(&sax_acceptor, strict);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12325 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12326
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12327 template<typename SAX>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12328 JSON_HEDLEY_NON_NULL(2)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12329 bool sax_parse(SAX* sax, const bool strict = true)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12330 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12331 (void)detail::is_sax_static_asserts<SAX, BasicJsonType> {};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12332 const bool result = sax_parse_internal(sax);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12333
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12334 // strict mode: next byte must be EOF
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12335 if (result && strict && (get_token() != token_type::end_of_input))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12336 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12337 return sax->parse_error(m_lexer.get_position(),
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12338 m_lexer.get_token_string(),
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12339 parse_error::create(101, m_lexer.get_position(), exception_message(token_type::end_of_input, "value"), nullptr));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12340 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12341
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12342 return result;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12343 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12344
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12345 private:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12346 template<typename SAX>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12347 JSON_HEDLEY_NON_NULL(2)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12348 bool sax_parse_internal(SAX* sax)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12349 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12350 // stack to remember the hierarchy of structured values we are parsing
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12351 // true = array; false = object
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12352 std::vector<bool> states;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12353 // value to avoid a goto (see comment where set to true)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12354 bool skip_to_state_evaluation = false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12355
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12356 while (true)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12357 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12358 if (!skip_to_state_evaluation)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12359 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12360 // invariant: get_token() was called before each iteration
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12361 switch (last_token)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12362 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12363 case token_type::begin_object:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12364 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12365 if (JSON_HEDLEY_UNLIKELY(!sax->start_object(static_cast<std::size_t>(-1))))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12366 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12367 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12368 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12369
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12370 // closing } -> we are done
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12371 if (get_token() == token_type::end_object)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12372 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12373 if (JSON_HEDLEY_UNLIKELY(!sax->end_object()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12374 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12375 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12376 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12377 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12378 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12379
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12380 // parse key
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12381 if (JSON_HEDLEY_UNLIKELY(last_token != token_type::value_string))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12382 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12383 return sax->parse_error(m_lexer.get_position(),
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12384 m_lexer.get_token_string(),
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12385 parse_error::create(101, m_lexer.get_position(), exception_message(token_type::value_string, "object key"), nullptr));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12386 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12387 if (JSON_HEDLEY_UNLIKELY(!sax->key(m_lexer.get_string())))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12388 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12389 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12390 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12391
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12392 // parse separator (:)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12393 if (JSON_HEDLEY_UNLIKELY(get_token() != token_type::name_separator))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12394 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12395 return sax->parse_error(m_lexer.get_position(),
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12396 m_lexer.get_token_string(),
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12397 parse_error::create(101, m_lexer.get_position(), exception_message(token_type::name_separator, "object separator"), nullptr));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12398 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12399
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12400 // remember we are now inside an object
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12401 states.push_back(false);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12402
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12403 // parse values
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12404 get_token();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12405 continue;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12406 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12407
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12408 case token_type::begin_array:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12409 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12410 if (JSON_HEDLEY_UNLIKELY(!sax->start_array(static_cast<std::size_t>(-1))))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12411 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12412 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12413 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12414
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12415 // closing ] -> we are done
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12416 if (get_token() == token_type::end_array)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12417 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12418 if (JSON_HEDLEY_UNLIKELY(!sax->end_array()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12419 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12420 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12421 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12422 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12423 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12424
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12425 // remember we are now inside an array
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12426 states.push_back(true);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12427
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12428 // parse values (no need to call get_token)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12429 continue;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12430 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12431
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12432 case token_type::value_float:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12433 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12434 const auto res = m_lexer.get_number_float();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12435
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12436 if (JSON_HEDLEY_UNLIKELY(!std::isfinite(res)))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12437 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12438 return sax->parse_error(m_lexer.get_position(),
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12439 m_lexer.get_token_string(),
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12440 out_of_range::create(406, concat("number overflow parsing '", m_lexer.get_token_string(), '\''), nullptr));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12441 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12442
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12443 if (JSON_HEDLEY_UNLIKELY(!sax->number_float(res, m_lexer.get_string())))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12444 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12445 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12446 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12447
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12448 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12449 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12450
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12451 case token_type::literal_false:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12452 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12453 if (JSON_HEDLEY_UNLIKELY(!sax->boolean(false)))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12454 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12455 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12456 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12457 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12458 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12459
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12460 case token_type::literal_null:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12461 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12462 if (JSON_HEDLEY_UNLIKELY(!sax->null()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12463 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12464 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12465 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12466 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12467 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12468
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12469 case token_type::literal_true:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12470 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12471 if (JSON_HEDLEY_UNLIKELY(!sax->boolean(true)))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12472 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12473 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12474 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12475 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12476 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12477
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12478 case token_type::value_integer:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12479 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12480 if (JSON_HEDLEY_UNLIKELY(!sax->number_integer(m_lexer.get_number_integer())))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12481 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12482 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12483 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12484 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12485 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12486
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12487 case token_type::value_string:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12488 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12489 if (JSON_HEDLEY_UNLIKELY(!sax->string(m_lexer.get_string())))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12490 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12491 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12492 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12493 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12494 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12495
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12496 case token_type::value_unsigned:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12497 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12498 if (JSON_HEDLEY_UNLIKELY(!sax->number_unsigned(m_lexer.get_number_unsigned())))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12499 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12500 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12501 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12502 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12503 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12504
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12505 case token_type::parse_error:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12506 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12507 // using "uninitialized" to avoid "expected" message
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12508 return sax->parse_error(m_lexer.get_position(),
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12509 m_lexer.get_token_string(),
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12510 parse_error::create(101, m_lexer.get_position(), exception_message(token_type::uninitialized, "value"), nullptr));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12511 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12512 case token_type::end_of_input:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12513 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12514 if (JSON_HEDLEY_UNLIKELY(m_lexer.get_position().chars_read_total == 1))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12515 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12516 return sax->parse_error(m_lexer.get_position(),
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12517 m_lexer.get_token_string(),
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12518 parse_error::create(101, m_lexer.get_position(),
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12519 "attempting to parse an empty input; check that your input string or stream contains the expected JSON", nullptr));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12520 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12521
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12522 return sax->parse_error(m_lexer.get_position(),
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12523 m_lexer.get_token_string(),
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12524 parse_error::create(101, m_lexer.get_position(), exception_message(token_type::literal_or_value, "value"), nullptr));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12525 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12526 case token_type::uninitialized:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12527 case token_type::end_array:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12528 case token_type::end_object:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12529 case token_type::name_separator:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12530 case token_type::value_separator:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12531 case token_type::literal_or_value:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12532 default: // the last token was unexpected
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12533 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12534 return sax->parse_error(m_lexer.get_position(),
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12535 m_lexer.get_token_string(),
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12536 parse_error::create(101, m_lexer.get_position(), exception_message(token_type::literal_or_value, "value"), nullptr));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12537 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12538 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12539 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12540 else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12541 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12542 skip_to_state_evaluation = false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12543 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12544
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12545 // we reached this line after we successfully parsed a value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12546 if (states.empty())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12547 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12548 // empty stack: we reached the end of the hierarchy: done
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12549 return true;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12550 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12551
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12552 if (states.back()) // array
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12553 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12554 // comma -> next value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12555 if (get_token() == token_type::value_separator)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12556 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12557 // parse a new value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12558 get_token();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12559 continue;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12560 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12561
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12562 // closing ]
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12563 if (JSON_HEDLEY_LIKELY(last_token == token_type::end_array))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12564 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12565 if (JSON_HEDLEY_UNLIKELY(!sax->end_array()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12566 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12567 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12568 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12569
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12570 // We are done with this array. Before we can parse a
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12571 // new value, we need to evaluate the new state first.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12572 // By setting skip_to_state_evaluation to false, we
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12573 // are effectively jumping to the beginning of this if.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12574 JSON_ASSERT(!states.empty());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12575 states.pop_back();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12576 skip_to_state_evaluation = true;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12577 continue;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12578 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12579
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12580 return sax->parse_error(m_lexer.get_position(),
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12581 m_lexer.get_token_string(),
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12582 parse_error::create(101, m_lexer.get_position(), exception_message(token_type::end_array, "array"), nullptr));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12583 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12584
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12585 // states.back() is false -> object
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12586
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12587 // comma -> next value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12588 if (get_token() == token_type::value_separator)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12589 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12590 // parse key
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12591 if (JSON_HEDLEY_UNLIKELY(get_token() != token_type::value_string))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12592 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12593 return sax->parse_error(m_lexer.get_position(),
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12594 m_lexer.get_token_string(),
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12595 parse_error::create(101, m_lexer.get_position(), exception_message(token_type::value_string, "object key"), nullptr));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12596 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12597
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12598 if (JSON_HEDLEY_UNLIKELY(!sax->key(m_lexer.get_string())))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12599 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12600 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12601 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12602
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12603 // parse separator (:)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12604 if (JSON_HEDLEY_UNLIKELY(get_token() != token_type::name_separator))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12605 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12606 return sax->parse_error(m_lexer.get_position(),
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12607 m_lexer.get_token_string(),
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12608 parse_error::create(101, m_lexer.get_position(), exception_message(token_type::name_separator, "object separator"), nullptr));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12609 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12610
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12611 // parse values
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12612 get_token();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12613 continue;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12614 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12615
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12616 // closing }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12617 if (JSON_HEDLEY_LIKELY(last_token == token_type::end_object))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12618 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12619 if (JSON_HEDLEY_UNLIKELY(!sax->end_object()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12620 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12621 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12622 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12623
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12624 // We are done with this object. Before we can parse a
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12625 // new value, we need to evaluate the new state first.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12626 // By setting skip_to_state_evaluation to false, we
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12627 // are effectively jumping to the beginning of this if.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12628 JSON_ASSERT(!states.empty());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12629 states.pop_back();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12630 skip_to_state_evaluation = true;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12631 continue;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12632 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12633
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12634 return sax->parse_error(m_lexer.get_position(),
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12635 m_lexer.get_token_string(),
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12636 parse_error::create(101, m_lexer.get_position(), exception_message(token_type::end_object, "object"), nullptr));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12637 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12638 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12639
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12640 /// get next token from lexer
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12641 token_type get_token()
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12642 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12643 return last_token = m_lexer.scan();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12644 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12645
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12646 std::string exception_message(const token_type expected, const std::string& context)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12647 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12648 std::string error_msg = "syntax error ";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12649
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12650 if (!context.empty())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12651 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12652 error_msg += concat("while parsing ", context, ' ');
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12653 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12654
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12655 error_msg += "- ";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12656
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12657 if (last_token == token_type::parse_error)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12658 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12659 error_msg += concat(m_lexer.get_error_message(), "; last read: '",
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12660 m_lexer.get_token_string(), '\'');
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12661 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12662 else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12663 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12664 error_msg += concat("unexpected ", lexer_t::token_type_name(last_token));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12665 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12666
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12667 if (expected != token_type::uninitialized)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12668 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12669 error_msg += concat("; expected ", lexer_t::token_type_name(expected));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12670 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12671
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12672 return error_msg;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12673 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12674
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12675 private:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12676 /// callback function
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12677 const parser_callback_t<BasicJsonType> callback = nullptr;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12678 /// the type of the last read token
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12679 token_type last_token = token_type::uninitialized;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12680 /// the lexer
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12681 lexer_t m_lexer;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12682 /// whether to throw exceptions in case of errors
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12683 const bool allow_exceptions = true;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12684 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12685
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12686 } // namespace detail
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12687 NLOHMANN_JSON_NAMESPACE_END
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12688
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12689 // #include <nlohmann/detail/iterators/internal_iterator.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12690 // __ _____ _____ _____
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12691 // __| | __| | | | JSON for Modern C++
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12692 // | | |__ | | | | | | version 3.11.3
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12693 // |_____|_____|_____|_|___| https://github.com/nlohmann/json
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12694 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12695 // SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12696 // SPDX-License-Identifier: MIT
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12697
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12698
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12699
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12700 // #include <nlohmann/detail/abi_macros.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12701
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12702 // #include <nlohmann/detail/iterators/primitive_iterator.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12703 // __ _____ _____ _____
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12704 // __| | __| | | | JSON for Modern C++
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12705 // | | |__ | | | | | | version 3.11.3
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12706 // |_____|_____|_____|_|___| https://github.com/nlohmann/json
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12707 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12708 // SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12709 // SPDX-License-Identifier: MIT
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12710
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12711
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12712
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12713 #include <cstddef> // ptrdiff_t
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12714 #include <limits> // numeric_limits
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12715
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12716 // #include <nlohmann/detail/macro_scope.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12717
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12718
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12719 NLOHMANN_JSON_NAMESPACE_BEGIN
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12720 namespace detail
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12721 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12722
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12723 /*
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12724 @brief an iterator for primitive JSON types
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12725
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12726 This class models an iterator for primitive JSON types (boolean, number,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12727 string). It's only purpose is to allow the iterator/const_iterator classes
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12728 to "iterate" over primitive values. Internally, the iterator is modeled by
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12729 a `difference_type` variable. Value begin_value (`0`) models the begin,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12730 end_value (`1`) models past the end.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12731 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12732 class primitive_iterator_t
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12733 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12734 private:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12735 using difference_type = std::ptrdiff_t;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12736 static constexpr difference_type begin_value = 0;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12737 static constexpr difference_type end_value = begin_value + 1;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12738
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12739 JSON_PRIVATE_UNLESS_TESTED:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12740 /// iterator as signed integer type
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12741 difference_type m_it = (std::numeric_limits<std::ptrdiff_t>::min)();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12742
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12743 public:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12744 constexpr difference_type get_value() const noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12745 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12746 return m_it;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12747 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12748
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12749 /// set iterator to a defined beginning
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12750 void set_begin() noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12751 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12752 m_it = begin_value;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12753 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12754
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12755 /// set iterator to a defined past the end
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12756 void set_end() noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12757 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12758 m_it = end_value;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12759 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12760
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12761 /// return whether the iterator can be dereferenced
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12762 constexpr bool is_begin() const noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12763 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12764 return m_it == begin_value;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12765 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12766
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12767 /// return whether the iterator is at end
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12768 constexpr bool is_end() const noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12769 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12770 return m_it == end_value;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12771 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12772
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12773 friend constexpr bool operator==(primitive_iterator_t lhs, primitive_iterator_t rhs) noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12774 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12775 return lhs.m_it == rhs.m_it;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12776 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12777
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12778 friend constexpr bool operator<(primitive_iterator_t lhs, primitive_iterator_t rhs) noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12779 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12780 return lhs.m_it < rhs.m_it;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12781 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12782
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12783 primitive_iterator_t operator+(difference_type n) noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12784 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12785 auto result = *this;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12786 result += n;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12787 return result;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12788 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12789
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12790 friend constexpr difference_type operator-(primitive_iterator_t lhs, primitive_iterator_t rhs) noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12791 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12792 return lhs.m_it - rhs.m_it;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12793 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12794
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12795 primitive_iterator_t& operator++() noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12796 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12797 ++m_it;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12798 return *this;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12799 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12800
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12801 primitive_iterator_t operator++(int)& noexcept // NOLINT(cert-dcl21-cpp)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12802 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12803 auto result = *this;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12804 ++m_it;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12805 return result;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12806 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12807
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12808 primitive_iterator_t& operator--() noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12809 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12810 --m_it;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12811 return *this;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12812 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12813
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12814 primitive_iterator_t operator--(int)& noexcept // NOLINT(cert-dcl21-cpp)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12815 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12816 auto result = *this;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12817 --m_it;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12818 return result;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12819 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12820
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12821 primitive_iterator_t& operator+=(difference_type n) noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12822 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12823 m_it += n;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12824 return *this;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12825 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12826
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12827 primitive_iterator_t& operator-=(difference_type n) noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12828 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12829 m_it -= n;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12830 return *this;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12831 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12832 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12833
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12834 } // namespace detail
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12835 NLOHMANN_JSON_NAMESPACE_END
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12836
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12837
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12838 NLOHMANN_JSON_NAMESPACE_BEGIN
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12839 namespace detail
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12840 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12841
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12842 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12843 @brief an iterator value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12844
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12845 @note This structure could easily be a union, but MSVC currently does not allow
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12846 unions members with complex constructors, see https://github.com/nlohmann/json/pull/105.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12847 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12848 template<typename BasicJsonType> struct internal_iterator
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12849 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12850 /// iterator for JSON objects
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12851 typename BasicJsonType::object_t::iterator object_iterator {};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12852 /// iterator for JSON arrays
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12853 typename BasicJsonType::array_t::iterator array_iterator {};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12854 /// generic iterator for all other types
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12855 primitive_iterator_t primitive_iterator {};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12856 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12857
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12858 } // namespace detail
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12859 NLOHMANN_JSON_NAMESPACE_END
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12860
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12861 // #include <nlohmann/detail/iterators/iter_impl.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12862 // __ _____ _____ _____
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12863 // __| | __| | | | JSON for Modern C++
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12864 // | | |__ | | | | | | version 3.11.3
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12865 // |_____|_____|_____|_|___| https://github.com/nlohmann/json
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12866 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12867 // SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12868 // SPDX-License-Identifier: MIT
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12869
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12870
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12871
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12872 #include <iterator> // iterator, random_access_iterator_tag, bidirectional_iterator_tag, advance, next
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12873 #include <type_traits> // conditional, is_const, remove_const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12874
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12875 // #include <nlohmann/detail/exceptions.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12876
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12877 // #include <nlohmann/detail/iterators/internal_iterator.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12878
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12879 // #include <nlohmann/detail/iterators/primitive_iterator.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12880
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12881 // #include <nlohmann/detail/macro_scope.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12882
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12883 // #include <nlohmann/detail/meta/cpp_future.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12884
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12885 // #include <nlohmann/detail/meta/type_traits.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12886
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12887 // #include <nlohmann/detail/value_t.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12888
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12889
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12890 NLOHMANN_JSON_NAMESPACE_BEGIN
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12891 namespace detail
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12892 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12893
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12894 // forward declare, to be able to friend it later on
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12895 template<typename IteratorType> class iteration_proxy;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12896 template<typename IteratorType> class iteration_proxy_value;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12897
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12898 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12899 @brief a template for a bidirectional iterator for the @ref basic_json class
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12900 This class implements a both iterators (iterator and const_iterator) for the
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12901 @ref basic_json class.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12902 @note An iterator is called *initialized* when a pointer to a JSON value has
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12903 been set (e.g., by a constructor or a copy assignment). If the iterator is
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12904 default-constructed, it is *uninitialized* and most methods are undefined.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12905 **The library uses assertions to detect calls on uninitialized iterators.**
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12906 @requirement The class satisfies the following concept requirements:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12907 -
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12908 [BidirectionalIterator](https://en.cppreference.com/w/cpp/named_req/BidirectionalIterator):
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12909 The iterator that can be moved can be moved in both directions (i.e.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12910 incremented and decremented).
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12911 @since version 1.0.0, simplified in version 2.0.9, change to bidirectional
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12912 iterators in version 3.0.0 (see https://github.com/nlohmann/json/issues/593)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12913 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12914 template<typename BasicJsonType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12915 class iter_impl // NOLINT(cppcoreguidelines-special-member-functions,hicpp-special-member-functions)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12916 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12917 /// the iterator with BasicJsonType of different const-ness
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12918 using other_iter_impl = iter_impl<typename std::conditional<std::is_const<BasicJsonType>::value, typename std::remove_const<BasicJsonType>::type, const BasicJsonType>::type>;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12919 /// allow basic_json to access private members
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12920 friend other_iter_impl;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12921 friend BasicJsonType;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12922 friend iteration_proxy<iter_impl>;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12923 friend iteration_proxy_value<iter_impl>;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12924
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12925 using object_t = typename BasicJsonType::object_t;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12926 using array_t = typename BasicJsonType::array_t;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12927 // make sure BasicJsonType is basic_json or const basic_json
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12928 static_assert(is_basic_json<typename std::remove_const<BasicJsonType>::type>::value,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12929 "iter_impl only accepts (const) basic_json");
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12930 // superficial check for the LegacyBidirectionalIterator named requirement
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12931 static_assert(std::is_base_of<std::bidirectional_iterator_tag, std::bidirectional_iterator_tag>::value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12932 && std::is_base_of<std::bidirectional_iterator_tag, typename std::iterator_traits<typename array_t::iterator>::iterator_category>::value,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12933 "basic_json iterator assumes array and object type iterators satisfy the LegacyBidirectionalIterator named requirement.");
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12934
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12935 public:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12936 /// The std::iterator class template (used as a base class to provide typedefs) is deprecated in C++17.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12937 /// The C++ Standard has never required user-defined iterators to derive from std::iterator.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12938 /// A user-defined iterator should provide publicly accessible typedefs named
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12939 /// iterator_category, value_type, difference_type, pointer, and reference.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12940 /// Note that value_type is required to be non-const, even for constant iterators.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12941 using iterator_category = std::bidirectional_iterator_tag;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12942
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12943 /// the type of the values when the iterator is dereferenced
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12944 using value_type = typename BasicJsonType::value_type;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12945 /// a type to represent differences between iterators
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12946 using difference_type = typename BasicJsonType::difference_type;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12947 /// defines a pointer to the type iterated over (value_type)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12948 using pointer = typename std::conditional<std::is_const<BasicJsonType>::value,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12949 typename BasicJsonType::const_pointer,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12950 typename BasicJsonType::pointer>::type;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12951 /// defines a reference to the type iterated over (value_type)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12952 using reference =
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12953 typename std::conditional<std::is_const<BasicJsonType>::value,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12954 typename BasicJsonType::const_reference,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12955 typename BasicJsonType::reference>::type;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12956
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12957 iter_impl() = default;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12958 ~iter_impl() = default;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12959 iter_impl(iter_impl&&) noexcept = default;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12960 iter_impl& operator=(iter_impl&&) noexcept = default;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12961
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12962 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12963 @brief constructor for a given JSON instance
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12964 @param[in] object pointer to a JSON object for this iterator
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12965 @pre object != nullptr
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12966 @post The iterator is initialized; i.e. `m_object != nullptr`.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12967 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12968 explicit iter_impl(pointer object) noexcept : m_object(object)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12969 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12970 JSON_ASSERT(m_object != nullptr);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12971
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12972 switch (m_object->m_data.m_type)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12973 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12974 case value_t::object:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12975 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12976 m_it.object_iterator = typename object_t::iterator();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12977 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12978 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12979
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12980 case value_t::array:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12981 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12982 m_it.array_iterator = typename array_t::iterator();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12983 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12984 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12985
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12986 case value_t::null:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12987 case value_t::string:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12988 case value_t::boolean:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12989 case value_t::number_integer:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12990 case value_t::number_unsigned:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12991 case value_t::number_float:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12992 case value_t::binary:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12993 case value_t::discarded:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12994 default:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12995 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12996 m_it.primitive_iterator = primitive_iterator_t();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12997 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12998 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12999 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13000 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13001
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13002 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13003 @note The conventional copy constructor and copy assignment are implicitly
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13004 defined. Combined with the following converting constructor and
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13005 assignment, they support: (1) copy from iterator to iterator, (2)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13006 copy from const iterator to const iterator, and (3) conversion from
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13007 iterator to const iterator. However conversion from const iterator
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13008 to iterator is not defined.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13009 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13010
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13011 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13012 @brief const copy constructor
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13013 @param[in] other const iterator to copy from
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13014 @note This copy constructor had to be defined explicitly to circumvent a bug
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13015 occurring on msvc v19.0 compiler (VS 2015) debug build. For more
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13016 information refer to: https://github.com/nlohmann/json/issues/1608
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13017 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13018 iter_impl(const iter_impl<const BasicJsonType>& other) noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13019 : m_object(other.m_object), m_it(other.m_it)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13020 {}
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13021
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13022 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13023 @brief converting assignment
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13024 @param[in] other const iterator to copy from
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13025 @return const/non-const iterator
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13026 @note It is not checked whether @a other is initialized.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13027 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13028 iter_impl& operator=(const iter_impl<const BasicJsonType>& other) noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13029 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13030 if (&other != this)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13031 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13032 m_object = other.m_object;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13033 m_it = other.m_it;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13034 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13035 return *this;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13036 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13037
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13038 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13039 @brief converting constructor
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13040 @param[in] other non-const iterator to copy from
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13041 @note It is not checked whether @a other is initialized.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13042 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13043 iter_impl(const iter_impl<typename std::remove_const<BasicJsonType>::type>& other) noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13044 : m_object(other.m_object), m_it(other.m_it)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13045 {}
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13046
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13047 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13048 @brief converting assignment
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13049 @param[in] other non-const iterator to copy from
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13050 @return const/non-const iterator
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13051 @note It is not checked whether @a other is initialized.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13052 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13053 iter_impl& operator=(const iter_impl<typename std::remove_const<BasicJsonType>::type>& other) noexcept // NOLINT(cert-oop54-cpp)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13054 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13055 m_object = other.m_object;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13056 m_it = other.m_it;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13057 return *this;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13058 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13059
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13060 JSON_PRIVATE_UNLESS_TESTED:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13061 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13062 @brief set the iterator to the first value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13063 @pre The iterator is initialized; i.e. `m_object != nullptr`.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13064 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13065 void set_begin() noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13066 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13067 JSON_ASSERT(m_object != nullptr);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13068
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13069 switch (m_object->m_data.m_type)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13070 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13071 case value_t::object:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13072 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13073 m_it.object_iterator = m_object->m_data.m_value.object->begin();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13074 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13075 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13076
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13077 case value_t::array:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13078 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13079 m_it.array_iterator = m_object->m_data.m_value.array->begin();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13080 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13081 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13082
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13083 case value_t::null:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13084 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13085 // set to end so begin()==end() is true: null is empty
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13086 m_it.primitive_iterator.set_end();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13087 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13088 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13089
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13090 case value_t::string:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13091 case value_t::boolean:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13092 case value_t::number_integer:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13093 case value_t::number_unsigned:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13094 case value_t::number_float:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13095 case value_t::binary:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13096 case value_t::discarded:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13097 default:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13098 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13099 m_it.primitive_iterator.set_begin();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13100 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13101 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13102 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13103 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13104
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13105 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13106 @brief set the iterator past the last value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13107 @pre The iterator is initialized; i.e. `m_object != nullptr`.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13108 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13109 void set_end() noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13110 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13111 JSON_ASSERT(m_object != nullptr);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13112
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13113 switch (m_object->m_data.m_type)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13114 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13115 case value_t::object:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13116 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13117 m_it.object_iterator = m_object->m_data.m_value.object->end();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13118 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13119 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13120
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13121 case value_t::array:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13122 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13123 m_it.array_iterator = m_object->m_data.m_value.array->end();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13124 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13125 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13126
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13127 case value_t::null:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13128 case value_t::string:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13129 case value_t::boolean:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13130 case value_t::number_integer:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13131 case value_t::number_unsigned:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13132 case value_t::number_float:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13133 case value_t::binary:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13134 case value_t::discarded:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13135 default:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13136 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13137 m_it.primitive_iterator.set_end();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13138 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13139 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13140 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13141 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13142
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13143 public:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13144 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13145 @brief return a reference to the value pointed to by the iterator
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13146 @pre The iterator is initialized; i.e. `m_object != nullptr`.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13147 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13148 reference operator*() const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13149 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13150 JSON_ASSERT(m_object != nullptr);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13151
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13152 switch (m_object->m_data.m_type)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13153 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13154 case value_t::object:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13155 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13156 JSON_ASSERT(m_it.object_iterator != m_object->m_data.m_value.object->end());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13157 return m_it.object_iterator->second;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13158 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13159
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13160 case value_t::array:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13161 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13162 JSON_ASSERT(m_it.array_iterator != m_object->m_data.m_value.array->end());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13163 return *m_it.array_iterator;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13164 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13165
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13166 case value_t::null:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13167 JSON_THROW(invalid_iterator::create(214, "cannot get value", m_object));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13168
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13169 case value_t::string:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13170 case value_t::boolean:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13171 case value_t::number_integer:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13172 case value_t::number_unsigned:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13173 case value_t::number_float:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13174 case value_t::binary:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13175 case value_t::discarded:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13176 default:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13177 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13178 if (JSON_HEDLEY_LIKELY(m_it.primitive_iterator.is_begin()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13179 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13180 return *m_object;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13181 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13182
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13183 JSON_THROW(invalid_iterator::create(214, "cannot get value", m_object));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13184 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13185 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13186 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13187
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13188 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13189 @brief dereference the iterator
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13190 @pre The iterator is initialized; i.e. `m_object != nullptr`.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13191 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13192 pointer operator->() const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13193 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13194 JSON_ASSERT(m_object != nullptr);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13195
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13196 switch (m_object->m_data.m_type)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13197 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13198 case value_t::object:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13199 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13200 JSON_ASSERT(m_it.object_iterator != m_object->m_data.m_value.object->end());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13201 return &(m_it.object_iterator->second);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13202 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13203
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13204 case value_t::array:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13205 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13206 JSON_ASSERT(m_it.array_iterator != m_object->m_data.m_value.array->end());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13207 return &*m_it.array_iterator;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13208 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13209
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13210 case value_t::null:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13211 case value_t::string:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13212 case value_t::boolean:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13213 case value_t::number_integer:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13214 case value_t::number_unsigned:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13215 case value_t::number_float:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13216 case value_t::binary:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13217 case value_t::discarded:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13218 default:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13219 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13220 if (JSON_HEDLEY_LIKELY(m_it.primitive_iterator.is_begin()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13221 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13222 return m_object;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13223 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13224
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13225 JSON_THROW(invalid_iterator::create(214, "cannot get value", m_object));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13226 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13227 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13228 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13229
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13230 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13231 @brief post-increment (it++)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13232 @pre The iterator is initialized; i.e. `m_object != nullptr`.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13233 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13234 iter_impl operator++(int)& // NOLINT(cert-dcl21-cpp)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13235 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13236 auto result = *this;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13237 ++(*this);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13238 return result;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13239 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13240
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13241 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13242 @brief pre-increment (++it)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13243 @pre The iterator is initialized; i.e. `m_object != nullptr`.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13244 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13245 iter_impl& operator++()
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13246 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13247 JSON_ASSERT(m_object != nullptr);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13248
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13249 switch (m_object->m_data.m_type)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13250 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13251 case value_t::object:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13252 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13253 std::advance(m_it.object_iterator, 1);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13254 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13255 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13256
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13257 case value_t::array:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13258 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13259 std::advance(m_it.array_iterator, 1);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13260 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13261 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13262
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13263 case value_t::null:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13264 case value_t::string:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13265 case value_t::boolean:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13266 case value_t::number_integer:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13267 case value_t::number_unsigned:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13268 case value_t::number_float:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13269 case value_t::binary:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13270 case value_t::discarded:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13271 default:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13272 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13273 ++m_it.primitive_iterator;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13274 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13275 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13276 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13277
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13278 return *this;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13279 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13280
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13281 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13282 @brief post-decrement (it--)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13283 @pre The iterator is initialized; i.e. `m_object != nullptr`.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13284 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13285 iter_impl operator--(int)& // NOLINT(cert-dcl21-cpp)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13286 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13287 auto result = *this;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13288 --(*this);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13289 return result;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13290 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13291
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13292 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13293 @brief pre-decrement (--it)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13294 @pre The iterator is initialized; i.e. `m_object != nullptr`.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13295 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13296 iter_impl& operator--()
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13297 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13298 JSON_ASSERT(m_object != nullptr);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13299
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13300 switch (m_object->m_data.m_type)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13301 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13302 case value_t::object:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13303 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13304 std::advance(m_it.object_iterator, -1);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13305 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13306 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13307
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13308 case value_t::array:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13309 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13310 std::advance(m_it.array_iterator, -1);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13311 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13312 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13313
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13314 case value_t::null:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13315 case value_t::string:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13316 case value_t::boolean:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13317 case value_t::number_integer:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13318 case value_t::number_unsigned:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13319 case value_t::number_float:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13320 case value_t::binary:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13321 case value_t::discarded:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13322 default:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13323 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13324 --m_it.primitive_iterator;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13325 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13326 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13327 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13328
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13329 return *this;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13330 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13331
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13332 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13333 @brief comparison: equal
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13334 @pre The iterator is initialized; i.e. `m_object != nullptr`.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13335 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13336 template < typename IterImpl, detail::enable_if_t < (std::is_same<IterImpl, iter_impl>::value || std::is_same<IterImpl, other_iter_impl>::value), std::nullptr_t > = nullptr >
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13337 bool operator==(const IterImpl& other) const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13338 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13339 // if objects are not the same, the comparison is undefined
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13340 if (JSON_HEDLEY_UNLIKELY(m_object != other.m_object))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13341 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13342 JSON_THROW(invalid_iterator::create(212, "cannot compare iterators of different containers", m_object));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13343 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13344
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13345 JSON_ASSERT(m_object != nullptr);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13346
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13347 switch (m_object->m_data.m_type)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13348 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13349 case value_t::object:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13350 return (m_it.object_iterator == other.m_it.object_iterator);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13351
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13352 case value_t::array:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13353 return (m_it.array_iterator == other.m_it.array_iterator);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13354
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13355 case value_t::null:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13356 case value_t::string:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13357 case value_t::boolean:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13358 case value_t::number_integer:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13359 case value_t::number_unsigned:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13360 case value_t::number_float:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13361 case value_t::binary:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13362 case value_t::discarded:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13363 default:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13364 return (m_it.primitive_iterator == other.m_it.primitive_iterator);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13365 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13366 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13367
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13368 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13369 @brief comparison: not equal
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13370 @pre The iterator is initialized; i.e. `m_object != nullptr`.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13371 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13372 template < typename IterImpl, detail::enable_if_t < (std::is_same<IterImpl, iter_impl>::value || std::is_same<IterImpl, other_iter_impl>::value), std::nullptr_t > = nullptr >
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13373 bool operator!=(const IterImpl& other) const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13374 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13375 return !operator==(other);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13376 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13377
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13378 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13379 @brief comparison: smaller
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13380 @pre The iterator is initialized; i.e. `m_object != nullptr`.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13381 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13382 bool operator<(const iter_impl& other) const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13383 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13384 // if objects are not the same, the comparison is undefined
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13385 if (JSON_HEDLEY_UNLIKELY(m_object != other.m_object))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13386 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13387 JSON_THROW(invalid_iterator::create(212, "cannot compare iterators of different containers", m_object));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13388 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13389
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13390 JSON_ASSERT(m_object != nullptr);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13391
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13392 switch (m_object->m_data.m_type)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13393 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13394 case value_t::object:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13395 JSON_THROW(invalid_iterator::create(213, "cannot compare order of object iterators", m_object));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13396
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13397 case value_t::array:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13398 return (m_it.array_iterator < other.m_it.array_iterator);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13399
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13400 case value_t::null:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13401 case value_t::string:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13402 case value_t::boolean:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13403 case value_t::number_integer:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13404 case value_t::number_unsigned:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13405 case value_t::number_float:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13406 case value_t::binary:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13407 case value_t::discarded:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13408 default:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13409 return (m_it.primitive_iterator < other.m_it.primitive_iterator);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13410 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13411 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13412
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13413 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13414 @brief comparison: less than or equal
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13415 @pre The iterator is initialized; i.e. `m_object != nullptr`.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13416 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13417 bool operator<=(const iter_impl& other) const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13418 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13419 return !other.operator < (*this);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13420 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13421
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13422 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13423 @brief comparison: greater than
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13424 @pre The iterator is initialized; i.e. `m_object != nullptr`.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13425 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13426 bool operator>(const iter_impl& other) const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13427 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13428 return !operator<=(other);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13429 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13430
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13431 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13432 @brief comparison: greater than or equal
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13433 @pre The iterator is initialized; i.e. `m_object != nullptr`.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13434 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13435 bool operator>=(const iter_impl& other) const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13436 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13437 return !operator<(other);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13438 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13439
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13440 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13441 @brief add to iterator
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13442 @pre The iterator is initialized; i.e. `m_object != nullptr`.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13443 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13444 iter_impl& operator+=(difference_type i)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13445 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13446 JSON_ASSERT(m_object != nullptr);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13447
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13448 switch (m_object->m_data.m_type)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13449 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13450 case value_t::object:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13451 JSON_THROW(invalid_iterator::create(209, "cannot use offsets with object iterators", m_object));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13452
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13453 case value_t::array:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13454 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13455 std::advance(m_it.array_iterator, i);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13456 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13457 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13458
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13459 case value_t::null:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13460 case value_t::string:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13461 case value_t::boolean:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13462 case value_t::number_integer:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13463 case value_t::number_unsigned:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13464 case value_t::number_float:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13465 case value_t::binary:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13466 case value_t::discarded:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13467 default:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13468 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13469 m_it.primitive_iterator += i;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13470 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13471 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13472 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13473
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13474 return *this;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13475 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13476
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13477 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13478 @brief subtract from iterator
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13479 @pre The iterator is initialized; i.e. `m_object != nullptr`.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13480 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13481 iter_impl& operator-=(difference_type i)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13482 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13483 return operator+=(-i);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13484 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13485
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13486 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13487 @brief add to iterator
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13488 @pre The iterator is initialized; i.e. `m_object != nullptr`.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13489 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13490 iter_impl operator+(difference_type i) const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13491 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13492 auto result = *this;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13493 result += i;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13494 return result;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13495 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13496
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13497 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13498 @brief addition of distance and iterator
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13499 @pre The iterator is initialized; i.e. `m_object != nullptr`.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13500 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13501 friend iter_impl operator+(difference_type i, const iter_impl& it)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13502 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13503 auto result = it;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13504 result += i;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13505 return result;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13506 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13507
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13508 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13509 @brief subtract from iterator
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13510 @pre The iterator is initialized; i.e. `m_object != nullptr`.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13511 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13512 iter_impl operator-(difference_type i) const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13513 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13514 auto result = *this;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13515 result -= i;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13516 return result;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13517 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13518
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13519 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13520 @brief return difference
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13521 @pre The iterator is initialized; i.e. `m_object != nullptr`.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13522 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13523 difference_type operator-(const iter_impl& other) const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13524 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13525 JSON_ASSERT(m_object != nullptr);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13526
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13527 switch (m_object->m_data.m_type)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13528 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13529 case value_t::object:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13530 JSON_THROW(invalid_iterator::create(209, "cannot use offsets with object iterators", m_object));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13531
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13532 case value_t::array:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13533 return m_it.array_iterator - other.m_it.array_iterator;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13534
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13535 case value_t::null:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13536 case value_t::string:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13537 case value_t::boolean:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13538 case value_t::number_integer:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13539 case value_t::number_unsigned:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13540 case value_t::number_float:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13541 case value_t::binary:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13542 case value_t::discarded:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13543 default:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13544 return m_it.primitive_iterator - other.m_it.primitive_iterator;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13545 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13546 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13547
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13548 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13549 @brief access to successor
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13550 @pre The iterator is initialized; i.e. `m_object != nullptr`.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13551 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13552 reference operator[](difference_type n) const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13553 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13554 JSON_ASSERT(m_object != nullptr);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13555
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13556 switch (m_object->m_data.m_type)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13557 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13558 case value_t::object:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13559 JSON_THROW(invalid_iterator::create(208, "cannot use operator[] for object iterators", m_object));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13560
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13561 case value_t::array:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13562 return *std::next(m_it.array_iterator, n);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13563
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13564 case value_t::null:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13565 JSON_THROW(invalid_iterator::create(214, "cannot get value", m_object));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13566
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13567 case value_t::string:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13568 case value_t::boolean:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13569 case value_t::number_integer:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13570 case value_t::number_unsigned:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13571 case value_t::number_float:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13572 case value_t::binary:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13573 case value_t::discarded:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13574 default:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13575 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13576 if (JSON_HEDLEY_LIKELY(m_it.primitive_iterator.get_value() == -n))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13577 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13578 return *m_object;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13579 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13580
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13581 JSON_THROW(invalid_iterator::create(214, "cannot get value", m_object));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13582 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13583 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13584 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13585
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13586 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13587 @brief return the key of an object iterator
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13588 @pre The iterator is initialized; i.e. `m_object != nullptr`.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13589 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13590 const typename object_t::key_type& key() const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13591 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13592 JSON_ASSERT(m_object != nullptr);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13593
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13594 if (JSON_HEDLEY_LIKELY(m_object->is_object()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13595 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13596 return m_it.object_iterator->first;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13597 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13598
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13599 JSON_THROW(invalid_iterator::create(207, "cannot use key() for non-object iterators", m_object));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13600 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13601
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13602 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13603 @brief return the value of an iterator
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13604 @pre The iterator is initialized; i.e. `m_object != nullptr`.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13605 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13606 reference value() const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13607 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13608 return operator*();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13609 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13610
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13611 JSON_PRIVATE_UNLESS_TESTED:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13612 /// associated JSON instance
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13613 pointer m_object = nullptr;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13614 /// the actual iterator of the associated instance
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13615 internal_iterator<typename std::remove_const<BasicJsonType>::type> m_it {};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13616 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13617
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13618 } // namespace detail
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13619 NLOHMANN_JSON_NAMESPACE_END
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13620
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13621 // #include <nlohmann/detail/iterators/iteration_proxy.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13622
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13623 // #include <nlohmann/detail/iterators/json_reverse_iterator.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13624 // __ _____ _____ _____
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13625 // __| | __| | | | JSON for Modern C++
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13626 // | | |__ | | | | | | version 3.11.3
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13627 // |_____|_____|_____|_|___| https://github.com/nlohmann/json
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13628 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13629 // SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13630 // SPDX-License-Identifier: MIT
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13631
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13632
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13633
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13634 #include <cstddef> // ptrdiff_t
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13635 #include <iterator> // reverse_iterator
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13636 #include <utility> // declval
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13637
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13638 // #include <nlohmann/detail/abi_macros.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13639
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13640
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13641 NLOHMANN_JSON_NAMESPACE_BEGIN
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13642 namespace detail
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13643 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13644
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13645 //////////////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13646 // reverse_iterator //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13647 //////////////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13648
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13649 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13650 @brief a template for a reverse iterator class
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13651
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13652 @tparam Base the base iterator type to reverse. Valid types are @ref
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13653 iterator (to create @ref reverse_iterator) and @ref const_iterator (to
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13654 create @ref const_reverse_iterator).
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13655
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13656 @requirement The class satisfies the following concept requirements:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13657 -
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13658 [BidirectionalIterator](https://en.cppreference.com/w/cpp/named_req/BidirectionalIterator):
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13659 The iterator that can be moved can be moved in both directions (i.e.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13660 incremented and decremented).
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13661 - [OutputIterator](https://en.cppreference.com/w/cpp/named_req/OutputIterator):
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13662 It is possible to write to the pointed-to element (only if @a Base is
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13663 @ref iterator).
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13664
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13665 @since version 1.0.0
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13666 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13667 template<typename Base>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13668 class json_reverse_iterator : public std::reverse_iterator<Base>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13669 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13670 public:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13671 using difference_type = std::ptrdiff_t;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13672 /// shortcut to the reverse iterator adapter
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13673 using base_iterator = std::reverse_iterator<Base>;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13674 /// the reference type for the pointed-to element
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13675 using reference = typename Base::reference;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13676
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13677 /// create reverse iterator from iterator
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13678 explicit json_reverse_iterator(const typename base_iterator::iterator_type& it) noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13679 : base_iterator(it) {}
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13680
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13681 /// create reverse iterator from base class
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13682 explicit json_reverse_iterator(const base_iterator& it) noexcept : base_iterator(it) {}
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13683
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13684 /// post-increment (it++)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13685 json_reverse_iterator operator++(int)& // NOLINT(cert-dcl21-cpp)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13686 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13687 return static_cast<json_reverse_iterator>(base_iterator::operator++(1));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13688 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13689
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13690 /// pre-increment (++it)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13691 json_reverse_iterator& operator++()
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13692 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13693 return static_cast<json_reverse_iterator&>(base_iterator::operator++());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13694 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13695
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13696 /// post-decrement (it--)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13697 json_reverse_iterator operator--(int)& // NOLINT(cert-dcl21-cpp)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13698 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13699 return static_cast<json_reverse_iterator>(base_iterator::operator--(1));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13700 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13701
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13702 /// pre-decrement (--it)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13703 json_reverse_iterator& operator--()
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13704 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13705 return static_cast<json_reverse_iterator&>(base_iterator::operator--());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13706 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13707
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13708 /// add to iterator
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13709 json_reverse_iterator& operator+=(difference_type i)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13710 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13711 return static_cast<json_reverse_iterator&>(base_iterator::operator+=(i));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13712 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13713
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13714 /// add to iterator
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13715 json_reverse_iterator operator+(difference_type i) const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13716 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13717 return static_cast<json_reverse_iterator>(base_iterator::operator+(i));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13718 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13719
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13720 /// subtract from iterator
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13721 json_reverse_iterator operator-(difference_type i) const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13722 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13723 return static_cast<json_reverse_iterator>(base_iterator::operator-(i));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13724 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13725
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13726 /// return difference
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13727 difference_type operator-(const json_reverse_iterator& other) const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13728 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13729 return base_iterator(*this) - base_iterator(other);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13730 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13731
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13732 /// access to successor
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13733 reference operator[](difference_type n) const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13734 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13735 return *(this->operator+(n));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13736 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13737
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13738 /// return the key of an object iterator
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13739 auto key() const -> decltype(std::declval<Base>().key())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13740 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13741 auto it = --this->base();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13742 return it.key();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13743 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13744
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13745 /// return the value of an iterator
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13746 reference value() const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13747 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13748 auto it = --this->base();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13749 return it.operator * ();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13750 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13751 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13752
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13753 } // namespace detail
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13754 NLOHMANN_JSON_NAMESPACE_END
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13755
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13756 // #include <nlohmann/detail/iterators/primitive_iterator.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13757
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13758 // #include <nlohmann/detail/json_custom_base_class.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13759 // __ _____ _____ _____
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13760 // __| | __| | | | JSON for Modern C++
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13761 // | | |__ | | | | | | version 3.11.3
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13762 // |_____|_____|_____|_|___| https://github.com/nlohmann/json
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13763 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13764 // SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13765 // SPDX-License-Identifier: MIT
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13766
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13767
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13768
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13769 #include <type_traits> // conditional, is_same
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13770
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13771 // #include <nlohmann/detail/abi_macros.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13772
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13773
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13774 NLOHMANN_JSON_NAMESPACE_BEGIN
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13775 namespace detail
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13776 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13777
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13778 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13779 @brief Default base class of the @ref basic_json class.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13780
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13781 So that the correct implementations of the copy / move ctors / assign operators
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13782 of @ref basic_json do not require complex case distinctions
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13783 (no base class / custom base class used as customization point),
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13784 @ref basic_json always has a base class.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13785 By default, this class is used because it is empty and thus has no effect
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13786 on the behavior of @ref basic_json.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13787 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13788 struct json_default_base {};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13789
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13790 template<class T>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13791 using json_base_class = typename std::conditional <
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13792 std::is_same<T, void>::value,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13793 json_default_base,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13794 T
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13795 >::type;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13796
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13797 } // namespace detail
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13798 NLOHMANN_JSON_NAMESPACE_END
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13799
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13800 // #include <nlohmann/detail/json_pointer.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13801 // __ _____ _____ _____
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13802 // __| | __| | | | JSON for Modern C++
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13803 // | | |__ | | | | | | version 3.11.3
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13804 // |_____|_____|_____|_|___| https://github.com/nlohmann/json
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13805 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13806 // SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13807 // SPDX-License-Identifier: MIT
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13808
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13809
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13810
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13811 #include <algorithm> // all_of
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13812 #include <cctype> // isdigit
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13813 #include <cerrno> // errno, ERANGE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13814 #include <cstdlib> // strtoull
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13815 #ifndef JSON_NO_IO
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13816 #include <iosfwd> // ostream
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13817 #endif // JSON_NO_IO
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13818 #include <limits> // max
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13819 #include <numeric> // accumulate
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13820 #include <string> // string
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13821 #include <utility> // move
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13822 #include <vector> // vector
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13823
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13824 // #include <nlohmann/detail/exceptions.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13825
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13826 // #include <nlohmann/detail/macro_scope.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13827
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13828 // #include <nlohmann/detail/string_concat.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13829
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13830 // #include <nlohmann/detail/string_escape.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13831
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13832 // #include <nlohmann/detail/value_t.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13833
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13834
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13835 NLOHMANN_JSON_NAMESPACE_BEGIN
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13836
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13837 /// @brief JSON Pointer defines a string syntax for identifying a specific value within a JSON document
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13838 /// @sa https://json.nlohmann.me/api/json_pointer/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13839 template<typename RefStringType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13840 class json_pointer
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13841 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13842 // allow basic_json to access private members
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13843 NLOHMANN_BASIC_JSON_TPL_DECLARATION
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13844 friend class basic_json;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13845
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13846 template<typename>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13847 friend class json_pointer;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13848
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13849 template<typename T>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13850 struct string_t_helper
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13851 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13852 using type = T;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13853 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13854
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13855 NLOHMANN_BASIC_JSON_TPL_DECLARATION
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13856 struct string_t_helper<NLOHMANN_BASIC_JSON_TPL>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13857 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13858 using type = StringType;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13859 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13860
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13861 public:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13862 // for backwards compatibility accept BasicJsonType
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13863 using string_t = typename string_t_helper<RefStringType>::type;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13864
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13865 /// @brief create JSON pointer
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13866 /// @sa https://json.nlohmann.me/api/json_pointer/json_pointer/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13867 explicit json_pointer(const string_t& s = "")
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13868 : reference_tokens(split(s))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13869 {}
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13870
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13871 /// @brief return a string representation of the JSON pointer
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13872 /// @sa https://json.nlohmann.me/api/json_pointer/to_string/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13873 string_t to_string() const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13874 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13875 return std::accumulate(reference_tokens.begin(), reference_tokens.end(),
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13876 string_t{},
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13877 [](const string_t& a, const string_t& b)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13878 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13879 return detail::concat(a, '/', detail::escape(b));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13880 });
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13881 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13882
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13883 /// @brief return a string representation of the JSON pointer
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13884 /// @sa https://json.nlohmann.me/api/json_pointer/operator_string/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13885 JSON_HEDLEY_DEPRECATED_FOR(3.11.0, to_string())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13886 operator string_t() const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13887 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13888 return to_string();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13889 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13890
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13891 #ifndef JSON_NO_IO
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13892 /// @brief write string representation of the JSON pointer to stream
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13893 /// @sa https://json.nlohmann.me/api/basic_json/operator_ltlt/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13894 friend std::ostream& operator<<(std::ostream& o, const json_pointer& ptr)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13895 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13896 o << ptr.to_string();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13897 return o;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13898 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13899 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13900
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13901 /// @brief append another JSON pointer at the end of this JSON pointer
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13902 /// @sa https://json.nlohmann.me/api/json_pointer/operator_slasheq/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13903 json_pointer& operator/=(const json_pointer& ptr)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13904 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13905 reference_tokens.insert(reference_tokens.end(),
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13906 ptr.reference_tokens.begin(),
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13907 ptr.reference_tokens.end());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13908 return *this;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13909 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13910
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13911 /// @brief append an unescaped reference token at the end of this JSON pointer
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13912 /// @sa https://json.nlohmann.me/api/json_pointer/operator_slasheq/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13913 json_pointer& operator/=(string_t token)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13914 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13915 push_back(std::move(token));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13916 return *this;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13917 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13918
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13919 /// @brief append an array index at the end of this JSON pointer
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13920 /// @sa https://json.nlohmann.me/api/json_pointer/operator_slasheq/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13921 json_pointer& operator/=(std::size_t array_idx)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13922 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13923 return *this /= std::to_string(array_idx);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13924 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13925
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13926 /// @brief create a new JSON pointer by appending the right JSON pointer at the end of the left JSON pointer
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13927 /// @sa https://json.nlohmann.me/api/json_pointer/operator_slash/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13928 friend json_pointer operator/(const json_pointer& lhs,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13929 const json_pointer& rhs)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13930 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13931 return json_pointer(lhs) /= rhs;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13932 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13933
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13934 /// @brief create a new JSON pointer by appending the unescaped token at the end of the JSON pointer
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13935 /// @sa https://json.nlohmann.me/api/json_pointer/operator_slash/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13936 friend json_pointer operator/(const json_pointer& lhs, string_t token) // NOLINT(performance-unnecessary-value-param)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13937 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13938 return json_pointer(lhs) /= std::move(token);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13939 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13940
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13941 /// @brief create a new JSON pointer by appending the array-index-token at the end of the JSON pointer
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13942 /// @sa https://json.nlohmann.me/api/json_pointer/operator_slash/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13943 friend json_pointer operator/(const json_pointer& lhs, std::size_t array_idx)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13944 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13945 return json_pointer(lhs) /= array_idx;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13946 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13947
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13948 /// @brief returns the parent of this JSON pointer
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13949 /// @sa https://json.nlohmann.me/api/json_pointer/parent_pointer/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13950 json_pointer parent_pointer() const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13951 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13952 if (empty())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13953 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13954 return *this;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13955 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13956
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13957 json_pointer res = *this;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13958 res.pop_back();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13959 return res;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13960 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13961
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13962 /// @brief remove last reference token
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13963 /// @sa https://json.nlohmann.me/api/json_pointer/pop_back/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13964 void pop_back()
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13965 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13966 if (JSON_HEDLEY_UNLIKELY(empty()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13967 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13968 JSON_THROW(detail::out_of_range::create(405, "JSON pointer has no parent", nullptr));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13969 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13970
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13971 reference_tokens.pop_back();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13972 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13973
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13974 /// @brief return last reference token
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13975 /// @sa https://json.nlohmann.me/api/json_pointer/back/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13976 const string_t& back() const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13977 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13978 if (JSON_HEDLEY_UNLIKELY(empty()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13979 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13980 JSON_THROW(detail::out_of_range::create(405, "JSON pointer has no parent", nullptr));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13981 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13982
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13983 return reference_tokens.back();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13984 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13985
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13986 /// @brief append an unescaped token at the end of the reference pointer
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13987 /// @sa https://json.nlohmann.me/api/json_pointer/push_back/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13988 void push_back(const string_t& token)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13989 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13990 reference_tokens.push_back(token);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13991 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13992
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13993 /// @brief append an unescaped token at the end of the reference pointer
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13994 /// @sa https://json.nlohmann.me/api/json_pointer/push_back/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13995 void push_back(string_t&& token)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13996 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13997 reference_tokens.push_back(std::move(token));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13998 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13999
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14000 /// @brief return whether pointer points to the root document
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14001 /// @sa https://json.nlohmann.me/api/json_pointer/empty/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14002 bool empty() const noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14003 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14004 return reference_tokens.empty();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14005 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14006
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14007 private:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14008 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14009 @param[in] s reference token to be converted into an array index
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14010
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14011 @return integer representation of @a s
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14012
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14013 @throw parse_error.106 if an array index begins with '0'
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14014 @throw parse_error.109 if an array index begins not with a digit
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14015 @throw out_of_range.404 if string @a s could not be converted to an integer
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14016 @throw out_of_range.410 if an array index exceeds size_type
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14017 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14018 template<typename BasicJsonType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14019 static typename BasicJsonType::size_type array_index(const string_t& s)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14020 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14021 using size_type = typename BasicJsonType::size_type;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14022
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14023 // error condition (cf. RFC 6901, Sect. 4)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14024 if (JSON_HEDLEY_UNLIKELY(s.size() > 1 && s[0] == '0'))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14025 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14026 JSON_THROW(detail::parse_error::create(106, 0, detail::concat("array index '", s, "' must not begin with '0'"), nullptr));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14027 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14028
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14029 // error condition (cf. RFC 6901, Sect. 4)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14030 if (JSON_HEDLEY_UNLIKELY(s.size() > 1 && !(s[0] >= '1' && s[0] <= '9')))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14031 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14032 JSON_THROW(detail::parse_error::create(109, 0, detail::concat("array index '", s, "' is not a number"), nullptr));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14033 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14034
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14035 const char* p = s.c_str();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14036 char* p_end = nullptr;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14037 errno = 0; // strtoull doesn't reset errno
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14038 const unsigned long long res = std::strtoull(p, &p_end, 10); // NOLINT(runtime/int)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14039 if (p == p_end // invalid input or empty string
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14040 || errno == ERANGE // out of range
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14041 || JSON_HEDLEY_UNLIKELY(static_cast<std::size_t>(p_end - p) != s.size())) // incomplete read
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14042 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14043 JSON_THROW(detail::out_of_range::create(404, detail::concat("unresolved reference token '", s, "'"), nullptr));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14044 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14045
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14046 // only triggered on special platforms (like 32bit), see also
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14047 // https://github.com/nlohmann/json/pull/2203
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14048 if (res >= static_cast<unsigned long long>((std::numeric_limits<size_type>::max)())) // NOLINT(runtime/int)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14049 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14050 JSON_THROW(detail::out_of_range::create(410, detail::concat("array index ", s, " exceeds size_type"), nullptr)); // LCOV_EXCL_LINE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14051 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14052
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14053 return static_cast<size_type>(res);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14054 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14055
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14056 JSON_PRIVATE_UNLESS_TESTED:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14057 json_pointer top() const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14058 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14059 if (JSON_HEDLEY_UNLIKELY(empty()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14060 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14061 JSON_THROW(detail::out_of_range::create(405, "JSON pointer has no parent", nullptr));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14062 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14063
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14064 json_pointer result = *this;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14065 result.reference_tokens = {reference_tokens[0]};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14066 return result;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14067 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14068
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14069 private:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14070 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14071 @brief create and return a reference to the pointed to value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14072
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14073 @complexity Linear in the number of reference tokens.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14074
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14075 @throw parse_error.109 if array index is not a number
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14076 @throw type_error.313 if value cannot be unflattened
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14077 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14078 template<typename BasicJsonType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14079 BasicJsonType& get_and_create(BasicJsonType& j) const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14080 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14081 auto* result = &j;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14082
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14083 // in case no reference tokens exist, return a reference to the JSON value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14084 // j which will be overwritten by a primitive value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14085 for (const auto& reference_token : reference_tokens)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14086 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14087 switch (result->type())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14088 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14089 case detail::value_t::null:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14090 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14091 if (reference_token == "0")
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14092 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14093 // start a new array if reference token is 0
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14094 result = &result->operator[](0);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14095 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14096 else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14097 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14098 // start a new object otherwise
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14099 result = &result->operator[](reference_token);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14100 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14101 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14102 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14103
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14104 case detail::value_t::object:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14105 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14106 // create an entry in the object
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14107 result = &result->operator[](reference_token);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14108 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14109 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14110
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14111 case detail::value_t::array:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14112 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14113 // create an entry in the array
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14114 result = &result->operator[](array_index<BasicJsonType>(reference_token));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14115 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14116 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14117
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14118 /*
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14119 The following code is only reached if there exists a reference
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14120 token _and_ the current value is primitive. In this case, we have
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14121 an error situation, because primitive values may only occur as
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14122 single value; that is, with an empty list of reference tokens.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14123 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14124 case detail::value_t::string:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14125 case detail::value_t::boolean:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14126 case detail::value_t::number_integer:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14127 case detail::value_t::number_unsigned:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14128 case detail::value_t::number_float:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14129 case detail::value_t::binary:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14130 case detail::value_t::discarded:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14131 default:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14132 JSON_THROW(detail::type_error::create(313, "invalid value to unflatten", &j));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14133 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14134 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14135
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14136 return *result;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14137 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14138
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14139 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14140 @brief return a reference to the pointed to value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14141
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14142 @note This version does not throw if a value is not present, but tries to
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14143 create nested values instead. For instance, calling this function
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14144 with pointer `"/this/that"` on a null value is equivalent to calling
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14145 `operator[]("this").operator[]("that")` on that value, effectively
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14146 changing the null value to an object.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14147
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14148 @param[in] ptr a JSON value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14149
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14150 @return reference to the JSON value pointed to by the JSON pointer
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14151
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14152 @complexity Linear in the length of the JSON pointer.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14153
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14154 @throw parse_error.106 if an array index begins with '0'
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14155 @throw parse_error.109 if an array index was not a number
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14156 @throw out_of_range.404 if the JSON pointer can not be resolved
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14157 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14158 template<typename BasicJsonType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14159 BasicJsonType& get_unchecked(BasicJsonType* ptr) const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14160 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14161 for (const auto& reference_token : reference_tokens)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14162 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14163 // convert null values to arrays or objects before continuing
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14164 if (ptr->is_null())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14165 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14166 // check if reference token is a number
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14167 const bool nums =
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14168 std::all_of(reference_token.begin(), reference_token.end(),
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14169 [](const unsigned char x)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14170 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14171 return std::isdigit(x);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14172 });
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14173
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14174 // change value to array for numbers or "-" or to object otherwise
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14175 *ptr = (nums || reference_token == "-")
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14176 ? detail::value_t::array
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14177 : detail::value_t::object;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14178 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14179
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14180 switch (ptr->type())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14181 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14182 case detail::value_t::object:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14183 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14184 // use unchecked object access
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14185 ptr = &ptr->operator[](reference_token);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14186 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14187 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14188
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14189 case detail::value_t::array:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14190 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14191 if (reference_token == "-")
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14192 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14193 // explicitly treat "-" as index beyond the end
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14194 ptr = &ptr->operator[](ptr->m_data.m_value.array->size());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14195 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14196 else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14197 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14198 // convert array index to number; unchecked access
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14199 ptr = &ptr->operator[](array_index<BasicJsonType>(reference_token));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14200 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14201 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14202 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14203
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14204 case detail::value_t::null:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14205 case detail::value_t::string:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14206 case detail::value_t::boolean:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14207 case detail::value_t::number_integer:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14208 case detail::value_t::number_unsigned:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14209 case detail::value_t::number_float:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14210 case detail::value_t::binary:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14211 case detail::value_t::discarded:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14212 default:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14213 JSON_THROW(detail::out_of_range::create(404, detail::concat("unresolved reference token '", reference_token, "'"), ptr));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14214 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14215 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14216
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14217 return *ptr;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14218 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14219
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14220 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14221 @throw parse_error.106 if an array index begins with '0'
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14222 @throw parse_error.109 if an array index was not a number
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14223 @throw out_of_range.402 if the array index '-' is used
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14224 @throw out_of_range.404 if the JSON pointer can not be resolved
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14225 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14226 template<typename BasicJsonType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14227 BasicJsonType& get_checked(BasicJsonType* ptr) const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14228 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14229 for (const auto& reference_token : reference_tokens)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14230 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14231 switch (ptr->type())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14232 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14233 case detail::value_t::object:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14234 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14235 // note: at performs range check
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14236 ptr = &ptr->at(reference_token);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14237 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14238 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14239
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14240 case detail::value_t::array:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14241 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14242 if (JSON_HEDLEY_UNLIKELY(reference_token == "-"))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14243 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14244 // "-" always fails the range check
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14245 JSON_THROW(detail::out_of_range::create(402, detail::concat(
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14246 "array index '-' (", std::to_string(ptr->m_data.m_value.array->size()),
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14247 ") is out of range"), ptr));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14248 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14249
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14250 // note: at performs range check
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14251 ptr = &ptr->at(array_index<BasicJsonType>(reference_token));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14252 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14253 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14254
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14255 case detail::value_t::null:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14256 case detail::value_t::string:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14257 case detail::value_t::boolean:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14258 case detail::value_t::number_integer:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14259 case detail::value_t::number_unsigned:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14260 case detail::value_t::number_float:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14261 case detail::value_t::binary:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14262 case detail::value_t::discarded:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14263 default:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14264 JSON_THROW(detail::out_of_range::create(404, detail::concat("unresolved reference token '", reference_token, "'"), ptr));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14265 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14266 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14267
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14268 return *ptr;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14269 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14270
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14271 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14272 @brief return a const reference to the pointed to value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14273
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14274 @param[in] ptr a JSON value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14275
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14276 @return const reference to the JSON value pointed to by the JSON
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14277 pointer
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14278
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14279 @throw parse_error.106 if an array index begins with '0'
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14280 @throw parse_error.109 if an array index was not a number
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14281 @throw out_of_range.402 if the array index '-' is used
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14282 @throw out_of_range.404 if the JSON pointer can not be resolved
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14283 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14284 template<typename BasicJsonType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14285 const BasicJsonType& get_unchecked(const BasicJsonType* ptr) const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14286 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14287 for (const auto& reference_token : reference_tokens)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14288 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14289 switch (ptr->type())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14290 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14291 case detail::value_t::object:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14292 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14293 // use unchecked object access
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14294 ptr = &ptr->operator[](reference_token);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14295 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14296 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14297
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14298 case detail::value_t::array:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14299 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14300 if (JSON_HEDLEY_UNLIKELY(reference_token == "-"))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14301 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14302 // "-" cannot be used for const access
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14303 JSON_THROW(detail::out_of_range::create(402, detail::concat("array index '-' (", std::to_string(ptr->m_data.m_value.array->size()), ") is out of range"), ptr));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14304 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14305
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14306 // use unchecked array access
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14307 ptr = &ptr->operator[](array_index<BasicJsonType>(reference_token));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14308 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14309 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14310
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14311 case detail::value_t::null:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14312 case detail::value_t::string:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14313 case detail::value_t::boolean:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14314 case detail::value_t::number_integer:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14315 case detail::value_t::number_unsigned:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14316 case detail::value_t::number_float:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14317 case detail::value_t::binary:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14318 case detail::value_t::discarded:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14319 default:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14320 JSON_THROW(detail::out_of_range::create(404, detail::concat("unresolved reference token '", reference_token, "'"), ptr));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14321 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14322 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14323
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14324 return *ptr;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14325 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14326
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14327 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14328 @throw parse_error.106 if an array index begins with '0'
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14329 @throw parse_error.109 if an array index was not a number
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14330 @throw out_of_range.402 if the array index '-' is used
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14331 @throw out_of_range.404 if the JSON pointer can not be resolved
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14332 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14333 template<typename BasicJsonType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14334 const BasicJsonType& get_checked(const BasicJsonType* ptr) const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14335 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14336 for (const auto& reference_token : reference_tokens)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14337 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14338 switch (ptr->type())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14339 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14340 case detail::value_t::object:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14341 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14342 // note: at performs range check
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14343 ptr = &ptr->at(reference_token);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14344 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14345 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14346
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14347 case detail::value_t::array:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14348 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14349 if (JSON_HEDLEY_UNLIKELY(reference_token == "-"))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14350 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14351 // "-" always fails the range check
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14352 JSON_THROW(detail::out_of_range::create(402, detail::concat(
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14353 "array index '-' (", std::to_string(ptr->m_data.m_value.array->size()),
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14354 ") is out of range"), ptr));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14355 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14356
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14357 // note: at performs range check
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14358 ptr = &ptr->at(array_index<BasicJsonType>(reference_token));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14359 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14360 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14361
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14362 case detail::value_t::null:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14363 case detail::value_t::string:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14364 case detail::value_t::boolean:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14365 case detail::value_t::number_integer:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14366 case detail::value_t::number_unsigned:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14367 case detail::value_t::number_float:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14368 case detail::value_t::binary:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14369 case detail::value_t::discarded:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14370 default:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14371 JSON_THROW(detail::out_of_range::create(404, detail::concat("unresolved reference token '", reference_token, "'"), ptr));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14372 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14373 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14374
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14375 return *ptr;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14376 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14377
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14378 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14379 @throw parse_error.106 if an array index begins with '0'
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14380 @throw parse_error.109 if an array index was not a number
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14381 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14382 template<typename BasicJsonType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14383 bool contains(const BasicJsonType* ptr) const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14384 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14385 for (const auto& reference_token : reference_tokens)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14386 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14387 switch (ptr->type())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14388 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14389 case detail::value_t::object:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14390 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14391 if (!ptr->contains(reference_token))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14392 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14393 // we did not find the key in the object
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14394 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14395 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14396
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14397 ptr = &ptr->operator[](reference_token);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14398 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14399 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14400
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14401 case detail::value_t::array:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14402 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14403 if (JSON_HEDLEY_UNLIKELY(reference_token == "-"))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14404 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14405 // "-" always fails the range check
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14406 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14407 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14408 if (JSON_HEDLEY_UNLIKELY(reference_token.size() == 1 && !("0" <= reference_token && reference_token <= "9")))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14409 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14410 // invalid char
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14411 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14412 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14413 if (JSON_HEDLEY_UNLIKELY(reference_token.size() > 1))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14414 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14415 if (JSON_HEDLEY_UNLIKELY(!('1' <= reference_token[0] && reference_token[0] <= '9')))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14416 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14417 // first char should be between '1' and '9'
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14418 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14419 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14420 for (std::size_t i = 1; i < reference_token.size(); i++)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14421 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14422 if (JSON_HEDLEY_UNLIKELY(!('0' <= reference_token[i] && reference_token[i] <= '9')))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14423 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14424 // other char should be between '0' and '9'
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14425 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14426 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14427 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14428 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14429
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14430 const auto idx = array_index<BasicJsonType>(reference_token);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14431 if (idx >= ptr->size())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14432 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14433 // index out of range
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14434 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14435 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14436
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14437 ptr = &ptr->operator[](idx);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14438 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14439 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14440
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14441 case detail::value_t::null:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14442 case detail::value_t::string:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14443 case detail::value_t::boolean:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14444 case detail::value_t::number_integer:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14445 case detail::value_t::number_unsigned:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14446 case detail::value_t::number_float:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14447 case detail::value_t::binary:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14448 case detail::value_t::discarded:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14449 default:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14450 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14451 // we do not expect primitive values if there is still a
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14452 // reference token to process
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14453 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14454 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14455 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14456 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14457
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14458 // no reference token left means we found a primitive value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14459 return true;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14460 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14461
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14462 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14463 @brief split the string input to reference tokens
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14464
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14465 @note This function is only called by the json_pointer constructor.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14466 All exceptions below are documented there.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14467
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14468 @throw parse_error.107 if the pointer is not empty or begins with '/'
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14469 @throw parse_error.108 if character '~' is not followed by '0' or '1'
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14470 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14471 static std::vector<string_t> split(const string_t& reference_string)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14472 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14473 std::vector<string_t> result;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14474
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14475 // special case: empty reference string -> no reference tokens
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14476 if (reference_string.empty())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14477 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14478 return result;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14479 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14480
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14481 // check if nonempty reference string begins with slash
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14482 if (JSON_HEDLEY_UNLIKELY(reference_string[0] != '/'))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14483 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14484 JSON_THROW(detail::parse_error::create(107, 1, detail::concat("JSON pointer must be empty or begin with '/' - was: '", reference_string, "'"), nullptr));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14485 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14486
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14487 // extract the reference tokens:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14488 // - slash: position of the last read slash (or end of string)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14489 // - start: position after the previous slash
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14490 for (
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14491 // search for the first slash after the first character
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14492 std::size_t slash = reference_string.find_first_of('/', 1),
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14493 // set the beginning of the first reference token
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14494 start = 1;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14495 // we can stop if start == 0 (if slash == string_t::npos)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14496 start != 0;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14497 // set the beginning of the next reference token
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14498 // (will eventually be 0 if slash == string_t::npos)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14499 start = (slash == string_t::npos) ? 0 : slash + 1,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14500 // find next slash
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14501 slash = reference_string.find_first_of('/', start))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14502 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14503 // use the text between the beginning of the reference token
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14504 // (start) and the last slash (slash).
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14505 auto reference_token = reference_string.substr(start, slash - start);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14506
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14507 // check reference tokens are properly escaped
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14508 for (std::size_t pos = reference_token.find_first_of('~');
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14509 pos != string_t::npos;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14510 pos = reference_token.find_first_of('~', pos + 1))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14511 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14512 JSON_ASSERT(reference_token[pos] == '~');
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14513
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14514 // ~ must be followed by 0 or 1
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14515 if (JSON_HEDLEY_UNLIKELY(pos == reference_token.size() - 1 ||
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14516 (reference_token[pos + 1] != '0' &&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14517 reference_token[pos + 1] != '1')))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14518 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14519 JSON_THROW(detail::parse_error::create(108, 0, "escape character '~' must be followed with '0' or '1'", nullptr));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14520 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14521 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14522
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14523 // finally, store the reference token
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14524 detail::unescape(reference_token);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14525 result.push_back(reference_token);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14526 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14527
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14528 return result;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14529 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14530
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14531 private:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14532 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14533 @param[in] reference_string the reference string to the current value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14534 @param[in] value the value to consider
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14535 @param[in,out] result the result object to insert values to
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14536
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14537 @note Empty objects or arrays are flattened to `null`.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14538 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14539 template<typename BasicJsonType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14540 static void flatten(const string_t& reference_string,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14541 const BasicJsonType& value,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14542 BasicJsonType& result)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14543 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14544 switch (value.type())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14545 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14546 case detail::value_t::array:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14547 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14548 if (value.m_data.m_value.array->empty())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14549 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14550 // flatten empty array as null
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14551 result[reference_string] = nullptr;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14552 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14553 else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14554 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14555 // iterate array and use index as reference string
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14556 for (std::size_t i = 0; i < value.m_data.m_value.array->size(); ++i)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14557 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14558 flatten(detail::concat(reference_string, '/', std::to_string(i)),
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14559 value.m_data.m_value.array->operator[](i), result);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14560 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14561 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14562 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14563 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14564
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14565 case detail::value_t::object:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14566 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14567 if (value.m_data.m_value.object->empty())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14568 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14569 // flatten empty object as null
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14570 result[reference_string] = nullptr;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14571 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14572 else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14573 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14574 // iterate object and use keys as reference string
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14575 for (const auto& element : *value.m_data.m_value.object)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14576 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14577 flatten(detail::concat(reference_string, '/', detail::escape(element.first)), element.second, result);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14578 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14579 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14580 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14581 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14582
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14583 case detail::value_t::null:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14584 case detail::value_t::string:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14585 case detail::value_t::boolean:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14586 case detail::value_t::number_integer:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14587 case detail::value_t::number_unsigned:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14588 case detail::value_t::number_float:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14589 case detail::value_t::binary:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14590 case detail::value_t::discarded:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14591 default:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14592 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14593 // add primitive value with its reference string
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14594 result[reference_string] = value;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14595 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14596 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14597 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14598 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14599
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14600 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14601 @param[in] value flattened JSON
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14602
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14603 @return unflattened JSON
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14604
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14605 @throw parse_error.109 if array index is not a number
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14606 @throw type_error.314 if value is not an object
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14607 @throw type_error.315 if object values are not primitive
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14608 @throw type_error.313 if value cannot be unflattened
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14609 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14610 template<typename BasicJsonType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14611 static BasicJsonType
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14612 unflatten(const BasicJsonType& value)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14613 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14614 if (JSON_HEDLEY_UNLIKELY(!value.is_object()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14615 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14616 JSON_THROW(detail::type_error::create(314, "only objects can be unflattened", &value));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14617 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14618
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14619 BasicJsonType result;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14620
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14621 // iterate the JSON object values
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14622 for (const auto& element : *value.m_data.m_value.object)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14623 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14624 if (JSON_HEDLEY_UNLIKELY(!element.second.is_primitive()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14625 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14626 JSON_THROW(detail::type_error::create(315, "values in object must be primitive", &element.second));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14627 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14628
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14629 // assign value to reference pointed to by JSON pointer; Note that if
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14630 // the JSON pointer is "" (i.e., points to the whole value), function
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14631 // get_and_create returns a reference to result itself. An assignment
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14632 // will then create a primitive value.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14633 json_pointer(element.first).get_and_create(result) = element.second;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14634 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14635
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14636 return result;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14637 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14638
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14639 // can't use conversion operator because of ambiguity
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14640 json_pointer<string_t> convert() const&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14641 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14642 json_pointer<string_t> result;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14643 result.reference_tokens = reference_tokens;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14644 return result;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14645 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14646
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14647 json_pointer<string_t> convert()&&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14648 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14649 json_pointer<string_t> result;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14650 result.reference_tokens = std::move(reference_tokens);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14651 return result;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14652 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14653
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14654 public:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14655 #if JSON_HAS_THREE_WAY_COMPARISON
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14656 /// @brief compares two JSON pointers for equality
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14657 /// @sa https://json.nlohmann.me/api/json_pointer/operator_eq/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14658 template<typename RefStringTypeRhs>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14659 bool operator==(const json_pointer<RefStringTypeRhs>& rhs) const noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14660 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14661 return reference_tokens == rhs.reference_tokens;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14662 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14663
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14664 /// @brief compares JSON pointer and string for equality
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14665 /// @sa https://json.nlohmann.me/api/json_pointer/operator_eq/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14666 JSON_HEDLEY_DEPRECATED_FOR(3.11.2, operator==(json_pointer))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14667 bool operator==(const string_t& rhs) const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14668 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14669 return *this == json_pointer(rhs);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14670 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14671
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14672 /// @brief 3-way compares two JSON pointers
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14673 template<typename RefStringTypeRhs>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14674 std::strong_ordering operator<=>(const json_pointer<RefStringTypeRhs>& rhs) const noexcept // *NOPAD*
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14675 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14676 return reference_tokens <=> rhs.reference_tokens; // *NOPAD*
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14677 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14678 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14679 /// @brief compares two JSON pointers for equality
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14680 /// @sa https://json.nlohmann.me/api/json_pointer/operator_eq/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14681 template<typename RefStringTypeLhs, typename RefStringTypeRhs>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14682 // NOLINTNEXTLINE(readability-redundant-declaration)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14683 friend bool operator==(const json_pointer<RefStringTypeLhs>& lhs,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14684 const json_pointer<RefStringTypeRhs>& rhs) noexcept;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14685
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14686 /// @brief compares JSON pointer and string for equality
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14687 /// @sa https://json.nlohmann.me/api/json_pointer/operator_eq/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14688 template<typename RefStringTypeLhs, typename StringType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14689 // NOLINTNEXTLINE(readability-redundant-declaration)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14690 friend bool operator==(const json_pointer<RefStringTypeLhs>& lhs,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14691 const StringType& rhs);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14692
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14693 /// @brief compares string and JSON pointer for equality
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14694 /// @sa https://json.nlohmann.me/api/json_pointer/operator_eq/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14695 template<typename RefStringTypeRhs, typename StringType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14696 // NOLINTNEXTLINE(readability-redundant-declaration)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14697 friend bool operator==(const StringType& lhs,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14698 const json_pointer<RefStringTypeRhs>& rhs);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14699
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14700 /// @brief compares two JSON pointers for inequality
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14701 /// @sa https://json.nlohmann.me/api/json_pointer/operator_ne/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14702 template<typename RefStringTypeLhs, typename RefStringTypeRhs>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14703 // NOLINTNEXTLINE(readability-redundant-declaration)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14704 friend bool operator!=(const json_pointer<RefStringTypeLhs>& lhs,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14705 const json_pointer<RefStringTypeRhs>& rhs) noexcept;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14706
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14707 /// @brief compares JSON pointer and string for inequality
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14708 /// @sa https://json.nlohmann.me/api/json_pointer/operator_ne/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14709 template<typename RefStringTypeLhs, typename StringType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14710 // NOLINTNEXTLINE(readability-redundant-declaration)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14711 friend bool operator!=(const json_pointer<RefStringTypeLhs>& lhs,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14712 const StringType& rhs);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14713
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14714 /// @brief compares string and JSON pointer for inequality
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14715 /// @sa https://json.nlohmann.me/api/json_pointer/operator_ne/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14716 template<typename RefStringTypeRhs, typename StringType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14717 // NOLINTNEXTLINE(readability-redundant-declaration)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14718 friend bool operator!=(const StringType& lhs,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14719 const json_pointer<RefStringTypeRhs>& rhs);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14720
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14721 /// @brief compares two JSON pointer for less-than
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14722 template<typename RefStringTypeLhs, typename RefStringTypeRhs>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14723 // NOLINTNEXTLINE(readability-redundant-declaration)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14724 friend bool operator<(const json_pointer<RefStringTypeLhs>& lhs,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14725 const json_pointer<RefStringTypeRhs>& rhs) noexcept;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14726 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14727
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14728 private:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14729 /// the reference tokens
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14730 std::vector<string_t> reference_tokens;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14731 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14732
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14733 #if !JSON_HAS_THREE_WAY_COMPARISON
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14734 // functions cannot be defined inside class due to ODR violations
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14735 template<typename RefStringTypeLhs, typename RefStringTypeRhs>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14736 inline bool operator==(const json_pointer<RefStringTypeLhs>& lhs,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14737 const json_pointer<RefStringTypeRhs>& rhs) noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14738 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14739 return lhs.reference_tokens == rhs.reference_tokens;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14740 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14741
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14742 template<typename RefStringTypeLhs,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14743 typename StringType = typename json_pointer<RefStringTypeLhs>::string_t>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14744 JSON_HEDLEY_DEPRECATED_FOR(3.11.2, operator==(json_pointer, json_pointer))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14745 inline bool operator==(const json_pointer<RefStringTypeLhs>& lhs,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14746 const StringType& rhs)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14747 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14748 return lhs == json_pointer<RefStringTypeLhs>(rhs);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14749 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14750
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14751 template<typename RefStringTypeRhs,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14752 typename StringType = typename json_pointer<RefStringTypeRhs>::string_t>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14753 JSON_HEDLEY_DEPRECATED_FOR(3.11.2, operator==(json_pointer, json_pointer))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14754 inline bool operator==(const StringType& lhs,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14755 const json_pointer<RefStringTypeRhs>& rhs)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14756 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14757 return json_pointer<RefStringTypeRhs>(lhs) == rhs;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14758 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14759
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14760 template<typename RefStringTypeLhs, typename RefStringTypeRhs>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14761 inline bool operator!=(const json_pointer<RefStringTypeLhs>& lhs,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14762 const json_pointer<RefStringTypeRhs>& rhs) noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14763 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14764 return !(lhs == rhs);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14765 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14766
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14767 template<typename RefStringTypeLhs,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14768 typename StringType = typename json_pointer<RefStringTypeLhs>::string_t>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14769 JSON_HEDLEY_DEPRECATED_FOR(3.11.2, operator!=(json_pointer, json_pointer))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14770 inline bool operator!=(const json_pointer<RefStringTypeLhs>& lhs,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14771 const StringType& rhs)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14772 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14773 return !(lhs == rhs);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14774 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14775
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14776 template<typename RefStringTypeRhs,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14777 typename StringType = typename json_pointer<RefStringTypeRhs>::string_t>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14778 JSON_HEDLEY_DEPRECATED_FOR(3.11.2, operator!=(json_pointer, json_pointer))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14779 inline bool operator!=(const StringType& lhs,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14780 const json_pointer<RefStringTypeRhs>& rhs)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14781 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14782 return !(lhs == rhs);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14783 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14784
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14785 template<typename RefStringTypeLhs, typename RefStringTypeRhs>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14786 inline bool operator<(const json_pointer<RefStringTypeLhs>& lhs,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14787 const json_pointer<RefStringTypeRhs>& rhs) noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14788 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14789 return lhs.reference_tokens < rhs.reference_tokens;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14790 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14791 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14792
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14793 NLOHMANN_JSON_NAMESPACE_END
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14794
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14795 // #include <nlohmann/detail/json_ref.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14796 // __ _____ _____ _____
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14797 // __| | __| | | | JSON for Modern C++
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14798 // | | |__ | | | | | | version 3.11.3
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14799 // |_____|_____|_____|_|___| https://github.com/nlohmann/json
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14800 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14801 // SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14802 // SPDX-License-Identifier: MIT
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14803
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14804
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14805
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14806 #include <initializer_list>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14807 #include <utility>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14808
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14809 // #include <nlohmann/detail/abi_macros.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14810
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14811 // #include <nlohmann/detail/meta/type_traits.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14812
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14813
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14814 NLOHMANN_JSON_NAMESPACE_BEGIN
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14815 namespace detail
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14816 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14817
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14818 template<typename BasicJsonType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14819 class json_ref
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14820 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14821 public:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14822 using value_type = BasicJsonType;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14823
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14824 json_ref(value_type&& value)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14825 : owned_value(std::move(value))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14826 {}
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14827
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14828 json_ref(const value_type& value)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14829 : value_ref(&value)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14830 {}
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14831
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14832 json_ref(std::initializer_list<json_ref> init)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14833 : owned_value(init)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14834 {}
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14835
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14836 template <
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14837 class... Args,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14838 enable_if_t<std::is_constructible<value_type, Args...>::value, int> = 0 >
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14839 json_ref(Args && ... args)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14840 : owned_value(std::forward<Args>(args)...)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14841 {}
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14842
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14843 // class should be movable only
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14844 json_ref(json_ref&&) noexcept = default;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14845 json_ref(const json_ref&) = delete;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14846 json_ref& operator=(const json_ref&) = delete;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14847 json_ref& operator=(json_ref&&) = delete;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14848 ~json_ref() = default;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14849
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14850 value_type moved_or_copied() const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14851 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14852 if (value_ref == nullptr)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14853 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14854 return std::move(owned_value);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14855 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14856 return *value_ref;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14857 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14858
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14859 value_type const& operator*() const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14860 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14861 return value_ref ? *value_ref : owned_value;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14862 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14863
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14864 value_type const* operator->() const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14865 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14866 return &** this;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14867 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14868
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14869 private:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14870 mutable value_type owned_value = nullptr;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14871 value_type const* value_ref = nullptr;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14872 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14873
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14874 } // namespace detail
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14875 NLOHMANN_JSON_NAMESPACE_END
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14876
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14877 // #include <nlohmann/detail/macro_scope.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14878
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14879 // #include <nlohmann/detail/string_concat.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14880
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14881 // #include <nlohmann/detail/string_escape.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14882
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14883 // #include <nlohmann/detail/meta/cpp_future.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14884
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14885 // #include <nlohmann/detail/meta/type_traits.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14886
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14887 // #include <nlohmann/detail/output/binary_writer.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14888 // __ _____ _____ _____
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14889 // __| | __| | | | JSON for Modern C++
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14890 // | | |__ | | | | | | version 3.11.3
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14891 // |_____|_____|_____|_|___| https://github.com/nlohmann/json
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14892 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14893 // SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14894 // SPDX-License-Identifier: MIT
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14895
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14896
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14897
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14898 #include <algorithm> // reverse
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14899 #include <array> // array
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14900 #include <map> // map
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14901 #include <cmath> // isnan, isinf
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14902 #include <cstdint> // uint8_t, uint16_t, uint32_t, uint64_t
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14903 #include <cstring> // memcpy
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14904 #include <limits> // numeric_limits
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14905 #include <string> // string
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14906 #include <utility> // move
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14907 #include <vector> // vector
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14908
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14909 // #include <nlohmann/detail/input/binary_reader.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14910
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14911 // #include <nlohmann/detail/macro_scope.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14912
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14913 // #include <nlohmann/detail/output/output_adapters.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14914 // __ _____ _____ _____
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14915 // __| | __| | | | JSON for Modern C++
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14916 // | | |__ | | | | | | version 3.11.3
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14917 // |_____|_____|_____|_|___| https://github.com/nlohmann/json
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14918 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14919 // SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14920 // SPDX-License-Identifier: MIT
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14921
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14922
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14923
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14924 #include <algorithm> // copy
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14925 #include <cstddef> // size_t
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14926 #include <iterator> // back_inserter
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14927 #include <memory> // shared_ptr, make_shared
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14928 #include <string> // basic_string
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14929 #include <vector> // vector
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14930
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14931 #ifndef JSON_NO_IO
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14932 #include <ios> // streamsize
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14933 #include <ostream> // basic_ostream
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14934 #endif // JSON_NO_IO
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14935
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14936 // #include <nlohmann/detail/macro_scope.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14937
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14938
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14939 NLOHMANN_JSON_NAMESPACE_BEGIN
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14940 namespace detail
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14941 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14942
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14943 /// abstract output adapter interface
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14944 template<typename CharType> struct output_adapter_protocol
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14945 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14946 virtual void write_character(CharType c) = 0;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14947 virtual void write_characters(const CharType* s, std::size_t length) = 0;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14948 virtual ~output_adapter_protocol() = default;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14949
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14950 output_adapter_protocol() = default;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14951 output_adapter_protocol(const output_adapter_protocol&) = default;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14952 output_adapter_protocol(output_adapter_protocol&&) noexcept = default;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14953 output_adapter_protocol& operator=(const output_adapter_protocol&) = default;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14954 output_adapter_protocol& operator=(output_adapter_protocol&&) noexcept = default;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14955 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14956
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14957 /// a type to simplify interfaces
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14958 template<typename CharType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14959 using output_adapter_t = std::shared_ptr<output_adapter_protocol<CharType>>;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14960
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14961 /// output adapter for byte vectors
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14962 template<typename CharType, typename AllocatorType = std::allocator<CharType>>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14963 class output_vector_adapter : public output_adapter_protocol<CharType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14964 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14965 public:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14966 explicit output_vector_adapter(std::vector<CharType, AllocatorType>& vec) noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14967 : v(vec)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14968 {}
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14969
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14970 void write_character(CharType c) override
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14971 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14972 v.push_back(c);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14973 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14974
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14975 JSON_HEDLEY_NON_NULL(2)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14976 void write_characters(const CharType* s, std::size_t length) override
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14977 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14978 v.insert(v.end(), s, s + length);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14979 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14980
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14981 private:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14982 std::vector<CharType, AllocatorType>& v;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14983 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14984
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14985 #ifndef JSON_NO_IO
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14986 /// output adapter for output streams
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14987 template<typename CharType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14988 class output_stream_adapter : public output_adapter_protocol<CharType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14989 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14990 public:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14991 explicit output_stream_adapter(std::basic_ostream<CharType>& s) noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14992 : stream(s)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14993 {}
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14994
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14995 void write_character(CharType c) override
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14996 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14997 stream.put(c);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14998 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14999
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15000 JSON_HEDLEY_NON_NULL(2)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15001 void write_characters(const CharType* s, std::size_t length) override
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15002 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15003 stream.write(s, static_cast<std::streamsize>(length));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15004 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15005
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15006 private:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15007 std::basic_ostream<CharType>& stream;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15008 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15009 #endif // JSON_NO_IO
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15010
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15011 /// output adapter for basic_string
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15012 template<typename CharType, typename StringType = std::basic_string<CharType>>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15013 class output_string_adapter : public output_adapter_protocol<CharType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15014 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15015 public:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15016 explicit output_string_adapter(StringType& s) noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15017 : str(s)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15018 {}
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15019
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15020 void write_character(CharType c) override
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15021 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15022 str.push_back(c);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15023 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15024
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15025 JSON_HEDLEY_NON_NULL(2)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15026 void write_characters(const CharType* s, std::size_t length) override
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15027 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15028 str.append(s, length);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15029 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15030
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15031 private:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15032 StringType& str;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15033 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15034
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15035 template<typename CharType, typename StringType = std::basic_string<CharType>>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15036 class output_adapter
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15037 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15038 public:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15039 template<typename AllocatorType = std::allocator<CharType>>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15040 output_adapter(std::vector<CharType, AllocatorType>& vec)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15041 : oa(std::make_shared<output_vector_adapter<CharType, AllocatorType>>(vec)) {}
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15042
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15043 #ifndef JSON_NO_IO
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15044 output_adapter(std::basic_ostream<CharType>& s)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15045 : oa(std::make_shared<output_stream_adapter<CharType>>(s)) {}
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15046 #endif // JSON_NO_IO
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15047
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15048 output_adapter(StringType& s)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15049 : oa(std::make_shared<output_string_adapter<CharType, StringType>>(s)) {}
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15050
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15051 operator output_adapter_t<CharType>()
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15052 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15053 return oa;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15054 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15055
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15056 private:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15057 output_adapter_t<CharType> oa = nullptr;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15058 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15059
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15060 } // namespace detail
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15061 NLOHMANN_JSON_NAMESPACE_END
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15062
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15063 // #include <nlohmann/detail/string_concat.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15064
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15065
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15066 NLOHMANN_JSON_NAMESPACE_BEGIN
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15067 namespace detail
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15068 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15069
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15070 ///////////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15071 // binary writer //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15072 ///////////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15073
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15074 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15075 @brief serialization to CBOR and MessagePack values
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15076 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15077 template<typename BasicJsonType, typename CharType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15078 class binary_writer
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15079 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15080 using string_t = typename BasicJsonType::string_t;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15081 using binary_t = typename BasicJsonType::binary_t;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15082 using number_float_t = typename BasicJsonType::number_float_t;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15083
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15084 public:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15085 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15086 @brief create a binary writer
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15087
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15088 @param[in] adapter output adapter to write to
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15089 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15090 explicit binary_writer(output_adapter_t<CharType> adapter) : oa(std::move(adapter))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15091 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15092 JSON_ASSERT(oa);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15093 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15094
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15095 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15096 @param[in] j JSON value to serialize
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15097 @pre j.type() == value_t::object
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15098 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15099 void write_bson(const BasicJsonType& j)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15100 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15101 switch (j.type())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15102 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15103 case value_t::object:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15104 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15105 write_bson_object(*j.m_data.m_value.object);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15106 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15107 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15108
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15109 case value_t::null:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15110 case value_t::array:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15111 case value_t::string:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15112 case value_t::boolean:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15113 case value_t::number_integer:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15114 case value_t::number_unsigned:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15115 case value_t::number_float:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15116 case value_t::binary:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15117 case value_t::discarded:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15118 default:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15119 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15120 JSON_THROW(type_error::create(317, concat("to serialize to BSON, top-level type must be object, but is ", j.type_name()), &j));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15121 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15122 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15123 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15124
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15125 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15126 @param[in] j JSON value to serialize
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15127 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15128 void write_cbor(const BasicJsonType& j)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15129 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15130 switch (j.type())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15131 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15132 case value_t::null:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15133 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15134 oa->write_character(to_char_type(0xF6));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15135 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15136 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15137
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15138 case value_t::boolean:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15139 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15140 oa->write_character(j.m_data.m_value.boolean
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15141 ? to_char_type(0xF5)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15142 : to_char_type(0xF4));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15143 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15144 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15145
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15146 case value_t::number_integer:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15147 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15148 if (j.m_data.m_value.number_integer >= 0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15149 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15150 // CBOR does not differentiate between positive signed
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15151 // integers and unsigned integers. Therefore, we used the
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15152 // code from the value_t::number_unsigned case here.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15153 if (j.m_data.m_value.number_integer <= 0x17)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15154 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15155 write_number(static_cast<std::uint8_t>(j.m_data.m_value.number_integer));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15156 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15157 else if (j.m_data.m_value.number_integer <= (std::numeric_limits<std::uint8_t>::max)())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15158 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15159 oa->write_character(to_char_type(0x18));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15160 write_number(static_cast<std::uint8_t>(j.m_data.m_value.number_integer));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15161 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15162 else if (j.m_data.m_value.number_integer <= (std::numeric_limits<std::uint16_t>::max)())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15163 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15164 oa->write_character(to_char_type(0x19));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15165 write_number(static_cast<std::uint16_t>(j.m_data.m_value.number_integer));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15166 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15167 else if (j.m_data.m_value.number_integer <= (std::numeric_limits<std::uint32_t>::max)())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15168 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15169 oa->write_character(to_char_type(0x1A));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15170 write_number(static_cast<std::uint32_t>(j.m_data.m_value.number_integer));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15171 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15172 else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15173 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15174 oa->write_character(to_char_type(0x1B));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15175 write_number(static_cast<std::uint64_t>(j.m_data.m_value.number_integer));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15176 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15177 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15178 else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15179 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15180 // The conversions below encode the sign in the first
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15181 // byte, and the value is converted to a positive number.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15182 const auto positive_number = -1 - j.m_data.m_value.number_integer;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15183 if (j.m_data.m_value.number_integer >= -24)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15184 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15185 write_number(static_cast<std::uint8_t>(0x20 + positive_number));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15186 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15187 else if (positive_number <= (std::numeric_limits<std::uint8_t>::max)())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15188 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15189 oa->write_character(to_char_type(0x38));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15190 write_number(static_cast<std::uint8_t>(positive_number));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15191 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15192 else if (positive_number <= (std::numeric_limits<std::uint16_t>::max)())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15193 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15194 oa->write_character(to_char_type(0x39));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15195 write_number(static_cast<std::uint16_t>(positive_number));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15196 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15197 else if (positive_number <= (std::numeric_limits<std::uint32_t>::max)())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15198 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15199 oa->write_character(to_char_type(0x3A));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15200 write_number(static_cast<std::uint32_t>(positive_number));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15201 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15202 else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15203 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15204 oa->write_character(to_char_type(0x3B));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15205 write_number(static_cast<std::uint64_t>(positive_number));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15206 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15207 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15208 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15209 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15210
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15211 case value_t::number_unsigned:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15212 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15213 if (j.m_data.m_value.number_unsigned <= 0x17)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15214 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15215 write_number(static_cast<std::uint8_t>(j.m_data.m_value.number_unsigned));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15216 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15217 else if (j.m_data.m_value.number_unsigned <= (std::numeric_limits<std::uint8_t>::max)())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15218 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15219 oa->write_character(to_char_type(0x18));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15220 write_number(static_cast<std::uint8_t>(j.m_data.m_value.number_unsigned));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15221 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15222 else if (j.m_data.m_value.number_unsigned <= (std::numeric_limits<std::uint16_t>::max)())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15223 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15224 oa->write_character(to_char_type(0x19));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15225 write_number(static_cast<std::uint16_t>(j.m_data.m_value.number_unsigned));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15226 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15227 else if (j.m_data.m_value.number_unsigned <= (std::numeric_limits<std::uint32_t>::max)())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15228 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15229 oa->write_character(to_char_type(0x1A));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15230 write_number(static_cast<std::uint32_t>(j.m_data.m_value.number_unsigned));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15231 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15232 else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15233 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15234 oa->write_character(to_char_type(0x1B));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15235 write_number(static_cast<std::uint64_t>(j.m_data.m_value.number_unsigned));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15236 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15237 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15238 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15239
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15240 case value_t::number_float:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15241 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15242 if (std::isnan(j.m_data.m_value.number_float))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15243 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15244 // NaN is 0xf97e00 in CBOR
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15245 oa->write_character(to_char_type(0xF9));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15246 oa->write_character(to_char_type(0x7E));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15247 oa->write_character(to_char_type(0x00));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15248 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15249 else if (std::isinf(j.m_data.m_value.number_float))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15250 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15251 // Infinity is 0xf97c00, -Infinity is 0xf9fc00
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15252 oa->write_character(to_char_type(0xf9));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15253 oa->write_character(j.m_data.m_value.number_float > 0 ? to_char_type(0x7C) : to_char_type(0xFC));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15254 oa->write_character(to_char_type(0x00));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15255 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15256 else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15257 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15258 write_compact_float(j.m_data.m_value.number_float, detail::input_format_t::cbor);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15259 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15260 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15261 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15262
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15263 case value_t::string:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15264 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15265 // step 1: write control byte and the string length
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15266 const auto N = j.m_data.m_value.string->size();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15267 if (N <= 0x17)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15268 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15269 write_number(static_cast<std::uint8_t>(0x60 + N));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15270 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15271 else if (N <= (std::numeric_limits<std::uint8_t>::max)())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15272 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15273 oa->write_character(to_char_type(0x78));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15274 write_number(static_cast<std::uint8_t>(N));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15275 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15276 else if (N <= (std::numeric_limits<std::uint16_t>::max)())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15277 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15278 oa->write_character(to_char_type(0x79));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15279 write_number(static_cast<std::uint16_t>(N));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15280 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15281 else if (N <= (std::numeric_limits<std::uint32_t>::max)())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15282 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15283 oa->write_character(to_char_type(0x7A));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15284 write_number(static_cast<std::uint32_t>(N));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15285 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15286 // LCOV_EXCL_START
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15287 else if (N <= (std::numeric_limits<std::uint64_t>::max)())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15288 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15289 oa->write_character(to_char_type(0x7B));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15290 write_number(static_cast<std::uint64_t>(N));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15291 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15292 // LCOV_EXCL_STOP
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15293
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15294 // step 2: write the string
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15295 oa->write_characters(
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15296 reinterpret_cast<const CharType*>(j.m_data.m_value.string->c_str()),
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15297 j.m_data.m_value.string->size());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15298 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15299 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15300
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15301 case value_t::array:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15302 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15303 // step 1: write control byte and the array size
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15304 const auto N = j.m_data.m_value.array->size();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15305 if (N <= 0x17)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15306 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15307 write_number(static_cast<std::uint8_t>(0x80 + N));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15308 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15309 else if (N <= (std::numeric_limits<std::uint8_t>::max)())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15310 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15311 oa->write_character(to_char_type(0x98));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15312 write_number(static_cast<std::uint8_t>(N));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15313 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15314 else if (N <= (std::numeric_limits<std::uint16_t>::max)())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15315 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15316 oa->write_character(to_char_type(0x99));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15317 write_number(static_cast<std::uint16_t>(N));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15318 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15319 else if (N <= (std::numeric_limits<std::uint32_t>::max)())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15320 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15321 oa->write_character(to_char_type(0x9A));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15322 write_number(static_cast<std::uint32_t>(N));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15323 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15324 // LCOV_EXCL_START
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15325 else if (N <= (std::numeric_limits<std::uint64_t>::max)())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15326 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15327 oa->write_character(to_char_type(0x9B));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15328 write_number(static_cast<std::uint64_t>(N));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15329 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15330 // LCOV_EXCL_STOP
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15331
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15332 // step 2: write each element
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15333 for (const auto& el : *j.m_data.m_value.array)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15334 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15335 write_cbor(el);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15336 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15337 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15338 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15339
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15340 case value_t::binary:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15341 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15342 if (j.m_data.m_value.binary->has_subtype())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15343 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15344 if (j.m_data.m_value.binary->subtype() <= (std::numeric_limits<std::uint8_t>::max)())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15345 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15346 write_number(static_cast<std::uint8_t>(0xd8));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15347 write_number(static_cast<std::uint8_t>(j.m_data.m_value.binary->subtype()));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15348 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15349 else if (j.m_data.m_value.binary->subtype() <= (std::numeric_limits<std::uint16_t>::max)())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15350 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15351 write_number(static_cast<std::uint8_t>(0xd9));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15352 write_number(static_cast<std::uint16_t>(j.m_data.m_value.binary->subtype()));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15353 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15354 else if (j.m_data.m_value.binary->subtype() <= (std::numeric_limits<std::uint32_t>::max)())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15355 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15356 write_number(static_cast<std::uint8_t>(0xda));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15357 write_number(static_cast<std::uint32_t>(j.m_data.m_value.binary->subtype()));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15358 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15359 else if (j.m_data.m_value.binary->subtype() <= (std::numeric_limits<std::uint64_t>::max)())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15360 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15361 write_number(static_cast<std::uint8_t>(0xdb));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15362 write_number(static_cast<std::uint64_t>(j.m_data.m_value.binary->subtype()));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15363 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15364 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15365
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15366 // step 1: write control byte and the binary array size
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15367 const auto N = j.m_data.m_value.binary->size();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15368 if (N <= 0x17)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15369 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15370 write_number(static_cast<std::uint8_t>(0x40 + N));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15371 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15372 else if (N <= (std::numeric_limits<std::uint8_t>::max)())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15373 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15374 oa->write_character(to_char_type(0x58));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15375 write_number(static_cast<std::uint8_t>(N));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15376 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15377 else if (N <= (std::numeric_limits<std::uint16_t>::max)())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15378 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15379 oa->write_character(to_char_type(0x59));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15380 write_number(static_cast<std::uint16_t>(N));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15381 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15382 else if (N <= (std::numeric_limits<std::uint32_t>::max)())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15383 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15384 oa->write_character(to_char_type(0x5A));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15385 write_number(static_cast<std::uint32_t>(N));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15386 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15387 // LCOV_EXCL_START
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15388 else if (N <= (std::numeric_limits<std::uint64_t>::max)())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15389 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15390 oa->write_character(to_char_type(0x5B));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15391 write_number(static_cast<std::uint64_t>(N));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15392 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15393 // LCOV_EXCL_STOP
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15394
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15395 // step 2: write each element
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15396 oa->write_characters(
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15397 reinterpret_cast<const CharType*>(j.m_data.m_value.binary->data()),
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15398 N);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15399
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15400 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15401 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15402
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15403 case value_t::object:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15404 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15405 // step 1: write control byte and the object size
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15406 const auto N = j.m_data.m_value.object->size();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15407 if (N <= 0x17)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15408 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15409 write_number(static_cast<std::uint8_t>(0xA0 + N));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15410 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15411 else if (N <= (std::numeric_limits<std::uint8_t>::max)())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15412 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15413 oa->write_character(to_char_type(0xB8));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15414 write_number(static_cast<std::uint8_t>(N));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15415 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15416 else if (N <= (std::numeric_limits<std::uint16_t>::max)())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15417 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15418 oa->write_character(to_char_type(0xB9));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15419 write_number(static_cast<std::uint16_t>(N));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15420 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15421 else if (N <= (std::numeric_limits<std::uint32_t>::max)())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15422 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15423 oa->write_character(to_char_type(0xBA));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15424 write_number(static_cast<std::uint32_t>(N));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15425 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15426 // LCOV_EXCL_START
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15427 else if (N <= (std::numeric_limits<std::uint64_t>::max)())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15428 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15429 oa->write_character(to_char_type(0xBB));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15430 write_number(static_cast<std::uint64_t>(N));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15431 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15432 // LCOV_EXCL_STOP
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15433
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15434 // step 2: write each element
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15435 for (const auto& el : *j.m_data.m_value.object)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15436 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15437 write_cbor(el.first);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15438 write_cbor(el.second);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15439 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15440 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15441 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15442
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15443 case value_t::discarded:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15444 default:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15445 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15446 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15447 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15448
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15449 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15450 @param[in] j JSON value to serialize
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15451 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15452 void write_msgpack(const BasicJsonType& j)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15453 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15454 switch (j.type())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15455 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15456 case value_t::null: // nil
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15457 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15458 oa->write_character(to_char_type(0xC0));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15459 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15460 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15461
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15462 case value_t::boolean: // true and false
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15463 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15464 oa->write_character(j.m_data.m_value.boolean
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15465 ? to_char_type(0xC3)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15466 : to_char_type(0xC2));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15467 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15468 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15469
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15470 case value_t::number_integer:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15471 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15472 if (j.m_data.m_value.number_integer >= 0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15473 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15474 // MessagePack does not differentiate between positive
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15475 // signed integers and unsigned integers. Therefore, we used
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15476 // the code from the value_t::number_unsigned case here.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15477 if (j.m_data.m_value.number_unsigned < 128)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15478 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15479 // positive fixnum
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15480 write_number(static_cast<std::uint8_t>(j.m_data.m_value.number_integer));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15481 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15482 else if (j.m_data.m_value.number_unsigned <= (std::numeric_limits<std::uint8_t>::max)())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15483 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15484 // uint 8
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15485 oa->write_character(to_char_type(0xCC));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15486 write_number(static_cast<std::uint8_t>(j.m_data.m_value.number_integer));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15487 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15488 else if (j.m_data.m_value.number_unsigned <= (std::numeric_limits<std::uint16_t>::max)())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15489 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15490 // uint 16
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15491 oa->write_character(to_char_type(0xCD));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15492 write_number(static_cast<std::uint16_t>(j.m_data.m_value.number_integer));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15493 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15494 else if (j.m_data.m_value.number_unsigned <= (std::numeric_limits<std::uint32_t>::max)())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15495 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15496 // uint 32
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15497 oa->write_character(to_char_type(0xCE));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15498 write_number(static_cast<std::uint32_t>(j.m_data.m_value.number_integer));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15499 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15500 else if (j.m_data.m_value.number_unsigned <= (std::numeric_limits<std::uint64_t>::max)())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15501 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15502 // uint 64
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15503 oa->write_character(to_char_type(0xCF));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15504 write_number(static_cast<std::uint64_t>(j.m_data.m_value.number_integer));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15505 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15506 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15507 else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15508 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15509 if (j.m_data.m_value.number_integer >= -32)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15510 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15511 // negative fixnum
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15512 write_number(static_cast<std::int8_t>(j.m_data.m_value.number_integer));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15513 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15514 else if (j.m_data.m_value.number_integer >= (std::numeric_limits<std::int8_t>::min)() &&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15515 j.m_data.m_value.number_integer <= (std::numeric_limits<std::int8_t>::max)())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15516 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15517 // int 8
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15518 oa->write_character(to_char_type(0xD0));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15519 write_number(static_cast<std::int8_t>(j.m_data.m_value.number_integer));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15520 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15521 else if (j.m_data.m_value.number_integer >= (std::numeric_limits<std::int16_t>::min)() &&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15522 j.m_data.m_value.number_integer <= (std::numeric_limits<std::int16_t>::max)())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15523 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15524 // int 16
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15525 oa->write_character(to_char_type(0xD1));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15526 write_number(static_cast<std::int16_t>(j.m_data.m_value.number_integer));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15527 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15528 else if (j.m_data.m_value.number_integer >= (std::numeric_limits<std::int32_t>::min)() &&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15529 j.m_data.m_value.number_integer <= (std::numeric_limits<std::int32_t>::max)())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15530 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15531 // int 32
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15532 oa->write_character(to_char_type(0xD2));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15533 write_number(static_cast<std::int32_t>(j.m_data.m_value.number_integer));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15534 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15535 else if (j.m_data.m_value.number_integer >= (std::numeric_limits<std::int64_t>::min)() &&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15536 j.m_data.m_value.number_integer <= (std::numeric_limits<std::int64_t>::max)())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15537 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15538 // int 64
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15539 oa->write_character(to_char_type(0xD3));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15540 write_number(static_cast<std::int64_t>(j.m_data.m_value.number_integer));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15541 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15542 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15543 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15544 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15545
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15546 case value_t::number_unsigned:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15547 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15548 if (j.m_data.m_value.number_unsigned < 128)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15549 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15550 // positive fixnum
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15551 write_number(static_cast<std::uint8_t>(j.m_data.m_value.number_integer));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15552 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15553 else if (j.m_data.m_value.number_unsigned <= (std::numeric_limits<std::uint8_t>::max)())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15554 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15555 // uint 8
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15556 oa->write_character(to_char_type(0xCC));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15557 write_number(static_cast<std::uint8_t>(j.m_data.m_value.number_integer));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15558 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15559 else if (j.m_data.m_value.number_unsigned <= (std::numeric_limits<std::uint16_t>::max)())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15560 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15561 // uint 16
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15562 oa->write_character(to_char_type(0xCD));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15563 write_number(static_cast<std::uint16_t>(j.m_data.m_value.number_integer));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15564 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15565 else if (j.m_data.m_value.number_unsigned <= (std::numeric_limits<std::uint32_t>::max)())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15566 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15567 // uint 32
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15568 oa->write_character(to_char_type(0xCE));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15569 write_number(static_cast<std::uint32_t>(j.m_data.m_value.number_integer));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15570 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15571 else if (j.m_data.m_value.number_unsigned <= (std::numeric_limits<std::uint64_t>::max)())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15572 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15573 // uint 64
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15574 oa->write_character(to_char_type(0xCF));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15575 write_number(static_cast<std::uint64_t>(j.m_data.m_value.number_integer));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15576 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15577 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15578 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15579
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15580 case value_t::number_float:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15581 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15582 write_compact_float(j.m_data.m_value.number_float, detail::input_format_t::msgpack);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15583 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15584 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15585
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15586 case value_t::string:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15587 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15588 // step 1: write control byte and the string length
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15589 const auto N = j.m_data.m_value.string->size();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15590 if (N <= 31)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15591 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15592 // fixstr
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15593 write_number(static_cast<std::uint8_t>(0xA0 | N));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15594 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15595 else if (N <= (std::numeric_limits<std::uint8_t>::max)())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15596 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15597 // str 8
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15598 oa->write_character(to_char_type(0xD9));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15599 write_number(static_cast<std::uint8_t>(N));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15600 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15601 else if (N <= (std::numeric_limits<std::uint16_t>::max)())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15602 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15603 // str 16
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15604 oa->write_character(to_char_type(0xDA));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15605 write_number(static_cast<std::uint16_t>(N));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15606 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15607 else if (N <= (std::numeric_limits<std::uint32_t>::max)())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15608 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15609 // str 32
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15610 oa->write_character(to_char_type(0xDB));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15611 write_number(static_cast<std::uint32_t>(N));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15612 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15613
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15614 // step 2: write the string
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15615 oa->write_characters(
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15616 reinterpret_cast<const CharType*>(j.m_data.m_value.string->c_str()),
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15617 j.m_data.m_value.string->size());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15618 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15619 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15620
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15621 case value_t::array:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15622 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15623 // step 1: write control byte and the array size
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15624 const auto N = j.m_data.m_value.array->size();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15625 if (N <= 15)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15626 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15627 // fixarray
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15628 write_number(static_cast<std::uint8_t>(0x90 | N));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15629 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15630 else if (N <= (std::numeric_limits<std::uint16_t>::max)())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15631 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15632 // array 16
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15633 oa->write_character(to_char_type(0xDC));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15634 write_number(static_cast<std::uint16_t>(N));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15635 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15636 else if (N <= (std::numeric_limits<std::uint32_t>::max)())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15637 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15638 // array 32
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15639 oa->write_character(to_char_type(0xDD));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15640 write_number(static_cast<std::uint32_t>(N));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15641 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15642
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15643 // step 2: write each element
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15644 for (const auto& el : *j.m_data.m_value.array)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15645 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15646 write_msgpack(el);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15647 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15648 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15649 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15650
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15651 case value_t::binary:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15652 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15653 // step 0: determine if the binary type has a set subtype to
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15654 // determine whether or not to use the ext or fixext types
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15655 const bool use_ext = j.m_data.m_value.binary->has_subtype();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15656
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15657 // step 1: write control byte and the byte string length
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15658 const auto N = j.m_data.m_value.binary->size();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15659 if (N <= (std::numeric_limits<std::uint8_t>::max)())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15660 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15661 std::uint8_t output_type{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15662 bool fixed = true;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15663 if (use_ext)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15664 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15665 switch (N)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15666 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15667 case 1:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15668 output_type = 0xD4; // fixext 1
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15669 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15670 case 2:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15671 output_type = 0xD5; // fixext 2
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15672 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15673 case 4:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15674 output_type = 0xD6; // fixext 4
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15675 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15676 case 8:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15677 output_type = 0xD7; // fixext 8
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15678 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15679 case 16:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15680 output_type = 0xD8; // fixext 16
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15681 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15682 default:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15683 output_type = 0xC7; // ext 8
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15684 fixed = false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15685 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15686 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15687
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15688 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15689 else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15690 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15691 output_type = 0xC4; // bin 8
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15692 fixed = false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15693 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15694
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15695 oa->write_character(to_char_type(output_type));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15696 if (!fixed)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15697 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15698 write_number(static_cast<std::uint8_t>(N));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15699 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15700 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15701 else if (N <= (std::numeric_limits<std::uint16_t>::max)())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15702 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15703 const std::uint8_t output_type = use_ext
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15704 ? 0xC8 // ext 16
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15705 : 0xC5; // bin 16
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15706
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15707 oa->write_character(to_char_type(output_type));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15708 write_number(static_cast<std::uint16_t>(N));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15709 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15710 else if (N <= (std::numeric_limits<std::uint32_t>::max)())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15711 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15712 const std::uint8_t output_type = use_ext
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15713 ? 0xC9 // ext 32
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15714 : 0xC6; // bin 32
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15715
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15716 oa->write_character(to_char_type(output_type));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15717 write_number(static_cast<std::uint32_t>(N));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15718 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15719
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15720 // step 1.5: if this is an ext type, write the subtype
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15721 if (use_ext)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15722 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15723 write_number(static_cast<std::int8_t>(j.m_data.m_value.binary->subtype()));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15724 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15725
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15726 // step 2: write the byte string
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15727 oa->write_characters(
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15728 reinterpret_cast<const CharType*>(j.m_data.m_value.binary->data()),
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15729 N);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15730
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15731 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15732 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15733
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15734 case value_t::object:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15735 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15736 // step 1: write control byte and the object size
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15737 const auto N = j.m_data.m_value.object->size();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15738 if (N <= 15)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15739 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15740 // fixmap
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15741 write_number(static_cast<std::uint8_t>(0x80 | (N & 0xF)));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15742 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15743 else if (N <= (std::numeric_limits<std::uint16_t>::max)())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15744 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15745 // map 16
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15746 oa->write_character(to_char_type(0xDE));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15747 write_number(static_cast<std::uint16_t>(N));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15748 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15749 else if (N <= (std::numeric_limits<std::uint32_t>::max)())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15750 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15751 // map 32
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15752 oa->write_character(to_char_type(0xDF));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15753 write_number(static_cast<std::uint32_t>(N));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15754 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15755
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15756 // step 2: write each element
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15757 for (const auto& el : *j.m_data.m_value.object)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15758 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15759 write_msgpack(el.first);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15760 write_msgpack(el.second);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15761 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15762 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15763 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15764
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15765 case value_t::discarded:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15766 default:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15767 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15768 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15769 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15770
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15771 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15772 @param[in] j JSON value to serialize
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15773 @param[in] use_count whether to use '#' prefixes (optimized format)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15774 @param[in] use_type whether to use '$' prefixes (optimized format)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15775 @param[in] add_prefix whether prefixes need to be used for this value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15776 @param[in] use_bjdata whether write in BJData format, default is false
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15777 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15778 void write_ubjson(const BasicJsonType& j, const bool use_count,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15779 const bool use_type, const bool add_prefix = true,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15780 const bool use_bjdata = false)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15781 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15782 switch (j.type())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15783 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15784 case value_t::null:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15785 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15786 if (add_prefix)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15787 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15788 oa->write_character(to_char_type('Z'));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15789 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15790 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15791 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15792
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15793 case value_t::boolean:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15794 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15795 if (add_prefix)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15796 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15797 oa->write_character(j.m_data.m_value.boolean
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15798 ? to_char_type('T')
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15799 : to_char_type('F'));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15800 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15801 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15802 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15803
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15804 case value_t::number_integer:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15805 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15806 write_number_with_ubjson_prefix(j.m_data.m_value.number_integer, add_prefix, use_bjdata);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15807 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15808 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15809
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15810 case value_t::number_unsigned:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15811 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15812 write_number_with_ubjson_prefix(j.m_data.m_value.number_unsigned, add_prefix, use_bjdata);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15813 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15814 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15815
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15816 case value_t::number_float:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15817 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15818 write_number_with_ubjson_prefix(j.m_data.m_value.number_float, add_prefix, use_bjdata);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15819 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15820 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15821
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15822 case value_t::string:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15823 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15824 if (add_prefix)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15825 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15826 oa->write_character(to_char_type('S'));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15827 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15828 write_number_with_ubjson_prefix(j.m_data.m_value.string->size(), true, use_bjdata);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15829 oa->write_characters(
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15830 reinterpret_cast<const CharType*>(j.m_data.m_value.string->c_str()),
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15831 j.m_data.m_value.string->size());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15832 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15833 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15834
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15835 case value_t::array:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15836 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15837 if (add_prefix)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15838 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15839 oa->write_character(to_char_type('['));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15840 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15841
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15842 bool prefix_required = true;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15843 if (use_type && !j.m_data.m_value.array->empty())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15844 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15845 JSON_ASSERT(use_count);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15846 const CharType first_prefix = ubjson_prefix(j.front(), use_bjdata);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15847 const bool same_prefix = std::all_of(j.begin() + 1, j.end(),
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15848 [this, first_prefix, use_bjdata](const BasicJsonType & v)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15849 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15850 return ubjson_prefix(v, use_bjdata) == first_prefix;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15851 });
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15852
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15853 std::vector<CharType> bjdx = {'[', '{', 'S', 'H', 'T', 'F', 'N', 'Z'}; // excluded markers in bjdata optimized type
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15854
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15855 if (same_prefix && !(use_bjdata && std::find(bjdx.begin(), bjdx.end(), first_prefix) != bjdx.end()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15856 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15857 prefix_required = false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15858 oa->write_character(to_char_type('$'));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15859 oa->write_character(first_prefix);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15860 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15861 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15862
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15863 if (use_count)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15864 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15865 oa->write_character(to_char_type('#'));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15866 write_number_with_ubjson_prefix(j.m_data.m_value.array->size(), true, use_bjdata);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15867 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15868
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15869 for (const auto& el : *j.m_data.m_value.array)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15870 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15871 write_ubjson(el, use_count, use_type, prefix_required, use_bjdata);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15872 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15873
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15874 if (!use_count)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15875 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15876 oa->write_character(to_char_type(']'));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15877 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15878
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15879 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15880 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15881
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15882 case value_t::binary:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15883 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15884 if (add_prefix)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15885 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15886 oa->write_character(to_char_type('['));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15887 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15888
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15889 if (use_type && !j.m_data.m_value.binary->empty())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15890 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15891 JSON_ASSERT(use_count);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15892 oa->write_character(to_char_type('$'));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15893 oa->write_character('U');
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15894 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15895
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15896 if (use_count)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15897 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15898 oa->write_character(to_char_type('#'));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15899 write_number_with_ubjson_prefix(j.m_data.m_value.binary->size(), true, use_bjdata);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15900 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15901
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15902 if (use_type)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15903 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15904 oa->write_characters(
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15905 reinterpret_cast<const CharType*>(j.m_data.m_value.binary->data()),
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15906 j.m_data.m_value.binary->size());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15907 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15908 else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15909 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15910 for (size_t i = 0; i < j.m_data.m_value.binary->size(); ++i)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15911 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15912 oa->write_character(to_char_type('U'));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15913 oa->write_character(j.m_data.m_value.binary->data()[i]);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15914 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15915 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15916
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15917 if (!use_count)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15918 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15919 oa->write_character(to_char_type(']'));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15920 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15921
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15922 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15923 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15924
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15925 case value_t::object:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15926 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15927 if (use_bjdata && j.m_data.m_value.object->size() == 3 && j.m_data.m_value.object->find("_ArrayType_") != j.m_data.m_value.object->end() && j.m_data.m_value.object->find("_ArraySize_") != j.m_data.m_value.object->end() && j.m_data.m_value.object->find("_ArrayData_") != j.m_data.m_value.object->end())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15928 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15929 if (!write_bjdata_ndarray(*j.m_data.m_value.object, use_count, use_type)) // decode bjdata ndarray in the JData format (https://github.com/NeuroJSON/jdata)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15930 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15931 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15932 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15933 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15934
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15935 if (add_prefix)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15936 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15937 oa->write_character(to_char_type('{'));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15938 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15939
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15940 bool prefix_required = true;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15941 if (use_type && !j.m_data.m_value.object->empty())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15942 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15943 JSON_ASSERT(use_count);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15944 const CharType first_prefix = ubjson_prefix(j.front(), use_bjdata);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15945 const bool same_prefix = std::all_of(j.begin(), j.end(),
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15946 [this, first_prefix, use_bjdata](const BasicJsonType & v)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15947 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15948 return ubjson_prefix(v, use_bjdata) == first_prefix;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15949 });
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15950
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15951 std::vector<CharType> bjdx = {'[', '{', 'S', 'H', 'T', 'F', 'N', 'Z'}; // excluded markers in bjdata optimized type
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15952
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15953 if (same_prefix && !(use_bjdata && std::find(bjdx.begin(), bjdx.end(), first_prefix) != bjdx.end()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15954 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15955 prefix_required = false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15956 oa->write_character(to_char_type('$'));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15957 oa->write_character(first_prefix);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15958 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15959 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15960
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15961 if (use_count)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15962 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15963 oa->write_character(to_char_type('#'));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15964 write_number_with_ubjson_prefix(j.m_data.m_value.object->size(), true, use_bjdata);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15965 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15966
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15967 for (const auto& el : *j.m_data.m_value.object)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15968 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15969 write_number_with_ubjson_prefix(el.first.size(), true, use_bjdata);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15970 oa->write_characters(
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15971 reinterpret_cast<const CharType*>(el.first.c_str()),
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15972 el.first.size());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15973 write_ubjson(el.second, use_count, use_type, prefix_required, use_bjdata);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15974 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15975
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15976 if (!use_count)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15977 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15978 oa->write_character(to_char_type('}'));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15979 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15980
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15981 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15982 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15983
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15984 case value_t::discarded:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15985 default:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15986 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15987 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15988 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15989
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15990 private:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15991 //////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15992 // BSON //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15993 //////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15994
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15995 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15996 @return The size of a BSON document entry header, including the id marker
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15997 and the entry name size (and its null-terminator).
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15998 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15999 static std::size_t calc_bson_entry_header_size(const string_t& name, const BasicJsonType& j)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16000 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16001 const auto it = name.find(static_cast<typename string_t::value_type>(0));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16002 if (JSON_HEDLEY_UNLIKELY(it != BasicJsonType::string_t::npos))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16003 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16004 JSON_THROW(out_of_range::create(409, concat("BSON key cannot contain code point U+0000 (at byte ", std::to_string(it), ")"), &j));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16005 static_cast<void>(j);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16006 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16007
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16008 return /*id*/ 1ul + name.size() + /*zero-terminator*/1u;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16009 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16010
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16011 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16012 @brief Writes the given @a element_type and @a name to the output adapter
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16013 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16014 void write_bson_entry_header(const string_t& name,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16015 const std::uint8_t element_type)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16016 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16017 oa->write_character(to_char_type(element_type)); // boolean
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16018 oa->write_characters(
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16019 reinterpret_cast<const CharType*>(name.c_str()),
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16020 name.size() + 1u);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16021 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16022
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16023 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16024 @brief Writes a BSON element with key @a name and boolean value @a value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16025 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16026 void write_bson_boolean(const string_t& name,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16027 const bool value)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16028 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16029 write_bson_entry_header(name, 0x08);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16030 oa->write_character(value ? to_char_type(0x01) : to_char_type(0x00));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16031 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16032
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16033 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16034 @brief Writes a BSON element with key @a name and double value @a value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16035 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16036 void write_bson_double(const string_t& name,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16037 const double value)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16038 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16039 write_bson_entry_header(name, 0x01);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16040 write_number<double>(value, true);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16041 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16042
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16043 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16044 @return The size of the BSON-encoded string in @a value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16045 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16046 static std::size_t calc_bson_string_size(const string_t& value)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16047 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16048 return sizeof(std::int32_t) + value.size() + 1ul;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16049 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16050
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16051 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16052 @brief Writes a BSON element with key @a name and string value @a value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16053 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16054 void write_bson_string(const string_t& name,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16055 const string_t& value)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16056 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16057 write_bson_entry_header(name, 0x02);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16058
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16059 write_number<std::int32_t>(static_cast<std::int32_t>(value.size() + 1ul), true);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16060 oa->write_characters(
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16061 reinterpret_cast<const CharType*>(value.c_str()),
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16062 value.size() + 1);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16063 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16064
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16065 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16066 @brief Writes a BSON element with key @a name and null value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16067 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16068 void write_bson_null(const string_t& name)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16069 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16070 write_bson_entry_header(name, 0x0A);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16071 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16072
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16073 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16074 @return The size of the BSON-encoded integer @a value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16075 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16076 static std::size_t calc_bson_integer_size(const std::int64_t value)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16077 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16078 return (std::numeric_limits<std::int32_t>::min)() <= value && value <= (std::numeric_limits<std::int32_t>::max)()
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16079 ? sizeof(std::int32_t)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16080 : sizeof(std::int64_t);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16081 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16082
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16083 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16084 @brief Writes a BSON element with key @a name and integer @a value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16085 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16086 void write_bson_integer(const string_t& name,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16087 const std::int64_t value)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16088 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16089 if ((std::numeric_limits<std::int32_t>::min)() <= value && value <= (std::numeric_limits<std::int32_t>::max)())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16090 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16091 write_bson_entry_header(name, 0x10); // int32
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16092 write_number<std::int32_t>(static_cast<std::int32_t>(value), true);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16093 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16094 else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16095 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16096 write_bson_entry_header(name, 0x12); // int64
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16097 write_number<std::int64_t>(static_cast<std::int64_t>(value), true);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16098 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16099 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16100
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16101 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16102 @return The size of the BSON-encoded unsigned integer in @a j
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16103 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16104 static constexpr std::size_t calc_bson_unsigned_size(const std::uint64_t value) noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16105 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16106 return (value <= static_cast<std::uint64_t>((std::numeric_limits<std::int32_t>::max)()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16107 ? sizeof(std::int32_t)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16108 : sizeof(std::int64_t);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16109 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16110
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16111 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16112 @brief Writes a BSON element with key @a name and unsigned @a value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16113 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16114 void write_bson_unsigned(const string_t& name,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16115 const BasicJsonType& j)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16116 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16117 if (j.m_data.m_value.number_unsigned <= static_cast<std::uint64_t>((std::numeric_limits<std::int32_t>::max)()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16118 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16119 write_bson_entry_header(name, 0x10 /* int32 */);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16120 write_number<std::int32_t>(static_cast<std::int32_t>(j.m_data.m_value.number_unsigned), true);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16121 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16122 else if (j.m_data.m_value.number_unsigned <= static_cast<std::uint64_t>((std::numeric_limits<std::int64_t>::max)()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16123 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16124 write_bson_entry_header(name, 0x12 /* int64 */);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16125 write_number<std::int64_t>(static_cast<std::int64_t>(j.m_data.m_value.number_unsigned), true);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16126 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16127 else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16128 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16129 JSON_THROW(out_of_range::create(407, concat("integer number ", std::to_string(j.m_data.m_value.number_unsigned), " cannot be represented by BSON as it does not fit int64"), &j));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16130 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16131 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16132
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16133 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16134 @brief Writes a BSON element with key @a name and object @a value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16135 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16136 void write_bson_object_entry(const string_t& name,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16137 const typename BasicJsonType::object_t& value)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16138 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16139 write_bson_entry_header(name, 0x03); // object
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16140 write_bson_object(value);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16141 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16142
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16143 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16144 @return The size of the BSON-encoded array @a value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16145 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16146 static std::size_t calc_bson_array_size(const typename BasicJsonType::array_t& value)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16147 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16148 std::size_t array_index = 0ul;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16149
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16150 const std::size_t embedded_document_size = std::accumulate(std::begin(value), std::end(value), static_cast<std::size_t>(0), [&array_index](std::size_t result, const typename BasicJsonType::array_t::value_type & el)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16151 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16152 return result + calc_bson_element_size(std::to_string(array_index++), el);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16153 });
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16154
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16155 return sizeof(std::int32_t) + embedded_document_size + 1ul;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16156 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16157
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16158 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16159 @return The size of the BSON-encoded binary array @a value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16160 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16161 static std::size_t calc_bson_binary_size(const typename BasicJsonType::binary_t& value)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16162 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16163 return sizeof(std::int32_t) + value.size() + 1ul;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16164 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16165
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16166 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16167 @brief Writes a BSON element with key @a name and array @a value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16168 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16169 void write_bson_array(const string_t& name,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16170 const typename BasicJsonType::array_t& value)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16171 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16172 write_bson_entry_header(name, 0x04); // array
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16173 write_number<std::int32_t>(static_cast<std::int32_t>(calc_bson_array_size(value)), true);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16174
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16175 std::size_t array_index = 0ul;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16176
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16177 for (const auto& el : value)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16178 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16179 write_bson_element(std::to_string(array_index++), el);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16180 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16181
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16182 oa->write_character(to_char_type(0x00));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16183 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16184
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16185 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16186 @brief Writes a BSON element with key @a name and binary value @a value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16187 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16188 void write_bson_binary(const string_t& name,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16189 const binary_t& value)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16190 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16191 write_bson_entry_header(name, 0x05);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16192
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16193 write_number<std::int32_t>(static_cast<std::int32_t>(value.size()), true);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16194 write_number(value.has_subtype() ? static_cast<std::uint8_t>(value.subtype()) : static_cast<std::uint8_t>(0x00));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16195
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16196 oa->write_characters(reinterpret_cast<const CharType*>(value.data()), value.size());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16197 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16198
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16199 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16200 @brief Calculates the size necessary to serialize the JSON value @a j with its @a name
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16201 @return The calculated size for the BSON document entry for @a j with the given @a name.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16202 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16203 static std::size_t calc_bson_element_size(const string_t& name,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16204 const BasicJsonType& j)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16205 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16206 const auto header_size = calc_bson_entry_header_size(name, j);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16207 switch (j.type())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16208 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16209 case value_t::object:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16210 return header_size + calc_bson_object_size(*j.m_data.m_value.object);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16211
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16212 case value_t::array:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16213 return header_size + calc_bson_array_size(*j.m_data.m_value.array);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16214
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16215 case value_t::binary:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16216 return header_size + calc_bson_binary_size(*j.m_data.m_value.binary);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16217
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16218 case value_t::boolean:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16219 return header_size + 1ul;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16220
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16221 case value_t::number_float:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16222 return header_size + 8ul;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16223
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16224 case value_t::number_integer:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16225 return header_size + calc_bson_integer_size(j.m_data.m_value.number_integer);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16226
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16227 case value_t::number_unsigned:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16228 return header_size + calc_bson_unsigned_size(j.m_data.m_value.number_unsigned);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16229
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16230 case value_t::string:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16231 return header_size + calc_bson_string_size(*j.m_data.m_value.string);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16232
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16233 case value_t::null:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16234 return header_size + 0ul;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16235
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16236 // LCOV_EXCL_START
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16237 case value_t::discarded:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16238 default:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16239 JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16240 return 0ul;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16241 // LCOV_EXCL_STOP
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16242 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16243 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16244
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16245 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16246 @brief Serializes the JSON value @a j to BSON and associates it with the
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16247 key @a name.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16248 @param name The name to associate with the JSON entity @a j within the
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16249 current BSON document
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16250 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16251 void write_bson_element(const string_t& name,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16252 const BasicJsonType& j)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16253 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16254 switch (j.type())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16255 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16256 case value_t::object:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16257 return write_bson_object_entry(name, *j.m_data.m_value.object);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16258
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16259 case value_t::array:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16260 return write_bson_array(name, *j.m_data.m_value.array);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16261
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16262 case value_t::binary:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16263 return write_bson_binary(name, *j.m_data.m_value.binary);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16264
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16265 case value_t::boolean:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16266 return write_bson_boolean(name, j.m_data.m_value.boolean);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16267
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16268 case value_t::number_float:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16269 return write_bson_double(name, j.m_data.m_value.number_float);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16270
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16271 case value_t::number_integer:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16272 return write_bson_integer(name, j.m_data.m_value.number_integer);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16273
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16274 case value_t::number_unsigned:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16275 return write_bson_unsigned(name, j);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16276
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16277 case value_t::string:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16278 return write_bson_string(name, *j.m_data.m_value.string);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16279
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16280 case value_t::null:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16281 return write_bson_null(name);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16282
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16283 // LCOV_EXCL_START
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16284 case value_t::discarded:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16285 default:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16286 JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16287 return;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16288 // LCOV_EXCL_STOP
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16289 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16290 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16291
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16292 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16293 @brief Calculates the size of the BSON serialization of the given
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16294 JSON-object @a j.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16295 @param[in] value JSON value to serialize
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16296 @pre value.type() == value_t::object
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16297 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16298 static std::size_t calc_bson_object_size(const typename BasicJsonType::object_t& value)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16299 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16300 const std::size_t document_size = std::accumulate(value.begin(), value.end(), static_cast<std::size_t>(0),
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16301 [](size_t result, const typename BasicJsonType::object_t::value_type & el)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16302 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16303 return result += calc_bson_element_size(el.first, el.second);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16304 });
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16305
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16306 return sizeof(std::int32_t) + document_size + 1ul;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16307 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16308
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16309 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16310 @param[in] value JSON value to serialize
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16311 @pre value.type() == value_t::object
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16312 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16313 void write_bson_object(const typename BasicJsonType::object_t& value)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16314 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16315 write_number<std::int32_t>(static_cast<std::int32_t>(calc_bson_object_size(value)), true);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16316
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16317 for (const auto& el : value)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16318 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16319 write_bson_element(el.first, el.second);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16320 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16321
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16322 oa->write_character(to_char_type(0x00));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16323 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16324
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16325 //////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16326 // CBOR //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16327 //////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16328
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16329 static constexpr CharType get_cbor_float_prefix(float /*unused*/)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16330 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16331 return to_char_type(0xFA); // Single-Precision Float
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16332 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16333
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16334 static constexpr CharType get_cbor_float_prefix(double /*unused*/)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16335 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16336 return to_char_type(0xFB); // Double-Precision Float
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16337 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16338
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16339 /////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16340 // MsgPack //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16341 /////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16342
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16343 static constexpr CharType get_msgpack_float_prefix(float /*unused*/)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16344 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16345 return to_char_type(0xCA); // float 32
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16346 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16347
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16348 static constexpr CharType get_msgpack_float_prefix(double /*unused*/)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16349 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16350 return to_char_type(0xCB); // float 64
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16351 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16352
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16353 ////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16354 // UBJSON //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16355 ////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16356
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16357 // UBJSON: write number (floating point)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16358 template<typename NumberType, typename std::enable_if<
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16359 std::is_floating_point<NumberType>::value, int>::type = 0>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16360 void write_number_with_ubjson_prefix(const NumberType n,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16361 const bool add_prefix,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16362 const bool use_bjdata)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16363 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16364 if (add_prefix)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16365 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16366 oa->write_character(get_ubjson_float_prefix(n));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16367 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16368 write_number(n, use_bjdata);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16369 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16370
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16371 // UBJSON: write number (unsigned integer)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16372 template<typename NumberType, typename std::enable_if<
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16373 std::is_unsigned<NumberType>::value, int>::type = 0>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16374 void write_number_with_ubjson_prefix(const NumberType n,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16375 const bool add_prefix,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16376 const bool use_bjdata)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16377 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16378 if (n <= static_cast<std::uint64_t>((std::numeric_limits<std::int8_t>::max)()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16379 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16380 if (add_prefix)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16381 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16382 oa->write_character(to_char_type('i')); // int8
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16383 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16384 write_number(static_cast<std::uint8_t>(n), use_bjdata);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16385 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16386 else if (n <= (std::numeric_limits<std::uint8_t>::max)())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16387 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16388 if (add_prefix)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16389 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16390 oa->write_character(to_char_type('U')); // uint8
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16391 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16392 write_number(static_cast<std::uint8_t>(n), use_bjdata);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16393 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16394 else if (n <= static_cast<std::uint64_t>((std::numeric_limits<std::int16_t>::max)()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16395 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16396 if (add_prefix)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16397 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16398 oa->write_character(to_char_type('I')); // int16
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16399 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16400 write_number(static_cast<std::int16_t>(n), use_bjdata);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16401 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16402 else if (use_bjdata && n <= static_cast<uint64_t>((std::numeric_limits<uint16_t>::max)()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16403 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16404 if (add_prefix)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16405 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16406 oa->write_character(to_char_type('u')); // uint16 - bjdata only
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16407 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16408 write_number(static_cast<std::uint16_t>(n), use_bjdata);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16409 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16410 else if (n <= static_cast<std::uint64_t>((std::numeric_limits<std::int32_t>::max)()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16411 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16412 if (add_prefix)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16413 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16414 oa->write_character(to_char_type('l')); // int32
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16415 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16416 write_number(static_cast<std::int32_t>(n), use_bjdata);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16417 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16418 else if (use_bjdata && n <= static_cast<uint64_t>((std::numeric_limits<uint32_t>::max)()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16419 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16420 if (add_prefix)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16421 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16422 oa->write_character(to_char_type('m')); // uint32 - bjdata only
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16423 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16424 write_number(static_cast<std::uint32_t>(n), use_bjdata);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16425 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16426 else if (n <= static_cast<std::uint64_t>((std::numeric_limits<std::int64_t>::max)()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16427 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16428 if (add_prefix)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16429 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16430 oa->write_character(to_char_type('L')); // int64
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16431 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16432 write_number(static_cast<std::int64_t>(n), use_bjdata);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16433 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16434 else if (use_bjdata && n <= (std::numeric_limits<uint64_t>::max)())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16435 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16436 if (add_prefix)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16437 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16438 oa->write_character(to_char_type('M')); // uint64 - bjdata only
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16439 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16440 write_number(static_cast<std::uint64_t>(n), use_bjdata);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16441 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16442 else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16443 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16444 if (add_prefix)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16445 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16446 oa->write_character(to_char_type('H')); // high-precision number
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16447 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16448
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16449 const auto number = BasicJsonType(n).dump();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16450 write_number_with_ubjson_prefix(number.size(), true, use_bjdata);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16451 for (std::size_t i = 0; i < number.size(); ++i)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16452 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16453 oa->write_character(to_char_type(static_cast<std::uint8_t>(number[i])));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16454 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16455 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16456 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16457
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16458 // UBJSON: write number (signed integer)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16459 template < typename NumberType, typename std::enable_if <
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16460 std::is_signed<NumberType>::value&&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16461 !std::is_floating_point<NumberType>::value, int >::type = 0 >
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16462 void write_number_with_ubjson_prefix(const NumberType n,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16463 const bool add_prefix,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16464 const bool use_bjdata)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16465 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16466 if ((std::numeric_limits<std::int8_t>::min)() <= n && n <= (std::numeric_limits<std::int8_t>::max)())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16467 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16468 if (add_prefix)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16469 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16470 oa->write_character(to_char_type('i')); // int8
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16471 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16472 write_number(static_cast<std::int8_t>(n), use_bjdata);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16473 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16474 else if (static_cast<std::int64_t>((std::numeric_limits<std::uint8_t>::min)()) <= n && n <= static_cast<std::int64_t>((std::numeric_limits<std::uint8_t>::max)()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16475 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16476 if (add_prefix)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16477 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16478 oa->write_character(to_char_type('U')); // uint8
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16479 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16480 write_number(static_cast<std::uint8_t>(n), use_bjdata);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16481 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16482 else if ((std::numeric_limits<std::int16_t>::min)() <= n && n <= (std::numeric_limits<std::int16_t>::max)())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16483 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16484 if (add_prefix)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16485 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16486 oa->write_character(to_char_type('I')); // int16
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16487 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16488 write_number(static_cast<std::int16_t>(n), use_bjdata);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16489 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16490 else if (use_bjdata && (static_cast<std::int64_t>((std::numeric_limits<std::uint16_t>::min)()) <= n && n <= static_cast<std::int64_t>((std::numeric_limits<std::uint16_t>::max)())))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16491 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16492 if (add_prefix)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16493 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16494 oa->write_character(to_char_type('u')); // uint16 - bjdata only
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16495 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16496 write_number(static_cast<uint16_t>(n), use_bjdata);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16497 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16498 else if ((std::numeric_limits<std::int32_t>::min)() <= n && n <= (std::numeric_limits<std::int32_t>::max)())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16499 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16500 if (add_prefix)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16501 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16502 oa->write_character(to_char_type('l')); // int32
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16503 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16504 write_number(static_cast<std::int32_t>(n), use_bjdata);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16505 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16506 else if (use_bjdata && (static_cast<std::int64_t>((std::numeric_limits<std::uint32_t>::min)()) <= n && n <= static_cast<std::int64_t>((std::numeric_limits<std::uint32_t>::max)())))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16507 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16508 if (add_prefix)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16509 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16510 oa->write_character(to_char_type('m')); // uint32 - bjdata only
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16511 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16512 write_number(static_cast<uint32_t>(n), use_bjdata);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16513 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16514 else if ((std::numeric_limits<std::int64_t>::min)() <= n && n <= (std::numeric_limits<std::int64_t>::max)())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16515 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16516 if (add_prefix)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16517 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16518 oa->write_character(to_char_type('L')); // int64
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16519 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16520 write_number(static_cast<std::int64_t>(n), use_bjdata);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16521 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16522 // LCOV_EXCL_START
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16523 else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16524 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16525 if (add_prefix)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16526 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16527 oa->write_character(to_char_type('H')); // high-precision number
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16528 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16529
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16530 const auto number = BasicJsonType(n).dump();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16531 write_number_with_ubjson_prefix(number.size(), true, use_bjdata);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16532 for (std::size_t i = 0; i < number.size(); ++i)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16533 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16534 oa->write_character(to_char_type(static_cast<std::uint8_t>(number[i])));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16535 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16536 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16537 // LCOV_EXCL_STOP
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16538 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16539
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16540 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16541 @brief determine the type prefix of container values
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16542 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16543 CharType ubjson_prefix(const BasicJsonType& j, const bool use_bjdata) const noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16544 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16545 switch (j.type())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16546 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16547 case value_t::null:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16548 return 'Z';
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16549
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16550 case value_t::boolean:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16551 return j.m_data.m_value.boolean ? 'T' : 'F';
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16552
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16553 case value_t::number_integer:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16554 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16555 if ((std::numeric_limits<std::int8_t>::min)() <= j.m_data.m_value.number_integer && j.m_data.m_value.number_integer <= (std::numeric_limits<std::int8_t>::max)())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16556 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16557 return 'i';
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16558 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16559 if ((std::numeric_limits<std::uint8_t>::min)() <= j.m_data.m_value.number_integer && j.m_data.m_value.number_integer <= (std::numeric_limits<std::uint8_t>::max)())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16560 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16561 return 'U';
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16562 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16563 if ((std::numeric_limits<std::int16_t>::min)() <= j.m_data.m_value.number_integer && j.m_data.m_value.number_integer <= (std::numeric_limits<std::int16_t>::max)())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16564 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16565 return 'I';
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16566 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16567 if (use_bjdata && ((std::numeric_limits<std::uint16_t>::min)() <= j.m_data.m_value.number_integer && j.m_data.m_value.number_integer <= (std::numeric_limits<std::uint16_t>::max)()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16568 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16569 return 'u';
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16570 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16571 if ((std::numeric_limits<std::int32_t>::min)() <= j.m_data.m_value.number_integer && j.m_data.m_value.number_integer <= (std::numeric_limits<std::int32_t>::max)())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16572 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16573 return 'l';
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16574 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16575 if (use_bjdata && ((std::numeric_limits<std::uint32_t>::min)() <= j.m_data.m_value.number_integer && j.m_data.m_value.number_integer <= (std::numeric_limits<std::uint32_t>::max)()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16576 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16577 return 'm';
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16578 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16579 if ((std::numeric_limits<std::int64_t>::min)() <= j.m_data.m_value.number_integer && j.m_data.m_value.number_integer <= (std::numeric_limits<std::int64_t>::max)())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16580 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16581 return 'L';
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16582 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16583 // anything else is treated as high-precision number
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16584 return 'H'; // LCOV_EXCL_LINE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16585 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16586
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16587 case value_t::number_unsigned:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16588 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16589 if (j.m_data.m_value.number_unsigned <= static_cast<std::uint64_t>((std::numeric_limits<std::int8_t>::max)()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16590 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16591 return 'i';
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16592 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16593 if (j.m_data.m_value.number_unsigned <= static_cast<std::uint64_t>((std::numeric_limits<std::uint8_t>::max)()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16594 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16595 return 'U';
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16596 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16597 if (j.m_data.m_value.number_unsigned <= static_cast<std::uint64_t>((std::numeric_limits<std::int16_t>::max)()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16598 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16599 return 'I';
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16600 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16601 if (use_bjdata && j.m_data.m_value.number_unsigned <= static_cast<std::uint64_t>((std::numeric_limits<std::uint16_t>::max)()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16602 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16603 return 'u';
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16604 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16605 if (j.m_data.m_value.number_unsigned <= static_cast<std::uint64_t>((std::numeric_limits<std::int32_t>::max)()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16606 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16607 return 'l';
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16608 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16609 if (use_bjdata && j.m_data.m_value.number_unsigned <= static_cast<std::uint64_t>((std::numeric_limits<std::uint32_t>::max)()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16610 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16611 return 'm';
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16612 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16613 if (j.m_data.m_value.number_unsigned <= static_cast<std::uint64_t>((std::numeric_limits<std::int64_t>::max)()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16614 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16615 return 'L';
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16616 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16617 if (use_bjdata && j.m_data.m_value.number_unsigned <= (std::numeric_limits<std::uint64_t>::max)())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16618 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16619 return 'M';
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16620 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16621 // anything else is treated as high-precision number
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16622 return 'H'; // LCOV_EXCL_LINE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16623 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16624
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16625 case value_t::number_float:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16626 return get_ubjson_float_prefix(j.m_data.m_value.number_float);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16627
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16628 case value_t::string:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16629 return 'S';
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16630
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16631 case value_t::array: // fallthrough
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16632 case value_t::binary:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16633 return '[';
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16634
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16635 case value_t::object:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16636 return '{';
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16637
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16638 case value_t::discarded:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16639 default: // discarded values
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16640 return 'N';
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16641 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16642 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16643
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16644 static constexpr CharType get_ubjson_float_prefix(float /*unused*/)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16645 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16646 return 'd'; // float 32
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16647 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16648
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16649 static constexpr CharType get_ubjson_float_prefix(double /*unused*/)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16650 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16651 return 'D'; // float 64
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16652 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16653
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16654 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16655 @return false if the object is successfully converted to a bjdata ndarray, true if the type or size is invalid
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16656 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16657 bool write_bjdata_ndarray(const typename BasicJsonType::object_t& value, const bool use_count, const bool use_type)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16658 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16659 std::map<string_t, CharType> bjdtype = {{"uint8", 'U'}, {"int8", 'i'}, {"uint16", 'u'}, {"int16", 'I'},
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16660 {"uint32", 'm'}, {"int32", 'l'}, {"uint64", 'M'}, {"int64", 'L'}, {"single", 'd'}, {"double", 'D'}, {"char", 'C'}
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16661 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16662
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16663 string_t key = "_ArrayType_";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16664 auto it = bjdtype.find(static_cast<string_t>(value.at(key)));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16665 if (it == bjdtype.end())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16666 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16667 return true;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16668 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16669 CharType dtype = it->second;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16670
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16671 key = "_ArraySize_";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16672 std::size_t len = (value.at(key).empty() ? 0 : 1);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16673 for (const auto& el : value.at(key))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16674 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16675 len *= static_cast<std::size_t>(el.m_data.m_value.number_unsigned);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16676 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16677
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16678 key = "_ArrayData_";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16679 if (value.at(key).size() != len)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16680 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16681 return true;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16682 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16683
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16684 oa->write_character('[');
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16685 oa->write_character('$');
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16686 oa->write_character(dtype);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16687 oa->write_character('#');
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16688
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16689 key = "_ArraySize_";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16690 write_ubjson(value.at(key), use_count, use_type, true, true);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16691
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16692 key = "_ArrayData_";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16693 if (dtype == 'U' || dtype == 'C')
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16694 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16695 for (const auto& el : value.at(key))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16696 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16697 write_number(static_cast<std::uint8_t>(el.m_data.m_value.number_unsigned), true);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16698 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16699 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16700 else if (dtype == 'i')
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16701 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16702 for (const auto& el : value.at(key))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16703 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16704 write_number(static_cast<std::int8_t>(el.m_data.m_value.number_integer), true);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16705 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16706 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16707 else if (dtype == 'u')
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16708 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16709 for (const auto& el : value.at(key))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16710 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16711 write_number(static_cast<std::uint16_t>(el.m_data.m_value.number_unsigned), true);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16712 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16713 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16714 else if (dtype == 'I')
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16715 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16716 for (const auto& el : value.at(key))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16717 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16718 write_number(static_cast<std::int16_t>(el.m_data.m_value.number_integer), true);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16719 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16720 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16721 else if (dtype == 'm')
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16722 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16723 for (const auto& el : value.at(key))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16724 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16725 write_number(static_cast<std::uint32_t>(el.m_data.m_value.number_unsigned), true);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16726 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16727 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16728 else if (dtype == 'l')
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16729 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16730 for (const auto& el : value.at(key))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16731 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16732 write_number(static_cast<std::int32_t>(el.m_data.m_value.number_integer), true);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16733 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16734 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16735 else if (dtype == 'M')
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16736 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16737 for (const auto& el : value.at(key))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16738 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16739 write_number(static_cast<std::uint64_t>(el.m_data.m_value.number_unsigned), true);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16740 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16741 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16742 else if (dtype == 'L')
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16743 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16744 for (const auto& el : value.at(key))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16745 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16746 write_number(static_cast<std::int64_t>(el.m_data.m_value.number_integer), true);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16747 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16748 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16749 else if (dtype == 'd')
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16750 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16751 for (const auto& el : value.at(key))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16752 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16753 write_number(static_cast<float>(el.m_data.m_value.number_float), true);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16754 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16755 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16756 else if (dtype == 'D')
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16757 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16758 for (const auto& el : value.at(key))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16759 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16760 write_number(static_cast<double>(el.m_data.m_value.number_float), true);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16761 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16762 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16763 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16764 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16765
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16766 ///////////////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16767 // Utility functions //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16768 ///////////////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16769
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16770 /*
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16771 @brief write a number to output input
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16772 @param[in] n number of type @a NumberType
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16773 @param[in] OutputIsLittleEndian Set to true if output data is
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16774 required to be little endian
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16775 @tparam NumberType the type of the number
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16776
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16777 @note This function needs to respect the system's endianness, because bytes
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16778 in CBOR, MessagePack, and UBJSON are stored in network order (big
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16779 endian) and therefore need reordering on little endian systems.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16780 On the other hand, BSON and BJData use little endian and should reorder
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16781 on big endian systems.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16782 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16783 template<typename NumberType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16784 void write_number(const NumberType n, const bool OutputIsLittleEndian = false)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16785 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16786 // step 1: write number to array of length NumberType
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16787 std::array<CharType, sizeof(NumberType)> vec{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16788 std::memcpy(vec.data(), &n, sizeof(NumberType));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16789
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16790 // step 2: write array to output (with possible reordering)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16791 if (is_little_endian != OutputIsLittleEndian)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16792 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16793 // reverse byte order prior to conversion if necessary
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16794 std::reverse(vec.begin(), vec.end());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16795 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16796
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16797 oa->write_characters(vec.data(), sizeof(NumberType));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16798 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16799
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16800 void write_compact_float(const number_float_t n, detail::input_format_t format)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16801 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16802 #ifdef __GNUC__
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16803 #pragma GCC diagnostic push
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16804 #pragma GCC diagnostic ignored "-Wfloat-equal"
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16805 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16806 if (static_cast<double>(n) >= static_cast<double>(std::numeric_limits<float>::lowest()) &&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16807 static_cast<double>(n) <= static_cast<double>((std::numeric_limits<float>::max)()) &&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16808 static_cast<double>(static_cast<float>(n)) == static_cast<double>(n))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16809 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16810 oa->write_character(format == detail::input_format_t::cbor
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16811 ? get_cbor_float_prefix(static_cast<float>(n))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16812 : get_msgpack_float_prefix(static_cast<float>(n)));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16813 write_number(static_cast<float>(n));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16814 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16815 else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16816 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16817 oa->write_character(format == detail::input_format_t::cbor
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16818 ? get_cbor_float_prefix(n)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16819 : get_msgpack_float_prefix(n));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16820 write_number(n);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16821 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16822 #ifdef __GNUC__
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16823 #pragma GCC diagnostic pop
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16824 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16825 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16826
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16827 public:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16828 // The following to_char_type functions are implement the conversion
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16829 // between uint8_t and CharType. In case CharType is not unsigned,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16830 // such a conversion is required to allow values greater than 128.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16831 // See <https://github.com/nlohmann/json/issues/1286> for a discussion.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16832 template < typename C = CharType,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16833 enable_if_t < std::is_signed<C>::value && std::is_signed<char>::value > * = nullptr >
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16834 static constexpr CharType to_char_type(std::uint8_t x) noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16835 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16836 return *reinterpret_cast<char*>(&x);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16837 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16838
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16839 template < typename C = CharType,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16840 enable_if_t < std::is_signed<C>::value && std::is_unsigned<char>::value > * = nullptr >
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16841 static CharType to_char_type(std::uint8_t x) noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16842 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16843 static_assert(sizeof(std::uint8_t) == sizeof(CharType), "size of CharType must be equal to std::uint8_t");
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16844 static_assert(std::is_trivial<CharType>::value, "CharType must be trivial");
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16845 CharType result;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16846 std::memcpy(&result, &x, sizeof(x));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16847 return result;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16848 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16849
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16850 template<typename C = CharType,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16851 enable_if_t<std::is_unsigned<C>::value>* = nullptr>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16852 static constexpr CharType to_char_type(std::uint8_t x) noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16853 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16854 return x;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16855 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16856
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16857 template < typename InputCharType, typename C = CharType,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16858 enable_if_t <
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16859 std::is_signed<C>::value &&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16860 std::is_signed<char>::value &&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16861 std::is_same<char, typename std::remove_cv<InputCharType>::type>::value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16862 > * = nullptr >
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16863 static constexpr CharType to_char_type(InputCharType x) noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16864 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16865 return x;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16866 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16867
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16868 private:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16869 /// whether we can assume little endianness
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16870 const bool is_little_endian = little_endianness();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16871
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16872 /// the output
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16873 output_adapter_t<CharType> oa = nullptr;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16874 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16875
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16876 } // namespace detail
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16877 NLOHMANN_JSON_NAMESPACE_END
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16878
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16879 // #include <nlohmann/detail/output/output_adapters.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16880
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16881 // #include <nlohmann/detail/output/serializer.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16882 // __ _____ _____ _____
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16883 // __| | __| | | | JSON for Modern C++
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16884 // | | |__ | | | | | | version 3.11.3
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16885 // |_____|_____|_____|_|___| https://github.com/nlohmann/json
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16886 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16887 // SPDX-FileCopyrightText: 2008-2009 Björn Hoehrmann <bjoern@hoehrmann.de>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16888 // SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16889 // SPDX-License-Identifier: MIT
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16890
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16891
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16892
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16893 #include <algorithm> // reverse, remove, fill, find, none_of
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16894 #include <array> // array
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16895 #include <clocale> // localeconv, lconv
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16896 #include <cmath> // labs, isfinite, isnan, signbit
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16897 #include <cstddef> // size_t, ptrdiff_t
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16898 #include <cstdint> // uint8_t
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16899 #include <cstdio> // snprintf
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16900 #include <limits> // numeric_limits
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16901 #include <string> // string, char_traits
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16902 #include <iomanip> // setfill, setw
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16903 #include <type_traits> // is_same
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16904 #include <utility> // move
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16905
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16906 // #include <nlohmann/detail/conversions/to_chars.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16907 // __ _____ _____ _____
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16908 // __| | __| | | | JSON for Modern C++
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16909 // | | |__ | | | | | | version 3.11.3
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16910 // |_____|_____|_____|_|___| https://github.com/nlohmann/json
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16911 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16912 // SPDX-FileCopyrightText: 2009 Florian Loitsch <https://florian.loitsch.com/>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16913 // SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16914 // SPDX-License-Identifier: MIT
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16915
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16916
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16917
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16918 #include <array> // array
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16919 #include <cmath> // signbit, isfinite
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16920 #include <cstdint> // intN_t, uintN_t
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16921 #include <cstring> // memcpy, memmove
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16922 #include <limits> // numeric_limits
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16923 #include <type_traits> // conditional
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16924
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16925 // #include <nlohmann/detail/macro_scope.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16926
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16927
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16928 NLOHMANN_JSON_NAMESPACE_BEGIN
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16929 namespace detail
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16930 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16931
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16932 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16933 @brief implements the Grisu2 algorithm for binary to decimal floating-point
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16934 conversion.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16935
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16936 This implementation is a slightly modified version of the reference
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16937 implementation which may be obtained from
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16938 http://florian.loitsch.com/publications (bench.tar.gz).
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16939
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16940 The code is distributed under the MIT license, Copyright (c) 2009 Florian Loitsch.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16941
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16942 For a detailed description of the algorithm see:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16943
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16944 [1] Loitsch, "Printing Floating-Point Numbers Quickly and Accurately with
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16945 Integers", Proceedings of the ACM SIGPLAN 2010 Conference on Programming
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16946 Language Design and Implementation, PLDI 2010
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16947 [2] Burger, Dybvig, "Printing Floating-Point Numbers Quickly and Accurately",
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16948 Proceedings of the ACM SIGPLAN 1996 Conference on Programming Language
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16949 Design and Implementation, PLDI 1996
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16950 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16951 namespace dtoa_impl
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16952 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16953
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16954 template<typename Target, typename Source>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16955 Target reinterpret_bits(const Source source)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16956 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16957 static_assert(sizeof(Target) == sizeof(Source), "size mismatch");
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16958
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16959 Target target;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16960 std::memcpy(&target, &source, sizeof(Source));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16961 return target;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16962 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16963
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16964 struct diyfp // f * 2^e
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16965 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16966 static constexpr int kPrecision = 64; // = q
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16967
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16968 std::uint64_t f = 0;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16969 int e = 0;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16970
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16971 constexpr diyfp(std::uint64_t f_, int e_) noexcept : f(f_), e(e_) {}
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16972
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16973 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16974 @brief returns x - y
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16975 @pre x.e == y.e and x.f >= y.f
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16976 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16977 static diyfp sub(const diyfp& x, const diyfp& y) noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16978 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16979 JSON_ASSERT(x.e == y.e);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16980 JSON_ASSERT(x.f >= y.f);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16981
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16982 return {x.f - y.f, x.e};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16983 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16984
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16985 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16986 @brief returns x * y
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16987 @note The result is rounded. (Only the upper q bits are returned.)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16988 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16989 static diyfp mul(const diyfp& x, const diyfp& y) noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16990 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16991 static_assert(kPrecision == 64, "internal error");
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16992
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16993 // Computes:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16994 // f = round((x.f * y.f) / 2^q)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16995 // e = x.e + y.e + q
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16996
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16997 // Emulate the 64-bit * 64-bit multiplication:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16998 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16999 // p = u * v
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17000 // = (u_lo + 2^32 u_hi) (v_lo + 2^32 v_hi)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17001 // = (u_lo v_lo ) + 2^32 ((u_lo v_hi ) + (u_hi v_lo )) + 2^64 (u_hi v_hi )
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17002 // = (p0 ) + 2^32 ((p1 ) + (p2 )) + 2^64 (p3 )
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17003 // = (p0_lo + 2^32 p0_hi) + 2^32 ((p1_lo + 2^32 p1_hi) + (p2_lo + 2^32 p2_hi)) + 2^64 (p3 )
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17004 // = (p0_lo ) + 2^32 (p0_hi + p1_lo + p2_lo ) + 2^64 (p1_hi + p2_hi + p3)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17005 // = (p0_lo ) + 2^32 (Q ) + 2^64 (H )
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17006 // = (p0_lo ) + 2^32 (Q_lo + 2^32 Q_hi ) + 2^64 (H )
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17007 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17008 // (Since Q might be larger than 2^32 - 1)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17009 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17010 // = (p0_lo + 2^32 Q_lo) + 2^64 (Q_hi + H)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17011 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17012 // (Q_hi + H does not overflow a 64-bit int)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17013 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17014 // = p_lo + 2^64 p_hi
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17015
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17016 const std::uint64_t u_lo = x.f & 0xFFFFFFFFu;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17017 const std::uint64_t u_hi = x.f >> 32u;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17018 const std::uint64_t v_lo = y.f & 0xFFFFFFFFu;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17019 const std::uint64_t v_hi = y.f >> 32u;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17020
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17021 const std::uint64_t p0 = u_lo * v_lo;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17022 const std::uint64_t p1 = u_lo * v_hi;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17023 const std::uint64_t p2 = u_hi * v_lo;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17024 const std::uint64_t p3 = u_hi * v_hi;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17025
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17026 const std::uint64_t p0_hi = p0 >> 32u;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17027 const std::uint64_t p1_lo = p1 & 0xFFFFFFFFu;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17028 const std::uint64_t p1_hi = p1 >> 32u;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17029 const std::uint64_t p2_lo = p2 & 0xFFFFFFFFu;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17030 const std::uint64_t p2_hi = p2 >> 32u;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17031
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17032 std::uint64_t Q = p0_hi + p1_lo + p2_lo;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17033
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17034 // The full product might now be computed as
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17035 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17036 // p_hi = p3 + p2_hi + p1_hi + (Q >> 32)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17037 // p_lo = p0_lo + (Q << 32)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17038 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17039 // But in this particular case here, the full p_lo is not required.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17040 // Effectively we only need to add the highest bit in p_lo to p_hi (and
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17041 // Q_hi + 1 does not overflow).
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17042
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17043 Q += std::uint64_t{1} << (64u - 32u - 1u); // round, ties up
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17044
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17045 const std::uint64_t h = p3 + p2_hi + p1_hi + (Q >> 32u);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17046
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17047 return {h, x.e + y.e + 64};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17048 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17049
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17050 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17051 @brief normalize x such that the significand is >= 2^(q-1)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17052 @pre x.f != 0
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17053 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17054 static diyfp normalize(diyfp x) noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17055 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17056 JSON_ASSERT(x.f != 0);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17057
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17058 while ((x.f >> 63u) == 0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17059 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17060 x.f <<= 1u;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17061 x.e--;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17062 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17063
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17064 return x;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17065 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17066
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17067 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17068 @brief normalize x such that the result has the exponent E
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17069 @pre e >= x.e and the upper e - x.e bits of x.f must be zero.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17070 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17071 static diyfp normalize_to(const diyfp& x, const int target_exponent) noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17072 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17073 const int delta = x.e - target_exponent;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17074
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17075 JSON_ASSERT(delta >= 0);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17076 JSON_ASSERT(((x.f << delta) >> delta) == x.f);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17077
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17078 return {x.f << delta, target_exponent};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17079 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17080 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17081
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17082 struct boundaries
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17083 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17084 diyfp w;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17085 diyfp minus;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17086 diyfp plus;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17087 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17088
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17089 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17090 Compute the (normalized) diyfp representing the input number 'value' and its
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17091 boundaries.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17092
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17093 @pre value must be finite and positive
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17094 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17095 template<typename FloatType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17096 boundaries compute_boundaries(FloatType value)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17097 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17098 JSON_ASSERT(std::isfinite(value));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17099 JSON_ASSERT(value > 0);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17100
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17101 // Convert the IEEE representation into a diyfp.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17102 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17103 // If v is denormal:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17104 // value = 0.F * 2^(1 - bias) = ( F) * 2^(1 - bias - (p-1))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17105 // If v is normalized:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17106 // value = 1.F * 2^(E - bias) = (2^(p-1) + F) * 2^(E - bias - (p-1))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17107
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17108 static_assert(std::numeric_limits<FloatType>::is_iec559,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17109 "internal error: dtoa_short requires an IEEE-754 floating-point implementation");
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17110
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17111 constexpr int kPrecision = std::numeric_limits<FloatType>::digits; // = p (includes the hidden bit)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17112 constexpr int kBias = std::numeric_limits<FloatType>::max_exponent - 1 + (kPrecision - 1);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17113 constexpr int kMinExp = 1 - kBias;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17114 constexpr std::uint64_t kHiddenBit = std::uint64_t{1} << (kPrecision - 1); // = 2^(p-1)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17115
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17116 using bits_type = typename std::conditional<kPrecision == 24, std::uint32_t, std::uint64_t >::type;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17117
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17118 const auto bits = static_cast<std::uint64_t>(reinterpret_bits<bits_type>(value));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17119 const std::uint64_t E = bits >> (kPrecision - 1);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17120 const std::uint64_t F = bits & (kHiddenBit - 1);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17121
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17122 const bool is_denormal = E == 0;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17123 const diyfp v = is_denormal
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17124 ? diyfp(F, kMinExp)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17125 : diyfp(F + kHiddenBit, static_cast<int>(E) - kBias);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17126
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17127 // Compute the boundaries m- and m+ of the floating-point value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17128 // v = f * 2^e.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17129 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17130 // Determine v- and v+, the floating-point predecessor and successor if v,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17131 // respectively.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17132 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17133 // v- = v - 2^e if f != 2^(p-1) or e == e_min (A)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17134 // = v - 2^(e-1) if f == 2^(p-1) and e > e_min (B)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17135 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17136 // v+ = v + 2^e
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17137 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17138 // Let m- = (v- + v) / 2 and m+ = (v + v+) / 2. All real numbers _strictly_
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17139 // between m- and m+ round to v, regardless of how the input rounding
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17140 // algorithm breaks ties.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17141 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17142 // ---+-------------+-------------+-------------+-------------+--- (A)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17143 // v- m- v m+ v+
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17144 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17145 // -----------------+------+------+-------------+-------------+--- (B)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17146 // v- m- v m+ v+
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17147
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17148 const bool lower_boundary_is_closer = F == 0 && E > 1;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17149 const diyfp m_plus = diyfp(2 * v.f + 1, v.e - 1);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17150 const diyfp m_minus = lower_boundary_is_closer
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17151 ? diyfp(4 * v.f - 1, v.e - 2) // (B)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17152 : diyfp(2 * v.f - 1, v.e - 1); // (A)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17153
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17154 // Determine the normalized w+ = m+.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17155 const diyfp w_plus = diyfp::normalize(m_plus);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17156
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17157 // Determine w- = m- such that e_(w-) = e_(w+).
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17158 const diyfp w_minus = diyfp::normalize_to(m_minus, w_plus.e);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17159
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17160 return {diyfp::normalize(v), w_minus, w_plus};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17161 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17162
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17163 // Given normalized diyfp w, Grisu needs to find a (normalized) cached
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17164 // power-of-ten c, such that the exponent of the product c * w = f * 2^e lies
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17165 // within a certain range [alpha, gamma] (Definition 3.2 from [1])
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17166 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17167 // alpha <= e = e_c + e_w + q <= gamma
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17168 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17169 // or
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17170 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17171 // f_c * f_w * 2^alpha <= f_c 2^(e_c) * f_w 2^(e_w) * 2^q
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17172 // <= f_c * f_w * 2^gamma
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17173 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17174 // Since c and w are normalized, i.e. 2^(q-1) <= f < 2^q, this implies
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17175 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17176 // 2^(q-1) * 2^(q-1) * 2^alpha <= c * w * 2^q < 2^q * 2^q * 2^gamma
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17177 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17178 // or
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17179 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17180 // 2^(q - 2 + alpha) <= c * w < 2^(q + gamma)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17181 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17182 // The choice of (alpha,gamma) determines the size of the table and the form of
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17183 // the digit generation procedure. Using (alpha,gamma)=(-60,-32) works out well
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17184 // in practice:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17185 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17186 // The idea is to cut the number c * w = f * 2^e into two parts, which can be
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17187 // processed independently: An integral part p1, and a fractional part p2:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17188 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17189 // f * 2^e = ( (f div 2^-e) * 2^-e + (f mod 2^-e) ) * 2^e
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17190 // = (f div 2^-e) + (f mod 2^-e) * 2^e
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17191 // = p1 + p2 * 2^e
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17192 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17193 // The conversion of p1 into decimal form requires a series of divisions and
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17194 // modulos by (a power of) 10. These operations are faster for 32-bit than for
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17195 // 64-bit integers, so p1 should ideally fit into a 32-bit integer. This can be
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17196 // achieved by choosing
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17197 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17198 // -e >= 32 or e <= -32 := gamma
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17199 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17200 // In order to convert the fractional part
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17201 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17202 // p2 * 2^e = p2 / 2^-e = d[-1] / 10^1 + d[-2] / 10^2 + ...
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17203 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17204 // into decimal form, the fraction is repeatedly multiplied by 10 and the digits
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17205 // d[-i] are extracted in order:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17206 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17207 // (10 * p2) div 2^-e = d[-1]
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17208 // (10 * p2) mod 2^-e = d[-2] / 10^1 + ...
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17209 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17210 // The multiplication by 10 must not overflow. It is sufficient to choose
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17211 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17212 // 10 * p2 < 16 * p2 = 2^4 * p2 <= 2^64.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17213 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17214 // Since p2 = f mod 2^-e < 2^-e,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17215 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17216 // -e <= 60 or e >= -60 := alpha
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17217
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17218 constexpr int kAlpha = -60;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17219 constexpr int kGamma = -32;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17220
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17221 struct cached_power // c = f * 2^e ~= 10^k
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17222 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17223 std::uint64_t f;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17224 int e;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17225 int k;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17226 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17227
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17228 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17229 For a normalized diyfp w = f * 2^e, this function returns a (normalized) cached
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17230 power-of-ten c = f_c * 2^e_c, such that the exponent of the product w * c
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17231 satisfies (Definition 3.2 from [1])
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17232
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17233 alpha <= e_c + e + q <= gamma.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17234 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17235 inline cached_power get_cached_power_for_binary_exponent(int e)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17236 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17237 // Now
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17238 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17239 // alpha <= e_c + e + q <= gamma (1)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17240 // ==> f_c * 2^alpha <= c * 2^e * 2^q
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17241 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17242 // and since the c's are normalized, 2^(q-1) <= f_c,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17243 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17244 // ==> 2^(q - 1 + alpha) <= c * 2^(e + q)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17245 // ==> 2^(alpha - e - 1) <= c
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17246 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17247 // If c were an exact power of ten, i.e. c = 10^k, one may determine k as
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17248 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17249 // k = ceil( log_10( 2^(alpha - e - 1) ) )
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17250 // = ceil( (alpha - e - 1) * log_10(2) )
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17251 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17252 // From the paper:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17253 // "In theory the result of the procedure could be wrong since c is rounded,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17254 // and the computation itself is approximated [...]. In practice, however,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17255 // this simple function is sufficient."
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17256 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17257 // For IEEE double precision floating-point numbers converted into
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17258 // normalized diyfp's w = f * 2^e, with q = 64,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17259 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17260 // e >= -1022 (min IEEE exponent)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17261 // -52 (p - 1)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17262 // -52 (p - 1, possibly normalize denormal IEEE numbers)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17263 // -11 (normalize the diyfp)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17264 // = -1137
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17265 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17266 // and
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17267 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17268 // e <= +1023 (max IEEE exponent)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17269 // -52 (p - 1)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17270 // -11 (normalize the diyfp)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17271 // = 960
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17272 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17273 // This binary exponent range [-1137,960] results in a decimal exponent
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17274 // range [-307,324]. One does not need to store a cached power for each
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17275 // k in this range. For each such k it suffices to find a cached power
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17276 // such that the exponent of the product lies in [alpha,gamma].
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17277 // This implies that the difference of the decimal exponents of adjacent
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17278 // table entries must be less than or equal to
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17279 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17280 // floor( (gamma - alpha) * log_10(2) ) = 8.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17281 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17282 // (A smaller distance gamma-alpha would require a larger table.)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17283
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17284 // NB:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17285 // Actually this function returns c, such that -60 <= e_c + e + 64 <= -34.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17286
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17287 constexpr int kCachedPowersMinDecExp = -300;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17288 constexpr int kCachedPowersDecStep = 8;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17289
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17290 static constexpr std::array<cached_power, 79> kCachedPowers =
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17291 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17292 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17293 { 0xAB70FE17C79AC6CA, -1060, -300 },
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17294 { 0xFF77B1FCBEBCDC4F, -1034, -292 },
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17295 { 0xBE5691EF416BD60C, -1007, -284 },
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17296 { 0x8DD01FAD907FFC3C, -980, -276 },
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17297 { 0xD3515C2831559A83, -954, -268 },
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17298 { 0x9D71AC8FADA6C9B5, -927, -260 },
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17299 { 0xEA9C227723EE8BCB, -901, -252 },
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17300 { 0xAECC49914078536D, -874, -244 },
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17301 { 0x823C12795DB6CE57, -847, -236 },
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17302 { 0xC21094364DFB5637, -821, -228 },
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17303 { 0x9096EA6F3848984F, -794, -220 },
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17304 { 0xD77485CB25823AC7, -768, -212 },
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17305 { 0xA086CFCD97BF97F4, -741, -204 },
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17306 { 0xEF340A98172AACE5, -715, -196 },
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17307 { 0xB23867FB2A35B28E, -688, -188 },
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17308 { 0x84C8D4DFD2C63F3B, -661, -180 },
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17309 { 0xC5DD44271AD3CDBA, -635, -172 },
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17310 { 0x936B9FCEBB25C996, -608, -164 },
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17311 { 0xDBAC6C247D62A584, -582, -156 },
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17312 { 0xA3AB66580D5FDAF6, -555, -148 },
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17313 { 0xF3E2F893DEC3F126, -529, -140 },
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17314 { 0xB5B5ADA8AAFF80B8, -502, -132 },
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17315 { 0x87625F056C7C4A8B, -475, -124 },
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17316 { 0xC9BCFF6034C13053, -449, -116 },
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17317 { 0x964E858C91BA2655, -422, -108 },
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17318 { 0xDFF9772470297EBD, -396, -100 },
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17319 { 0xA6DFBD9FB8E5B88F, -369, -92 },
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17320 { 0xF8A95FCF88747D94, -343, -84 },
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17321 { 0xB94470938FA89BCF, -316, -76 },
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17322 { 0x8A08F0F8BF0F156B, -289, -68 },
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17323 { 0xCDB02555653131B6, -263, -60 },
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17324 { 0x993FE2C6D07B7FAC, -236, -52 },
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17325 { 0xE45C10C42A2B3B06, -210, -44 },
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17326 { 0xAA242499697392D3, -183, -36 },
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17327 { 0xFD87B5F28300CA0E, -157, -28 },
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17328 { 0xBCE5086492111AEB, -130, -20 },
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17329 { 0x8CBCCC096F5088CC, -103, -12 },
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17330 { 0xD1B71758E219652C, -77, -4 },
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17331 { 0x9C40000000000000, -50, 4 },
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17332 { 0xE8D4A51000000000, -24, 12 },
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17333 { 0xAD78EBC5AC620000, 3, 20 },
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17334 { 0x813F3978F8940984, 30, 28 },
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17335 { 0xC097CE7BC90715B3, 56, 36 },
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17336 { 0x8F7E32CE7BEA5C70, 83, 44 },
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17337 { 0xD5D238A4ABE98068, 109, 52 },
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17338 { 0x9F4F2726179A2245, 136, 60 },
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17339 { 0xED63A231D4C4FB27, 162, 68 },
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17340 { 0xB0DE65388CC8ADA8, 189, 76 },
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17341 { 0x83C7088E1AAB65DB, 216, 84 },
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17342 { 0xC45D1DF942711D9A, 242, 92 },
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17343 { 0x924D692CA61BE758, 269, 100 },
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17344 { 0xDA01EE641A708DEA, 295, 108 },
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17345 { 0xA26DA3999AEF774A, 322, 116 },
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17346 { 0xF209787BB47D6B85, 348, 124 },
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17347 { 0xB454E4A179DD1877, 375, 132 },
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17348 { 0x865B86925B9BC5C2, 402, 140 },
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17349 { 0xC83553C5C8965D3D, 428, 148 },
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17350 { 0x952AB45CFA97A0B3, 455, 156 },
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17351 { 0xDE469FBD99A05FE3, 481, 164 },
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17352 { 0xA59BC234DB398C25, 508, 172 },
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17353 { 0xF6C69A72A3989F5C, 534, 180 },
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17354 { 0xB7DCBF5354E9BECE, 561, 188 },
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17355 { 0x88FCF317F22241E2, 588, 196 },
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17356 { 0xCC20CE9BD35C78A5, 614, 204 },
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17357 { 0x98165AF37B2153DF, 641, 212 },
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17358 { 0xE2A0B5DC971F303A, 667, 220 },
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17359 { 0xA8D9D1535CE3B396, 694, 228 },
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17360 { 0xFB9B7CD9A4A7443C, 720, 236 },
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17361 { 0xBB764C4CA7A44410, 747, 244 },
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17362 { 0x8BAB8EEFB6409C1A, 774, 252 },
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17363 { 0xD01FEF10A657842C, 800, 260 },
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17364 { 0x9B10A4E5E9913129, 827, 268 },
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17365 { 0xE7109BFBA19C0C9D, 853, 276 },
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17366 { 0xAC2820D9623BF429, 880, 284 },
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17367 { 0x80444B5E7AA7CF85, 907, 292 },
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17368 { 0xBF21E44003ACDD2D, 933, 300 },
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17369 { 0x8E679C2F5E44FF8F, 960, 308 },
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17370 { 0xD433179D9C8CB841, 986, 316 },
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17371 { 0x9E19DB92B4E31BA9, 1013, 324 },
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17372 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17373 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17374
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17375 // This computation gives exactly the same results for k as
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17376 // k = ceil((kAlpha - e - 1) * 0.30102999566398114)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17377 // for |e| <= 1500, but doesn't require floating-point operations.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17378 // NB: log_10(2) ~= 78913 / 2^18
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17379 JSON_ASSERT(e >= -1500);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17380 JSON_ASSERT(e <= 1500);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17381 const int f = kAlpha - e - 1;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17382 const int k = (f * 78913) / (1 << 18) + static_cast<int>(f > 0);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17383
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17384 const int index = (-kCachedPowersMinDecExp + k + (kCachedPowersDecStep - 1)) / kCachedPowersDecStep;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17385 JSON_ASSERT(index >= 0);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17386 JSON_ASSERT(static_cast<std::size_t>(index) < kCachedPowers.size());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17387
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17388 const cached_power cached = kCachedPowers[static_cast<std::size_t>(index)];
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17389 JSON_ASSERT(kAlpha <= cached.e + e + 64);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17390 JSON_ASSERT(kGamma >= cached.e + e + 64);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17391
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17392 return cached;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17393 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17394
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17395 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17396 For n != 0, returns k, such that pow10 := 10^(k-1) <= n < 10^k.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17397 For n == 0, returns 1 and sets pow10 := 1.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17398 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17399 inline int find_largest_pow10(const std::uint32_t n, std::uint32_t& pow10)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17400 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17401 // LCOV_EXCL_START
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17402 if (n >= 1000000000)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17403 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17404 pow10 = 1000000000;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17405 return 10;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17406 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17407 // LCOV_EXCL_STOP
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17408 if (n >= 100000000)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17409 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17410 pow10 = 100000000;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17411 return 9;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17412 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17413 if (n >= 10000000)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17414 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17415 pow10 = 10000000;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17416 return 8;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17417 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17418 if (n >= 1000000)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17419 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17420 pow10 = 1000000;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17421 return 7;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17422 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17423 if (n >= 100000)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17424 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17425 pow10 = 100000;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17426 return 6;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17427 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17428 if (n >= 10000)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17429 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17430 pow10 = 10000;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17431 return 5;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17432 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17433 if (n >= 1000)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17434 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17435 pow10 = 1000;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17436 return 4;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17437 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17438 if (n >= 100)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17439 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17440 pow10 = 100;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17441 return 3;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17442 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17443 if (n >= 10)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17444 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17445 pow10 = 10;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17446 return 2;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17447 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17448
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17449 pow10 = 1;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17450 return 1;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17451 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17452
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17453 inline void grisu2_round(char* buf, int len, std::uint64_t dist, std::uint64_t delta,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17454 std::uint64_t rest, std::uint64_t ten_k)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17455 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17456 JSON_ASSERT(len >= 1);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17457 JSON_ASSERT(dist <= delta);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17458 JSON_ASSERT(rest <= delta);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17459 JSON_ASSERT(ten_k > 0);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17460
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17461 // <--------------------------- delta ---->
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17462 // <---- dist --------->
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17463 // --------------[------------------+-------------------]--------------
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17464 // M- w M+
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17465 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17466 // ten_k
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17467 // <------>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17468 // <---- rest ---->
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17469 // --------------[------------------+----+--------------]--------------
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17470 // w V
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17471 // = buf * 10^k
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17472 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17473 // ten_k represents a unit-in-the-last-place in the decimal representation
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17474 // stored in buf.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17475 // Decrement buf by ten_k while this takes buf closer to w.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17476
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17477 // The tests are written in this order to avoid overflow in unsigned
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17478 // integer arithmetic.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17479
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17480 while (rest < dist
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17481 && delta - rest >= ten_k
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17482 && (rest + ten_k < dist || dist - rest > rest + ten_k - dist))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17483 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17484 JSON_ASSERT(buf[len - 1] != '0');
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17485 buf[len - 1]--;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17486 rest += ten_k;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17487 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17488 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17489
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17490 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17491 Generates V = buffer * 10^decimal_exponent, such that M- <= V <= M+.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17492 M- and M+ must be normalized and share the same exponent -60 <= e <= -32.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17493 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17494 inline void grisu2_digit_gen(char* buffer, int& length, int& decimal_exponent,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17495 diyfp M_minus, diyfp w, diyfp M_plus)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17496 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17497 static_assert(kAlpha >= -60, "internal error");
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17498 static_assert(kGamma <= -32, "internal error");
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17499
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17500 // Generates the digits (and the exponent) of a decimal floating-point
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17501 // number V = buffer * 10^decimal_exponent in the range [M-, M+]. The diyfp's
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17502 // w, M- and M+ share the same exponent e, which satisfies alpha <= e <= gamma.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17503 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17504 // <--------------------------- delta ---->
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17505 // <---- dist --------->
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17506 // --------------[------------------+-------------------]--------------
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17507 // M- w M+
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17508 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17509 // Grisu2 generates the digits of M+ from left to right and stops as soon as
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17510 // V is in [M-,M+].
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17511
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17512 JSON_ASSERT(M_plus.e >= kAlpha);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17513 JSON_ASSERT(M_plus.e <= kGamma);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17514
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17515 std::uint64_t delta = diyfp::sub(M_plus, M_minus).f; // (significand of (M+ - M-), implicit exponent is e)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17516 std::uint64_t dist = diyfp::sub(M_plus, w ).f; // (significand of (M+ - w ), implicit exponent is e)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17517
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17518 // Split M+ = f * 2^e into two parts p1 and p2 (note: e < 0):
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17519 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17520 // M+ = f * 2^e
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17521 // = ((f div 2^-e) * 2^-e + (f mod 2^-e)) * 2^e
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17522 // = ((p1 ) * 2^-e + (p2 )) * 2^e
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17523 // = p1 + p2 * 2^e
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17524
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17525 const diyfp one(std::uint64_t{1} << -M_plus.e, M_plus.e);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17526
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17527 auto p1 = static_cast<std::uint32_t>(M_plus.f >> -one.e); // p1 = f div 2^-e (Since -e >= 32, p1 fits into a 32-bit int.)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17528 std::uint64_t p2 = M_plus.f & (one.f - 1); // p2 = f mod 2^-e
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17529
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17530 // 1)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17531 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17532 // Generate the digits of the integral part p1 = d[n-1]...d[1]d[0]
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17533
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17534 JSON_ASSERT(p1 > 0);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17535
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17536 std::uint32_t pow10{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17537 const int k = find_largest_pow10(p1, pow10);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17538
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17539 // 10^(k-1) <= p1 < 10^k, pow10 = 10^(k-1)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17540 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17541 // p1 = (p1 div 10^(k-1)) * 10^(k-1) + (p1 mod 10^(k-1))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17542 // = (d[k-1] ) * 10^(k-1) + (p1 mod 10^(k-1))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17543 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17544 // M+ = p1 + p2 * 2^e
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17545 // = d[k-1] * 10^(k-1) + (p1 mod 10^(k-1)) + p2 * 2^e
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17546 // = d[k-1] * 10^(k-1) + ((p1 mod 10^(k-1)) * 2^-e + p2) * 2^e
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17547 // = d[k-1] * 10^(k-1) + ( rest) * 2^e
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17548 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17549 // Now generate the digits d[n] of p1 from left to right (n = k-1,...,0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17550 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17551 // p1 = d[k-1]...d[n] * 10^n + d[n-1]...d[0]
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17552 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17553 // but stop as soon as
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17554 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17555 // rest * 2^e = (d[n-1]...d[0] * 2^-e + p2) * 2^e <= delta * 2^e
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17556
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17557 int n = k;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17558 while (n > 0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17559 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17560 // Invariants:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17561 // M+ = buffer * 10^n + (p1 + p2 * 2^e) (buffer = 0 for n = k)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17562 // pow10 = 10^(n-1) <= p1 < 10^n
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17563 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17564 const std::uint32_t d = p1 / pow10; // d = p1 div 10^(n-1)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17565 const std::uint32_t r = p1 % pow10; // r = p1 mod 10^(n-1)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17566 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17567 // M+ = buffer * 10^n + (d * 10^(n-1) + r) + p2 * 2^e
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17568 // = (buffer * 10 + d) * 10^(n-1) + (r + p2 * 2^e)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17569 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17570 JSON_ASSERT(d <= 9);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17571 buffer[length++] = static_cast<char>('0' + d); // buffer := buffer * 10 + d
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17572 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17573 // M+ = buffer * 10^(n-1) + (r + p2 * 2^e)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17574 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17575 p1 = r;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17576 n--;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17577 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17578 // M+ = buffer * 10^n + (p1 + p2 * 2^e)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17579 // pow10 = 10^n
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17580 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17581
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17582 // Now check if enough digits have been generated.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17583 // Compute
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17584 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17585 // p1 + p2 * 2^e = (p1 * 2^-e + p2) * 2^e = rest * 2^e
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17586 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17587 // Note:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17588 // Since rest and delta share the same exponent e, it suffices to
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17589 // compare the significands.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17590 const std::uint64_t rest = (std::uint64_t{p1} << -one.e) + p2;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17591 if (rest <= delta)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17592 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17593 // V = buffer * 10^n, with M- <= V <= M+.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17594
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17595 decimal_exponent += n;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17596
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17597 // We may now just stop. But instead look if the buffer could be
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17598 // decremented to bring V closer to w.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17599 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17600 // pow10 = 10^n is now 1 ulp in the decimal representation V.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17601 // The rounding procedure works with diyfp's with an implicit
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17602 // exponent of e.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17603 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17604 // 10^n = (10^n * 2^-e) * 2^e = ulp * 2^e
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17605 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17606 const std::uint64_t ten_n = std::uint64_t{pow10} << -one.e;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17607 grisu2_round(buffer, length, dist, delta, rest, ten_n);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17608
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17609 return;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17610 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17611
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17612 pow10 /= 10;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17613 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17614 // pow10 = 10^(n-1) <= p1 < 10^n
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17615 // Invariants restored.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17616 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17617
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17618 // 2)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17619 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17620 // The digits of the integral part have been generated:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17621 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17622 // M+ = d[k-1]...d[1]d[0] + p2 * 2^e
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17623 // = buffer + p2 * 2^e
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17624 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17625 // Now generate the digits of the fractional part p2 * 2^e.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17626 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17627 // Note:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17628 // No decimal point is generated: the exponent is adjusted instead.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17629 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17630 // p2 actually represents the fraction
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17631 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17632 // p2 * 2^e
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17633 // = p2 / 2^-e
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17634 // = d[-1] / 10^1 + d[-2] / 10^2 + ...
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17635 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17636 // Now generate the digits d[-m] of p1 from left to right (m = 1,2,...)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17637 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17638 // p2 * 2^e = d[-1]d[-2]...d[-m] * 10^-m
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17639 // + 10^-m * (d[-m-1] / 10^1 + d[-m-2] / 10^2 + ...)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17640 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17641 // using
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17642 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17643 // 10^m * p2 = ((10^m * p2) div 2^-e) * 2^-e + ((10^m * p2) mod 2^-e)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17644 // = ( d) * 2^-e + ( r)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17645 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17646 // or
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17647 // 10^m * p2 * 2^e = d + r * 2^e
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17648 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17649 // i.e.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17650 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17651 // M+ = buffer + p2 * 2^e
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17652 // = buffer + 10^-m * (d + r * 2^e)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17653 // = (buffer * 10^m + d) * 10^-m + 10^-m * r * 2^e
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17654 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17655 // and stop as soon as 10^-m * r * 2^e <= delta * 2^e
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17656
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17657 JSON_ASSERT(p2 > delta);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17658
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17659 int m = 0;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17660 for (;;)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17661 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17662 // Invariant:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17663 // M+ = buffer * 10^-m + 10^-m * (d[-m-1] / 10 + d[-m-2] / 10^2 + ...) * 2^e
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17664 // = buffer * 10^-m + 10^-m * (p2 ) * 2^e
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17665 // = buffer * 10^-m + 10^-m * (1/10 * (10 * p2) ) * 2^e
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17666 // = buffer * 10^-m + 10^-m * (1/10 * ((10*p2 div 2^-e) * 2^-e + (10*p2 mod 2^-e)) * 2^e
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17667 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17668 JSON_ASSERT(p2 <= (std::numeric_limits<std::uint64_t>::max)() / 10);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17669 p2 *= 10;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17670 const std::uint64_t d = p2 >> -one.e; // d = (10 * p2) div 2^-e
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17671 const std::uint64_t r = p2 & (one.f - 1); // r = (10 * p2) mod 2^-e
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17672 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17673 // M+ = buffer * 10^-m + 10^-m * (1/10 * (d * 2^-e + r) * 2^e
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17674 // = buffer * 10^-m + 10^-m * (1/10 * (d + r * 2^e))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17675 // = (buffer * 10 + d) * 10^(-m-1) + 10^(-m-1) * r * 2^e
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17676 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17677 JSON_ASSERT(d <= 9);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17678 buffer[length++] = static_cast<char>('0' + d); // buffer := buffer * 10 + d
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17679 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17680 // M+ = buffer * 10^(-m-1) + 10^(-m-1) * r * 2^e
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17681 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17682 p2 = r;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17683 m++;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17684 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17685 // M+ = buffer * 10^-m + 10^-m * p2 * 2^e
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17686 // Invariant restored.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17687
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17688 // Check if enough digits have been generated.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17689 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17690 // 10^-m * p2 * 2^e <= delta * 2^e
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17691 // p2 * 2^e <= 10^m * delta * 2^e
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17692 // p2 <= 10^m * delta
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17693 delta *= 10;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17694 dist *= 10;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17695 if (p2 <= delta)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17696 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17697 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17698 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17699 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17700
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17701 // V = buffer * 10^-m, with M- <= V <= M+.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17702
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17703 decimal_exponent -= m;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17704
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17705 // 1 ulp in the decimal representation is now 10^-m.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17706 // Since delta and dist are now scaled by 10^m, we need to do the
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17707 // same with ulp in order to keep the units in sync.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17708 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17709 // 10^m * 10^-m = 1 = 2^-e * 2^e = ten_m * 2^e
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17710 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17711 const std::uint64_t ten_m = one.f;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17712 grisu2_round(buffer, length, dist, delta, p2, ten_m);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17713
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17714 // By construction this algorithm generates the shortest possible decimal
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17715 // number (Loitsch, Theorem 6.2) which rounds back to w.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17716 // For an input number of precision p, at least
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17717 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17718 // N = 1 + ceil(p * log_10(2))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17719 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17720 // decimal digits are sufficient to identify all binary floating-point
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17721 // numbers (Matula, "In-and-Out conversions").
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17722 // This implies that the algorithm does not produce more than N decimal
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17723 // digits.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17724 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17725 // N = 17 for p = 53 (IEEE double precision)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17726 // N = 9 for p = 24 (IEEE single precision)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17727 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17728
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17729 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17730 v = buf * 10^decimal_exponent
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17731 len is the length of the buffer (number of decimal digits)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17732 The buffer must be large enough, i.e. >= max_digits10.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17733 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17734 JSON_HEDLEY_NON_NULL(1)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17735 inline void grisu2(char* buf, int& len, int& decimal_exponent,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17736 diyfp m_minus, diyfp v, diyfp m_plus)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17737 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17738 JSON_ASSERT(m_plus.e == m_minus.e);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17739 JSON_ASSERT(m_plus.e == v.e);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17740
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17741 // --------(-----------------------+-----------------------)-------- (A)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17742 // m- v m+
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17743 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17744 // --------------------(-----------+-----------------------)-------- (B)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17745 // m- v m+
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17746 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17747 // First scale v (and m- and m+) such that the exponent is in the range
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17748 // [alpha, gamma].
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17749
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17750 const cached_power cached = get_cached_power_for_binary_exponent(m_plus.e);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17751
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17752 const diyfp c_minus_k(cached.f, cached.e); // = c ~= 10^-k
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17753
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17754 // The exponent of the products is = v.e + c_minus_k.e + q and is in the range [alpha,gamma]
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17755 const diyfp w = diyfp::mul(v, c_minus_k);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17756 const diyfp w_minus = diyfp::mul(m_minus, c_minus_k);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17757 const diyfp w_plus = diyfp::mul(m_plus, c_minus_k);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17758
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17759 // ----(---+---)---------------(---+---)---------------(---+---)----
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17760 // w- w w+
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17761 // = c*m- = c*v = c*m+
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17762 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17763 // diyfp::mul rounds its result and c_minus_k is approximated too. w, w- and
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17764 // w+ are now off by a small amount.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17765 // In fact:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17766 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17767 // w - v * 10^k < 1 ulp
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17768 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17769 // To account for this inaccuracy, add resp. subtract 1 ulp.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17770 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17771 // --------+---[---------------(---+---)---------------]---+--------
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17772 // w- M- w M+ w+
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17773 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17774 // Now any number in [M-, M+] (bounds included) will round to w when input,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17775 // regardless of how the input rounding algorithm breaks ties.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17776 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17777 // And digit_gen generates the shortest possible such number in [M-, M+].
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17778 // Note that this does not mean that Grisu2 always generates the shortest
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17779 // possible number in the interval (m-, m+).
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17780 const diyfp M_minus(w_minus.f + 1, w_minus.e);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17781 const diyfp M_plus (w_plus.f - 1, w_plus.e );
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17782
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17783 decimal_exponent = -cached.k; // = -(-k) = k
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17784
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17785 grisu2_digit_gen(buf, len, decimal_exponent, M_minus, w, M_plus);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17786 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17787
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17788 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17789 v = buf * 10^decimal_exponent
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17790 len is the length of the buffer (number of decimal digits)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17791 The buffer must be large enough, i.e. >= max_digits10.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17792 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17793 template<typename FloatType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17794 JSON_HEDLEY_NON_NULL(1)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17795 void grisu2(char* buf, int& len, int& decimal_exponent, FloatType value)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17796 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17797 static_assert(diyfp::kPrecision >= std::numeric_limits<FloatType>::digits + 3,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17798 "internal error: not enough precision");
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17799
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17800 JSON_ASSERT(std::isfinite(value));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17801 JSON_ASSERT(value > 0);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17802
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17803 // If the neighbors (and boundaries) of 'value' are always computed for double-precision
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17804 // numbers, all float's can be recovered using strtod (and strtof). However, the resulting
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17805 // decimal representations are not exactly "short".
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17806 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17807 // The documentation for 'std::to_chars' (https://en.cppreference.com/w/cpp/utility/to_chars)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17808 // says "value is converted to a string as if by std::sprintf in the default ("C") locale"
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17809 // and since sprintf promotes floats to doubles, I think this is exactly what 'std::to_chars'
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17810 // does.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17811 // On the other hand, the documentation for 'std::to_chars' requires that "parsing the
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17812 // representation using the corresponding std::from_chars function recovers value exactly". That
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17813 // indicates that single precision floating-point numbers should be recovered using
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17814 // 'std::strtof'.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17815 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17816 // NB: If the neighbors are computed for single-precision numbers, there is a single float
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17817 // (7.0385307e-26f) which can't be recovered using strtod. The resulting double precision
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17818 // value is off by 1 ulp.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17819 #if 0 // NOLINT(readability-avoid-unconditional-preprocessor-if)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17820 const boundaries w = compute_boundaries(static_cast<double>(value));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17821 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17822 const boundaries w = compute_boundaries(value);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17823 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17824
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17825 grisu2(buf, len, decimal_exponent, w.minus, w.w, w.plus);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17826 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17827
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17828 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17829 @brief appends a decimal representation of e to buf
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17830 @return a pointer to the element following the exponent.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17831 @pre -1000 < e < 1000
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17832 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17833 JSON_HEDLEY_NON_NULL(1)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17834 JSON_HEDLEY_RETURNS_NON_NULL
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17835 inline char* append_exponent(char* buf, int e)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17836 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17837 JSON_ASSERT(e > -1000);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17838 JSON_ASSERT(e < 1000);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17839
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17840 if (e < 0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17841 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17842 e = -e;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17843 *buf++ = '-';
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17844 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17845 else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17846 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17847 *buf++ = '+';
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17848 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17849
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17850 auto k = static_cast<std::uint32_t>(e);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17851 if (k < 10)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17852 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17853 // Always print at least two digits in the exponent.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17854 // This is for compatibility with printf("%g").
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17855 *buf++ = '0';
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17856 *buf++ = static_cast<char>('0' + k);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17857 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17858 else if (k < 100)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17859 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17860 *buf++ = static_cast<char>('0' + k / 10);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17861 k %= 10;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17862 *buf++ = static_cast<char>('0' + k);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17863 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17864 else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17865 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17866 *buf++ = static_cast<char>('0' + k / 100);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17867 k %= 100;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17868 *buf++ = static_cast<char>('0' + k / 10);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17869 k %= 10;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17870 *buf++ = static_cast<char>('0' + k);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17871 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17872
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17873 return buf;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17874 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17875
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17876 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17877 @brief prettify v = buf * 10^decimal_exponent
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17878
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17879 If v is in the range [10^min_exp, 10^max_exp) it will be printed in fixed-point
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17880 notation. Otherwise it will be printed in exponential notation.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17881
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17882 @pre min_exp < 0
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17883 @pre max_exp > 0
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17884 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17885 JSON_HEDLEY_NON_NULL(1)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17886 JSON_HEDLEY_RETURNS_NON_NULL
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17887 inline char* format_buffer(char* buf, int len, int decimal_exponent,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17888 int min_exp, int max_exp)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17889 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17890 JSON_ASSERT(min_exp < 0);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17891 JSON_ASSERT(max_exp > 0);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17892
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17893 const int k = len;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17894 const int n = len + decimal_exponent;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17895
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17896 // v = buf * 10^(n-k)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17897 // k is the length of the buffer (number of decimal digits)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17898 // n is the position of the decimal point relative to the start of the buffer.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17899
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17900 if (k <= n && n <= max_exp)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17901 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17902 // digits[000]
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17903 // len <= max_exp + 2
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17904
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17905 std::memset(buf + k, '0', static_cast<size_t>(n) - static_cast<size_t>(k));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17906 // Make it look like a floating-point number (#362, #378)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17907 buf[n + 0] = '.';
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17908 buf[n + 1] = '0';
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17909 return buf + (static_cast<size_t>(n) + 2);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17910 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17911
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17912 if (0 < n && n <= max_exp)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17913 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17914 // dig.its
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17915 // len <= max_digits10 + 1
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17916
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17917 JSON_ASSERT(k > n);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17918
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17919 std::memmove(buf + (static_cast<size_t>(n) + 1), buf + n, static_cast<size_t>(k) - static_cast<size_t>(n));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17920 buf[n] = '.';
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17921 return buf + (static_cast<size_t>(k) + 1U);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17922 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17923
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17924 if (min_exp < n && n <= 0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17925 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17926 // 0.[000]digits
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17927 // len <= 2 + (-min_exp - 1) + max_digits10
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17928
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17929 std::memmove(buf + (2 + static_cast<size_t>(-n)), buf, static_cast<size_t>(k));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17930 buf[0] = '0';
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17931 buf[1] = '.';
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17932 std::memset(buf + 2, '0', static_cast<size_t>(-n));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17933 return buf + (2U + static_cast<size_t>(-n) + static_cast<size_t>(k));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17934 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17935
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17936 if (k == 1)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17937 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17938 // dE+123
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17939 // len <= 1 + 5
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17940
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17941 buf += 1;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17942 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17943 else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17944 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17945 // d.igitsE+123
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17946 // len <= max_digits10 + 1 + 5
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17947
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17948 std::memmove(buf + 2, buf + 1, static_cast<size_t>(k) - 1);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17949 buf[1] = '.';
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17950 buf += 1 + static_cast<size_t>(k);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17951 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17952
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17953 *buf++ = 'e';
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17954 return append_exponent(buf, n - 1);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17955 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17956
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17957 } // namespace dtoa_impl
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17958
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17959 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17960 @brief generates a decimal representation of the floating-point number value in [first, last).
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17961
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17962 The format of the resulting decimal representation is similar to printf's %g
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17963 format. Returns an iterator pointing past-the-end of the decimal representation.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17964
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17965 @note The input number must be finite, i.e. NaN's and Inf's are not supported.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17966 @note The buffer must be large enough.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17967 @note The result is NOT null-terminated.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17968 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17969 template<typename FloatType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17970 JSON_HEDLEY_NON_NULL(1, 2)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17971 JSON_HEDLEY_RETURNS_NON_NULL
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17972 char* to_chars(char* first, const char* last, FloatType value)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17973 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17974 static_cast<void>(last); // maybe unused - fix warning
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17975 JSON_ASSERT(std::isfinite(value));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17976
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17977 // Use signbit(value) instead of (value < 0) since signbit works for -0.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17978 if (std::signbit(value))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17979 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17980 value = -value;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17981 *first++ = '-';
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17982 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17983
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17984 #ifdef __GNUC__
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17985 #pragma GCC diagnostic push
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17986 #pragma GCC diagnostic ignored "-Wfloat-equal"
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17987 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17988 if (value == 0) // +-0
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17989 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17990 *first++ = '0';
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17991 // Make it look like a floating-point number (#362, #378)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17992 *first++ = '.';
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17993 *first++ = '0';
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17994 return first;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17995 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17996 #ifdef __GNUC__
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17997 #pragma GCC diagnostic pop
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17998 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17999
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18000 JSON_ASSERT(last - first >= std::numeric_limits<FloatType>::max_digits10);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18001
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18002 // Compute v = buffer * 10^decimal_exponent.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18003 // The decimal digits are stored in the buffer, which needs to be interpreted
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18004 // as an unsigned decimal integer.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18005 // len is the length of the buffer, i.e. the number of decimal digits.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18006 int len = 0;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18007 int decimal_exponent = 0;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18008 dtoa_impl::grisu2(first, len, decimal_exponent, value);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18009
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18010 JSON_ASSERT(len <= std::numeric_limits<FloatType>::max_digits10);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18011
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18012 // Format the buffer like printf("%.*g", prec, value)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18013 constexpr int kMinExp = -4;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18014 // Use digits10 here to increase compatibility with version 2.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18015 constexpr int kMaxExp = std::numeric_limits<FloatType>::digits10;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18016
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18017 JSON_ASSERT(last - first >= kMaxExp + 2);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18018 JSON_ASSERT(last - first >= 2 + (-kMinExp - 1) + std::numeric_limits<FloatType>::max_digits10);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18019 JSON_ASSERT(last - first >= std::numeric_limits<FloatType>::max_digits10 + 6);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18020
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18021 return dtoa_impl::format_buffer(first, len, decimal_exponent, kMinExp, kMaxExp);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18022 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18023
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18024 } // namespace detail
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18025 NLOHMANN_JSON_NAMESPACE_END
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18026
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18027 // #include <nlohmann/detail/exceptions.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18028
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18029 // #include <nlohmann/detail/macro_scope.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18030
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18031 // #include <nlohmann/detail/meta/cpp_future.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18032
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18033 // #include <nlohmann/detail/output/binary_writer.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18034
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18035 // #include <nlohmann/detail/output/output_adapters.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18036
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18037 // #include <nlohmann/detail/string_concat.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18038
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18039 // #include <nlohmann/detail/value_t.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18040
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18041
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18042 NLOHMANN_JSON_NAMESPACE_BEGIN
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18043 namespace detail
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18044 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18045
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18046 ///////////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18047 // serialization //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18048 ///////////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18049
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18050 /// how to treat decoding errors
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18051 enum class error_handler_t
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18052 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18053 strict, ///< throw a type_error exception in case of invalid UTF-8
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18054 replace, ///< replace invalid UTF-8 sequences with U+FFFD
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18055 ignore ///< ignore invalid UTF-8 sequences
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18056 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18057
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18058 template<typename BasicJsonType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18059 class serializer
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18060 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18061 using string_t = typename BasicJsonType::string_t;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18062 using number_float_t = typename BasicJsonType::number_float_t;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18063 using number_integer_t = typename BasicJsonType::number_integer_t;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18064 using number_unsigned_t = typename BasicJsonType::number_unsigned_t;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18065 using binary_char_t = typename BasicJsonType::binary_t::value_type;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18066 static constexpr std::uint8_t UTF8_ACCEPT = 0;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18067 static constexpr std::uint8_t UTF8_REJECT = 1;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18068
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18069 public:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18070 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18071 @param[in] s output stream to serialize to
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18072 @param[in] ichar indentation character to use
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18073 @param[in] error_handler_ how to react on decoding errors
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18074 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18075 serializer(output_adapter_t<char> s, const char ichar,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18076 error_handler_t error_handler_ = error_handler_t::strict)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18077 : o(std::move(s))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18078 , loc(std::localeconv())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18079 , thousands_sep(loc->thousands_sep == nullptr ? '\0' : std::char_traits<char>::to_char_type(* (loc->thousands_sep)))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18080 , decimal_point(loc->decimal_point == nullptr ? '\0' : std::char_traits<char>::to_char_type(* (loc->decimal_point)))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18081 , indent_char(ichar)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18082 , indent_string(512, indent_char)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18083 , error_handler(error_handler_)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18084 {}
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18085
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18086 // delete because of pointer members
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18087 serializer(const serializer&) = delete;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18088 serializer& operator=(const serializer&) = delete;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18089 serializer(serializer&&) = delete;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18090 serializer& operator=(serializer&&) = delete;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18091 ~serializer() = default;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18092
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18093 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18094 @brief internal implementation of the serialization function
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18095
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18096 This function is called by the public member function dump and organizes
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18097 the serialization internally. The indentation level is propagated as
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18098 additional parameter. In case of arrays and objects, the function is
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18099 called recursively.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18100
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18101 - strings and object keys are escaped using `escape_string()`
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18102 - integer numbers are converted implicitly via `operator<<`
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18103 - floating-point numbers are converted to a string using `"%g"` format
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18104 - binary values are serialized as objects containing the subtype and the
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18105 byte array
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18106
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18107 @param[in] val value to serialize
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18108 @param[in] pretty_print whether the output shall be pretty-printed
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18109 @param[in] ensure_ascii If @a ensure_ascii is true, all non-ASCII characters
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18110 in the output are escaped with `\uXXXX` sequences, and the result consists
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18111 of ASCII characters only.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18112 @param[in] indent_step the indent level
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18113 @param[in] current_indent the current indent level (only used internally)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18114 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18115 void dump(const BasicJsonType& val,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18116 const bool pretty_print,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18117 const bool ensure_ascii,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18118 const unsigned int indent_step,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18119 const unsigned int current_indent = 0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18120 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18121 switch (val.m_data.m_type)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18122 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18123 case value_t::object:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18124 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18125 if (val.m_data.m_value.object->empty())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18126 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18127 o->write_characters("{}", 2);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18128 return;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18129 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18130
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18131 if (pretty_print)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18132 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18133 o->write_characters("{\n", 2);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18134
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18135 // variable to hold indentation for recursive calls
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18136 const auto new_indent = current_indent + indent_step;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18137 if (JSON_HEDLEY_UNLIKELY(indent_string.size() < new_indent))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18138 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18139 indent_string.resize(indent_string.size() * 2, ' ');
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18140 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18141
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18142 // first n-1 elements
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18143 auto i = val.m_data.m_value.object->cbegin();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18144 for (std::size_t cnt = 0; cnt < val.m_data.m_value.object->size() - 1; ++cnt, ++i)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18145 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18146 o->write_characters(indent_string.c_str(), new_indent);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18147 o->write_character('\"');
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18148 dump_escaped(i->first, ensure_ascii);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18149 o->write_characters("\": ", 3);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18150 dump(i->second, true, ensure_ascii, indent_step, new_indent);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18151 o->write_characters(",\n", 2);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18152 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18153
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18154 // last element
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18155 JSON_ASSERT(i != val.m_data.m_value.object->cend());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18156 JSON_ASSERT(std::next(i) == val.m_data.m_value.object->cend());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18157 o->write_characters(indent_string.c_str(), new_indent);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18158 o->write_character('\"');
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18159 dump_escaped(i->first, ensure_ascii);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18160 o->write_characters("\": ", 3);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18161 dump(i->second, true, ensure_ascii, indent_step, new_indent);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18162
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18163 o->write_character('\n');
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18164 o->write_characters(indent_string.c_str(), current_indent);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18165 o->write_character('}');
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18166 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18167 else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18168 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18169 o->write_character('{');
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18170
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18171 // first n-1 elements
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18172 auto i = val.m_data.m_value.object->cbegin();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18173 for (std::size_t cnt = 0; cnt < val.m_data.m_value.object->size() - 1; ++cnt, ++i)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18174 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18175 o->write_character('\"');
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18176 dump_escaped(i->first, ensure_ascii);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18177 o->write_characters("\":", 2);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18178 dump(i->second, false, ensure_ascii, indent_step, current_indent);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18179 o->write_character(',');
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18180 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18181
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18182 // last element
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18183 JSON_ASSERT(i != val.m_data.m_value.object->cend());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18184 JSON_ASSERT(std::next(i) == val.m_data.m_value.object->cend());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18185 o->write_character('\"');
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18186 dump_escaped(i->first, ensure_ascii);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18187 o->write_characters("\":", 2);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18188 dump(i->second, false, ensure_ascii, indent_step, current_indent);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18189
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18190 o->write_character('}');
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18191 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18192
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18193 return;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18194 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18195
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18196 case value_t::array:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18197 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18198 if (val.m_data.m_value.array->empty())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18199 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18200 o->write_characters("[]", 2);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18201 return;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18202 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18203
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18204 if (pretty_print)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18205 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18206 o->write_characters("[\n", 2);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18207
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18208 // variable to hold indentation for recursive calls
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18209 const auto new_indent = current_indent + indent_step;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18210 if (JSON_HEDLEY_UNLIKELY(indent_string.size() < new_indent))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18211 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18212 indent_string.resize(indent_string.size() * 2, ' ');
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18213 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18214
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18215 // first n-1 elements
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18216 for (auto i = val.m_data.m_value.array->cbegin();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18217 i != val.m_data.m_value.array->cend() - 1; ++i)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18218 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18219 o->write_characters(indent_string.c_str(), new_indent);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18220 dump(*i, true, ensure_ascii, indent_step, new_indent);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18221 o->write_characters(",\n", 2);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18222 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18223
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18224 // last element
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18225 JSON_ASSERT(!val.m_data.m_value.array->empty());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18226 o->write_characters(indent_string.c_str(), new_indent);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18227 dump(val.m_data.m_value.array->back(), true, ensure_ascii, indent_step, new_indent);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18228
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18229 o->write_character('\n');
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18230 o->write_characters(indent_string.c_str(), current_indent);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18231 o->write_character(']');
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18232 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18233 else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18234 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18235 o->write_character('[');
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18236
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18237 // first n-1 elements
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18238 for (auto i = val.m_data.m_value.array->cbegin();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18239 i != val.m_data.m_value.array->cend() - 1; ++i)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18240 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18241 dump(*i, false, ensure_ascii, indent_step, current_indent);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18242 o->write_character(',');
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18243 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18244
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18245 // last element
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18246 JSON_ASSERT(!val.m_data.m_value.array->empty());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18247 dump(val.m_data.m_value.array->back(), false, ensure_ascii, indent_step, current_indent);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18248
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18249 o->write_character(']');
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18250 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18251
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18252 return;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18253 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18254
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18255 case value_t::string:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18256 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18257 o->write_character('\"');
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18258 dump_escaped(*val.m_data.m_value.string, ensure_ascii);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18259 o->write_character('\"');
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18260 return;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18261 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18262
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18263 case value_t::binary:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18264 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18265 if (pretty_print)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18266 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18267 o->write_characters("{\n", 2);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18268
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18269 // variable to hold indentation for recursive calls
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18270 const auto new_indent = current_indent + indent_step;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18271 if (JSON_HEDLEY_UNLIKELY(indent_string.size() < new_indent))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18272 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18273 indent_string.resize(indent_string.size() * 2, ' ');
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18274 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18275
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18276 o->write_characters(indent_string.c_str(), new_indent);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18277
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18278 o->write_characters("\"bytes\": [", 10);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18279
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18280 if (!val.m_data.m_value.binary->empty())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18281 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18282 for (auto i = val.m_data.m_value.binary->cbegin();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18283 i != val.m_data.m_value.binary->cend() - 1; ++i)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18284 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18285 dump_integer(*i);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18286 o->write_characters(", ", 2);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18287 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18288 dump_integer(val.m_data.m_value.binary->back());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18289 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18290
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18291 o->write_characters("],\n", 3);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18292 o->write_characters(indent_string.c_str(), new_indent);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18293
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18294 o->write_characters("\"subtype\": ", 11);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18295 if (val.m_data.m_value.binary->has_subtype())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18296 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18297 dump_integer(val.m_data.m_value.binary->subtype());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18298 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18299 else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18300 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18301 o->write_characters("null", 4);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18302 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18303 o->write_character('\n');
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18304 o->write_characters(indent_string.c_str(), current_indent);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18305 o->write_character('}');
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18306 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18307 else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18308 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18309 o->write_characters("{\"bytes\":[", 10);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18310
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18311 if (!val.m_data.m_value.binary->empty())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18312 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18313 for (auto i = val.m_data.m_value.binary->cbegin();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18314 i != val.m_data.m_value.binary->cend() - 1; ++i)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18315 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18316 dump_integer(*i);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18317 o->write_character(',');
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18318 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18319 dump_integer(val.m_data.m_value.binary->back());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18320 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18321
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18322 o->write_characters("],\"subtype\":", 12);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18323 if (val.m_data.m_value.binary->has_subtype())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18324 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18325 dump_integer(val.m_data.m_value.binary->subtype());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18326 o->write_character('}');
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18327 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18328 else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18329 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18330 o->write_characters("null}", 5);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18331 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18332 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18333 return;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18334 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18335
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18336 case value_t::boolean:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18337 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18338 if (val.m_data.m_value.boolean)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18339 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18340 o->write_characters("true", 4);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18341 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18342 else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18343 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18344 o->write_characters("false", 5);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18345 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18346 return;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18347 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18348
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18349 case value_t::number_integer:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18350 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18351 dump_integer(val.m_data.m_value.number_integer);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18352 return;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18353 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18354
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18355 case value_t::number_unsigned:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18356 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18357 dump_integer(val.m_data.m_value.number_unsigned);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18358 return;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18359 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18360
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18361 case value_t::number_float:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18362 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18363 dump_float(val.m_data.m_value.number_float);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18364 return;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18365 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18366
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18367 case value_t::discarded:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18368 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18369 o->write_characters("<discarded>", 11);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18370 return;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18371 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18372
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18373 case value_t::null:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18374 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18375 o->write_characters("null", 4);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18376 return;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18377 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18378
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18379 default: // LCOV_EXCL_LINE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18380 JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18381 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18382 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18383
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18384 JSON_PRIVATE_UNLESS_TESTED:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18385 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18386 @brief dump escaped string
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18387
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18388 Escape a string by replacing certain special characters by a sequence of an
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18389 escape character (backslash) and another character and other control
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18390 characters by a sequence of "\u" followed by a four-digit hex
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18391 representation. The escaped string is written to output stream @a o.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18392
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18393 @param[in] s the string to escape
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18394 @param[in] ensure_ascii whether to escape non-ASCII characters with
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18395 \uXXXX sequences
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18396
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18397 @complexity Linear in the length of string @a s.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18398 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18399 void dump_escaped(const string_t& s, const bool ensure_ascii)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18400 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18401 std::uint32_t codepoint{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18402 std::uint8_t state = UTF8_ACCEPT;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18403 std::size_t bytes = 0; // number of bytes written to string_buffer
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18404
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18405 // number of bytes written at the point of the last valid byte
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18406 std::size_t bytes_after_last_accept = 0;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18407 std::size_t undumped_chars = 0;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18408
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18409 for (std::size_t i = 0; i < s.size(); ++i)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18410 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18411 const auto byte = static_cast<std::uint8_t>(s[i]);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18412
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18413 switch (decode(state, codepoint, byte))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18414 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18415 case UTF8_ACCEPT: // decode found a new code point
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18416 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18417 switch (codepoint)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18418 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18419 case 0x08: // backspace
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18420 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18421 string_buffer[bytes++] = '\\';
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18422 string_buffer[bytes++] = 'b';
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18423 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18424 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18425
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18426 case 0x09: // horizontal tab
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18427 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18428 string_buffer[bytes++] = '\\';
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18429 string_buffer[bytes++] = 't';
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18430 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18431 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18432
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18433 case 0x0A: // newline
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18434 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18435 string_buffer[bytes++] = '\\';
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18436 string_buffer[bytes++] = 'n';
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18437 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18438 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18439
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18440 case 0x0C: // formfeed
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18441 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18442 string_buffer[bytes++] = '\\';
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18443 string_buffer[bytes++] = 'f';
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18444 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18445 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18446
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18447 case 0x0D: // carriage return
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18448 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18449 string_buffer[bytes++] = '\\';
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18450 string_buffer[bytes++] = 'r';
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18451 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18452 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18453
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18454 case 0x22: // quotation mark
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18455 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18456 string_buffer[bytes++] = '\\';
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18457 string_buffer[bytes++] = '\"';
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18458 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18459 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18460
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18461 case 0x5C: // reverse solidus
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18462 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18463 string_buffer[bytes++] = '\\';
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18464 string_buffer[bytes++] = '\\';
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18465 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18466 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18467
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18468 default:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18469 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18470 // escape control characters (0x00..0x1F) or, if
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18471 // ensure_ascii parameter is used, non-ASCII characters
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18472 if ((codepoint <= 0x1F) || (ensure_ascii && (codepoint >= 0x7F)))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18473 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18474 if (codepoint <= 0xFFFF)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18475 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18476 // NOLINTNEXTLINE(cppcoreguidelines-pro-type-vararg,hicpp-vararg)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18477 static_cast<void>((std::snprintf)(string_buffer.data() + bytes, 7, "\\u%04x",
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18478 static_cast<std::uint16_t>(codepoint)));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18479 bytes += 6;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18480 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18481 else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18482 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18483 // NOLINTNEXTLINE(cppcoreguidelines-pro-type-vararg,hicpp-vararg)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18484 static_cast<void>((std::snprintf)(string_buffer.data() + bytes, 13, "\\u%04x\\u%04x",
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18485 static_cast<std::uint16_t>(0xD7C0u + (codepoint >> 10u)),
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18486 static_cast<std::uint16_t>(0xDC00u + (codepoint & 0x3FFu))));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18487 bytes += 12;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18488 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18489 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18490 else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18491 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18492 // copy byte to buffer (all previous bytes
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18493 // been copied have in default case above)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18494 string_buffer[bytes++] = s[i];
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18495 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18496 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18497 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18498 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18499
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18500 // write buffer and reset index; there must be 13 bytes
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18501 // left, as this is the maximal number of bytes to be
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18502 // written ("\uxxxx\uxxxx\0") for one code point
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18503 if (string_buffer.size() - bytes < 13)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18504 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18505 o->write_characters(string_buffer.data(), bytes);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18506 bytes = 0;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18507 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18508
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18509 // remember the byte position of this accept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18510 bytes_after_last_accept = bytes;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18511 undumped_chars = 0;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18512 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18513 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18514
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18515 case UTF8_REJECT: // decode found invalid UTF-8 byte
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18516 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18517 switch (error_handler)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18518 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18519 case error_handler_t::strict:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18520 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18521 JSON_THROW(type_error::create(316, concat("invalid UTF-8 byte at index ", std::to_string(i), ": 0x", hex_bytes(byte | 0)), nullptr));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18522 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18523
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18524 case error_handler_t::ignore:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18525 case error_handler_t::replace:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18526 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18527 // in case we saw this character the first time, we
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18528 // would like to read it again, because the byte
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18529 // may be OK for itself, but just not OK for the
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18530 // previous sequence
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18531 if (undumped_chars > 0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18532 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18533 --i;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18534 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18535
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18536 // reset length buffer to the last accepted index;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18537 // thus removing/ignoring the invalid characters
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18538 bytes = bytes_after_last_accept;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18539
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18540 if (error_handler == error_handler_t::replace)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18541 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18542 // add a replacement character
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18543 if (ensure_ascii)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18544 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18545 string_buffer[bytes++] = '\\';
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18546 string_buffer[bytes++] = 'u';
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18547 string_buffer[bytes++] = 'f';
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18548 string_buffer[bytes++] = 'f';
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18549 string_buffer[bytes++] = 'f';
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18550 string_buffer[bytes++] = 'd';
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18551 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18552 else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18553 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18554 string_buffer[bytes++] = detail::binary_writer<BasicJsonType, char>::to_char_type('\xEF');
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18555 string_buffer[bytes++] = detail::binary_writer<BasicJsonType, char>::to_char_type('\xBF');
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18556 string_buffer[bytes++] = detail::binary_writer<BasicJsonType, char>::to_char_type('\xBD');
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18557 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18558
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18559 // write buffer and reset index; there must be 13 bytes
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18560 // left, as this is the maximal number of bytes to be
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18561 // written ("\uxxxx\uxxxx\0") for one code point
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18562 if (string_buffer.size() - bytes < 13)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18563 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18564 o->write_characters(string_buffer.data(), bytes);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18565 bytes = 0;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18566 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18567
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18568 bytes_after_last_accept = bytes;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18569 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18570
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18571 undumped_chars = 0;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18572
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18573 // continue processing the string
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18574 state = UTF8_ACCEPT;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18575 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18576 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18577
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18578 default: // LCOV_EXCL_LINE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18579 JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18580 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18581 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18582 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18583
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18584 default: // decode found yet incomplete multi-byte code point
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18585 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18586 if (!ensure_ascii)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18587 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18588 // code point will not be escaped - copy byte to buffer
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18589 string_buffer[bytes++] = s[i];
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18590 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18591 ++undumped_chars;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18592 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18593 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18594 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18595 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18596
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18597 // we finished processing the string
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18598 if (JSON_HEDLEY_LIKELY(state == UTF8_ACCEPT))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18599 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18600 // write buffer
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18601 if (bytes > 0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18602 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18603 o->write_characters(string_buffer.data(), bytes);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18604 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18605 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18606 else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18607 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18608 // we finish reading, but do not accept: string was incomplete
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18609 switch (error_handler)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18610 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18611 case error_handler_t::strict:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18612 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18613 JSON_THROW(type_error::create(316, concat("incomplete UTF-8 string; last byte: 0x", hex_bytes(static_cast<std::uint8_t>(s.back() | 0))), nullptr));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18614 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18615
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18616 case error_handler_t::ignore:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18617 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18618 // write all accepted bytes
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18619 o->write_characters(string_buffer.data(), bytes_after_last_accept);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18620 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18621 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18622
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18623 case error_handler_t::replace:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18624 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18625 // write all accepted bytes
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18626 o->write_characters(string_buffer.data(), bytes_after_last_accept);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18627 // add a replacement character
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18628 if (ensure_ascii)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18629 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18630 o->write_characters("\\ufffd", 6);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18631 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18632 else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18633 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18634 o->write_characters("\xEF\xBF\xBD", 3);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18635 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18636 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18637 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18638
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18639 default: // LCOV_EXCL_LINE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18640 JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18641 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18642 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18643 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18644
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18645 private:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18646 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18647 @brief count digits
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18648
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18649 Count the number of decimal (base 10) digits for an input unsigned integer.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18650
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18651 @param[in] x unsigned integer number to count its digits
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18652 @return number of decimal digits
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18653 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18654 inline unsigned int count_digits(number_unsigned_t x) noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18655 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18656 unsigned int n_digits = 1;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18657 for (;;)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18658 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18659 if (x < 10)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18660 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18661 return n_digits;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18662 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18663 if (x < 100)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18664 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18665 return n_digits + 1;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18666 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18667 if (x < 1000)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18668 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18669 return n_digits + 2;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18670 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18671 if (x < 10000)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18672 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18673 return n_digits + 3;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18674 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18675 x = x / 10000u;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18676 n_digits += 4;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18677 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18678 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18679
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18680 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18681 * @brief convert a byte to a uppercase hex representation
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18682 * @param[in] byte byte to represent
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18683 * @return representation ("00".."FF")
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18684 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18685 static std::string hex_bytes(std::uint8_t byte)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18686 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18687 std::string result = "FF";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18688 constexpr const char* nibble_to_hex = "0123456789ABCDEF";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18689 result[0] = nibble_to_hex[byte / 16];
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18690 result[1] = nibble_to_hex[byte % 16];
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18691 return result;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18692 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18693
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18694 // templates to avoid warnings about useless casts
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18695 template <typename NumberType, enable_if_t<std::is_signed<NumberType>::value, int> = 0>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18696 bool is_negative_number(NumberType x)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18697 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18698 return x < 0;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18699 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18700
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18701 template < typename NumberType, enable_if_t <std::is_unsigned<NumberType>::value, int > = 0 >
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18702 bool is_negative_number(NumberType /*unused*/)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18703 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18704 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18705 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18706
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18707 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18708 @brief dump an integer
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18709
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18710 Dump a given integer to output stream @a o. Works internally with
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18711 @a number_buffer.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18712
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18713 @param[in] x integer number (signed or unsigned) to dump
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18714 @tparam NumberType either @a number_integer_t or @a number_unsigned_t
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18715 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18716 template < typename NumberType, detail::enable_if_t <
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18717 std::is_integral<NumberType>::value ||
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18718 std::is_same<NumberType, number_unsigned_t>::value ||
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18719 std::is_same<NumberType, number_integer_t>::value ||
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18720 std::is_same<NumberType, binary_char_t>::value,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18721 int > = 0 >
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18722 void dump_integer(NumberType x)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18723 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18724 static constexpr std::array<std::array<char, 2>, 100> digits_to_99
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18725 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18726 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18727 {{'0', '0'}}, {{'0', '1'}}, {{'0', '2'}}, {{'0', '3'}}, {{'0', '4'}}, {{'0', '5'}}, {{'0', '6'}}, {{'0', '7'}}, {{'0', '8'}}, {{'0', '9'}},
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18728 {{'1', '0'}}, {{'1', '1'}}, {{'1', '2'}}, {{'1', '3'}}, {{'1', '4'}}, {{'1', '5'}}, {{'1', '6'}}, {{'1', '7'}}, {{'1', '8'}}, {{'1', '9'}},
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18729 {{'2', '0'}}, {{'2', '1'}}, {{'2', '2'}}, {{'2', '3'}}, {{'2', '4'}}, {{'2', '5'}}, {{'2', '6'}}, {{'2', '7'}}, {{'2', '8'}}, {{'2', '9'}},
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18730 {{'3', '0'}}, {{'3', '1'}}, {{'3', '2'}}, {{'3', '3'}}, {{'3', '4'}}, {{'3', '5'}}, {{'3', '6'}}, {{'3', '7'}}, {{'3', '8'}}, {{'3', '9'}},
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18731 {{'4', '0'}}, {{'4', '1'}}, {{'4', '2'}}, {{'4', '3'}}, {{'4', '4'}}, {{'4', '5'}}, {{'4', '6'}}, {{'4', '7'}}, {{'4', '8'}}, {{'4', '9'}},
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18732 {{'5', '0'}}, {{'5', '1'}}, {{'5', '2'}}, {{'5', '3'}}, {{'5', '4'}}, {{'5', '5'}}, {{'5', '6'}}, {{'5', '7'}}, {{'5', '8'}}, {{'5', '9'}},
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18733 {{'6', '0'}}, {{'6', '1'}}, {{'6', '2'}}, {{'6', '3'}}, {{'6', '4'}}, {{'6', '5'}}, {{'6', '6'}}, {{'6', '7'}}, {{'6', '8'}}, {{'6', '9'}},
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18734 {{'7', '0'}}, {{'7', '1'}}, {{'7', '2'}}, {{'7', '3'}}, {{'7', '4'}}, {{'7', '5'}}, {{'7', '6'}}, {{'7', '7'}}, {{'7', '8'}}, {{'7', '9'}},
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18735 {{'8', '0'}}, {{'8', '1'}}, {{'8', '2'}}, {{'8', '3'}}, {{'8', '4'}}, {{'8', '5'}}, {{'8', '6'}}, {{'8', '7'}}, {{'8', '8'}}, {{'8', '9'}},
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18736 {{'9', '0'}}, {{'9', '1'}}, {{'9', '2'}}, {{'9', '3'}}, {{'9', '4'}}, {{'9', '5'}}, {{'9', '6'}}, {{'9', '7'}}, {{'9', '8'}}, {{'9', '9'}},
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18737 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18738 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18739
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18740 // special case for "0"
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18741 if (x == 0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18742 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18743 o->write_character('0');
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18744 return;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18745 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18746
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18747 // use a pointer to fill the buffer
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18748 auto buffer_ptr = number_buffer.begin(); // NOLINT(llvm-qualified-auto,readability-qualified-auto,cppcoreguidelines-pro-type-vararg,hicpp-vararg)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18749
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18750 number_unsigned_t abs_value;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18751
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18752 unsigned int n_chars{};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18753
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18754 if (is_negative_number(x))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18755 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18756 *buffer_ptr = '-';
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18757 abs_value = remove_sign(static_cast<number_integer_t>(x));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18758
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18759 // account one more byte for the minus sign
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18760 n_chars = 1 + count_digits(abs_value);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18761 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18762 else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18763 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18764 abs_value = static_cast<number_unsigned_t>(x);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18765 n_chars = count_digits(abs_value);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18766 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18767
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18768 // spare 1 byte for '\0'
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18769 JSON_ASSERT(n_chars < number_buffer.size() - 1);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18770
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18771 // jump to the end to generate the string from backward,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18772 // so we later avoid reversing the result
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18773 buffer_ptr += n_chars;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18774
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18775 // Fast int2ascii implementation inspired by "Fastware" talk by Andrei Alexandrescu
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18776 // See: https://www.youtube.com/watch?v=o4-CwDo2zpg
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18777 while (abs_value >= 100)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18778 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18779 const auto digits_index = static_cast<unsigned>((abs_value % 100));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18780 abs_value /= 100;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18781 *(--buffer_ptr) = digits_to_99[digits_index][1];
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18782 *(--buffer_ptr) = digits_to_99[digits_index][0];
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18783 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18784
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18785 if (abs_value >= 10)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18786 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18787 const auto digits_index = static_cast<unsigned>(abs_value);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18788 *(--buffer_ptr) = digits_to_99[digits_index][1];
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18789 *(--buffer_ptr) = digits_to_99[digits_index][0];
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18790 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18791 else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18792 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18793 *(--buffer_ptr) = static_cast<char>('0' + abs_value);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18794 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18795
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18796 o->write_characters(number_buffer.data(), n_chars);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18797 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18798
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18799 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18800 @brief dump a floating-point number
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18801
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18802 Dump a given floating-point number to output stream @a o. Works internally
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18803 with @a number_buffer.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18804
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18805 @param[in] x floating-point number to dump
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18806 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18807 void dump_float(number_float_t x)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18808 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18809 // NaN / inf
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18810 if (!std::isfinite(x))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18811 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18812 o->write_characters("null", 4);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18813 return;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18814 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18815
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18816 // If number_float_t is an IEEE-754 single or double precision number,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18817 // use the Grisu2 algorithm to produce short numbers which are
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18818 // guaranteed to round-trip, using strtof and strtod, resp.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18819 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18820 // NB: The test below works if <long double> == <double>.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18821 static constexpr bool is_ieee_single_or_double
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18822 = (std::numeric_limits<number_float_t>::is_iec559 && std::numeric_limits<number_float_t>::digits == 24 && std::numeric_limits<number_float_t>::max_exponent == 128) ||
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18823 (std::numeric_limits<number_float_t>::is_iec559 && std::numeric_limits<number_float_t>::digits == 53 && std::numeric_limits<number_float_t>::max_exponent == 1024);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18824
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18825 dump_float(x, std::integral_constant<bool, is_ieee_single_or_double>());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18826 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18827
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18828 void dump_float(number_float_t x, std::true_type /*is_ieee_single_or_double*/)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18829 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18830 auto* begin = number_buffer.data();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18831 auto* end = ::nlohmann::detail::to_chars(begin, begin + number_buffer.size(), x);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18832
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18833 o->write_characters(begin, static_cast<size_t>(end - begin));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18834 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18835
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18836 void dump_float(number_float_t x, std::false_type /*is_ieee_single_or_double*/)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18837 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18838 // get number of digits for a float -> text -> float round-trip
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18839 static constexpr auto d = std::numeric_limits<number_float_t>::max_digits10;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18840
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18841 // the actual conversion
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18842 // NOLINTNEXTLINE(cppcoreguidelines-pro-type-vararg,hicpp-vararg)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18843 std::ptrdiff_t len = (std::snprintf)(number_buffer.data(), number_buffer.size(), "%.*g", d, x);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18844
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18845 // negative value indicates an error
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18846 JSON_ASSERT(len > 0);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18847 // check if buffer was large enough
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18848 JSON_ASSERT(static_cast<std::size_t>(len) < number_buffer.size());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18849
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18850 // erase thousands separator
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18851 if (thousands_sep != '\0')
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18852 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18853 // NOLINTNEXTLINE(readability-qualified-auto,llvm-qualified-auto): std::remove returns an iterator, see https://github.com/nlohmann/json/issues/3081
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18854 const auto end = std::remove(number_buffer.begin(), number_buffer.begin() + len, thousands_sep);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18855 std::fill(end, number_buffer.end(), '\0');
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18856 JSON_ASSERT((end - number_buffer.begin()) <= len);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18857 len = (end - number_buffer.begin());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18858 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18859
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18860 // convert decimal point to '.'
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18861 if (decimal_point != '\0' && decimal_point != '.')
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18862 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18863 // NOLINTNEXTLINE(readability-qualified-auto,llvm-qualified-auto): std::find returns an iterator, see https://github.com/nlohmann/json/issues/3081
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18864 const auto dec_pos = std::find(number_buffer.begin(), number_buffer.end(), decimal_point);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18865 if (dec_pos != number_buffer.end())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18866 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18867 *dec_pos = '.';
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18868 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18869 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18870
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18871 o->write_characters(number_buffer.data(), static_cast<std::size_t>(len));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18872
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18873 // determine if we need to append ".0"
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18874 const bool value_is_int_like =
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18875 std::none_of(number_buffer.begin(), number_buffer.begin() + len + 1,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18876 [](char c)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18877 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18878 return c == '.' || c == 'e';
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18879 });
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18880
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18881 if (value_is_int_like)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18882 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18883 o->write_characters(".0", 2);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18884 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18885 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18886
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18887 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18888 @brief check whether a string is UTF-8 encoded
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18889
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18890 The function checks each byte of a string whether it is UTF-8 encoded. The
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18891 result of the check is stored in the @a state parameter. The function must
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18892 be called initially with state 0 (accept). State 1 means the string must
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18893 be rejected, because the current byte is not allowed. If the string is
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18894 completely processed, but the state is non-zero, the string ended
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18895 prematurely; that is, the last byte indicated more bytes should have
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18896 followed.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18897
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18898 @param[in,out] state the state of the decoding
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18899 @param[in,out] codep codepoint (valid only if resulting state is UTF8_ACCEPT)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18900 @param[in] byte next byte to decode
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18901 @return new state
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18902
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18903 @note The function has been edited: a std::array is used.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18904
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18905 @copyright Copyright (c) 2008-2009 Bjoern Hoehrmann <bjoern@hoehrmann.de>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18906 @sa http://bjoern.hoehrmann.de/utf-8/decoder/dfa/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18907 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18908 static std::uint8_t decode(std::uint8_t& state, std::uint32_t& codep, const std::uint8_t byte) noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18909 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18910 static const std::array<std::uint8_t, 400> utf8d =
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18911 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18912 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18913 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 00..1F
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18914 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 20..3F
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18915 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 40..5F
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18916 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 60..7F
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18917 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, // 80..9F
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18918 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, // A0..BF
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18919 8, 8, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // C0..DF
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18920 0xA, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x4, 0x3, 0x3, // E0..EF
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18921 0xB, 0x6, 0x6, 0x6, 0x5, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, // F0..FF
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18922 0x0, 0x1, 0x2, 0x3, 0x5, 0x8, 0x7, 0x1, 0x1, 0x1, 0x4, 0x6, 0x1, 0x1, 0x1, 0x1, // s0..s0
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18923 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, // s1..s2
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18924 1, 2, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, // s3..s4
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18925 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, // s5..s6
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18926 1, 3, 1, 1, 1, 1, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 // s7..s8
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18927 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18928 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18929
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18930 JSON_ASSERT(byte < utf8d.size());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18931 const std::uint8_t type = utf8d[byte];
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18932
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18933 codep = (state != UTF8_ACCEPT)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18934 ? (byte & 0x3fu) | (codep << 6u)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18935 : (0xFFu >> type) & (byte);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18936
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18937 const std::size_t index = 256u + static_cast<size_t>(state) * 16u + static_cast<size_t>(type);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18938 JSON_ASSERT(index < utf8d.size());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18939 state = utf8d[index];
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18940 return state;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18941 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18942
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18943 /*
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18944 * Overload to make the compiler happy while it is instantiating
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18945 * dump_integer for number_unsigned_t.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18946 * Must never be called.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18947 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18948 number_unsigned_t remove_sign(number_unsigned_t x)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18949 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18950 JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18951 return x; // LCOV_EXCL_LINE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18952 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18953
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18954 /*
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18955 * Helper function for dump_integer
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18956 *
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18957 * This function takes a negative signed integer and returns its absolute
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18958 * value as unsigned integer. The plus/minus shuffling is necessary as we can
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18959 * not directly remove the sign of an arbitrary signed integer as the
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18960 * absolute values of INT_MIN and INT_MAX are usually not the same. See
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18961 * #1708 for details.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18962 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18963 inline number_unsigned_t remove_sign(number_integer_t x) noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18964 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18965 JSON_ASSERT(x < 0 && x < (std::numeric_limits<number_integer_t>::max)()); // NOLINT(misc-redundant-expression)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18966 return static_cast<number_unsigned_t>(-(x + 1)) + 1;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18967 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18968
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18969 private:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18970 /// the output of the serializer
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18971 output_adapter_t<char> o = nullptr;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18972
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18973 /// a (hopefully) large enough character buffer
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18974 std::array<char, 64> number_buffer{{}};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18975
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18976 /// the locale
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18977 const std::lconv* loc = nullptr;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18978 /// the locale's thousand separator character
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18979 const char thousands_sep = '\0';
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18980 /// the locale's decimal point character
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18981 const char decimal_point = '\0';
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18982
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18983 /// string buffer
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18984 std::array<char, 512> string_buffer{{}};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18985
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18986 /// the indentation character
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18987 const char indent_char;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18988 /// the indentation string
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18989 string_t indent_string;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18990
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18991 /// error_handler how to react on decoding errors
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18992 const error_handler_t error_handler;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18993 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18994
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18995 } // namespace detail
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18996 NLOHMANN_JSON_NAMESPACE_END
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18997
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18998 // #include <nlohmann/detail/value_t.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18999
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19000 // #include <nlohmann/json_fwd.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19001
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19002 // #include <nlohmann/ordered_map.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19003 // __ _____ _____ _____
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19004 // __| | __| | | | JSON for Modern C++
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19005 // | | |__ | | | | | | version 3.11.3
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19006 // |_____|_____|_____|_|___| https://github.com/nlohmann/json
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19007 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19008 // SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19009 // SPDX-License-Identifier: MIT
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19010
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19011
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19012
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19013 #include <functional> // equal_to, less
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19014 #include <initializer_list> // initializer_list
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19015 #include <iterator> // input_iterator_tag, iterator_traits
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19016 #include <memory> // allocator
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19017 #include <stdexcept> // for out_of_range
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19018 #include <type_traits> // enable_if, is_convertible
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19019 #include <utility> // pair
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19020 #include <vector> // vector
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19021
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19022 // #include <nlohmann/detail/macro_scope.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19023
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19024 // #include <nlohmann/detail/meta/type_traits.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19025
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19026
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19027 NLOHMANN_JSON_NAMESPACE_BEGIN
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19028
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19029 /// ordered_map: a minimal map-like container that preserves insertion order
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19030 /// for use within nlohmann::basic_json<ordered_map>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19031 template <class Key, class T, class IgnoredLess = std::less<Key>,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19032 class Allocator = std::allocator<std::pair<const Key, T>>>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19033 struct ordered_map : std::vector<std::pair<const Key, T>, Allocator>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19034 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19035 using key_type = Key;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19036 using mapped_type = T;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19037 using Container = std::vector<std::pair<const Key, T>, Allocator>;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19038 using iterator = typename Container::iterator;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19039 using const_iterator = typename Container::const_iterator;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19040 using size_type = typename Container::size_type;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19041 using value_type = typename Container::value_type;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19042 #ifdef JSON_HAS_CPP_14
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19043 using key_compare = std::equal_to<>;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19044 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19045 using key_compare = std::equal_to<Key>;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19046 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19047
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19048 // Explicit constructors instead of `using Container::Container`
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19049 // otherwise older compilers choke on it (GCC <= 5.5, xcode <= 9.4)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19050 ordered_map() noexcept(noexcept(Container())) : Container{} {}
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19051 explicit ordered_map(const Allocator& alloc) noexcept(noexcept(Container(alloc))) : Container{alloc} {}
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19052 template <class It>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19053 ordered_map(It first, It last, const Allocator& alloc = Allocator())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19054 : Container{first, last, alloc} {}
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19055 ordered_map(std::initializer_list<value_type> init, const Allocator& alloc = Allocator() )
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19056 : Container{init, alloc} {}
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19057
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19058 std::pair<iterator, bool> emplace(const key_type& key, T&& t)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19059 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19060 for (auto it = this->begin(); it != this->end(); ++it)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19061 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19062 if (m_compare(it->first, key))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19063 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19064 return {it, false};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19065 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19066 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19067 Container::emplace_back(key, std::forward<T>(t));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19068 return {std::prev(this->end()), true};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19069 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19070
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19071 template<class KeyType, detail::enable_if_t<
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19072 detail::is_usable_as_key_type<key_compare, key_type, KeyType>::value, int> = 0>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19073 std::pair<iterator, bool> emplace(KeyType && key, T && t)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19074 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19075 for (auto it = this->begin(); it != this->end(); ++it)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19076 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19077 if (m_compare(it->first, key))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19078 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19079 return {it, false};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19080 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19081 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19082 Container::emplace_back(std::forward<KeyType>(key), std::forward<T>(t));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19083 return {std::prev(this->end()), true};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19084 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19085
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19086 T& operator[](const key_type& key)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19087 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19088 return emplace(key, T{}).first->second;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19089 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19090
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19091 template<class KeyType, detail::enable_if_t<
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19092 detail::is_usable_as_key_type<key_compare, key_type, KeyType>::value, int> = 0>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19093 T & operator[](KeyType && key)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19094 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19095 return emplace(std::forward<KeyType>(key), T{}).first->second;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19096 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19097
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19098 const T& operator[](const key_type& key) const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19099 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19100 return at(key);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19101 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19102
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19103 template<class KeyType, detail::enable_if_t<
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19104 detail::is_usable_as_key_type<key_compare, key_type, KeyType>::value, int> = 0>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19105 const T & operator[](KeyType && key) const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19106 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19107 return at(std::forward<KeyType>(key));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19108 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19109
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19110 T& at(const key_type& key)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19111 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19112 for (auto it = this->begin(); it != this->end(); ++it)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19113 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19114 if (m_compare(it->first, key))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19115 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19116 return it->second;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19117 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19118 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19119
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19120 JSON_THROW(std::out_of_range("key not found"));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19121 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19122
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19123 template<class KeyType, detail::enable_if_t<
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19124 detail::is_usable_as_key_type<key_compare, key_type, KeyType>::value, int> = 0>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19125 T & at(KeyType && key) // NOLINT(cppcoreguidelines-missing-std-forward)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19126 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19127 for (auto it = this->begin(); it != this->end(); ++it)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19128 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19129 if (m_compare(it->first, key))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19130 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19131 return it->second;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19132 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19133 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19134
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19135 JSON_THROW(std::out_of_range("key not found"));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19136 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19137
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19138 const T& at(const key_type& key) const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19139 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19140 for (auto it = this->begin(); it != this->end(); ++it)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19141 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19142 if (m_compare(it->first, key))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19143 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19144 return it->second;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19145 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19146 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19147
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19148 JSON_THROW(std::out_of_range("key not found"));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19149 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19150
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19151 template<class KeyType, detail::enable_if_t<
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19152 detail::is_usable_as_key_type<key_compare, key_type, KeyType>::value, int> = 0>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19153 const T & at(KeyType && key) const // NOLINT(cppcoreguidelines-missing-std-forward)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19154 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19155 for (auto it = this->begin(); it != this->end(); ++it)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19156 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19157 if (m_compare(it->first, key))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19158 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19159 return it->second;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19160 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19161 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19162
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19163 JSON_THROW(std::out_of_range("key not found"));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19164 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19165
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19166 size_type erase(const key_type& key)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19167 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19168 for (auto it = this->begin(); it != this->end(); ++it)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19169 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19170 if (m_compare(it->first, key))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19171 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19172 // Since we cannot move const Keys, re-construct them in place
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19173 for (auto next = it; ++next != this->end(); ++it)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19174 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19175 it->~value_type(); // Destroy but keep allocation
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19176 new (&*it) value_type{std::move(*next)};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19177 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19178 Container::pop_back();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19179 return 1;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19180 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19181 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19182 return 0;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19183 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19184
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19185 template<class KeyType, detail::enable_if_t<
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19186 detail::is_usable_as_key_type<key_compare, key_type, KeyType>::value, int> = 0>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19187 size_type erase(KeyType && key) // NOLINT(cppcoreguidelines-missing-std-forward)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19188 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19189 for (auto it = this->begin(); it != this->end(); ++it)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19190 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19191 if (m_compare(it->first, key))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19192 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19193 // Since we cannot move const Keys, re-construct them in place
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19194 for (auto next = it; ++next != this->end(); ++it)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19195 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19196 it->~value_type(); // Destroy but keep allocation
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19197 new (&*it) value_type{std::move(*next)};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19198 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19199 Container::pop_back();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19200 return 1;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19201 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19202 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19203 return 0;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19204 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19205
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19206 iterator erase(iterator pos)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19207 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19208 return erase(pos, std::next(pos));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19209 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19210
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19211 iterator erase(iterator first, iterator last)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19212 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19213 if (first == last)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19214 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19215 return first;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19216 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19217
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19218 const auto elements_affected = std::distance(first, last);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19219 const auto offset = std::distance(Container::begin(), first);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19220
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19221 // This is the start situation. We need to delete elements_affected
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19222 // elements (3 in this example: e, f, g), and need to return an
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19223 // iterator past the last deleted element (h in this example).
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19224 // Note that offset is the distance from the start of the vector
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19225 // to first. We will need this later.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19226
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19227 // [ a, b, c, d, e, f, g, h, i, j ]
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19228 // ^ ^
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19229 // first last
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19230
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19231 // Since we cannot move const Keys, we re-construct them in place.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19232 // We start at first and re-construct (viz. copy) the elements from
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19233 // the back of the vector. Example for first iteration:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19234
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19235 // ,--------.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19236 // v | destroy e and re-construct with h
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19237 // [ a, b, c, d, e, f, g, h, i, j ]
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19238 // ^ ^
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19239 // it it + elements_affected
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19240
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19241 for (auto it = first; std::next(it, elements_affected) != Container::end(); ++it)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19242 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19243 it->~value_type(); // destroy but keep allocation
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19244 new (&*it) value_type{std::move(*std::next(it, elements_affected))}; // "move" next element to it
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19245 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19246
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19247 // [ a, b, c, d, h, i, j, h, i, j ]
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19248 // ^ ^
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19249 // first last
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19250
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19251 // remove the unneeded elements at the end of the vector
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19252 Container::resize(this->size() - static_cast<size_type>(elements_affected));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19253
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19254 // [ a, b, c, d, h, i, j ]
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19255 // ^ ^
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19256 // first last
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19257
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19258 // first is now pointing past the last deleted element, but we cannot
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19259 // use this iterator, because it may have been invalidated by the
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19260 // resize call. Instead, we can return begin() + offset.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19261 return Container::begin() + offset;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19262 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19263
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19264 size_type count(const key_type& key) const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19265 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19266 for (auto it = this->begin(); it != this->end(); ++it)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19267 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19268 if (m_compare(it->first, key))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19269 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19270 return 1;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19271 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19272 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19273 return 0;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19274 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19275
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19276 template<class KeyType, detail::enable_if_t<
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19277 detail::is_usable_as_key_type<key_compare, key_type, KeyType>::value, int> = 0>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19278 size_type count(KeyType && key) const // NOLINT(cppcoreguidelines-missing-std-forward)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19279 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19280 for (auto it = this->begin(); it != this->end(); ++it)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19281 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19282 if (m_compare(it->first, key))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19283 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19284 return 1;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19285 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19286 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19287 return 0;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19288 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19289
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19290 iterator find(const key_type& key)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19291 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19292 for (auto it = this->begin(); it != this->end(); ++it)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19293 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19294 if (m_compare(it->first, key))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19295 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19296 return it;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19297 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19298 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19299 return Container::end();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19300 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19301
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19302 template<class KeyType, detail::enable_if_t<
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19303 detail::is_usable_as_key_type<key_compare, key_type, KeyType>::value, int> = 0>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19304 iterator find(KeyType && key) // NOLINT(cppcoreguidelines-missing-std-forward)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19305 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19306 for (auto it = this->begin(); it != this->end(); ++it)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19307 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19308 if (m_compare(it->first, key))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19309 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19310 return it;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19311 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19312 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19313 return Container::end();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19314 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19315
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19316 const_iterator find(const key_type& key) const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19317 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19318 for (auto it = this->begin(); it != this->end(); ++it)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19319 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19320 if (m_compare(it->first, key))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19321 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19322 return it;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19323 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19324 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19325 return Container::end();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19326 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19327
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19328 std::pair<iterator, bool> insert( value_type&& value )
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19329 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19330 return emplace(value.first, std::move(value.second));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19331 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19332
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19333 std::pair<iterator, bool> insert( const value_type& value )
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19334 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19335 for (auto it = this->begin(); it != this->end(); ++it)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19336 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19337 if (m_compare(it->first, value.first))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19338 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19339 return {it, false};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19340 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19341 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19342 Container::push_back(value);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19343 return {--this->end(), true};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19344 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19345
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19346 template<typename InputIt>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19347 using require_input_iter = typename std::enable_if<std::is_convertible<typename std::iterator_traits<InputIt>::iterator_category,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19348 std::input_iterator_tag>::value>::type;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19349
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19350 template<typename InputIt, typename = require_input_iter<InputIt>>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19351 void insert(InputIt first, InputIt last)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19352 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19353 for (auto it = first; it != last; ++it)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19354 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19355 insert(*it);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19356 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19357 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19358
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19359 private:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19360 JSON_NO_UNIQUE_ADDRESS key_compare m_compare = key_compare();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19361 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19362
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19363 NLOHMANN_JSON_NAMESPACE_END
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19364
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19365
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19366 #if defined(JSON_HAS_CPP_17)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19367 #if JSON_HAS_STATIC_RTTI
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19368 #include <any>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19369 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19370 #include <string_view>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19371 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19372
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19373 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19374 @brief namespace for Niels Lohmann
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19375 @see https://github.com/nlohmann
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19376 @since version 1.0.0
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19377 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19378 NLOHMANN_JSON_NAMESPACE_BEGIN
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19379
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19380 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19381 @brief a class to store JSON values
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19382
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19383 @internal
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19384 @invariant The member variables @a m_value and @a m_type have the following
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19385 relationship:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19386 - If `m_type == value_t::object`, then `m_value.object != nullptr`.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19387 - If `m_type == value_t::array`, then `m_value.array != nullptr`.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19388 - If `m_type == value_t::string`, then `m_value.string != nullptr`.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19389 The invariants are checked by member function assert_invariant().
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19390
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19391 @note ObjectType trick from https://stackoverflow.com/a/9860911
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19392 @endinternal
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19393
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19394 @since version 1.0.0
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19395
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19396 @nosubgrouping
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19397 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19398 NLOHMANN_BASIC_JSON_TPL_DECLARATION
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19399 class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-special-member-functions)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19400 : public ::nlohmann::detail::json_base_class<CustomBaseClass>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19401 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19402 private:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19403 template<detail::value_t> friend struct detail::external_constructor;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19404
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19405 template<typename>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19406 friend class ::nlohmann::json_pointer;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19407 // can be restored when json_pointer backwards compatibility is removed
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19408 // friend ::nlohmann::json_pointer<StringType>;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19409
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19410 template<typename BasicJsonType, typename InputType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19411 friend class ::nlohmann::detail::parser;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19412 friend ::nlohmann::detail::serializer<basic_json>;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19413 template<typename BasicJsonType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19414 friend class ::nlohmann::detail::iter_impl;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19415 template<typename BasicJsonType, typename CharType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19416 friend class ::nlohmann::detail::binary_writer;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19417 template<typename BasicJsonType, typename InputType, typename SAX>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19418 friend class ::nlohmann::detail::binary_reader;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19419 template<typename BasicJsonType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19420 friend class ::nlohmann::detail::json_sax_dom_parser;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19421 template<typename BasicJsonType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19422 friend class ::nlohmann::detail::json_sax_dom_callback_parser;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19423 friend class ::nlohmann::detail::exception;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19424
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19425 /// workaround type for MSVC
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19426 using basic_json_t = NLOHMANN_BASIC_JSON_TPL;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19427 using json_base_class_t = ::nlohmann::detail::json_base_class<CustomBaseClass>;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19428
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19429 JSON_PRIVATE_UNLESS_TESTED:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19430 // convenience aliases for types residing in namespace detail;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19431 using lexer = ::nlohmann::detail::lexer_base<basic_json>;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19432
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19433 template<typename InputAdapterType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19434 static ::nlohmann::detail::parser<basic_json, InputAdapterType> parser(
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19435 InputAdapterType adapter,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19436 detail::parser_callback_t<basic_json>cb = nullptr,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19437 const bool allow_exceptions = true,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19438 const bool ignore_comments = false
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19439 )
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19440 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19441 return ::nlohmann::detail::parser<basic_json, InputAdapterType>(std::move(adapter),
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19442 std::move(cb), allow_exceptions, ignore_comments);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19443 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19444
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19445 private:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19446 using primitive_iterator_t = ::nlohmann::detail::primitive_iterator_t;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19447 template<typename BasicJsonType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19448 using internal_iterator = ::nlohmann::detail::internal_iterator<BasicJsonType>;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19449 template<typename BasicJsonType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19450 using iter_impl = ::nlohmann::detail::iter_impl<BasicJsonType>;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19451 template<typename Iterator>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19452 using iteration_proxy = ::nlohmann::detail::iteration_proxy<Iterator>;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19453 template<typename Base> using json_reverse_iterator = ::nlohmann::detail::json_reverse_iterator<Base>;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19454
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19455 template<typename CharType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19456 using output_adapter_t = ::nlohmann::detail::output_adapter_t<CharType>;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19457
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19458 template<typename InputType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19459 using binary_reader = ::nlohmann::detail::binary_reader<basic_json, InputType>;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19460 template<typename CharType> using binary_writer = ::nlohmann::detail::binary_writer<basic_json, CharType>;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19461
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19462 JSON_PRIVATE_UNLESS_TESTED:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19463 using serializer = ::nlohmann::detail::serializer<basic_json>;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19464
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19465 public:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19466 using value_t = detail::value_t;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19467 /// JSON Pointer, see @ref nlohmann::json_pointer
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19468 using json_pointer = ::nlohmann::json_pointer<StringType>;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19469 template<typename T, typename SFINAE>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19470 using json_serializer = JSONSerializer<T, SFINAE>;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19471 /// how to treat decoding errors
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19472 using error_handler_t = detail::error_handler_t;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19473 /// how to treat CBOR tags
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19474 using cbor_tag_handler_t = detail::cbor_tag_handler_t;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19475 /// helper type for initializer lists of basic_json values
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19476 using initializer_list_t = std::initializer_list<detail::json_ref<basic_json>>;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19477
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19478 using input_format_t = detail::input_format_t;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19479 /// SAX interface type, see @ref nlohmann::json_sax
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19480 using json_sax_t = json_sax<basic_json>;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19481
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19482 ////////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19483 // exceptions //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19484 ////////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19485
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19486 /// @name exceptions
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19487 /// Classes to implement user-defined exceptions.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19488 /// @{
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19489
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19490 using exception = detail::exception;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19491 using parse_error = detail::parse_error;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19492 using invalid_iterator = detail::invalid_iterator;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19493 using type_error = detail::type_error;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19494 using out_of_range = detail::out_of_range;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19495 using other_error = detail::other_error;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19496
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19497 /// @}
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19498
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19499 /////////////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19500 // container types //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19501 /////////////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19502
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19503 /// @name container types
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19504 /// The canonic container types to use @ref basic_json like any other STL
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19505 /// container.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19506 /// @{
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19507
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19508 /// the type of elements in a basic_json container
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19509 using value_type = basic_json;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19510
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19511 /// the type of an element reference
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19512 using reference = value_type&;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19513 /// the type of an element const reference
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19514 using const_reference = const value_type&;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19515
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19516 /// a type to represent differences between iterators
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19517 using difference_type = std::ptrdiff_t;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19518 /// a type to represent container sizes
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19519 using size_type = std::size_t;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19520
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19521 /// the allocator type
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19522 using allocator_type = AllocatorType<basic_json>;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19523
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19524 /// the type of an element pointer
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19525 using pointer = typename std::allocator_traits<allocator_type>::pointer;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19526 /// the type of an element const pointer
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19527 using const_pointer = typename std::allocator_traits<allocator_type>::const_pointer;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19528
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19529 /// an iterator for a basic_json container
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19530 using iterator = iter_impl<basic_json>;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19531 /// a const iterator for a basic_json container
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19532 using const_iterator = iter_impl<const basic_json>;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19533 /// a reverse iterator for a basic_json container
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19534 using reverse_iterator = json_reverse_iterator<typename basic_json::iterator>;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19535 /// a const reverse iterator for a basic_json container
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19536 using const_reverse_iterator = json_reverse_iterator<typename basic_json::const_iterator>;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19537
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19538 /// @}
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19539
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19540 /// @brief returns the allocator associated with the container
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19541 /// @sa https://json.nlohmann.me/api/basic_json/get_allocator/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19542 static allocator_type get_allocator()
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19543 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19544 return allocator_type();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19545 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19546
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19547 /// @brief returns version information on the library
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19548 /// @sa https://json.nlohmann.me/api/basic_json/meta/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19549 JSON_HEDLEY_WARN_UNUSED_RESULT
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19550 static basic_json meta()
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19551 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19552 basic_json result;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19553
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19554 result["copyright"] = "(C) 2013-2023 Niels Lohmann";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19555 result["name"] = "JSON for Modern C++";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19556 result["url"] = "https://github.com/nlohmann/json";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19557 result["version"]["string"] =
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19558 detail::concat(std::to_string(NLOHMANN_JSON_VERSION_MAJOR), '.',
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19559 std::to_string(NLOHMANN_JSON_VERSION_MINOR), '.',
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19560 std::to_string(NLOHMANN_JSON_VERSION_PATCH));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19561 result["version"]["major"] = NLOHMANN_JSON_VERSION_MAJOR;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19562 result["version"]["minor"] = NLOHMANN_JSON_VERSION_MINOR;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19563 result["version"]["patch"] = NLOHMANN_JSON_VERSION_PATCH;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19564
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19565 #ifdef _WIN32
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19566 result["platform"] = "win32";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19567 #elif defined __linux__
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19568 result["platform"] = "linux";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19569 #elif defined __APPLE__
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19570 result["platform"] = "apple";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19571 #elif defined __unix__
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19572 result["platform"] = "unix";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19573 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19574 result["platform"] = "unknown";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19575 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19576
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19577 #if defined(__ICC) || defined(__INTEL_COMPILER)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19578 result["compiler"] = {{"family", "icc"}, {"version", __INTEL_COMPILER}};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19579 #elif defined(__clang__)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19580 result["compiler"] = {{"family", "clang"}, {"version", __clang_version__}};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19581 #elif defined(__GNUC__) || defined(__GNUG__)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19582 result["compiler"] = {{"family", "gcc"}, {"version", detail::concat(
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19583 std::to_string(__GNUC__), '.',
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19584 std::to_string(__GNUC_MINOR__), '.',
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19585 std::to_string(__GNUC_PATCHLEVEL__))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19586 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19587 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19588 #elif defined(__HP_cc) || defined(__HP_aCC)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19589 result["compiler"] = "hp"
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19590 #elif defined(__IBMCPP__)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19591 result["compiler"] = {{"family", "ilecpp"}, {"version", __IBMCPP__}};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19592 #elif defined(_MSC_VER)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19593 result["compiler"] = {{"family", "msvc"}, {"version", _MSC_VER}};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19594 #elif defined(__PGI)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19595 result["compiler"] = {{"family", "pgcpp"}, {"version", __PGI}};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19596 #elif defined(__SUNPRO_CC)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19597 result["compiler"] = {{"family", "sunpro"}, {"version", __SUNPRO_CC}};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19598 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19599 result["compiler"] = {{"family", "unknown"}, {"version", "unknown"}};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19600 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19601
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19602 #if defined(_MSVC_LANG)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19603 result["compiler"]["c++"] = std::to_string(_MSVC_LANG);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19604 #elif defined(__cplusplus)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19605 result["compiler"]["c++"] = std::to_string(__cplusplus);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19606 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19607 result["compiler"]["c++"] = "unknown";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19608 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19609 return result;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19610 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19611
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19612 ///////////////////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19613 // JSON value data types //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19614 ///////////////////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19615
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19616 /// @name JSON value data types
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19617 /// The data types to store a JSON value. These types are derived from
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19618 /// the template arguments passed to class @ref basic_json.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19619 /// @{
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19620
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19621 /// @brief default object key comparator type
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19622 /// The actual object key comparator type (@ref object_comparator_t) may be
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19623 /// different.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19624 /// @sa https://json.nlohmann.me/api/basic_json/default_object_comparator_t/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19625 #if defined(JSON_HAS_CPP_14)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19626 // use of transparent comparator avoids unnecessary repeated construction of temporaries
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19627 // in functions involving lookup by key with types other than object_t::key_type (aka. StringType)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19628 using default_object_comparator_t = std::less<>;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19629 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19630 using default_object_comparator_t = std::less<StringType>;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19631 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19632
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19633 /// @brief a type for an object
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19634 /// @sa https://json.nlohmann.me/api/basic_json/object_t/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19635 using object_t = ObjectType<StringType,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19636 basic_json,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19637 default_object_comparator_t,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19638 AllocatorType<std::pair<const StringType,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19639 basic_json>>>;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19640
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19641 /// @brief a type for an array
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19642 /// @sa https://json.nlohmann.me/api/basic_json/array_t/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19643 using array_t = ArrayType<basic_json, AllocatorType<basic_json>>;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19644
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19645 /// @brief a type for a string
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19646 /// @sa https://json.nlohmann.me/api/basic_json/string_t/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19647 using string_t = StringType;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19648
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19649 /// @brief a type for a boolean
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19650 /// @sa https://json.nlohmann.me/api/basic_json/boolean_t/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19651 using boolean_t = BooleanType;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19652
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19653 /// @brief a type for a number (integer)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19654 /// @sa https://json.nlohmann.me/api/basic_json/number_integer_t/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19655 using number_integer_t = NumberIntegerType;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19656
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19657 /// @brief a type for a number (unsigned)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19658 /// @sa https://json.nlohmann.me/api/basic_json/number_unsigned_t/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19659 using number_unsigned_t = NumberUnsignedType;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19660
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19661 /// @brief a type for a number (floating-point)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19662 /// @sa https://json.nlohmann.me/api/basic_json/number_float_t/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19663 using number_float_t = NumberFloatType;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19664
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19665 /// @brief a type for a packed binary type
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19666 /// @sa https://json.nlohmann.me/api/basic_json/binary_t/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19667 using binary_t = nlohmann::byte_container_with_subtype<BinaryType>;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19668
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19669 /// @brief object key comparator type
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19670 /// @sa https://json.nlohmann.me/api/basic_json/object_comparator_t/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19671 using object_comparator_t = detail::actual_object_comparator_t<basic_json>;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19672
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19673 /// @}
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19674
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19675 private:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19676
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19677 /// helper for exception-safe object creation
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19678 template<typename T, typename... Args>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19679 JSON_HEDLEY_RETURNS_NON_NULL
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19680 static T* create(Args&& ... args)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19681 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19682 AllocatorType<T> alloc;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19683 using AllocatorTraits = std::allocator_traits<AllocatorType<T>>;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19684
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19685 auto deleter = [&](T * obj)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19686 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19687 AllocatorTraits::deallocate(alloc, obj, 1);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19688 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19689 std::unique_ptr<T, decltype(deleter)> obj(AllocatorTraits::allocate(alloc, 1), deleter);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19690 AllocatorTraits::construct(alloc, obj.get(), std::forward<Args>(args)...);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19691 JSON_ASSERT(obj != nullptr);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19692 return obj.release();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19693 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19694
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19695 ////////////////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19696 // JSON value storage //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19697 ////////////////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19698
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19699 JSON_PRIVATE_UNLESS_TESTED:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19700 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19701 @brief a JSON value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19702
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19703 The actual storage for a JSON value of the @ref basic_json class. This
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19704 union combines the different storage types for the JSON value types
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19705 defined in @ref value_t.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19706
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19707 JSON type | value_t type | used type
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19708 --------- | --------------- | ------------------------
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19709 object | object | pointer to @ref object_t
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19710 array | array | pointer to @ref array_t
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19711 string | string | pointer to @ref string_t
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19712 boolean | boolean | @ref boolean_t
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19713 number | number_integer | @ref number_integer_t
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19714 number | number_unsigned | @ref number_unsigned_t
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19715 number | number_float | @ref number_float_t
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19716 binary | binary | pointer to @ref binary_t
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19717 null | null | *no value is stored*
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19718
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19719 @note Variable-length types (objects, arrays, and strings) are stored as
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19720 pointers. The size of the union should not exceed 64 bits if the default
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19721 value types are used.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19722
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19723 @since version 1.0.0
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19724 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19725 union json_value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19726 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19727 /// object (stored with pointer to save storage)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19728 object_t* object;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19729 /// array (stored with pointer to save storage)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19730 array_t* array;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19731 /// string (stored with pointer to save storage)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19732 string_t* string;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19733 /// binary (stored with pointer to save storage)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19734 binary_t* binary;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19735 /// boolean
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19736 boolean_t boolean;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19737 /// number (integer)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19738 number_integer_t number_integer;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19739 /// number (unsigned integer)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19740 number_unsigned_t number_unsigned;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19741 /// number (floating-point)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19742 number_float_t number_float;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19743
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19744 /// default constructor (for null values)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19745 json_value() = default;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19746 /// constructor for booleans
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19747 json_value(boolean_t v) noexcept : boolean(v) {}
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19748 /// constructor for numbers (integer)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19749 json_value(number_integer_t v) noexcept : number_integer(v) {}
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19750 /// constructor for numbers (unsigned)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19751 json_value(number_unsigned_t v) noexcept : number_unsigned(v) {}
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19752 /// constructor for numbers (floating-point)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19753 json_value(number_float_t v) noexcept : number_float(v) {}
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19754 /// constructor for empty values of a given type
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19755 json_value(value_t t)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19756 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19757 switch (t)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19758 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19759 case value_t::object:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19760 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19761 object = create<object_t>();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19762 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19763 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19764
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19765 case value_t::array:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19766 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19767 array = create<array_t>();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19768 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19769 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19770
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19771 case value_t::string:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19772 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19773 string = create<string_t>("");
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19774 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19775 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19776
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19777 case value_t::binary:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19778 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19779 binary = create<binary_t>();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19780 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19781 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19782
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19783 case value_t::boolean:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19784 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19785 boolean = static_cast<boolean_t>(false);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19786 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19787 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19788
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19789 case value_t::number_integer:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19790 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19791 number_integer = static_cast<number_integer_t>(0);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19792 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19793 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19794
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19795 case value_t::number_unsigned:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19796 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19797 number_unsigned = static_cast<number_unsigned_t>(0);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19798 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19799 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19800
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19801 case value_t::number_float:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19802 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19803 number_float = static_cast<number_float_t>(0.0);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19804 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19805 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19806
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19807 case value_t::null:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19808 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19809 object = nullptr; // silence warning, see #821
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19810 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19811 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19812
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19813 case value_t::discarded:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19814 default:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19815 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19816 object = nullptr; // silence warning, see #821
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19817 if (JSON_HEDLEY_UNLIKELY(t == value_t::null))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19818 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19819 JSON_THROW(other_error::create(500, "961c151d2e87f2686a955a9be24d316f1362bf21 3.11.3", nullptr)); // LCOV_EXCL_LINE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19820 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19821 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19822 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19823 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19824 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19825
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19826 /// constructor for strings
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19827 json_value(const string_t& value) : string(create<string_t>(value)) {}
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19828
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19829 /// constructor for rvalue strings
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19830 json_value(string_t&& value) : string(create<string_t>(std::move(value))) {}
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19831
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19832 /// constructor for objects
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19833 json_value(const object_t& value) : object(create<object_t>(value)) {}
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19834
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19835 /// constructor for rvalue objects
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19836 json_value(object_t&& value) : object(create<object_t>(std::move(value))) {}
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19837
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19838 /// constructor for arrays
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19839 json_value(const array_t& value) : array(create<array_t>(value)) {}
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19840
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19841 /// constructor for rvalue arrays
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19842 json_value(array_t&& value) : array(create<array_t>(std::move(value))) {}
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19843
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19844 /// constructor for binary arrays
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19845 json_value(const typename binary_t::container_type& value) : binary(create<binary_t>(value)) {}
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19846
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19847 /// constructor for rvalue binary arrays
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19848 json_value(typename binary_t::container_type&& value) : binary(create<binary_t>(std::move(value))) {}
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19849
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19850 /// constructor for binary arrays (internal type)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19851 json_value(const binary_t& value) : binary(create<binary_t>(value)) {}
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19852
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19853 /// constructor for rvalue binary arrays (internal type)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19854 json_value(binary_t&& value) : binary(create<binary_t>(std::move(value))) {}
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19855
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19856 void destroy(value_t t)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19857 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19858 if (
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19859 (t == value_t::object && object == nullptr) ||
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19860 (t == value_t::array && array == nullptr) ||
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19861 (t == value_t::string && string == nullptr) ||
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19862 (t == value_t::binary && binary == nullptr)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19863 )
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19864 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19865 //not initialized (e.g. due to exception in the ctor)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19866 return;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19867 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19868 if (t == value_t::array || t == value_t::object)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19869 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19870 // flatten the current json_value to a heap-allocated stack
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19871 std::vector<basic_json> stack;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19872
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19873 // move the top-level items to stack
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19874 if (t == value_t::array)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19875 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19876 stack.reserve(array->size());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19877 std::move(array->begin(), array->end(), std::back_inserter(stack));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19878 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19879 else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19880 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19881 stack.reserve(object->size());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19882 for (auto&& it : *object)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19883 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19884 stack.push_back(std::move(it.second));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19885 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19886 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19887
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19888 while (!stack.empty())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19889 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19890 // move the last item to local variable to be processed
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19891 basic_json current_item(std::move(stack.back()));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19892 stack.pop_back();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19893
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19894 // if current_item is array/object, move
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19895 // its children to the stack to be processed later
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19896 if (current_item.is_array())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19897 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19898 std::move(current_item.m_data.m_value.array->begin(), current_item.m_data.m_value.array->end(), std::back_inserter(stack));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19899
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19900 current_item.m_data.m_value.array->clear();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19901 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19902 else if (current_item.is_object())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19903 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19904 for (auto&& it : *current_item.m_data.m_value.object)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19905 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19906 stack.push_back(std::move(it.second));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19907 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19908
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19909 current_item.m_data.m_value.object->clear();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19910 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19911
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19912 // it's now safe that current_item get destructed
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19913 // since it doesn't have any children
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19914 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19915 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19916
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19917 switch (t)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19918 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19919 case value_t::object:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19920 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19921 AllocatorType<object_t> alloc;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19922 std::allocator_traits<decltype(alloc)>::destroy(alloc, object);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19923 std::allocator_traits<decltype(alloc)>::deallocate(alloc, object, 1);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19924 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19925 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19926
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19927 case value_t::array:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19928 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19929 AllocatorType<array_t> alloc;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19930 std::allocator_traits<decltype(alloc)>::destroy(alloc, array);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19931 std::allocator_traits<decltype(alloc)>::deallocate(alloc, array, 1);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19932 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19933 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19934
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19935 case value_t::string:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19936 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19937 AllocatorType<string_t> alloc;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19938 std::allocator_traits<decltype(alloc)>::destroy(alloc, string);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19939 std::allocator_traits<decltype(alloc)>::deallocate(alloc, string, 1);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19940 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19941 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19942
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19943 case value_t::binary:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19944 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19945 AllocatorType<binary_t> alloc;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19946 std::allocator_traits<decltype(alloc)>::destroy(alloc, binary);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19947 std::allocator_traits<decltype(alloc)>::deallocate(alloc, binary, 1);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19948 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19949 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19950
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19951 case value_t::null:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19952 case value_t::boolean:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19953 case value_t::number_integer:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19954 case value_t::number_unsigned:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19955 case value_t::number_float:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19956 case value_t::discarded:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19957 default:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19958 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19959 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19960 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19961 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19962 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19963 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19964
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19965 private:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19966 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19967 @brief checks the class invariants
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19968
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19969 This function asserts the class invariants. It needs to be called at the
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19970 end of every constructor to make sure that created objects respect the
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19971 invariant. Furthermore, it has to be called each time the type of a JSON
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19972 value is changed, because the invariant expresses a relationship between
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19973 @a m_type and @a m_value.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19974
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19975 Furthermore, the parent relation is checked for arrays and objects: If
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19976 @a check_parents true and the value is an array or object, then the
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19977 container's elements must have the current value as parent.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19978
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19979 @param[in] check_parents whether the parent relation should be checked.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19980 The value is true by default and should only be set to false
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19981 during destruction of objects when the invariant does not
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19982 need to hold.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19983 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19984 void assert_invariant(bool check_parents = true) const noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19985 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19986 JSON_ASSERT(m_data.m_type != value_t::object || m_data.m_value.object != nullptr);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19987 JSON_ASSERT(m_data.m_type != value_t::array || m_data.m_value.array != nullptr);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19988 JSON_ASSERT(m_data.m_type != value_t::string || m_data.m_value.string != nullptr);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19989 JSON_ASSERT(m_data.m_type != value_t::binary || m_data.m_value.binary != nullptr);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19990
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19991 #if JSON_DIAGNOSTICS
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19992 JSON_TRY
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19993 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19994 // cppcheck-suppress assertWithSideEffect
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19995 JSON_ASSERT(!check_parents || !is_structured() || std::all_of(begin(), end(), [this](const basic_json & j)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19996 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19997 return j.m_parent == this;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19998 }));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19999 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20000 JSON_CATCH(...) {} // LCOV_EXCL_LINE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20001 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20002 static_cast<void>(check_parents);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20003 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20004
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20005 void set_parents()
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20006 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20007 #if JSON_DIAGNOSTICS
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20008 switch (m_data.m_type)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20009 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20010 case value_t::array:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20011 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20012 for (auto& element : *m_data.m_value.array)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20013 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20014 element.m_parent = this;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20015 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20016 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20017 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20018
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20019 case value_t::object:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20020 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20021 for (auto& element : *m_data.m_value.object)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20022 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20023 element.second.m_parent = this;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20024 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20025 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20026 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20027
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20028 case value_t::null:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20029 case value_t::string:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20030 case value_t::boolean:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20031 case value_t::number_integer:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20032 case value_t::number_unsigned:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20033 case value_t::number_float:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20034 case value_t::binary:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20035 case value_t::discarded:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20036 default:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20037 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20038 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20039 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20040 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20041
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20042 iterator set_parents(iterator it, typename iterator::difference_type count_set_parents)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20043 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20044 #if JSON_DIAGNOSTICS
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20045 for (typename iterator::difference_type i = 0; i < count_set_parents; ++i)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20046 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20047 (it + i)->m_parent = this;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20048 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20049 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20050 static_cast<void>(count_set_parents);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20051 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20052 return it;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20053 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20054
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20055 reference set_parent(reference j, std::size_t old_capacity = static_cast<std::size_t>(-1))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20056 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20057 #if JSON_DIAGNOSTICS
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20058 if (old_capacity != static_cast<std::size_t>(-1))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20059 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20060 // see https://github.com/nlohmann/json/issues/2838
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20061 JSON_ASSERT(type() == value_t::array);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20062 if (JSON_HEDLEY_UNLIKELY(m_data.m_value.array->capacity() != old_capacity))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20063 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20064 // capacity has changed: update all parents
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20065 set_parents();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20066 return j;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20067 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20068 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20069
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20070 // ordered_json uses a vector internally, so pointers could have
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20071 // been invalidated; see https://github.com/nlohmann/json/issues/2962
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20072 #ifdef JSON_HEDLEY_MSVC_VERSION
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20073 #pragma warning(push )
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20074 #pragma warning(disable : 4127) // ignore warning to replace if with if constexpr
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20075 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20076 if (detail::is_ordered_map<object_t>::value)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20077 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20078 set_parents();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20079 return j;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20080 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20081 #ifdef JSON_HEDLEY_MSVC_VERSION
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20082 #pragma warning( pop )
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20083 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20084
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20085 j.m_parent = this;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20086 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20087 static_cast<void>(j);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20088 static_cast<void>(old_capacity);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20089 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20090 return j;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20091 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20092
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20093 public:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20094 //////////////////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20095 // JSON parser callback //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20096 //////////////////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20097
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20098 /// @brief parser event types
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20099 /// @sa https://json.nlohmann.me/api/basic_json/parse_event_t/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20100 using parse_event_t = detail::parse_event_t;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20101
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20102 /// @brief per-element parser callback type
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20103 /// @sa https://json.nlohmann.me/api/basic_json/parser_callback_t/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20104 using parser_callback_t = detail::parser_callback_t<basic_json>;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20105
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20106 //////////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20107 // constructors //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20108 //////////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20109
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20110 /// @name constructors and destructors
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20111 /// Constructors of class @ref basic_json, copy/move constructor, copy
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20112 /// assignment, static functions creating objects, and the destructor.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20113 /// @{
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20114
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20115 /// @brief create an empty value with a given type
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20116 /// @sa https://json.nlohmann.me/api/basic_json/basic_json/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20117 basic_json(const value_t v)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20118 : m_data(v)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20119 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20120 assert_invariant();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20121 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20122
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20123 /// @brief create a null object
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20124 /// @sa https://json.nlohmann.me/api/basic_json/basic_json/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20125 basic_json(std::nullptr_t = nullptr) noexcept // NOLINT(bugprone-exception-escape)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20126 : basic_json(value_t::null)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20127 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20128 assert_invariant();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20129 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20130
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20131 /// @brief create a JSON value from compatible types
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20132 /// @sa https://json.nlohmann.me/api/basic_json/basic_json/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20133 template < typename CompatibleType,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20134 typename U = detail::uncvref_t<CompatibleType>,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20135 detail::enable_if_t <
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20136 !detail::is_basic_json<U>::value && detail::is_compatible_type<basic_json_t, U>::value, int > = 0 >
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20137 basic_json(CompatibleType && val) noexcept(noexcept( // NOLINT(bugprone-forwarding-reference-overload,bugprone-exception-escape)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20138 JSONSerializer<U>::to_json(std::declval<basic_json_t&>(),
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20139 std::forward<CompatibleType>(val))))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20140 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20141 JSONSerializer<U>::to_json(*this, std::forward<CompatibleType>(val));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20142 set_parents();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20143 assert_invariant();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20144 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20145
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20146 /// @brief create a JSON value from an existing one
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20147 /// @sa https://json.nlohmann.me/api/basic_json/basic_json/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20148 template < typename BasicJsonType,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20149 detail::enable_if_t <
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20150 detail::is_basic_json<BasicJsonType>::value&& !std::is_same<basic_json, BasicJsonType>::value, int > = 0 >
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20151 basic_json(const BasicJsonType& val)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20152 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20153 using other_boolean_t = typename BasicJsonType::boolean_t;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20154 using other_number_float_t = typename BasicJsonType::number_float_t;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20155 using other_number_integer_t = typename BasicJsonType::number_integer_t;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20156 using other_number_unsigned_t = typename BasicJsonType::number_unsigned_t;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20157 using other_string_t = typename BasicJsonType::string_t;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20158 using other_object_t = typename BasicJsonType::object_t;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20159 using other_array_t = typename BasicJsonType::array_t;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20160 using other_binary_t = typename BasicJsonType::binary_t;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20161
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20162 switch (val.type())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20163 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20164 case value_t::boolean:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20165 JSONSerializer<other_boolean_t>::to_json(*this, val.template get<other_boolean_t>());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20166 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20167 case value_t::number_float:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20168 JSONSerializer<other_number_float_t>::to_json(*this, val.template get<other_number_float_t>());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20169 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20170 case value_t::number_integer:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20171 JSONSerializer<other_number_integer_t>::to_json(*this, val.template get<other_number_integer_t>());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20172 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20173 case value_t::number_unsigned:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20174 JSONSerializer<other_number_unsigned_t>::to_json(*this, val.template get<other_number_unsigned_t>());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20175 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20176 case value_t::string:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20177 JSONSerializer<other_string_t>::to_json(*this, val.template get_ref<const other_string_t&>());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20178 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20179 case value_t::object:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20180 JSONSerializer<other_object_t>::to_json(*this, val.template get_ref<const other_object_t&>());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20181 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20182 case value_t::array:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20183 JSONSerializer<other_array_t>::to_json(*this, val.template get_ref<const other_array_t&>());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20184 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20185 case value_t::binary:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20186 JSONSerializer<other_binary_t>::to_json(*this, val.template get_ref<const other_binary_t&>());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20187 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20188 case value_t::null:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20189 *this = nullptr;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20190 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20191 case value_t::discarded:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20192 m_data.m_type = value_t::discarded;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20193 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20194 default: // LCOV_EXCL_LINE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20195 JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20196 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20197 JSON_ASSERT(m_data.m_type == val.type());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20198 set_parents();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20199 assert_invariant();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20200 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20201
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20202 /// @brief create a container (array or object) from an initializer list
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20203 /// @sa https://json.nlohmann.me/api/basic_json/basic_json/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20204 basic_json(initializer_list_t init,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20205 bool type_deduction = true,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20206 value_t manual_type = value_t::array)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20207 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20208 // check if each element is an array with two elements whose first
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20209 // element is a string
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20210 bool is_an_object = std::all_of(init.begin(), init.end(),
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20211 [](const detail::json_ref<basic_json>& element_ref)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20212 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20213 // The cast is to ensure op[size_type] is called, bearing in mind size_type may not be int;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20214 // (many string types can be constructed from 0 via its null-pointer guise, so we get a
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20215 // broken call to op[key_type], the wrong semantics and a 4804 warning on Windows)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20216 return element_ref->is_array() && element_ref->size() == 2 && (*element_ref)[static_cast<size_type>(0)].is_string();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20217 });
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20218
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20219 // adjust type if type deduction is not wanted
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20220 if (!type_deduction)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20221 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20222 // if array is wanted, do not create an object though possible
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20223 if (manual_type == value_t::array)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20224 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20225 is_an_object = false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20226 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20227
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20228 // if object is wanted but impossible, throw an exception
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20229 if (JSON_HEDLEY_UNLIKELY(manual_type == value_t::object && !is_an_object))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20230 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20231 JSON_THROW(type_error::create(301, "cannot create object from initializer list", nullptr));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20232 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20233 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20234
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20235 if (is_an_object)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20236 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20237 // the initializer list is a list of pairs -> create object
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20238 m_data.m_type = value_t::object;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20239 m_data.m_value = value_t::object;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20240
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20241 for (auto& element_ref : init)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20242 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20243 auto element = element_ref.moved_or_copied();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20244 m_data.m_value.object->emplace(
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20245 std::move(*((*element.m_data.m_value.array)[0].m_data.m_value.string)),
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20246 std::move((*element.m_data.m_value.array)[1]));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20247 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20248 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20249 else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20250 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20251 // the initializer list describes an array -> create array
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20252 m_data.m_type = value_t::array;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20253 m_data.m_value.array = create<array_t>(init.begin(), init.end());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20254 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20255
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20256 set_parents();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20257 assert_invariant();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20258 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20259
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20260 /// @brief explicitly create a binary array (without subtype)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20261 /// @sa https://json.nlohmann.me/api/basic_json/binary/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20262 JSON_HEDLEY_WARN_UNUSED_RESULT
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20263 static basic_json binary(const typename binary_t::container_type& init)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20264 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20265 auto res = basic_json();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20266 res.m_data.m_type = value_t::binary;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20267 res.m_data.m_value = init;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20268 return res;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20269 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20270
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20271 /// @brief explicitly create a binary array (with subtype)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20272 /// @sa https://json.nlohmann.me/api/basic_json/binary/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20273 JSON_HEDLEY_WARN_UNUSED_RESULT
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20274 static basic_json binary(const typename binary_t::container_type& init, typename binary_t::subtype_type subtype)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20275 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20276 auto res = basic_json();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20277 res.m_data.m_type = value_t::binary;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20278 res.m_data.m_value = binary_t(init, subtype);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20279 return res;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20280 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20281
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20282 /// @brief explicitly create a binary array
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20283 /// @sa https://json.nlohmann.me/api/basic_json/binary/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20284 JSON_HEDLEY_WARN_UNUSED_RESULT
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20285 static basic_json binary(typename binary_t::container_type&& init)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20286 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20287 auto res = basic_json();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20288 res.m_data.m_type = value_t::binary;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20289 res.m_data.m_value = std::move(init);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20290 return res;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20291 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20292
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20293 /// @brief explicitly create a binary array (with subtype)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20294 /// @sa https://json.nlohmann.me/api/basic_json/binary/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20295 JSON_HEDLEY_WARN_UNUSED_RESULT
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20296 static basic_json binary(typename binary_t::container_type&& init, typename binary_t::subtype_type subtype)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20297 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20298 auto res = basic_json();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20299 res.m_data.m_type = value_t::binary;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20300 res.m_data.m_value = binary_t(std::move(init), subtype);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20301 return res;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20302 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20303
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20304 /// @brief explicitly create an array from an initializer list
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20305 /// @sa https://json.nlohmann.me/api/basic_json/array/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20306 JSON_HEDLEY_WARN_UNUSED_RESULT
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20307 static basic_json array(initializer_list_t init = {})
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20308 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20309 return basic_json(init, false, value_t::array);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20310 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20311
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20312 /// @brief explicitly create an object from an initializer list
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20313 /// @sa https://json.nlohmann.me/api/basic_json/object/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20314 JSON_HEDLEY_WARN_UNUSED_RESULT
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20315 static basic_json object(initializer_list_t init = {})
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20316 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20317 return basic_json(init, false, value_t::object);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20318 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20319
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20320 /// @brief construct an array with count copies of given value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20321 /// @sa https://json.nlohmann.me/api/basic_json/basic_json/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20322 basic_json(size_type cnt, const basic_json& val):
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20323 m_data{cnt, val}
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20324 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20325 set_parents();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20326 assert_invariant();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20327 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20328
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20329 /// @brief construct a JSON container given an iterator range
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20330 /// @sa https://json.nlohmann.me/api/basic_json/basic_json/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20331 template < class InputIT, typename std::enable_if <
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20332 std::is_same<InputIT, typename basic_json_t::iterator>::value ||
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20333 std::is_same<InputIT, typename basic_json_t::const_iterator>::value, int >::type = 0 >
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20334 basic_json(InputIT first, InputIT last)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20335 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20336 JSON_ASSERT(first.m_object != nullptr);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20337 JSON_ASSERT(last.m_object != nullptr);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20338
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20339 // make sure iterator fits the current value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20340 if (JSON_HEDLEY_UNLIKELY(first.m_object != last.m_object))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20341 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20342 JSON_THROW(invalid_iterator::create(201, "iterators are not compatible", nullptr));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20343 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20344
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20345 // copy type from first iterator
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20346 m_data.m_type = first.m_object->m_data.m_type;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20347
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20348 // check if iterator range is complete for primitive values
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20349 switch (m_data.m_type)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20350 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20351 case value_t::boolean:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20352 case value_t::number_float:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20353 case value_t::number_integer:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20354 case value_t::number_unsigned:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20355 case value_t::string:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20356 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20357 if (JSON_HEDLEY_UNLIKELY(!first.m_it.primitive_iterator.is_begin()
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20358 || !last.m_it.primitive_iterator.is_end()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20359 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20360 JSON_THROW(invalid_iterator::create(204, "iterators out of range", first.m_object));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20361 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20362 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20363 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20364
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20365 case value_t::null:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20366 case value_t::object:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20367 case value_t::array:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20368 case value_t::binary:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20369 case value_t::discarded:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20370 default:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20371 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20372 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20373
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20374 switch (m_data.m_type)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20375 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20376 case value_t::number_integer:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20377 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20378 m_data.m_value.number_integer = first.m_object->m_data.m_value.number_integer;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20379 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20380 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20381
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20382 case value_t::number_unsigned:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20383 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20384 m_data.m_value.number_unsigned = first.m_object->m_data.m_value.number_unsigned;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20385 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20386 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20387
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20388 case value_t::number_float:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20389 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20390 m_data.m_value.number_float = first.m_object->m_data.m_value.number_float;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20391 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20392 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20393
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20394 case value_t::boolean:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20395 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20396 m_data.m_value.boolean = first.m_object->m_data.m_value.boolean;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20397 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20398 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20399
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20400 case value_t::string:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20401 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20402 m_data.m_value = *first.m_object->m_data.m_value.string;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20403 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20404 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20405
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20406 case value_t::object:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20407 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20408 m_data.m_value.object = create<object_t>(first.m_it.object_iterator,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20409 last.m_it.object_iterator);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20410 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20411 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20412
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20413 case value_t::array:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20414 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20415 m_data.m_value.array = create<array_t>(first.m_it.array_iterator,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20416 last.m_it.array_iterator);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20417 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20418 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20419
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20420 case value_t::binary:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20421 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20422 m_data.m_value = *first.m_object->m_data.m_value.binary;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20423 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20424 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20425
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20426 case value_t::null:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20427 case value_t::discarded:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20428 default:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20429 JSON_THROW(invalid_iterator::create(206, detail::concat("cannot construct with iterators from ", first.m_object->type_name()), first.m_object));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20430 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20431
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20432 set_parents();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20433 assert_invariant();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20434 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20435
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20436 ///////////////////////////////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20437 // other constructors and destructor //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20438 ///////////////////////////////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20439
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20440 template<typename JsonRef,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20441 detail::enable_if_t<detail::conjunction<detail::is_json_ref<JsonRef>,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20442 std::is_same<typename JsonRef::value_type, basic_json>>::value, int> = 0 >
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20443 basic_json(const JsonRef& ref) : basic_json(ref.moved_or_copied()) {}
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20444
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20445 /// @brief copy constructor
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20446 /// @sa https://json.nlohmann.me/api/basic_json/basic_json/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20447 basic_json(const basic_json& other)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20448 : json_base_class_t(other)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20449 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20450 m_data.m_type = other.m_data.m_type;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20451 // check of passed value is valid
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20452 other.assert_invariant();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20453
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20454 switch (m_data.m_type)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20455 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20456 case value_t::object:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20457 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20458 m_data.m_value = *other.m_data.m_value.object;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20459 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20460 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20461
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20462 case value_t::array:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20463 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20464 m_data.m_value = *other.m_data.m_value.array;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20465 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20466 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20467
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20468 case value_t::string:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20469 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20470 m_data.m_value = *other.m_data.m_value.string;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20471 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20472 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20473
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20474 case value_t::boolean:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20475 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20476 m_data.m_value = other.m_data.m_value.boolean;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20477 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20478 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20479
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20480 case value_t::number_integer:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20481 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20482 m_data.m_value = other.m_data.m_value.number_integer;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20483 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20484 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20485
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20486 case value_t::number_unsigned:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20487 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20488 m_data.m_value = other.m_data.m_value.number_unsigned;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20489 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20490 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20491
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20492 case value_t::number_float:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20493 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20494 m_data.m_value = other.m_data.m_value.number_float;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20495 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20496 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20497
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20498 case value_t::binary:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20499 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20500 m_data.m_value = *other.m_data.m_value.binary;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20501 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20502 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20503
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20504 case value_t::null:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20505 case value_t::discarded:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20506 default:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20507 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20508 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20509
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20510 set_parents();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20511 assert_invariant();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20512 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20513
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20514 /// @brief move constructor
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20515 /// @sa https://json.nlohmann.me/api/basic_json/basic_json/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20516 basic_json(basic_json&& other) noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20517 : json_base_class_t(std::forward<json_base_class_t>(other)),
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20518 m_data(std::move(other.m_data))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20519 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20520 // check that passed value is valid
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20521 other.assert_invariant(false);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20522
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20523 // invalidate payload
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20524 other.m_data.m_type = value_t::null;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20525 other.m_data.m_value = {};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20526
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20527 set_parents();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20528 assert_invariant();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20529 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20530
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20531 /// @brief copy assignment
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20532 /// @sa https://json.nlohmann.me/api/basic_json/operator=/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20533 basic_json& operator=(basic_json other) noexcept (
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20534 std::is_nothrow_move_constructible<value_t>::value&&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20535 std::is_nothrow_move_assignable<value_t>::value&&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20536 std::is_nothrow_move_constructible<json_value>::value&&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20537 std::is_nothrow_move_assignable<json_value>::value&&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20538 std::is_nothrow_move_assignable<json_base_class_t>::value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20539 )
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20540 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20541 // check that passed value is valid
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20542 other.assert_invariant();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20543
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20544 using std::swap;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20545 swap(m_data.m_type, other.m_data.m_type);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20546 swap(m_data.m_value, other.m_data.m_value);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20547 json_base_class_t::operator=(std::move(other));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20548
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20549 set_parents();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20550 assert_invariant();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20551 return *this;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20552 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20553
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20554 /// @brief destructor
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20555 /// @sa https://json.nlohmann.me/api/basic_json/~basic_json/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20556 ~basic_json() noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20557 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20558 assert_invariant(false);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20559 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20560
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20561 /// @}
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20562
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20563 public:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20564 ///////////////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20565 // object inspection //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20566 ///////////////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20567
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20568 /// @name object inspection
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20569 /// Functions to inspect the type of a JSON value.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20570 /// @{
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20571
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20572 /// @brief serialization
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20573 /// @sa https://json.nlohmann.me/api/basic_json/dump/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20574 string_t dump(const int indent = -1,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20575 const char indent_char = ' ',
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20576 const bool ensure_ascii = false,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20577 const error_handler_t error_handler = error_handler_t::strict) const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20578 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20579 string_t result;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20580 serializer s(detail::output_adapter<char, string_t>(result), indent_char, error_handler);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20581
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20582 if (indent >= 0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20583 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20584 s.dump(*this, true, ensure_ascii, static_cast<unsigned int>(indent));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20585 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20586 else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20587 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20588 s.dump(*this, false, ensure_ascii, 0);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20589 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20590
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20591 return result;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20592 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20593
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20594 /// @brief return the type of the JSON value (explicit)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20595 /// @sa https://json.nlohmann.me/api/basic_json/type/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20596 constexpr value_t type() const noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20597 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20598 return m_data.m_type;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20599 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20600
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20601 /// @brief return whether type is primitive
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20602 /// @sa https://json.nlohmann.me/api/basic_json/is_primitive/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20603 constexpr bool is_primitive() const noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20604 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20605 return is_null() || is_string() || is_boolean() || is_number() || is_binary();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20606 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20607
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20608 /// @brief return whether type is structured
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20609 /// @sa https://json.nlohmann.me/api/basic_json/is_structured/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20610 constexpr bool is_structured() const noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20611 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20612 return is_array() || is_object();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20613 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20614
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20615 /// @brief return whether value is null
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20616 /// @sa https://json.nlohmann.me/api/basic_json/is_null/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20617 constexpr bool is_null() const noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20618 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20619 return m_data.m_type == value_t::null;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20620 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20621
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20622 /// @brief return whether value is a boolean
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20623 /// @sa https://json.nlohmann.me/api/basic_json/is_boolean/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20624 constexpr bool is_boolean() const noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20625 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20626 return m_data.m_type == value_t::boolean;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20627 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20628
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20629 /// @brief return whether value is a number
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20630 /// @sa https://json.nlohmann.me/api/basic_json/is_number/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20631 constexpr bool is_number() const noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20632 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20633 return is_number_integer() || is_number_float();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20634 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20635
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20636 /// @brief return whether value is an integer number
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20637 /// @sa https://json.nlohmann.me/api/basic_json/is_number_integer/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20638 constexpr bool is_number_integer() const noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20639 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20640 return m_data.m_type == value_t::number_integer || m_data.m_type == value_t::number_unsigned;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20641 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20642
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20643 /// @brief return whether value is an unsigned integer number
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20644 /// @sa https://json.nlohmann.me/api/basic_json/is_number_unsigned/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20645 constexpr bool is_number_unsigned() const noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20646 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20647 return m_data.m_type == value_t::number_unsigned;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20648 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20649
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20650 /// @brief return whether value is a floating-point number
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20651 /// @sa https://json.nlohmann.me/api/basic_json/is_number_float/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20652 constexpr bool is_number_float() const noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20653 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20654 return m_data.m_type == value_t::number_float;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20655 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20656
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20657 /// @brief return whether value is an object
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20658 /// @sa https://json.nlohmann.me/api/basic_json/is_object/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20659 constexpr bool is_object() const noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20660 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20661 return m_data.m_type == value_t::object;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20662 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20663
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20664 /// @brief return whether value is an array
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20665 /// @sa https://json.nlohmann.me/api/basic_json/is_array/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20666 constexpr bool is_array() const noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20667 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20668 return m_data.m_type == value_t::array;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20669 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20670
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20671 /// @brief return whether value is a string
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20672 /// @sa https://json.nlohmann.me/api/basic_json/is_string/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20673 constexpr bool is_string() const noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20674 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20675 return m_data.m_type == value_t::string;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20676 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20677
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20678 /// @brief return whether value is a binary array
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20679 /// @sa https://json.nlohmann.me/api/basic_json/is_binary/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20680 constexpr bool is_binary() const noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20681 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20682 return m_data.m_type == value_t::binary;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20683 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20684
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20685 /// @brief return whether value is discarded
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20686 /// @sa https://json.nlohmann.me/api/basic_json/is_discarded/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20687 constexpr bool is_discarded() const noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20688 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20689 return m_data.m_type == value_t::discarded;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20690 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20691
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20692 /// @brief return the type of the JSON value (implicit)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20693 /// @sa https://json.nlohmann.me/api/basic_json/operator_value_t/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20694 constexpr operator value_t() const noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20695 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20696 return m_data.m_type;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20697 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20698
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20699 /// @}
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20700
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20701 private:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20702 //////////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20703 // value access //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20704 //////////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20705
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20706 /// get a boolean (explicit)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20707 boolean_t get_impl(boolean_t* /*unused*/) const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20708 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20709 if (JSON_HEDLEY_LIKELY(is_boolean()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20710 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20711 return m_data.m_value.boolean;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20712 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20713
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20714 JSON_THROW(type_error::create(302, detail::concat("type must be boolean, but is ", type_name()), this));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20715 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20716
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20717 /// get a pointer to the value (object)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20718 object_t* get_impl_ptr(object_t* /*unused*/) noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20719 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20720 return is_object() ? m_data.m_value.object : nullptr;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20721 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20722
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20723 /// get a pointer to the value (object)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20724 constexpr const object_t* get_impl_ptr(const object_t* /*unused*/) const noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20725 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20726 return is_object() ? m_data.m_value.object : nullptr;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20727 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20728
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20729 /// get a pointer to the value (array)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20730 array_t* get_impl_ptr(array_t* /*unused*/) noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20731 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20732 return is_array() ? m_data.m_value.array : nullptr;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20733 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20734
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20735 /// get a pointer to the value (array)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20736 constexpr const array_t* get_impl_ptr(const array_t* /*unused*/) const noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20737 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20738 return is_array() ? m_data.m_value.array : nullptr;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20739 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20740
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20741 /// get a pointer to the value (string)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20742 string_t* get_impl_ptr(string_t* /*unused*/) noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20743 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20744 return is_string() ? m_data.m_value.string : nullptr;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20745 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20746
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20747 /// get a pointer to the value (string)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20748 constexpr const string_t* get_impl_ptr(const string_t* /*unused*/) const noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20749 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20750 return is_string() ? m_data.m_value.string : nullptr;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20751 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20752
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20753 /// get a pointer to the value (boolean)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20754 boolean_t* get_impl_ptr(boolean_t* /*unused*/) noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20755 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20756 return is_boolean() ? &m_data.m_value.boolean : nullptr;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20757 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20758
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20759 /// get a pointer to the value (boolean)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20760 constexpr const boolean_t* get_impl_ptr(const boolean_t* /*unused*/) const noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20761 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20762 return is_boolean() ? &m_data.m_value.boolean : nullptr;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20763 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20764
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20765 /// get a pointer to the value (integer number)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20766 number_integer_t* get_impl_ptr(number_integer_t* /*unused*/) noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20767 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20768 return is_number_integer() ? &m_data.m_value.number_integer : nullptr;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20769 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20770
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20771 /// get a pointer to the value (integer number)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20772 constexpr const number_integer_t* get_impl_ptr(const number_integer_t* /*unused*/) const noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20773 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20774 return is_number_integer() ? &m_data.m_value.number_integer : nullptr;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20775 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20776
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20777 /// get a pointer to the value (unsigned number)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20778 number_unsigned_t* get_impl_ptr(number_unsigned_t* /*unused*/) noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20779 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20780 return is_number_unsigned() ? &m_data.m_value.number_unsigned : nullptr;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20781 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20782
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20783 /// get a pointer to the value (unsigned number)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20784 constexpr const number_unsigned_t* get_impl_ptr(const number_unsigned_t* /*unused*/) const noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20785 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20786 return is_number_unsigned() ? &m_data.m_value.number_unsigned : nullptr;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20787 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20788
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20789 /// get a pointer to the value (floating-point number)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20790 number_float_t* get_impl_ptr(number_float_t* /*unused*/) noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20791 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20792 return is_number_float() ? &m_data.m_value.number_float : nullptr;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20793 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20794
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20795 /// get a pointer to the value (floating-point number)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20796 constexpr const number_float_t* get_impl_ptr(const number_float_t* /*unused*/) const noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20797 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20798 return is_number_float() ? &m_data.m_value.number_float : nullptr;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20799 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20800
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20801 /// get a pointer to the value (binary)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20802 binary_t* get_impl_ptr(binary_t* /*unused*/) noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20803 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20804 return is_binary() ? m_data.m_value.binary : nullptr;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20805 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20806
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20807 /// get a pointer to the value (binary)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20808 constexpr const binary_t* get_impl_ptr(const binary_t* /*unused*/) const noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20809 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20810 return is_binary() ? m_data.m_value.binary : nullptr;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20811 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20812
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20813 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20814 @brief helper function to implement get_ref()
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20815
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20816 This function helps to implement get_ref() without code duplication for
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20817 const and non-const overloads
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20818
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20819 @tparam ThisType will be deduced as `basic_json` or `const basic_json`
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20820
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20821 @throw type_error.303 if ReferenceType does not match underlying value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20822 type of the current JSON
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20823 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20824 template<typename ReferenceType, typename ThisType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20825 static ReferenceType get_ref_impl(ThisType& obj)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20826 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20827 // delegate the call to get_ptr<>()
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20828 auto* ptr = obj.template get_ptr<typename std::add_pointer<ReferenceType>::type>();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20829
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20830 if (JSON_HEDLEY_LIKELY(ptr != nullptr))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20831 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20832 return *ptr;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20833 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20834
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20835 JSON_THROW(type_error::create(303, detail::concat("incompatible ReferenceType for get_ref, actual type is ", obj.type_name()), &obj));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20836 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20837
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20838 public:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20839 /// @name value access
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20840 /// Direct access to the stored value of a JSON value.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20841 /// @{
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20842
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20843 /// @brief get a pointer value (implicit)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20844 /// @sa https://json.nlohmann.me/api/basic_json/get_ptr/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20845 template<typename PointerType, typename std::enable_if<
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20846 std::is_pointer<PointerType>::value, int>::type = 0>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20847 auto get_ptr() noexcept -> decltype(std::declval<basic_json_t&>().get_impl_ptr(std::declval<PointerType>()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20848 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20849 // delegate the call to get_impl_ptr<>()
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20850 return get_impl_ptr(static_cast<PointerType>(nullptr));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20851 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20852
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20853 /// @brief get a pointer value (implicit)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20854 /// @sa https://json.nlohmann.me/api/basic_json/get_ptr/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20855 template < typename PointerType, typename std::enable_if <
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20856 std::is_pointer<PointerType>::value&&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20857 std::is_const<typename std::remove_pointer<PointerType>::type>::value, int >::type = 0 >
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20858 constexpr auto get_ptr() const noexcept -> decltype(std::declval<const basic_json_t&>().get_impl_ptr(std::declval<PointerType>()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20859 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20860 // delegate the call to get_impl_ptr<>() const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20861 return get_impl_ptr(static_cast<PointerType>(nullptr));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20862 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20863
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20864 private:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20865 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20866 @brief get a value (explicit)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20867
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20868 Explicit type conversion between the JSON value and a compatible value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20869 which is [CopyConstructible](https://en.cppreference.com/w/cpp/named_req/CopyConstructible)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20870 and [DefaultConstructible](https://en.cppreference.com/w/cpp/named_req/DefaultConstructible).
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20871 The value is converted by calling the @ref json_serializer<ValueType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20872 `from_json()` method.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20873
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20874 The function is equivalent to executing
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20875 @code {.cpp}
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20876 ValueType ret;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20877 JSONSerializer<ValueType>::from_json(*this, ret);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20878 return ret;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20879 @endcode
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20880
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20881 This overloads is chosen if:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20882 - @a ValueType is not @ref basic_json,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20883 - @ref json_serializer<ValueType> has a `from_json()` method of the form
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20884 `void from_json(const basic_json&, ValueType&)`, and
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20885 - @ref json_serializer<ValueType> does not have a `from_json()` method of
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20886 the form `ValueType from_json(const basic_json&)`
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20887
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20888 @tparam ValueType the returned value type
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20889
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20890 @return copy of the JSON value, converted to @a ValueType
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20891
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20892 @throw what @ref json_serializer<ValueType> `from_json()` method throws
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20893
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20894 @liveexample{The example below shows several conversions from JSON values
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20895 to other types. There a few things to note: (1) Floating-point numbers can
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20896 be converted to integers\, (2) A JSON array can be converted to a standard
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20897 `std::vector<short>`\, (3) A JSON object can be converted to C++
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20898 associative containers such as `std::unordered_map<std::string\,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20899 json>`.,get__ValueType_const}
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20900
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20901 @since version 2.1.0
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20902 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20903 template < typename ValueType,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20904 detail::enable_if_t <
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20905 detail::is_default_constructible<ValueType>::value&&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20906 detail::has_from_json<basic_json_t, ValueType>::value,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20907 int > = 0 >
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20908 ValueType get_impl(detail::priority_tag<0> /*unused*/) const noexcept(noexcept(
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20909 JSONSerializer<ValueType>::from_json(std::declval<const basic_json_t&>(), std::declval<ValueType&>())))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20910 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20911 auto ret = ValueType();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20912 JSONSerializer<ValueType>::from_json(*this, ret);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20913 return ret;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20914 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20915
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20916 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20917 @brief get a value (explicit); special case
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20918
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20919 Explicit type conversion between the JSON value and a compatible value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20920 which is **not** [CopyConstructible](https://en.cppreference.com/w/cpp/named_req/CopyConstructible)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20921 and **not** [DefaultConstructible](https://en.cppreference.com/w/cpp/named_req/DefaultConstructible).
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20922 The value is converted by calling the @ref json_serializer<ValueType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20923 `from_json()` method.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20924
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20925 The function is equivalent to executing
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20926 @code {.cpp}
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20927 return JSONSerializer<ValueType>::from_json(*this);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20928 @endcode
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20929
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20930 This overloads is chosen if:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20931 - @a ValueType is not @ref basic_json and
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20932 - @ref json_serializer<ValueType> has a `from_json()` method of the form
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20933 `ValueType from_json(const basic_json&)`
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20934
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20935 @note If @ref json_serializer<ValueType> has both overloads of
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20936 `from_json()`, this one is chosen.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20937
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20938 @tparam ValueType the returned value type
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20939
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20940 @return copy of the JSON value, converted to @a ValueType
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20941
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20942 @throw what @ref json_serializer<ValueType> `from_json()` method throws
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20943
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20944 @since version 2.1.0
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20945 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20946 template < typename ValueType,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20947 detail::enable_if_t <
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20948 detail::has_non_default_from_json<basic_json_t, ValueType>::value,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20949 int > = 0 >
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20950 ValueType get_impl(detail::priority_tag<1> /*unused*/) const noexcept(noexcept(
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20951 JSONSerializer<ValueType>::from_json(std::declval<const basic_json_t&>())))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20952 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20953 return JSONSerializer<ValueType>::from_json(*this);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20954 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20955
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20956 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20957 @brief get special-case overload
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20958
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20959 This overloads converts the current @ref basic_json in a different
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20960 @ref basic_json type
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20961
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20962 @tparam BasicJsonType == @ref basic_json
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20963
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20964 @return a copy of *this, converted into @a BasicJsonType
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20965
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20966 @complexity Depending on the implementation of the called `from_json()`
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20967 method.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20968
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20969 @since version 3.2.0
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20970 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20971 template < typename BasicJsonType,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20972 detail::enable_if_t <
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20973 detail::is_basic_json<BasicJsonType>::value,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20974 int > = 0 >
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20975 BasicJsonType get_impl(detail::priority_tag<2> /*unused*/) const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20976 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20977 return *this;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20978 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20979
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20980 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20981 @brief get special-case overload
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20982
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20983 This overloads avoids a lot of template boilerplate, it can be seen as the
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20984 identity method
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20985
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20986 @tparam BasicJsonType == @ref basic_json
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20987
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20988 @return a copy of *this
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20989
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20990 @complexity Constant.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20991
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20992 @since version 2.1.0
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20993 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20994 template<typename BasicJsonType,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20995 detail::enable_if_t<
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20996 std::is_same<BasicJsonType, basic_json_t>::value,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20997 int> = 0>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20998 basic_json get_impl(detail::priority_tag<3> /*unused*/) const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20999 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21000 return *this;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21001 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21002
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21003 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21004 @brief get a pointer value (explicit)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21005 @copydoc get()
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21006 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21007 template<typename PointerType,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21008 detail::enable_if_t<
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21009 std::is_pointer<PointerType>::value,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21010 int> = 0>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21011 constexpr auto get_impl(detail::priority_tag<4> /*unused*/) const noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21012 -> decltype(std::declval<const basic_json_t&>().template get_ptr<PointerType>())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21013 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21014 // delegate the call to get_ptr
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21015 return get_ptr<PointerType>();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21016 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21017
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21018 public:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21019 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21020 @brief get a (pointer) value (explicit)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21021
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21022 Performs explicit type conversion between the JSON value and a compatible value if required.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21023
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21024 - If the requested type is a pointer to the internally stored JSON value that pointer is returned.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21025 No copies are made.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21026
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21027 - If the requested type is the current @ref basic_json, or a different @ref basic_json convertible
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21028 from the current @ref basic_json.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21029
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21030 - Otherwise the value is converted by calling the @ref json_serializer<ValueType> `from_json()`
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21031 method.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21032
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21033 @tparam ValueTypeCV the provided value type
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21034 @tparam ValueType the returned value type
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21035
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21036 @return copy of the JSON value, converted to @tparam ValueType if necessary
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21037
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21038 @throw what @ref json_serializer<ValueType> `from_json()` method throws if conversion is required
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21039
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21040 @since version 2.1.0
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21041 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21042 template < typename ValueTypeCV, typename ValueType = detail::uncvref_t<ValueTypeCV>>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21043 #if defined(JSON_HAS_CPP_14)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21044 constexpr
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21045 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21046 auto get() const noexcept(
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21047 noexcept(std::declval<const basic_json_t&>().template get_impl<ValueType>(detail::priority_tag<4> {})))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21048 -> decltype(std::declval<const basic_json_t&>().template get_impl<ValueType>(detail::priority_tag<4> {}))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21049 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21050 // we cannot static_assert on ValueTypeCV being non-const, because
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21051 // there is support for get<const basic_json_t>(), which is why we
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21052 // still need the uncvref
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21053 static_assert(!std::is_reference<ValueTypeCV>::value,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21054 "get() cannot be used with reference types, you might want to use get_ref()");
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21055 return get_impl<ValueType>(detail::priority_tag<4> {});
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21056 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21057
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21058 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21059 @brief get a pointer value (explicit)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21060
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21061 Explicit pointer access to the internally stored JSON value. No copies are
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21062 made.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21063
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21064 @warning The pointer becomes invalid if the underlying JSON object
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21065 changes.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21066
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21067 @tparam PointerType pointer type; must be a pointer to @ref array_t, @ref
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21068 object_t, @ref string_t, @ref boolean_t, @ref number_integer_t,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21069 @ref number_unsigned_t, or @ref number_float_t.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21070
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21071 @return pointer to the internally stored JSON value if the requested
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21072 pointer type @a PointerType fits to the JSON value; `nullptr` otherwise
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21073
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21074 @complexity Constant.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21075
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21076 @liveexample{The example below shows how pointers to internal values of a
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21077 JSON value can be requested. Note that no type conversions are made and a
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21078 `nullptr` is returned if the value and the requested pointer type does not
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21079 match.,get__PointerType}
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21080
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21081 @sa see @ref get_ptr() for explicit pointer-member access
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21082
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21083 @since version 1.0.0
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21084 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21085 template<typename PointerType, typename std::enable_if<
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21086 std::is_pointer<PointerType>::value, int>::type = 0>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21087 auto get() noexcept -> decltype(std::declval<basic_json_t&>().template get_ptr<PointerType>())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21088 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21089 // delegate the call to get_ptr
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21090 return get_ptr<PointerType>();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21091 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21092
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21093 /// @brief get a value (explicit)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21094 /// @sa https://json.nlohmann.me/api/basic_json/get_to/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21095 template < typename ValueType,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21096 detail::enable_if_t <
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21097 !detail::is_basic_json<ValueType>::value&&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21098 detail::has_from_json<basic_json_t, ValueType>::value,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21099 int > = 0 >
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21100 ValueType & get_to(ValueType& v) const noexcept(noexcept(
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21101 JSONSerializer<ValueType>::from_json(std::declval<const basic_json_t&>(), v)))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21102 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21103 JSONSerializer<ValueType>::from_json(*this, v);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21104 return v;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21105 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21106
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21107 // specialization to allow calling get_to with a basic_json value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21108 // see https://github.com/nlohmann/json/issues/2175
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21109 template<typename ValueType,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21110 detail::enable_if_t <
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21111 detail::is_basic_json<ValueType>::value,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21112 int> = 0>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21113 ValueType & get_to(ValueType& v) const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21114 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21115 v = *this;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21116 return v;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21117 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21118
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21119 template <
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21120 typename T, std::size_t N,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21121 typename Array = T (&)[N], // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21122 detail::enable_if_t <
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21123 detail::has_from_json<basic_json_t, Array>::value, int > = 0 >
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21124 Array get_to(T (&v)[N]) const // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21125 noexcept(noexcept(JSONSerializer<Array>::from_json(
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21126 std::declval<const basic_json_t&>(), v)))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21127 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21128 JSONSerializer<Array>::from_json(*this, v);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21129 return v;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21130 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21131
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21132 /// @brief get a reference value (implicit)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21133 /// @sa https://json.nlohmann.me/api/basic_json/get_ref/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21134 template<typename ReferenceType, typename std::enable_if<
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21135 std::is_reference<ReferenceType>::value, int>::type = 0>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21136 ReferenceType get_ref()
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21137 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21138 // delegate call to get_ref_impl
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21139 return get_ref_impl<ReferenceType>(*this);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21140 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21141
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21142 /// @brief get a reference value (implicit)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21143 /// @sa https://json.nlohmann.me/api/basic_json/get_ref/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21144 template < typename ReferenceType, typename std::enable_if <
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21145 std::is_reference<ReferenceType>::value&&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21146 std::is_const<typename std::remove_reference<ReferenceType>::type>::value, int >::type = 0 >
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21147 ReferenceType get_ref() const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21148 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21149 // delegate call to get_ref_impl
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21150 return get_ref_impl<ReferenceType>(*this);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21151 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21152
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21153 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21154 @brief get a value (implicit)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21155
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21156 Implicit type conversion between the JSON value and a compatible value.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21157 The call is realized by calling @ref get() const.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21158
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21159 @tparam ValueType non-pointer type compatible to the JSON value, for
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21160 instance `int` for JSON integer numbers, `bool` for JSON booleans, or
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21161 `std::vector` types for JSON arrays. The character type of @ref string_t
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21162 as well as an initializer list of this type is excluded to avoid
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21163 ambiguities as these types implicitly convert to `std::string`.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21164
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21165 @return copy of the JSON value, converted to type @a ValueType
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21166
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21167 @throw type_error.302 in case passed type @a ValueType is incompatible
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21168 to the JSON value type (e.g., the JSON value is of type boolean, but a
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21169 string is requested); see example below
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21170
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21171 @complexity Linear in the size of the JSON value.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21172
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21173 @liveexample{The example below shows several conversions from JSON values
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21174 to other types. There a few things to note: (1) Floating-point numbers can
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21175 be converted to integers\, (2) A JSON array can be converted to a standard
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21176 `std::vector<short>`\, (3) A JSON object can be converted to C++
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21177 associative containers such as `std::unordered_map<std::string\,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21178 json>`.,operator__ValueType}
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21179
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21180 @since version 1.0.0
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21181 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21182 template < typename ValueType, typename std::enable_if <
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21183 detail::conjunction <
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21184 detail::negation<std::is_pointer<ValueType>>,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21185 detail::negation<std::is_same<ValueType, std::nullptr_t>>,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21186 detail::negation<std::is_same<ValueType, detail::json_ref<basic_json>>>,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21187 detail::negation<std::is_same<ValueType, typename string_t::value_type>>,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21188 detail::negation<detail::is_basic_json<ValueType>>,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21189 detail::negation<std::is_same<ValueType, std::initializer_list<typename string_t::value_type>>>,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21190 #if defined(JSON_HAS_CPP_17) && (defined(__GNUC__) || (defined(_MSC_VER) && _MSC_VER >= 1910 && _MSC_VER <= 1914))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21191 detail::negation<std::is_same<ValueType, std::string_view>>,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21192 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21193 #if defined(JSON_HAS_CPP_17) && JSON_HAS_STATIC_RTTI
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21194 detail::negation<std::is_same<ValueType, std::any>>,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21195 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21196 detail::is_detected_lazy<detail::get_template_function, const basic_json_t&, ValueType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21197 >::value, int >::type = 0 >
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21198 JSON_EXPLICIT operator ValueType() const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21199 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21200 // delegate the call to get<>() const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21201 return get<ValueType>();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21202 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21203
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21204 /// @brief get a binary value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21205 /// @sa https://json.nlohmann.me/api/basic_json/get_binary/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21206 binary_t& get_binary()
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21207 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21208 if (!is_binary())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21209 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21210 JSON_THROW(type_error::create(302, detail::concat("type must be binary, but is ", type_name()), this));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21211 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21212
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21213 return *get_ptr<binary_t*>();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21214 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21215
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21216 /// @brief get a binary value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21217 /// @sa https://json.nlohmann.me/api/basic_json/get_binary/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21218 const binary_t& get_binary() const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21219 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21220 if (!is_binary())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21221 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21222 JSON_THROW(type_error::create(302, detail::concat("type must be binary, but is ", type_name()), this));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21223 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21224
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21225 return *get_ptr<const binary_t*>();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21226 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21227
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21228 /// @}
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21229
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21230 ////////////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21231 // element access //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21232 ////////////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21233
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21234 /// @name element access
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21235 /// Access to the JSON value.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21236 /// @{
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21237
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21238 /// @brief access specified array element with bounds checking
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21239 /// @sa https://json.nlohmann.me/api/basic_json/at/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21240 reference at(size_type idx)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21241 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21242 // at only works for arrays
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21243 if (JSON_HEDLEY_LIKELY(is_array()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21244 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21245 JSON_TRY
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21246 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21247 return set_parent(m_data.m_value.array->at(idx));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21248 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21249 JSON_CATCH (std::out_of_range&)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21250 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21251 // create better exception explanation
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21252 JSON_THROW(out_of_range::create(401, detail::concat("array index ", std::to_string(idx), " is out of range"), this));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21253 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21254 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21255 else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21256 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21257 JSON_THROW(type_error::create(304, detail::concat("cannot use at() with ", type_name()), this));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21258 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21259 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21260
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21261 /// @brief access specified array element with bounds checking
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21262 /// @sa https://json.nlohmann.me/api/basic_json/at/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21263 const_reference at(size_type idx) const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21264 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21265 // at only works for arrays
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21266 if (JSON_HEDLEY_LIKELY(is_array()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21267 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21268 JSON_TRY
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21269 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21270 return m_data.m_value.array->at(idx);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21271 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21272 JSON_CATCH (std::out_of_range&)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21273 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21274 // create better exception explanation
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21275 JSON_THROW(out_of_range::create(401, detail::concat("array index ", std::to_string(idx), " is out of range"), this));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21276 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21277 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21278 else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21279 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21280 JSON_THROW(type_error::create(304, detail::concat("cannot use at() with ", type_name()), this));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21281 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21282 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21283
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21284 /// @brief access specified object element with bounds checking
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21285 /// @sa https://json.nlohmann.me/api/basic_json/at/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21286 reference at(const typename object_t::key_type& key)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21287 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21288 // at only works for objects
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21289 if (JSON_HEDLEY_UNLIKELY(!is_object()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21290 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21291 JSON_THROW(type_error::create(304, detail::concat("cannot use at() with ", type_name()), this));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21292 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21293
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21294 auto it = m_data.m_value.object->find(key);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21295 if (it == m_data.m_value.object->end())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21296 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21297 JSON_THROW(out_of_range::create(403, detail::concat("key '", key, "' not found"), this));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21298 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21299 return set_parent(it->second);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21300 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21301
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21302 /// @brief access specified object element with bounds checking
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21303 /// @sa https://json.nlohmann.me/api/basic_json/at/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21304 template<class KeyType, detail::enable_if_t<
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21305 detail::is_usable_as_basic_json_key_type<basic_json_t, KeyType>::value, int> = 0>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21306 reference at(KeyType && key)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21307 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21308 // at only works for objects
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21309 if (JSON_HEDLEY_UNLIKELY(!is_object()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21310 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21311 JSON_THROW(type_error::create(304, detail::concat("cannot use at() with ", type_name()), this));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21312 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21313
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21314 auto it = m_data.m_value.object->find(std::forward<KeyType>(key));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21315 if (it == m_data.m_value.object->end())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21316 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21317 JSON_THROW(out_of_range::create(403, detail::concat("key '", string_t(std::forward<KeyType>(key)), "' not found"), this));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21318 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21319 return set_parent(it->second);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21320 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21321
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21322 /// @brief access specified object element with bounds checking
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21323 /// @sa https://json.nlohmann.me/api/basic_json/at/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21324 const_reference at(const typename object_t::key_type& key) const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21325 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21326 // at only works for objects
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21327 if (JSON_HEDLEY_UNLIKELY(!is_object()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21328 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21329 JSON_THROW(type_error::create(304, detail::concat("cannot use at() with ", type_name()), this));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21330 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21331
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21332 auto it = m_data.m_value.object->find(key);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21333 if (it == m_data.m_value.object->end())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21334 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21335 JSON_THROW(out_of_range::create(403, detail::concat("key '", key, "' not found"), this));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21336 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21337 return it->second;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21338 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21339
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21340 /// @brief access specified object element with bounds checking
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21341 /// @sa https://json.nlohmann.me/api/basic_json/at/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21342 template<class KeyType, detail::enable_if_t<
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21343 detail::is_usable_as_basic_json_key_type<basic_json_t, KeyType>::value, int> = 0>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21344 const_reference at(KeyType && key) const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21345 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21346 // at only works for objects
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21347 if (JSON_HEDLEY_UNLIKELY(!is_object()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21348 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21349 JSON_THROW(type_error::create(304, detail::concat("cannot use at() with ", type_name()), this));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21350 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21351
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21352 auto it = m_data.m_value.object->find(std::forward<KeyType>(key));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21353 if (it == m_data.m_value.object->end())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21354 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21355 JSON_THROW(out_of_range::create(403, detail::concat("key '", string_t(std::forward<KeyType>(key)), "' not found"), this));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21356 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21357 return it->second;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21358 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21359
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21360 /// @brief access specified array element
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21361 /// @sa https://json.nlohmann.me/api/basic_json/operator%5B%5D/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21362 reference operator[](size_type idx)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21363 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21364 // implicitly convert null value to an empty array
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21365 if (is_null())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21366 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21367 m_data.m_type = value_t::array;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21368 m_data.m_value.array = create<array_t>();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21369 assert_invariant();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21370 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21371
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21372 // operator[] only works for arrays
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21373 if (JSON_HEDLEY_LIKELY(is_array()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21374 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21375 // fill up array with null values if given idx is outside range
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21376 if (idx >= m_data.m_value.array->size())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21377 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21378 #if JSON_DIAGNOSTICS
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21379 // remember array size & capacity before resizing
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21380 const auto old_size = m_data.m_value.array->size();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21381 const auto old_capacity = m_data.m_value.array->capacity();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21382 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21383 m_data.m_value.array->resize(idx + 1);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21384
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21385 #if JSON_DIAGNOSTICS
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21386 if (JSON_HEDLEY_UNLIKELY(m_data.m_value.array->capacity() != old_capacity))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21387 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21388 // capacity has changed: update all parents
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21389 set_parents();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21390 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21391 else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21392 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21393 // set parent for values added above
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21394 set_parents(begin() + static_cast<typename iterator::difference_type>(old_size), static_cast<typename iterator::difference_type>(idx + 1 - old_size));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21395 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21396 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21397 assert_invariant();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21398 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21399
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21400 return m_data.m_value.array->operator[](idx);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21401 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21402
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21403 JSON_THROW(type_error::create(305, detail::concat("cannot use operator[] with a numeric argument with ", type_name()), this));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21404 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21405
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21406 /// @brief access specified array element
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21407 /// @sa https://json.nlohmann.me/api/basic_json/operator%5B%5D/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21408 const_reference operator[](size_type idx) const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21409 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21410 // const operator[] only works for arrays
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21411 if (JSON_HEDLEY_LIKELY(is_array()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21412 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21413 return m_data.m_value.array->operator[](idx);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21414 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21415
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21416 JSON_THROW(type_error::create(305, detail::concat("cannot use operator[] with a numeric argument with ", type_name()), this));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21417 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21418
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21419 /// @brief access specified object element
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21420 /// @sa https://json.nlohmann.me/api/basic_json/operator%5B%5D/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21421 reference operator[](typename object_t::key_type key)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21422 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21423 // implicitly convert null value to an empty object
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21424 if (is_null())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21425 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21426 m_data.m_type = value_t::object;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21427 m_data.m_value.object = create<object_t>();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21428 assert_invariant();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21429 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21430
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21431 // operator[] only works for objects
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21432 if (JSON_HEDLEY_LIKELY(is_object()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21433 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21434 auto result = m_data.m_value.object->emplace(std::move(key), nullptr);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21435 return set_parent(result.first->second);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21436 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21437
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21438 JSON_THROW(type_error::create(305, detail::concat("cannot use operator[] with a string argument with ", type_name()), this));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21439 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21440
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21441 /// @brief access specified object element
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21442 /// @sa https://json.nlohmann.me/api/basic_json/operator%5B%5D/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21443 const_reference operator[](const typename object_t::key_type& key) const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21444 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21445 // const operator[] only works for objects
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21446 if (JSON_HEDLEY_LIKELY(is_object()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21447 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21448 auto it = m_data.m_value.object->find(key);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21449 JSON_ASSERT(it != m_data.m_value.object->end());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21450 return it->second;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21451 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21452
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21453 JSON_THROW(type_error::create(305, detail::concat("cannot use operator[] with a string argument with ", type_name()), this));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21454 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21455
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21456 // these two functions resolve a (const) char * ambiguity affecting Clang and MSVC
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21457 // (they seemingly cannot be constrained to resolve the ambiguity)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21458 template<typename T>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21459 reference operator[](T* key)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21460 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21461 return operator[](typename object_t::key_type(key));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21462 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21463
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21464 template<typename T>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21465 const_reference operator[](T* key) const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21466 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21467 return operator[](typename object_t::key_type(key));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21468 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21469
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21470 /// @brief access specified object element
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21471 /// @sa https://json.nlohmann.me/api/basic_json/operator%5B%5D/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21472 template<class KeyType, detail::enable_if_t<
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21473 detail::is_usable_as_basic_json_key_type<basic_json_t, KeyType>::value, int > = 0 >
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21474 reference operator[](KeyType && key)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21475 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21476 // implicitly convert null value to an empty object
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21477 if (is_null())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21478 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21479 m_data.m_type = value_t::object;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21480 m_data.m_value.object = create<object_t>();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21481 assert_invariant();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21482 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21483
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21484 // operator[] only works for objects
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21485 if (JSON_HEDLEY_LIKELY(is_object()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21486 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21487 auto result = m_data.m_value.object->emplace(std::forward<KeyType>(key), nullptr);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21488 return set_parent(result.first->second);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21489 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21490
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21491 JSON_THROW(type_error::create(305, detail::concat("cannot use operator[] with a string argument with ", type_name()), this));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21492 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21493
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21494 /// @brief access specified object element
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21495 /// @sa https://json.nlohmann.me/api/basic_json/operator%5B%5D/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21496 template<class KeyType, detail::enable_if_t<
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21497 detail::is_usable_as_basic_json_key_type<basic_json_t, KeyType>::value, int > = 0 >
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21498 const_reference operator[](KeyType && key) const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21499 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21500 // const operator[] only works for objects
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21501 if (JSON_HEDLEY_LIKELY(is_object()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21502 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21503 auto it = m_data.m_value.object->find(std::forward<KeyType>(key));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21504 JSON_ASSERT(it != m_data.m_value.object->end());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21505 return it->second;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21506 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21507
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21508 JSON_THROW(type_error::create(305, detail::concat("cannot use operator[] with a string argument with ", type_name()), this));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21509 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21510
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21511 private:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21512 template<typename KeyType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21513 using is_comparable_with_object_key = detail::is_comparable <
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21514 object_comparator_t, const typename object_t::key_type&, KeyType >;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21515
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21516 template<typename ValueType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21517 using value_return_type = std::conditional <
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21518 detail::is_c_string_uncvref<ValueType>::value,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21519 string_t, typename std::decay<ValueType>::type >;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21520
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21521 public:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21522 /// @brief access specified object element with default value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21523 /// @sa https://json.nlohmann.me/api/basic_json/value/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21524 template < class ValueType, detail::enable_if_t <
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21525 !detail::is_transparent<object_comparator_t>::value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21526 && detail::is_getable<basic_json_t, ValueType>::value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21527 && !std::is_same<value_t, detail::uncvref_t<ValueType>>::value, int > = 0 >
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21528 ValueType value(const typename object_t::key_type& key, const ValueType& default_value) const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21529 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21530 // value only works for objects
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21531 if (JSON_HEDLEY_LIKELY(is_object()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21532 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21533 // if key is found, return value and given default value otherwise
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21534 const auto it = find(key);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21535 if (it != end())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21536 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21537 return it->template get<ValueType>();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21538 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21539
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21540 return default_value;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21541 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21542
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21543 JSON_THROW(type_error::create(306, detail::concat("cannot use value() with ", type_name()), this));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21544 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21545
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21546 /// @brief access specified object element with default value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21547 /// @sa https://json.nlohmann.me/api/basic_json/value/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21548 template < class ValueType, class ReturnType = typename value_return_type<ValueType>::type,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21549 detail::enable_if_t <
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21550 !detail::is_transparent<object_comparator_t>::value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21551 && detail::is_getable<basic_json_t, ReturnType>::value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21552 && !std::is_same<value_t, detail::uncvref_t<ValueType>>::value, int > = 0 >
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21553 ReturnType value(const typename object_t::key_type& key, ValueType && default_value) const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21554 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21555 // value only works for objects
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21556 if (JSON_HEDLEY_LIKELY(is_object()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21557 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21558 // if key is found, return value and given default value otherwise
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21559 const auto it = find(key);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21560 if (it != end())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21561 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21562 return it->template get<ReturnType>();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21563 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21564
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21565 return std::forward<ValueType>(default_value);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21566 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21567
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21568 JSON_THROW(type_error::create(306, detail::concat("cannot use value() with ", type_name()), this));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21569 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21570
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21571 /// @brief access specified object element with default value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21572 /// @sa https://json.nlohmann.me/api/basic_json/value/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21573 template < class ValueType, class KeyType, detail::enable_if_t <
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21574 detail::is_transparent<object_comparator_t>::value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21575 && !detail::is_json_pointer<KeyType>::value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21576 && is_comparable_with_object_key<KeyType>::value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21577 && detail::is_getable<basic_json_t, ValueType>::value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21578 && !std::is_same<value_t, detail::uncvref_t<ValueType>>::value, int > = 0 >
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21579 ValueType value(KeyType && key, const ValueType& default_value) const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21580 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21581 // value only works for objects
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21582 if (JSON_HEDLEY_LIKELY(is_object()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21583 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21584 // if key is found, return value and given default value otherwise
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21585 const auto it = find(std::forward<KeyType>(key));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21586 if (it != end())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21587 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21588 return it->template get<ValueType>();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21589 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21590
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21591 return default_value;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21592 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21593
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21594 JSON_THROW(type_error::create(306, detail::concat("cannot use value() with ", type_name()), this));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21595 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21596
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21597 /// @brief access specified object element via JSON Pointer with default value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21598 /// @sa https://json.nlohmann.me/api/basic_json/value/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21599 template < class ValueType, class KeyType, class ReturnType = typename value_return_type<ValueType>::type,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21600 detail::enable_if_t <
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21601 detail::is_transparent<object_comparator_t>::value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21602 && !detail::is_json_pointer<KeyType>::value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21603 && is_comparable_with_object_key<KeyType>::value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21604 && detail::is_getable<basic_json_t, ReturnType>::value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21605 && !std::is_same<value_t, detail::uncvref_t<ValueType>>::value, int > = 0 >
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21606 ReturnType value(KeyType && key, ValueType && default_value) const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21607 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21608 // value only works for objects
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21609 if (JSON_HEDLEY_LIKELY(is_object()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21610 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21611 // if key is found, return value and given default value otherwise
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21612 const auto it = find(std::forward<KeyType>(key));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21613 if (it != end())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21614 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21615 return it->template get<ReturnType>();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21616 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21617
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21618 return std::forward<ValueType>(default_value);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21619 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21620
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21621 JSON_THROW(type_error::create(306, detail::concat("cannot use value() with ", type_name()), this));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21622 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21623
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21624 /// @brief access specified object element via JSON Pointer with default value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21625 /// @sa https://json.nlohmann.me/api/basic_json/value/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21626 template < class ValueType, detail::enable_if_t <
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21627 detail::is_getable<basic_json_t, ValueType>::value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21628 && !std::is_same<value_t, detail::uncvref_t<ValueType>>::value, int > = 0 >
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21629 ValueType value(const json_pointer& ptr, const ValueType& default_value) const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21630 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21631 // value only works for objects
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21632 if (JSON_HEDLEY_LIKELY(is_object()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21633 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21634 // if pointer resolves a value, return it or use default value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21635 JSON_TRY
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21636 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21637 return ptr.get_checked(this).template get<ValueType>();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21638 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21639 JSON_INTERNAL_CATCH (out_of_range&)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21640 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21641 return default_value;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21642 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21643 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21644
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21645 JSON_THROW(type_error::create(306, detail::concat("cannot use value() with ", type_name()), this));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21646 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21647
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21648 /// @brief access specified object element via JSON Pointer with default value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21649 /// @sa https://json.nlohmann.me/api/basic_json/value/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21650 template < class ValueType, class ReturnType = typename value_return_type<ValueType>::type,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21651 detail::enable_if_t <
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21652 detail::is_getable<basic_json_t, ReturnType>::value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21653 && !std::is_same<value_t, detail::uncvref_t<ValueType>>::value, int > = 0 >
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21654 ReturnType value(const json_pointer& ptr, ValueType && default_value) const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21655 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21656 // value only works for objects
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21657 if (JSON_HEDLEY_LIKELY(is_object()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21658 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21659 // if pointer resolves a value, return it or use default value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21660 JSON_TRY
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21661 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21662 return ptr.get_checked(this).template get<ReturnType>();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21663 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21664 JSON_INTERNAL_CATCH (out_of_range&)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21665 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21666 return std::forward<ValueType>(default_value);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21667 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21668 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21669
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21670 JSON_THROW(type_error::create(306, detail::concat("cannot use value() with ", type_name()), this));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21671 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21672
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21673 template < class ValueType, class BasicJsonType, detail::enable_if_t <
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21674 detail::is_basic_json<BasicJsonType>::value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21675 && detail::is_getable<basic_json_t, ValueType>::value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21676 && !std::is_same<value_t, detail::uncvref_t<ValueType>>::value, int > = 0 >
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21677 JSON_HEDLEY_DEPRECATED_FOR(3.11.0, basic_json::json_pointer or nlohmann::json_pointer<basic_json::string_t>) // NOLINT(readability/alt_tokens)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21678 ValueType value(const ::nlohmann::json_pointer<BasicJsonType>& ptr, const ValueType& default_value) const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21679 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21680 return value(ptr.convert(), default_value);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21681 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21682
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21683 template < class ValueType, class BasicJsonType, class ReturnType = typename value_return_type<ValueType>::type,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21684 detail::enable_if_t <
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21685 detail::is_basic_json<BasicJsonType>::value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21686 && detail::is_getable<basic_json_t, ReturnType>::value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21687 && !std::is_same<value_t, detail::uncvref_t<ValueType>>::value, int > = 0 >
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21688 JSON_HEDLEY_DEPRECATED_FOR(3.11.0, basic_json::json_pointer or nlohmann::json_pointer<basic_json::string_t>) // NOLINT(readability/alt_tokens)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21689 ReturnType value(const ::nlohmann::json_pointer<BasicJsonType>& ptr, ValueType && default_value) const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21690 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21691 return value(ptr.convert(), std::forward<ValueType>(default_value));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21692 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21693
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21694 /// @brief access the first element
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21695 /// @sa https://json.nlohmann.me/api/basic_json/front/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21696 reference front()
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21697 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21698 return *begin();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21699 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21700
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21701 /// @brief access the first element
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21702 /// @sa https://json.nlohmann.me/api/basic_json/front/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21703 const_reference front() const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21704 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21705 return *cbegin();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21706 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21707
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21708 /// @brief access the last element
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21709 /// @sa https://json.nlohmann.me/api/basic_json/back/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21710 reference back()
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21711 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21712 auto tmp = end();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21713 --tmp;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21714 return *tmp;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21715 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21716
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21717 /// @brief access the last element
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21718 /// @sa https://json.nlohmann.me/api/basic_json/back/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21719 const_reference back() const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21720 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21721 auto tmp = cend();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21722 --tmp;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21723 return *tmp;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21724 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21725
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21726 /// @brief remove element given an iterator
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21727 /// @sa https://json.nlohmann.me/api/basic_json/erase/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21728 template < class IteratorType, detail::enable_if_t <
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21729 std::is_same<IteratorType, typename basic_json_t::iterator>::value ||
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21730 std::is_same<IteratorType, typename basic_json_t::const_iterator>::value, int > = 0 >
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21731 IteratorType erase(IteratorType pos)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21732 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21733 // make sure iterator fits the current value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21734 if (JSON_HEDLEY_UNLIKELY(this != pos.m_object))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21735 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21736 JSON_THROW(invalid_iterator::create(202, "iterator does not fit current value", this));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21737 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21738
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21739 IteratorType result = end();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21740
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21741 switch (m_data.m_type)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21742 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21743 case value_t::boolean:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21744 case value_t::number_float:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21745 case value_t::number_integer:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21746 case value_t::number_unsigned:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21747 case value_t::string:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21748 case value_t::binary:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21749 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21750 if (JSON_HEDLEY_UNLIKELY(!pos.m_it.primitive_iterator.is_begin()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21751 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21752 JSON_THROW(invalid_iterator::create(205, "iterator out of range", this));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21753 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21754
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21755 if (is_string())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21756 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21757 AllocatorType<string_t> alloc;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21758 std::allocator_traits<decltype(alloc)>::destroy(alloc, m_data.m_value.string);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21759 std::allocator_traits<decltype(alloc)>::deallocate(alloc, m_data.m_value.string, 1);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21760 m_data.m_value.string = nullptr;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21761 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21762 else if (is_binary())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21763 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21764 AllocatorType<binary_t> alloc;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21765 std::allocator_traits<decltype(alloc)>::destroy(alloc, m_data.m_value.binary);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21766 std::allocator_traits<decltype(alloc)>::deallocate(alloc, m_data.m_value.binary, 1);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21767 m_data.m_value.binary = nullptr;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21768 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21769
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21770 m_data.m_type = value_t::null;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21771 assert_invariant();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21772 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21773 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21774
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21775 case value_t::object:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21776 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21777 result.m_it.object_iterator = m_data.m_value.object->erase(pos.m_it.object_iterator);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21778 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21779 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21780
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21781 case value_t::array:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21782 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21783 result.m_it.array_iterator = m_data.m_value.array->erase(pos.m_it.array_iterator);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21784 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21785 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21786
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21787 case value_t::null:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21788 case value_t::discarded:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21789 default:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21790 JSON_THROW(type_error::create(307, detail::concat("cannot use erase() with ", type_name()), this));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21791 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21792
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21793 return result;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21794 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21795
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21796 /// @brief remove elements given an iterator range
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21797 /// @sa https://json.nlohmann.me/api/basic_json/erase/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21798 template < class IteratorType, detail::enable_if_t <
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21799 std::is_same<IteratorType, typename basic_json_t::iterator>::value ||
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21800 std::is_same<IteratorType, typename basic_json_t::const_iterator>::value, int > = 0 >
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21801 IteratorType erase(IteratorType first, IteratorType last)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21802 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21803 // make sure iterator fits the current value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21804 if (JSON_HEDLEY_UNLIKELY(this != first.m_object || this != last.m_object))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21805 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21806 JSON_THROW(invalid_iterator::create(203, "iterators do not fit current value", this));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21807 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21808
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21809 IteratorType result = end();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21810
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21811 switch (m_data.m_type)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21812 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21813 case value_t::boolean:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21814 case value_t::number_float:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21815 case value_t::number_integer:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21816 case value_t::number_unsigned:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21817 case value_t::string:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21818 case value_t::binary:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21819 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21820 if (JSON_HEDLEY_LIKELY(!first.m_it.primitive_iterator.is_begin()
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21821 || !last.m_it.primitive_iterator.is_end()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21822 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21823 JSON_THROW(invalid_iterator::create(204, "iterators out of range", this));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21824 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21825
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21826 if (is_string())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21827 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21828 AllocatorType<string_t> alloc;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21829 std::allocator_traits<decltype(alloc)>::destroy(alloc, m_data.m_value.string);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21830 std::allocator_traits<decltype(alloc)>::deallocate(alloc, m_data.m_value.string, 1);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21831 m_data.m_value.string = nullptr;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21832 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21833 else if (is_binary())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21834 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21835 AllocatorType<binary_t> alloc;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21836 std::allocator_traits<decltype(alloc)>::destroy(alloc, m_data.m_value.binary);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21837 std::allocator_traits<decltype(alloc)>::deallocate(alloc, m_data.m_value.binary, 1);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21838 m_data.m_value.binary = nullptr;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21839 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21840
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21841 m_data.m_type = value_t::null;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21842 assert_invariant();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21843 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21844 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21845
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21846 case value_t::object:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21847 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21848 result.m_it.object_iterator = m_data.m_value.object->erase(first.m_it.object_iterator,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21849 last.m_it.object_iterator);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21850 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21851 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21852
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21853 case value_t::array:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21854 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21855 result.m_it.array_iterator = m_data.m_value.array->erase(first.m_it.array_iterator,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21856 last.m_it.array_iterator);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21857 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21858 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21859
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21860 case value_t::null:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21861 case value_t::discarded:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21862 default:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21863 JSON_THROW(type_error::create(307, detail::concat("cannot use erase() with ", type_name()), this));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21864 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21865
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21866 return result;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21867 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21868
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21869 private:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21870 template < typename KeyType, detail::enable_if_t <
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21871 detail::has_erase_with_key_type<basic_json_t, KeyType>::value, int > = 0 >
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21872 size_type erase_internal(KeyType && key)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21873 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21874 // this erase only works for objects
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21875 if (JSON_HEDLEY_UNLIKELY(!is_object()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21876 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21877 JSON_THROW(type_error::create(307, detail::concat("cannot use erase() with ", type_name()), this));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21878 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21879
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21880 return m_data.m_value.object->erase(std::forward<KeyType>(key));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21881 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21882
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21883 template < typename KeyType, detail::enable_if_t <
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21884 !detail::has_erase_with_key_type<basic_json_t, KeyType>::value, int > = 0 >
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21885 size_type erase_internal(KeyType && key)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21886 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21887 // this erase only works for objects
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21888 if (JSON_HEDLEY_UNLIKELY(!is_object()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21889 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21890 JSON_THROW(type_error::create(307, detail::concat("cannot use erase() with ", type_name()), this));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21891 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21892
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21893 const auto it = m_data.m_value.object->find(std::forward<KeyType>(key));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21894 if (it != m_data.m_value.object->end())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21895 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21896 m_data.m_value.object->erase(it);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21897 return 1;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21898 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21899 return 0;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21900 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21901
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21902 public:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21903
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21904 /// @brief remove element from a JSON object given a key
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21905 /// @sa https://json.nlohmann.me/api/basic_json/erase/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21906 size_type erase(const typename object_t::key_type& key)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21907 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21908 // the indirection via erase_internal() is added to avoid making this
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21909 // function a template and thus de-rank it during overload resolution
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21910 return erase_internal(key);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21911 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21912
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21913 /// @brief remove element from a JSON object given a key
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21914 /// @sa https://json.nlohmann.me/api/basic_json/erase/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21915 template<class KeyType, detail::enable_if_t<
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21916 detail::is_usable_as_basic_json_key_type<basic_json_t, KeyType>::value, int> = 0>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21917 size_type erase(KeyType && key)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21918 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21919 return erase_internal(std::forward<KeyType>(key));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21920 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21921
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21922 /// @brief remove element from a JSON array given an index
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21923 /// @sa https://json.nlohmann.me/api/basic_json/erase/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21924 void erase(const size_type idx)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21925 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21926 // this erase only works for arrays
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21927 if (JSON_HEDLEY_LIKELY(is_array()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21928 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21929 if (JSON_HEDLEY_UNLIKELY(idx >= size()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21930 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21931 JSON_THROW(out_of_range::create(401, detail::concat("array index ", std::to_string(idx), " is out of range"), this));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21932 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21933
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21934 m_data.m_value.array->erase(m_data.m_value.array->begin() + static_cast<difference_type>(idx));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21935 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21936 else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21937 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21938 JSON_THROW(type_error::create(307, detail::concat("cannot use erase() with ", type_name()), this));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21939 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21940 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21941
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21942 /// @}
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21943
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21944 ////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21945 // lookup //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21946 ////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21947
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21948 /// @name lookup
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21949 /// @{
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21950
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21951 /// @brief find an element in a JSON object
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21952 /// @sa https://json.nlohmann.me/api/basic_json/find/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21953 iterator find(const typename object_t::key_type& key)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21954 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21955 auto result = end();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21956
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21957 if (is_object())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21958 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21959 result.m_it.object_iterator = m_data.m_value.object->find(key);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21960 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21961
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21962 return result;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21963 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21964
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21965 /// @brief find an element in a JSON object
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21966 /// @sa https://json.nlohmann.me/api/basic_json/find/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21967 const_iterator find(const typename object_t::key_type& key) const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21968 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21969 auto result = cend();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21970
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21971 if (is_object())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21972 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21973 result.m_it.object_iterator = m_data.m_value.object->find(key);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21974 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21975
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21976 return result;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21977 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21978
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21979 /// @brief find an element in a JSON object
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21980 /// @sa https://json.nlohmann.me/api/basic_json/find/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21981 template<class KeyType, detail::enable_if_t<
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21982 detail::is_usable_as_basic_json_key_type<basic_json_t, KeyType>::value, int> = 0>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21983 iterator find(KeyType && key)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21984 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21985 auto result = end();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21986
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21987 if (is_object())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21988 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21989 result.m_it.object_iterator = m_data.m_value.object->find(std::forward<KeyType>(key));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21990 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21991
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21992 return result;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21993 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21994
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21995 /// @brief find an element in a JSON object
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21996 /// @sa https://json.nlohmann.me/api/basic_json/find/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21997 template<class KeyType, detail::enable_if_t<
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21998 detail::is_usable_as_basic_json_key_type<basic_json_t, KeyType>::value, int> = 0>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21999 const_iterator find(KeyType && key) const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22000 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22001 auto result = cend();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22002
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22003 if (is_object())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22004 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22005 result.m_it.object_iterator = m_data.m_value.object->find(std::forward<KeyType>(key));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22006 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22007
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22008 return result;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22009 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22010
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22011 /// @brief returns the number of occurrences of a key in a JSON object
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22012 /// @sa https://json.nlohmann.me/api/basic_json/count/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22013 size_type count(const typename object_t::key_type& key) const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22014 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22015 // return 0 for all nonobject types
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22016 return is_object() ? m_data.m_value.object->count(key) : 0;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22017 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22018
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22019 /// @brief returns the number of occurrences of a key in a JSON object
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22020 /// @sa https://json.nlohmann.me/api/basic_json/count/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22021 template<class KeyType, detail::enable_if_t<
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22022 detail::is_usable_as_basic_json_key_type<basic_json_t, KeyType>::value, int> = 0>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22023 size_type count(KeyType && key) const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22024 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22025 // return 0 for all nonobject types
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22026 return is_object() ? m_data.m_value.object->count(std::forward<KeyType>(key)) : 0;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22027 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22028
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22029 /// @brief check the existence of an element in a JSON object
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22030 /// @sa https://json.nlohmann.me/api/basic_json/contains/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22031 bool contains(const typename object_t::key_type& key) const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22032 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22033 return is_object() && m_data.m_value.object->find(key) != m_data.m_value.object->end();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22034 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22035
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22036 /// @brief check the existence of an element in a JSON object
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22037 /// @sa https://json.nlohmann.me/api/basic_json/contains/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22038 template<class KeyType, detail::enable_if_t<
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22039 detail::is_usable_as_basic_json_key_type<basic_json_t, KeyType>::value, int> = 0>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22040 bool contains(KeyType && key) const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22041 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22042 return is_object() && m_data.m_value.object->find(std::forward<KeyType>(key)) != m_data.m_value.object->end();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22043 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22044
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22045 /// @brief check the existence of an element in a JSON object given a JSON pointer
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22046 /// @sa https://json.nlohmann.me/api/basic_json/contains/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22047 bool contains(const json_pointer& ptr) const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22048 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22049 return ptr.contains(this);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22050 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22051
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22052 template<typename BasicJsonType, detail::enable_if_t<detail::is_basic_json<BasicJsonType>::value, int> = 0>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22053 JSON_HEDLEY_DEPRECATED_FOR(3.11.0, basic_json::json_pointer or nlohmann::json_pointer<basic_json::string_t>) // NOLINT(readability/alt_tokens)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22054 bool contains(const typename ::nlohmann::json_pointer<BasicJsonType>& ptr) const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22055 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22056 return ptr.contains(this);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22057 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22058
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22059 /// @}
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22060
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22061 ///////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22062 // iterators //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22063 ///////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22064
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22065 /// @name iterators
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22066 /// @{
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22067
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22068 /// @brief returns an iterator to the first element
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22069 /// @sa https://json.nlohmann.me/api/basic_json/begin/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22070 iterator begin() noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22071 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22072 iterator result(this);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22073 result.set_begin();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22074 return result;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22075 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22076
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22077 /// @brief returns an iterator to the first element
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22078 /// @sa https://json.nlohmann.me/api/basic_json/begin/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22079 const_iterator begin() const noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22080 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22081 return cbegin();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22082 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22083
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22084 /// @brief returns a const iterator to the first element
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22085 /// @sa https://json.nlohmann.me/api/basic_json/cbegin/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22086 const_iterator cbegin() const noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22087 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22088 const_iterator result(this);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22089 result.set_begin();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22090 return result;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22091 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22092
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22093 /// @brief returns an iterator to one past the last element
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22094 /// @sa https://json.nlohmann.me/api/basic_json/end/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22095 iterator end() noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22096 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22097 iterator result(this);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22098 result.set_end();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22099 return result;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22100 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22101
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22102 /// @brief returns an iterator to one past the last element
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22103 /// @sa https://json.nlohmann.me/api/basic_json/end/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22104 const_iterator end() const noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22105 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22106 return cend();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22107 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22108
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22109 /// @brief returns an iterator to one past the last element
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22110 /// @sa https://json.nlohmann.me/api/basic_json/cend/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22111 const_iterator cend() const noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22112 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22113 const_iterator result(this);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22114 result.set_end();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22115 return result;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22116 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22117
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22118 /// @brief returns an iterator to the reverse-beginning
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22119 /// @sa https://json.nlohmann.me/api/basic_json/rbegin/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22120 reverse_iterator rbegin() noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22121 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22122 return reverse_iterator(end());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22123 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22124
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22125 /// @brief returns an iterator to the reverse-beginning
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22126 /// @sa https://json.nlohmann.me/api/basic_json/rbegin/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22127 const_reverse_iterator rbegin() const noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22128 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22129 return crbegin();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22130 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22131
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22132 /// @brief returns an iterator to the reverse-end
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22133 /// @sa https://json.nlohmann.me/api/basic_json/rend/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22134 reverse_iterator rend() noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22135 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22136 return reverse_iterator(begin());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22137 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22138
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22139 /// @brief returns an iterator to the reverse-end
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22140 /// @sa https://json.nlohmann.me/api/basic_json/rend/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22141 const_reverse_iterator rend() const noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22142 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22143 return crend();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22144 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22145
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22146 /// @brief returns a const reverse iterator to the last element
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22147 /// @sa https://json.nlohmann.me/api/basic_json/crbegin/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22148 const_reverse_iterator crbegin() const noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22149 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22150 return const_reverse_iterator(cend());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22151 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22152
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22153 /// @brief returns a const reverse iterator to one before the first
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22154 /// @sa https://json.nlohmann.me/api/basic_json/crend/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22155 const_reverse_iterator crend() const noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22156 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22157 return const_reverse_iterator(cbegin());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22158 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22159
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22160 public:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22161 /// @brief wrapper to access iterator member functions in range-based for
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22162 /// @sa https://json.nlohmann.me/api/basic_json/items/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22163 /// @deprecated This function is deprecated since 3.1.0 and will be removed in
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22164 /// version 4.0.0 of the library. Please use @ref items() instead;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22165 /// that is, replace `json::iterator_wrapper(j)` with `j.items()`.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22166 JSON_HEDLEY_DEPRECATED_FOR(3.1.0, items())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22167 static iteration_proxy<iterator> iterator_wrapper(reference ref) noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22168 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22169 return ref.items();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22170 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22171
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22172 /// @brief wrapper to access iterator member functions in range-based for
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22173 /// @sa https://json.nlohmann.me/api/basic_json/items/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22174 /// @deprecated This function is deprecated since 3.1.0 and will be removed in
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22175 /// version 4.0.0 of the library. Please use @ref items() instead;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22176 /// that is, replace `json::iterator_wrapper(j)` with `j.items()`.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22177 JSON_HEDLEY_DEPRECATED_FOR(3.1.0, items())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22178 static iteration_proxy<const_iterator> iterator_wrapper(const_reference ref) noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22179 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22180 return ref.items();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22181 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22182
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22183 /// @brief helper to access iterator member functions in range-based for
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22184 /// @sa https://json.nlohmann.me/api/basic_json/items/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22185 iteration_proxy<iterator> items() noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22186 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22187 return iteration_proxy<iterator>(*this);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22188 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22189
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22190 /// @brief helper to access iterator member functions in range-based for
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22191 /// @sa https://json.nlohmann.me/api/basic_json/items/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22192 iteration_proxy<const_iterator> items() const noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22193 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22194 return iteration_proxy<const_iterator>(*this);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22195 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22196
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22197 /// @}
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22198
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22199 //////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22200 // capacity //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22201 //////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22202
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22203 /// @name capacity
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22204 /// @{
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22205
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22206 /// @brief checks whether the container is empty.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22207 /// @sa https://json.nlohmann.me/api/basic_json/empty/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22208 bool empty() const noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22209 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22210 switch (m_data.m_type)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22211 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22212 case value_t::null:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22213 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22214 // null values are empty
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22215 return true;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22216 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22217
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22218 case value_t::array:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22219 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22220 // delegate call to array_t::empty()
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22221 return m_data.m_value.array->empty();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22222 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22223
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22224 case value_t::object:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22225 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22226 // delegate call to object_t::empty()
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22227 return m_data.m_value.object->empty();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22228 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22229
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22230 case value_t::string:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22231 case value_t::boolean:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22232 case value_t::number_integer:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22233 case value_t::number_unsigned:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22234 case value_t::number_float:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22235 case value_t::binary:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22236 case value_t::discarded:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22237 default:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22238 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22239 // all other types are nonempty
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22240 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22241 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22242 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22243 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22244
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22245 /// @brief returns the number of elements
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22246 /// @sa https://json.nlohmann.me/api/basic_json/size/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22247 size_type size() const noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22248 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22249 switch (m_data.m_type)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22250 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22251 case value_t::null:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22252 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22253 // null values are empty
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22254 return 0;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22255 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22256
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22257 case value_t::array:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22258 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22259 // delegate call to array_t::size()
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22260 return m_data.m_value.array->size();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22261 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22262
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22263 case value_t::object:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22264 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22265 // delegate call to object_t::size()
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22266 return m_data.m_value.object->size();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22267 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22268
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22269 case value_t::string:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22270 case value_t::boolean:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22271 case value_t::number_integer:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22272 case value_t::number_unsigned:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22273 case value_t::number_float:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22274 case value_t::binary:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22275 case value_t::discarded:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22276 default:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22277 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22278 // all other types have size 1
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22279 return 1;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22280 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22281 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22282 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22283
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22284 /// @brief returns the maximum possible number of elements
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22285 /// @sa https://json.nlohmann.me/api/basic_json/max_size/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22286 size_type max_size() const noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22287 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22288 switch (m_data.m_type)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22289 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22290 case value_t::array:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22291 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22292 // delegate call to array_t::max_size()
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22293 return m_data.m_value.array->max_size();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22294 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22295
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22296 case value_t::object:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22297 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22298 // delegate call to object_t::max_size()
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22299 return m_data.m_value.object->max_size();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22300 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22301
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22302 case value_t::null:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22303 case value_t::string:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22304 case value_t::boolean:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22305 case value_t::number_integer:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22306 case value_t::number_unsigned:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22307 case value_t::number_float:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22308 case value_t::binary:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22309 case value_t::discarded:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22310 default:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22311 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22312 // all other types have max_size() == size()
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22313 return size();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22314 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22315 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22316 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22317
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22318 /// @}
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22319
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22320 ///////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22321 // modifiers //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22322 ///////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22323
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22324 /// @name modifiers
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22325 /// @{
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22326
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22327 /// @brief clears the contents
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22328 /// @sa https://json.nlohmann.me/api/basic_json/clear/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22329 void clear() noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22330 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22331 switch (m_data.m_type)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22332 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22333 case value_t::number_integer:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22334 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22335 m_data.m_value.number_integer = 0;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22336 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22337 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22338
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22339 case value_t::number_unsigned:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22340 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22341 m_data.m_value.number_unsigned = 0;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22342 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22343 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22344
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22345 case value_t::number_float:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22346 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22347 m_data.m_value.number_float = 0.0;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22348 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22349 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22350
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22351 case value_t::boolean:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22352 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22353 m_data.m_value.boolean = false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22354 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22355 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22356
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22357 case value_t::string:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22358 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22359 m_data.m_value.string->clear();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22360 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22361 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22362
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22363 case value_t::binary:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22364 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22365 m_data.m_value.binary->clear();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22366 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22367 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22368
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22369 case value_t::array:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22370 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22371 m_data.m_value.array->clear();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22372 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22373 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22374
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22375 case value_t::object:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22376 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22377 m_data.m_value.object->clear();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22378 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22379 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22380
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22381 case value_t::null:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22382 case value_t::discarded:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22383 default:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22384 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22385 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22386 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22387
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22388 /// @brief add an object to an array
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22389 /// @sa https://json.nlohmann.me/api/basic_json/push_back/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22390 void push_back(basic_json&& val)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22391 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22392 // push_back only works for null objects or arrays
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22393 if (JSON_HEDLEY_UNLIKELY(!(is_null() || is_array())))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22394 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22395 JSON_THROW(type_error::create(308, detail::concat("cannot use push_back() with ", type_name()), this));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22396 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22397
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22398 // transform null object into an array
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22399 if (is_null())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22400 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22401 m_data.m_type = value_t::array;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22402 m_data.m_value = value_t::array;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22403 assert_invariant();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22404 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22405
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22406 // add element to array (move semantics)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22407 const auto old_capacity = m_data.m_value.array->capacity();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22408 m_data.m_value.array->push_back(std::move(val));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22409 set_parent(m_data.m_value.array->back(), old_capacity);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22410 // if val is moved from, basic_json move constructor marks it null, so we do not call the destructor
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22411 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22412
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22413 /// @brief add an object to an array
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22414 /// @sa https://json.nlohmann.me/api/basic_json/operator+=/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22415 reference operator+=(basic_json&& val)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22416 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22417 push_back(std::move(val));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22418 return *this;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22419 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22420
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22421 /// @brief add an object to an array
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22422 /// @sa https://json.nlohmann.me/api/basic_json/push_back/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22423 void push_back(const basic_json& val)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22424 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22425 // push_back only works for null objects or arrays
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22426 if (JSON_HEDLEY_UNLIKELY(!(is_null() || is_array())))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22427 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22428 JSON_THROW(type_error::create(308, detail::concat("cannot use push_back() with ", type_name()), this));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22429 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22430
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22431 // transform null object into an array
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22432 if (is_null())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22433 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22434 m_data.m_type = value_t::array;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22435 m_data.m_value = value_t::array;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22436 assert_invariant();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22437 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22438
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22439 // add element to array
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22440 const auto old_capacity = m_data.m_value.array->capacity();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22441 m_data.m_value.array->push_back(val);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22442 set_parent(m_data.m_value.array->back(), old_capacity);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22443 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22444
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22445 /// @brief add an object to an array
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22446 /// @sa https://json.nlohmann.me/api/basic_json/operator+=/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22447 reference operator+=(const basic_json& val)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22448 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22449 push_back(val);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22450 return *this;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22451 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22452
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22453 /// @brief add an object to an object
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22454 /// @sa https://json.nlohmann.me/api/basic_json/push_back/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22455 void push_back(const typename object_t::value_type& val)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22456 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22457 // push_back only works for null objects or objects
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22458 if (JSON_HEDLEY_UNLIKELY(!(is_null() || is_object())))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22459 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22460 JSON_THROW(type_error::create(308, detail::concat("cannot use push_back() with ", type_name()), this));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22461 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22462
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22463 // transform null object into an object
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22464 if (is_null())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22465 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22466 m_data.m_type = value_t::object;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22467 m_data.m_value = value_t::object;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22468 assert_invariant();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22469 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22470
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22471 // add element to object
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22472 auto res = m_data.m_value.object->insert(val);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22473 set_parent(res.first->second);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22474 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22475
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22476 /// @brief add an object to an object
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22477 /// @sa https://json.nlohmann.me/api/basic_json/operator+=/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22478 reference operator+=(const typename object_t::value_type& val)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22479 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22480 push_back(val);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22481 return *this;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22482 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22483
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22484 /// @brief add an object to an object
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22485 /// @sa https://json.nlohmann.me/api/basic_json/push_back/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22486 void push_back(initializer_list_t init)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22487 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22488 if (is_object() && init.size() == 2 && (*init.begin())->is_string())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22489 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22490 basic_json&& key = init.begin()->moved_or_copied();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22491 push_back(typename object_t::value_type(
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22492 std::move(key.get_ref<string_t&>()), (init.begin() + 1)->moved_or_copied()));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22493 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22494 else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22495 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22496 push_back(basic_json(init));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22497 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22498 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22499
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22500 /// @brief add an object to an object
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22501 /// @sa https://json.nlohmann.me/api/basic_json/operator+=/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22502 reference operator+=(initializer_list_t init)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22503 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22504 push_back(init);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22505 return *this;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22506 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22507
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22508 /// @brief add an object to an array
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22509 /// @sa https://json.nlohmann.me/api/basic_json/emplace_back/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22510 template<class... Args>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22511 reference emplace_back(Args&& ... args)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22512 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22513 // emplace_back only works for null objects or arrays
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22514 if (JSON_HEDLEY_UNLIKELY(!(is_null() || is_array())))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22515 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22516 JSON_THROW(type_error::create(311, detail::concat("cannot use emplace_back() with ", type_name()), this));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22517 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22518
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22519 // transform null object into an array
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22520 if (is_null())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22521 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22522 m_data.m_type = value_t::array;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22523 m_data.m_value = value_t::array;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22524 assert_invariant();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22525 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22526
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22527 // add element to array (perfect forwarding)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22528 const auto old_capacity = m_data.m_value.array->capacity();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22529 m_data.m_value.array->emplace_back(std::forward<Args>(args)...);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22530 return set_parent(m_data.m_value.array->back(), old_capacity);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22531 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22532
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22533 /// @brief add an object to an object if key does not exist
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22534 /// @sa https://json.nlohmann.me/api/basic_json/emplace/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22535 template<class... Args>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22536 std::pair<iterator, bool> emplace(Args&& ... args)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22537 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22538 // emplace only works for null objects or arrays
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22539 if (JSON_HEDLEY_UNLIKELY(!(is_null() || is_object())))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22540 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22541 JSON_THROW(type_error::create(311, detail::concat("cannot use emplace() with ", type_name()), this));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22542 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22543
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22544 // transform null object into an object
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22545 if (is_null())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22546 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22547 m_data.m_type = value_t::object;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22548 m_data.m_value = value_t::object;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22549 assert_invariant();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22550 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22551
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22552 // add element to array (perfect forwarding)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22553 auto res = m_data.m_value.object->emplace(std::forward<Args>(args)...);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22554 set_parent(res.first->second);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22555
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22556 // create result iterator and set iterator to the result of emplace
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22557 auto it = begin();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22558 it.m_it.object_iterator = res.first;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22559
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22560 // return pair of iterator and boolean
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22561 return {it, res.second};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22562 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22563
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22564 /// Helper for insertion of an iterator
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22565 /// @note: This uses std::distance to support GCC 4.8,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22566 /// see https://github.com/nlohmann/json/pull/1257
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22567 template<typename... Args>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22568 iterator insert_iterator(const_iterator pos, Args&& ... args)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22569 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22570 iterator result(this);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22571 JSON_ASSERT(m_data.m_value.array != nullptr);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22572
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22573 auto insert_pos = std::distance(m_data.m_value.array->begin(), pos.m_it.array_iterator);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22574 m_data.m_value.array->insert(pos.m_it.array_iterator, std::forward<Args>(args)...);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22575 result.m_it.array_iterator = m_data.m_value.array->begin() + insert_pos;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22576
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22577 // This could have been written as:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22578 // result.m_it.array_iterator = m_data.m_value.array->insert(pos.m_it.array_iterator, cnt, val);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22579 // but the return value of insert is missing in GCC 4.8, so it is written this way instead.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22580
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22581 set_parents();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22582 return result;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22583 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22584
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22585 /// @brief inserts element into array
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22586 /// @sa https://json.nlohmann.me/api/basic_json/insert/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22587 iterator insert(const_iterator pos, const basic_json& val)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22588 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22589 // insert only works for arrays
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22590 if (JSON_HEDLEY_LIKELY(is_array()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22591 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22592 // check if iterator pos fits to this JSON value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22593 if (JSON_HEDLEY_UNLIKELY(pos.m_object != this))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22594 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22595 JSON_THROW(invalid_iterator::create(202, "iterator does not fit current value", this));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22596 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22597
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22598 // insert to array and return iterator
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22599 return insert_iterator(pos, val);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22600 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22601
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22602 JSON_THROW(type_error::create(309, detail::concat("cannot use insert() with ", type_name()), this));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22603 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22604
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22605 /// @brief inserts element into array
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22606 /// @sa https://json.nlohmann.me/api/basic_json/insert/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22607 iterator insert(const_iterator pos, basic_json&& val)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22608 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22609 return insert(pos, val);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22610 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22611
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22612 /// @brief inserts copies of element into array
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22613 /// @sa https://json.nlohmann.me/api/basic_json/insert/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22614 iterator insert(const_iterator pos, size_type cnt, const basic_json& val)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22615 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22616 // insert only works for arrays
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22617 if (JSON_HEDLEY_LIKELY(is_array()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22618 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22619 // check if iterator pos fits to this JSON value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22620 if (JSON_HEDLEY_UNLIKELY(pos.m_object != this))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22621 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22622 JSON_THROW(invalid_iterator::create(202, "iterator does not fit current value", this));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22623 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22624
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22625 // insert to array and return iterator
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22626 return insert_iterator(pos, cnt, val);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22627 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22628
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22629 JSON_THROW(type_error::create(309, detail::concat("cannot use insert() with ", type_name()), this));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22630 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22631
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22632 /// @brief inserts range of elements into array
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22633 /// @sa https://json.nlohmann.me/api/basic_json/insert/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22634 iterator insert(const_iterator pos, const_iterator first, const_iterator last)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22635 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22636 // insert only works for arrays
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22637 if (JSON_HEDLEY_UNLIKELY(!is_array()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22638 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22639 JSON_THROW(type_error::create(309, detail::concat("cannot use insert() with ", type_name()), this));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22640 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22641
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22642 // check if iterator pos fits to this JSON value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22643 if (JSON_HEDLEY_UNLIKELY(pos.m_object != this))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22644 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22645 JSON_THROW(invalid_iterator::create(202, "iterator does not fit current value", this));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22646 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22647
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22648 // check if range iterators belong to the same JSON object
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22649 if (JSON_HEDLEY_UNLIKELY(first.m_object != last.m_object))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22650 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22651 JSON_THROW(invalid_iterator::create(210, "iterators do not fit", this));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22652 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22653
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22654 if (JSON_HEDLEY_UNLIKELY(first.m_object == this))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22655 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22656 JSON_THROW(invalid_iterator::create(211, "passed iterators may not belong to container", this));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22657 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22658
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22659 // insert to array and return iterator
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22660 return insert_iterator(pos, first.m_it.array_iterator, last.m_it.array_iterator);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22661 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22662
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22663 /// @brief inserts elements from initializer list into array
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22664 /// @sa https://json.nlohmann.me/api/basic_json/insert/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22665 iterator insert(const_iterator pos, initializer_list_t ilist)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22666 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22667 // insert only works for arrays
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22668 if (JSON_HEDLEY_UNLIKELY(!is_array()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22669 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22670 JSON_THROW(type_error::create(309, detail::concat("cannot use insert() with ", type_name()), this));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22671 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22672
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22673 // check if iterator pos fits to this JSON value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22674 if (JSON_HEDLEY_UNLIKELY(pos.m_object != this))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22675 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22676 JSON_THROW(invalid_iterator::create(202, "iterator does not fit current value", this));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22677 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22678
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22679 // insert to array and return iterator
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22680 return insert_iterator(pos, ilist.begin(), ilist.end());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22681 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22682
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22683 /// @brief inserts range of elements into object
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22684 /// @sa https://json.nlohmann.me/api/basic_json/insert/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22685 void insert(const_iterator first, const_iterator last)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22686 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22687 // insert only works for objects
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22688 if (JSON_HEDLEY_UNLIKELY(!is_object()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22689 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22690 JSON_THROW(type_error::create(309, detail::concat("cannot use insert() with ", type_name()), this));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22691 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22692
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22693 // check if range iterators belong to the same JSON object
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22694 if (JSON_HEDLEY_UNLIKELY(first.m_object != last.m_object))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22695 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22696 JSON_THROW(invalid_iterator::create(210, "iterators do not fit", this));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22697 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22698
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22699 // passed iterators must belong to objects
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22700 if (JSON_HEDLEY_UNLIKELY(!first.m_object->is_object()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22701 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22702 JSON_THROW(invalid_iterator::create(202, "iterators first and last must point to objects", this));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22703 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22704
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22705 m_data.m_value.object->insert(first.m_it.object_iterator, last.m_it.object_iterator);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22706 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22707
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22708 /// @brief updates a JSON object from another object, overwriting existing keys
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22709 /// @sa https://json.nlohmann.me/api/basic_json/update/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22710 void update(const_reference j, bool merge_objects = false)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22711 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22712 update(j.begin(), j.end(), merge_objects);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22713 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22714
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22715 /// @brief updates a JSON object from another object, overwriting existing keys
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22716 /// @sa https://json.nlohmann.me/api/basic_json/update/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22717 void update(const_iterator first, const_iterator last, bool merge_objects = false)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22718 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22719 // implicitly convert null value to an empty object
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22720 if (is_null())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22721 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22722 m_data.m_type = value_t::object;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22723 m_data.m_value.object = create<object_t>();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22724 assert_invariant();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22725 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22726
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22727 if (JSON_HEDLEY_UNLIKELY(!is_object()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22728 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22729 JSON_THROW(type_error::create(312, detail::concat("cannot use update() with ", type_name()), this));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22730 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22731
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22732 // check if range iterators belong to the same JSON object
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22733 if (JSON_HEDLEY_UNLIKELY(first.m_object != last.m_object))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22734 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22735 JSON_THROW(invalid_iterator::create(210, "iterators do not fit", this));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22736 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22737
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22738 // passed iterators must belong to objects
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22739 if (JSON_HEDLEY_UNLIKELY(!first.m_object->is_object()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22740 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22741 JSON_THROW(type_error::create(312, detail::concat("cannot use update() with ", first.m_object->type_name()), first.m_object));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22742 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22743
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22744 for (auto it = first; it != last; ++it)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22745 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22746 if (merge_objects && it.value().is_object())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22747 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22748 auto it2 = m_data.m_value.object->find(it.key());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22749 if (it2 != m_data.m_value.object->end())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22750 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22751 it2->second.update(it.value(), true);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22752 continue;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22753 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22754 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22755 m_data.m_value.object->operator[](it.key()) = it.value();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22756 #if JSON_DIAGNOSTICS
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22757 m_data.m_value.object->operator[](it.key()).m_parent = this;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22758 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22759 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22760 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22761
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22762 /// @brief exchanges the values
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22763 /// @sa https://json.nlohmann.me/api/basic_json/swap/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22764 void swap(reference other) noexcept (
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22765 std::is_nothrow_move_constructible<value_t>::value&&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22766 std::is_nothrow_move_assignable<value_t>::value&&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22767 std::is_nothrow_move_constructible<json_value>::value&& // NOLINT(cppcoreguidelines-noexcept-swap,performance-noexcept-swap)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22768 std::is_nothrow_move_assignable<json_value>::value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22769 )
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22770 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22771 std::swap(m_data.m_type, other.m_data.m_type);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22772 std::swap(m_data.m_value, other.m_data.m_value);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22773
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22774 set_parents();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22775 other.set_parents();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22776 assert_invariant();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22777 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22778
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22779 /// @brief exchanges the values
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22780 /// @sa https://json.nlohmann.me/api/basic_json/swap/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22781 friend void swap(reference left, reference right) noexcept (
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22782 std::is_nothrow_move_constructible<value_t>::value&&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22783 std::is_nothrow_move_assignable<value_t>::value&&
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22784 std::is_nothrow_move_constructible<json_value>::value&& // NOLINT(cppcoreguidelines-noexcept-swap,performance-noexcept-swap)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22785 std::is_nothrow_move_assignable<json_value>::value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22786 )
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22787 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22788 left.swap(right);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22789 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22790
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22791 /// @brief exchanges the values
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22792 /// @sa https://json.nlohmann.me/api/basic_json/swap/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22793 void swap(array_t& other) // NOLINT(bugprone-exception-escape,cppcoreguidelines-noexcept-swap,performance-noexcept-swap)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22794 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22795 // swap only works for arrays
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22796 if (JSON_HEDLEY_LIKELY(is_array()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22797 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22798 using std::swap;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22799 swap(*(m_data.m_value.array), other);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22800 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22801 else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22802 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22803 JSON_THROW(type_error::create(310, detail::concat("cannot use swap(array_t&) with ", type_name()), this));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22804 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22805 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22806
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22807 /// @brief exchanges the values
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22808 /// @sa https://json.nlohmann.me/api/basic_json/swap/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22809 void swap(object_t& other) // NOLINT(bugprone-exception-escape,cppcoreguidelines-noexcept-swap,performance-noexcept-swap)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22810 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22811 // swap only works for objects
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22812 if (JSON_HEDLEY_LIKELY(is_object()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22813 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22814 using std::swap;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22815 swap(*(m_data.m_value.object), other);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22816 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22817 else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22818 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22819 JSON_THROW(type_error::create(310, detail::concat("cannot use swap(object_t&) with ", type_name()), this));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22820 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22821 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22822
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22823 /// @brief exchanges the values
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22824 /// @sa https://json.nlohmann.me/api/basic_json/swap/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22825 void swap(string_t& other) // NOLINT(bugprone-exception-escape,cppcoreguidelines-noexcept-swap,performance-noexcept-swap)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22826 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22827 // swap only works for strings
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22828 if (JSON_HEDLEY_LIKELY(is_string()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22829 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22830 using std::swap;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22831 swap(*(m_data.m_value.string), other);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22832 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22833 else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22834 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22835 JSON_THROW(type_error::create(310, detail::concat("cannot use swap(string_t&) with ", type_name()), this));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22836 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22837 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22838
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22839 /// @brief exchanges the values
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22840 /// @sa https://json.nlohmann.me/api/basic_json/swap/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22841 void swap(binary_t& other) // NOLINT(bugprone-exception-escape,cppcoreguidelines-noexcept-swap,performance-noexcept-swap)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22842 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22843 // swap only works for strings
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22844 if (JSON_HEDLEY_LIKELY(is_binary()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22845 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22846 using std::swap;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22847 swap(*(m_data.m_value.binary), other);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22848 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22849 else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22850 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22851 JSON_THROW(type_error::create(310, detail::concat("cannot use swap(binary_t&) with ", type_name()), this));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22852 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22853 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22854
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22855 /// @brief exchanges the values
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22856 /// @sa https://json.nlohmann.me/api/basic_json/swap/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22857 void swap(typename binary_t::container_type& other) // NOLINT(bugprone-exception-escape)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22858 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22859 // swap only works for strings
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22860 if (JSON_HEDLEY_LIKELY(is_binary()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22861 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22862 using std::swap;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22863 swap(*(m_data.m_value.binary), other);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22864 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22865 else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22866 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22867 JSON_THROW(type_error::create(310, detail::concat("cannot use swap(binary_t::container_type&) with ", type_name()), this));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22868 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22869 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22870
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22871 /// @}
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22872
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22873 //////////////////////////////////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22874 // lexicographical comparison operators //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22875 //////////////////////////////////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22876
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22877 /// @name lexicographical comparison operators
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22878 /// @{
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22879
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22880 // note parentheses around operands are necessary; see
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22881 // https://github.com/nlohmann/json/issues/1530
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22882 #define JSON_IMPLEMENT_OPERATOR(op, null_result, unordered_result, default_result) \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22883 const auto lhs_type = lhs.type(); \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22884 const auto rhs_type = rhs.type(); \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22885 \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22886 if (lhs_type == rhs_type) /* NOLINT(readability/braces) */ \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22887 { \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22888 switch (lhs_type) \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22889 { \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22890 case value_t::array: \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22891 return (*lhs.m_data.m_value.array) op (*rhs.m_data.m_value.array); \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22892 \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22893 case value_t::object: \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22894 return (*lhs.m_data.m_value.object) op (*rhs.m_data.m_value.object); \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22895 \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22896 case value_t::null: \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22897 return (null_result); \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22898 \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22899 case value_t::string: \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22900 return (*lhs.m_data.m_value.string) op (*rhs.m_data.m_value.string); \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22901 \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22902 case value_t::boolean: \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22903 return (lhs.m_data.m_value.boolean) op (rhs.m_data.m_value.boolean); \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22904 \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22905 case value_t::number_integer: \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22906 return (lhs.m_data.m_value.number_integer) op (rhs.m_data.m_value.number_integer); \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22907 \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22908 case value_t::number_unsigned: \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22909 return (lhs.m_data.m_value.number_unsigned) op (rhs.m_data.m_value.number_unsigned); \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22910 \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22911 case value_t::number_float: \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22912 return (lhs.m_data.m_value.number_float) op (rhs.m_data.m_value.number_float); \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22913 \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22914 case value_t::binary: \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22915 return (*lhs.m_data.m_value.binary) op (*rhs.m_data.m_value.binary); \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22916 \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22917 case value_t::discarded: \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22918 default: \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22919 return (unordered_result); \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22920 } \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22921 } \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22922 else if (lhs_type == value_t::number_integer && rhs_type == value_t::number_float) \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22923 { \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22924 return static_cast<number_float_t>(lhs.m_data.m_value.number_integer) op rhs.m_data.m_value.number_float; \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22925 } \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22926 else if (lhs_type == value_t::number_float && rhs_type == value_t::number_integer) \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22927 { \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22928 return lhs.m_data.m_value.number_float op static_cast<number_float_t>(rhs.m_data.m_value.number_integer); \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22929 } \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22930 else if (lhs_type == value_t::number_unsigned && rhs_type == value_t::number_float) \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22931 { \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22932 return static_cast<number_float_t>(lhs.m_data.m_value.number_unsigned) op rhs.m_data.m_value.number_float; \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22933 } \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22934 else if (lhs_type == value_t::number_float && rhs_type == value_t::number_unsigned) \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22935 { \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22936 return lhs.m_data.m_value.number_float op static_cast<number_float_t>(rhs.m_data.m_value.number_unsigned); \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22937 } \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22938 else if (lhs_type == value_t::number_unsigned && rhs_type == value_t::number_integer) \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22939 { \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22940 return static_cast<number_integer_t>(lhs.m_data.m_value.number_unsigned) op rhs.m_data.m_value.number_integer; \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22941 } \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22942 else if (lhs_type == value_t::number_integer && rhs_type == value_t::number_unsigned) \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22943 { \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22944 return lhs.m_data.m_value.number_integer op static_cast<number_integer_t>(rhs.m_data.m_value.number_unsigned); \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22945 } \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22946 else if(compares_unordered(lhs, rhs))\
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22947 {\
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22948 return (unordered_result);\
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22949 }\
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22950 \
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22951 return (default_result);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22952
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22953 JSON_PRIVATE_UNLESS_TESTED:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22954 // returns true if:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22955 // - any operand is NaN and the other operand is of number type
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22956 // - any operand is discarded
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22957 // in legacy mode, discarded values are considered ordered if
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22958 // an operation is computed as an odd number of inverses of others
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22959 static bool compares_unordered(const_reference lhs, const_reference rhs, bool inverse = false) noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22960 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22961 if ((lhs.is_number_float() && std::isnan(lhs.m_data.m_value.number_float) && rhs.is_number())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22962 || (rhs.is_number_float() && std::isnan(rhs.m_data.m_value.number_float) && lhs.is_number()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22963 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22964 return true;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22965 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22966 #if JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22967 return (lhs.is_discarded() || rhs.is_discarded()) && !inverse;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22968 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22969 static_cast<void>(inverse);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22970 return lhs.is_discarded() || rhs.is_discarded();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22971 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22972 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22973
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22974 private:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22975 bool compares_unordered(const_reference rhs, bool inverse = false) const noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22976 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22977 return compares_unordered(*this, rhs, inverse);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22978 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22979
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22980 public:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22981 #if JSON_HAS_THREE_WAY_COMPARISON
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22982 /// @brief comparison: equal
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22983 /// @sa https://json.nlohmann.me/api/basic_json/operator_eq/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22984 bool operator==(const_reference rhs) const noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22985 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22986 #ifdef __GNUC__
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22987 #pragma GCC diagnostic push
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22988 #pragma GCC diagnostic ignored "-Wfloat-equal"
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22989 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22990 const_reference lhs = *this;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22991 JSON_IMPLEMENT_OPERATOR( ==, true, false, false)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22992 #ifdef __GNUC__
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22993 #pragma GCC diagnostic pop
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22994 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22995 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22996
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22997 /// @brief comparison: equal
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22998 /// @sa https://json.nlohmann.me/api/basic_json/operator_eq/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22999 template<typename ScalarType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23000 requires std::is_scalar_v<ScalarType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23001 bool operator==(ScalarType rhs) const noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23002 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23003 return *this == basic_json(rhs);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23004 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23005
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23006 /// @brief comparison: not equal
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23007 /// @sa https://json.nlohmann.me/api/basic_json/operator_ne/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23008 bool operator!=(const_reference rhs) const noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23009 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23010 if (compares_unordered(rhs, true))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23011 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23012 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23013 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23014 return !operator==(rhs);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23015 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23016
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23017 /// @brief comparison: 3-way
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23018 /// @sa https://json.nlohmann.me/api/basic_json/operator_spaceship/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23019 std::partial_ordering operator<=>(const_reference rhs) const noexcept // *NOPAD*
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23020 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23021 const_reference lhs = *this;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23022 // default_result is used if we cannot compare values. In that case,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23023 // we compare types.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23024 JSON_IMPLEMENT_OPERATOR(<=>, // *NOPAD*
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23025 std::partial_ordering::equivalent,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23026 std::partial_ordering::unordered,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23027 lhs_type <=> rhs_type) // *NOPAD*
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23028 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23029
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23030 /// @brief comparison: 3-way
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23031 /// @sa https://json.nlohmann.me/api/basic_json/operator_spaceship/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23032 template<typename ScalarType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23033 requires std::is_scalar_v<ScalarType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23034 std::partial_ordering operator<=>(ScalarType rhs) const noexcept // *NOPAD*
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23035 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23036 return *this <=> basic_json(rhs); // *NOPAD*
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23037 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23038
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23039 #if JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23040 // all operators that are computed as an odd number of inverses of others
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23041 // need to be overloaded to emulate the legacy comparison behavior
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23042
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23043 /// @brief comparison: less than or equal
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23044 /// @sa https://json.nlohmann.me/api/basic_json/operator_le/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23045 JSON_HEDLEY_DEPRECATED_FOR(3.11.0, undef JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23046 bool operator<=(const_reference rhs) const noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23047 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23048 if (compares_unordered(rhs, true))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23049 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23050 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23051 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23052 return !(rhs < *this);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23053 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23054
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23055 /// @brief comparison: less than or equal
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23056 /// @sa https://json.nlohmann.me/api/basic_json/operator_le/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23057 template<typename ScalarType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23058 requires std::is_scalar_v<ScalarType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23059 bool operator<=(ScalarType rhs) const noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23060 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23061 return *this <= basic_json(rhs);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23062 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23063
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23064 /// @brief comparison: greater than or equal
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23065 /// @sa https://json.nlohmann.me/api/basic_json/operator_ge/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23066 JSON_HEDLEY_DEPRECATED_FOR(3.11.0, undef JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23067 bool operator>=(const_reference rhs) const noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23068 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23069 if (compares_unordered(rhs, true))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23070 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23071 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23072 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23073 return !(*this < rhs);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23074 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23075
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23076 /// @brief comparison: greater than or equal
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23077 /// @sa https://json.nlohmann.me/api/basic_json/operator_ge/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23078 template<typename ScalarType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23079 requires std::is_scalar_v<ScalarType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23080 bool operator>=(ScalarType rhs) const noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23081 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23082 return *this >= basic_json(rhs);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23083 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23084 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23085 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23086 /// @brief comparison: equal
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23087 /// @sa https://json.nlohmann.me/api/basic_json/operator_eq/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23088 friend bool operator==(const_reference lhs, const_reference rhs) noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23089 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23090 #ifdef __GNUC__
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23091 #pragma GCC diagnostic push
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23092 #pragma GCC diagnostic ignored "-Wfloat-equal"
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23093 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23094 JSON_IMPLEMENT_OPERATOR( ==, true, false, false)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23095 #ifdef __GNUC__
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23096 #pragma GCC diagnostic pop
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23097 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23098 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23099
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23100 /// @brief comparison: equal
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23101 /// @sa https://json.nlohmann.me/api/basic_json/operator_eq/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23102 template<typename ScalarType, typename std::enable_if<
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23103 std::is_scalar<ScalarType>::value, int>::type = 0>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23104 friend bool operator==(const_reference lhs, ScalarType rhs) noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23105 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23106 return lhs == basic_json(rhs);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23107 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23108
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23109 /// @brief comparison: equal
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23110 /// @sa https://json.nlohmann.me/api/basic_json/operator_eq/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23111 template<typename ScalarType, typename std::enable_if<
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23112 std::is_scalar<ScalarType>::value, int>::type = 0>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23113 friend bool operator==(ScalarType lhs, const_reference rhs) noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23114 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23115 return basic_json(lhs) == rhs;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23116 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23117
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23118 /// @brief comparison: not equal
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23119 /// @sa https://json.nlohmann.me/api/basic_json/operator_ne/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23120 friend bool operator!=(const_reference lhs, const_reference rhs) noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23121 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23122 if (compares_unordered(lhs, rhs, true))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23123 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23124 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23125 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23126 return !(lhs == rhs);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23127 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23128
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23129 /// @brief comparison: not equal
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23130 /// @sa https://json.nlohmann.me/api/basic_json/operator_ne/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23131 template<typename ScalarType, typename std::enable_if<
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23132 std::is_scalar<ScalarType>::value, int>::type = 0>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23133 friend bool operator!=(const_reference lhs, ScalarType rhs) noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23134 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23135 return lhs != basic_json(rhs);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23136 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23137
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23138 /// @brief comparison: not equal
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23139 /// @sa https://json.nlohmann.me/api/basic_json/operator_ne/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23140 template<typename ScalarType, typename std::enable_if<
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23141 std::is_scalar<ScalarType>::value, int>::type = 0>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23142 friend bool operator!=(ScalarType lhs, const_reference rhs) noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23143 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23144 return basic_json(lhs) != rhs;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23145 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23146
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23147 /// @brief comparison: less than
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23148 /// @sa https://json.nlohmann.me/api/basic_json/operator_lt/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23149 friend bool operator<(const_reference lhs, const_reference rhs) noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23150 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23151 // default_result is used if we cannot compare values. In that case,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23152 // we compare types. Note we have to call the operator explicitly,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23153 // because MSVC has problems otherwise.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23154 JSON_IMPLEMENT_OPERATOR( <, false, false, operator<(lhs_type, rhs_type))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23155 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23156
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23157 /// @brief comparison: less than
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23158 /// @sa https://json.nlohmann.me/api/basic_json/operator_lt/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23159 template<typename ScalarType, typename std::enable_if<
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23160 std::is_scalar<ScalarType>::value, int>::type = 0>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23161 friend bool operator<(const_reference lhs, ScalarType rhs) noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23162 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23163 return lhs < basic_json(rhs);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23164 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23165
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23166 /// @brief comparison: less than
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23167 /// @sa https://json.nlohmann.me/api/basic_json/operator_lt/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23168 template<typename ScalarType, typename std::enable_if<
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23169 std::is_scalar<ScalarType>::value, int>::type = 0>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23170 friend bool operator<(ScalarType lhs, const_reference rhs) noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23171 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23172 return basic_json(lhs) < rhs;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23173 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23174
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23175 /// @brief comparison: less than or equal
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23176 /// @sa https://json.nlohmann.me/api/basic_json/operator_le/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23177 friend bool operator<=(const_reference lhs, const_reference rhs) noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23178 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23179 if (compares_unordered(lhs, rhs, true))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23180 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23181 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23182 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23183 return !(rhs < lhs);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23184 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23185
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23186 /// @brief comparison: less than or equal
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23187 /// @sa https://json.nlohmann.me/api/basic_json/operator_le/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23188 template<typename ScalarType, typename std::enable_if<
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23189 std::is_scalar<ScalarType>::value, int>::type = 0>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23190 friend bool operator<=(const_reference lhs, ScalarType rhs) noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23191 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23192 return lhs <= basic_json(rhs);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23193 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23194
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23195 /// @brief comparison: less than or equal
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23196 /// @sa https://json.nlohmann.me/api/basic_json/operator_le/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23197 template<typename ScalarType, typename std::enable_if<
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23198 std::is_scalar<ScalarType>::value, int>::type = 0>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23199 friend bool operator<=(ScalarType lhs, const_reference rhs) noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23200 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23201 return basic_json(lhs) <= rhs;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23202 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23203
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23204 /// @brief comparison: greater than
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23205 /// @sa https://json.nlohmann.me/api/basic_json/operator_gt/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23206 friend bool operator>(const_reference lhs, const_reference rhs) noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23207 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23208 // double inverse
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23209 if (compares_unordered(lhs, rhs))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23210 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23211 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23212 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23213 return !(lhs <= rhs);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23214 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23215
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23216 /// @brief comparison: greater than
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23217 /// @sa https://json.nlohmann.me/api/basic_json/operator_gt/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23218 template<typename ScalarType, typename std::enable_if<
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23219 std::is_scalar<ScalarType>::value, int>::type = 0>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23220 friend bool operator>(const_reference lhs, ScalarType rhs) noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23221 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23222 return lhs > basic_json(rhs);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23223 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23224
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23225 /// @brief comparison: greater than
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23226 /// @sa https://json.nlohmann.me/api/basic_json/operator_gt/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23227 template<typename ScalarType, typename std::enable_if<
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23228 std::is_scalar<ScalarType>::value, int>::type = 0>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23229 friend bool operator>(ScalarType lhs, const_reference rhs) noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23230 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23231 return basic_json(lhs) > rhs;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23232 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23233
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23234 /// @brief comparison: greater than or equal
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23235 /// @sa https://json.nlohmann.me/api/basic_json/operator_ge/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23236 friend bool operator>=(const_reference lhs, const_reference rhs) noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23237 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23238 if (compares_unordered(lhs, rhs, true))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23239 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23240 return false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23241 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23242 return !(lhs < rhs);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23243 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23244
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23245 /// @brief comparison: greater than or equal
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23246 /// @sa https://json.nlohmann.me/api/basic_json/operator_ge/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23247 template<typename ScalarType, typename std::enable_if<
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23248 std::is_scalar<ScalarType>::value, int>::type = 0>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23249 friend bool operator>=(const_reference lhs, ScalarType rhs) noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23250 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23251 return lhs >= basic_json(rhs);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23252 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23253
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23254 /// @brief comparison: greater than or equal
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23255 /// @sa https://json.nlohmann.me/api/basic_json/operator_ge/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23256 template<typename ScalarType, typename std::enable_if<
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23257 std::is_scalar<ScalarType>::value, int>::type = 0>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23258 friend bool operator>=(ScalarType lhs, const_reference rhs) noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23259 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23260 return basic_json(lhs) >= rhs;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23261 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23262 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23263
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23264 #undef JSON_IMPLEMENT_OPERATOR
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23265
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23266 /// @}
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23267
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23268 ///////////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23269 // serialization //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23270 ///////////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23271
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23272 /// @name serialization
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23273 /// @{
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23274 #ifndef JSON_NO_IO
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23275 /// @brief serialize to stream
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23276 /// @sa https://json.nlohmann.me/api/basic_json/operator_ltlt/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23277 friend std::ostream& operator<<(std::ostream& o, const basic_json& j)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23278 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23279 // read width member and use it as indentation parameter if nonzero
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23280 const bool pretty_print = o.width() > 0;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23281 const auto indentation = pretty_print ? o.width() : 0;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23282
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23283 // reset width to 0 for subsequent calls to this stream
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23284 o.width(0);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23285
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23286 // do the actual serialization
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23287 serializer s(detail::output_adapter<char>(o), o.fill());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23288 s.dump(j, pretty_print, false, static_cast<unsigned int>(indentation));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23289 return o;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23290 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23291
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23292 /// @brief serialize to stream
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23293 /// @sa https://json.nlohmann.me/api/basic_json/operator_ltlt/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23294 /// @deprecated This function is deprecated since 3.0.0 and will be removed in
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23295 /// version 4.0.0 of the library. Please use
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23296 /// operator<<(std::ostream&, const basic_json&) instead; that is,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23297 /// replace calls like `j >> o;` with `o << j;`.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23298 JSON_HEDLEY_DEPRECATED_FOR(3.0.0, operator<<(std::ostream&, const basic_json&))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23299 friend std::ostream& operator>>(const basic_json& j, std::ostream& o)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23300 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23301 return o << j;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23302 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23303 #endif // JSON_NO_IO
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23304 /// @}
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23305
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23306 /////////////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23307 // deserialization //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23308 /////////////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23309
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23310 /// @name deserialization
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23311 /// @{
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23312
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23313 /// @brief deserialize from a compatible input
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23314 /// @sa https://json.nlohmann.me/api/basic_json/parse/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23315 template<typename InputType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23316 JSON_HEDLEY_WARN_UNUSED_RESULT
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23317 static basic_json parse(InputType&& i,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23318 const parser_callback_t cb = nullptr,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23319 const bool allow_exceptions = true,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23320 const bool ignore_comments = false)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23321 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23322 basic_json result;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23323 parser(detail::input_adapter(std::forward<InputType>(i)), cb, allow_exceptions, ignore_comments).parse(true, result);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23324 return result;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23325 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23326
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23327 /// @brief deserialize from a pair of character iterators
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23328 /// @sa https://json.nlohmann.me/api/basic_json/parse/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23329 template<typename IteratorType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23330 JSON_HEDLEY_WARN_UNUSED_RESULT
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23331 static basic_json parse(IteratorType first,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23332 IteratorType last,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23333 const parser_callback_t cb = nullptr,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23334 const bool allow_exceptions = true,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23335 const bool ignore_comments = false)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23336 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23337 basic_json result;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23338 parser(detail::input_adapter(std::move(first), std::move(last)), cb, allow_exceptions, ignore_comments).parse(true, result);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23339 return result;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23340 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23341
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23342 JSON_HEDLEY_WARN_UNUSED_RESULT
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23343 JSON_HEDLEY_DEPRECATED_FOR(3.8.0, parse(ptr, ptr + len))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23344 static basic_json parse(detail::span_input_adapter&& i,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23345 const parser_callback_t cb = nullptr,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23346 const bool allow_exceptions = true,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23347 const bool ignore_comments = false)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23348 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23349 basic_json result;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23350 parser(i.get(), cb, allow_exceptions, ignore_comments).parse(true, result);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23351 return result;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23352 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23353
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23354 /// @brief check if the input is valid JSON
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23355 /// @sa https://json.nlohmann.me/api/basic_json/accept/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23356 template<typename InputType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23357 static bool accept(InputType&& i,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23358 const bool ignore_comments = false)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23359 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23360 return parser(detail::input_adapter(std::forward<InputType>(i)), nullptr, false, ignore_comments).accept(true);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23361 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23362
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23363 /// @brief check if the input is valid JSON
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23364 /// @sa https://json.nlohmann.me/api/basic_json/accept/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23365 template<typename IteratorType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23366 static bool accept(IteratorType first, IteratorType last,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23367 const bool ignore_comments = false)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23368 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23369 return parser(detail::input_adapter(std::move(first), std::move(last)), nullptr, false, ignore_comments).accept(true);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23370 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23371
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23372 JSON_HEDLEY_WARN_UNUSED_RESULT
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23373 JSON_HEDLEY_DEPRECATED_FOR(3.8.0, accept(ptr, ptr + len))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23374 static bool accept(detail::span_input_adapter&& i,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23375 const bool ignore_comments = false)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23376 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23377 return parser(i.get(), nullptr, false, ignore_comments).accept(true);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23378 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23379
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23380 /// @brief generate SAX events
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23381 /// @sa https://json.nlohmann.me/api/basic_json/sax_parse/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23382 template <typename InputType, typename SAX>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23383 JSON_HEDLEY_NON_NULL(2)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23384 static bool sax_parse(InputType&& i, SAX* sax,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23385 input_format_t format = input_format_t::json,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23386 const bool strict = true,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23387 const bool ignore_comments = false)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23388 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23389 auto ia = detail::input_adapter(std::forward<InputType>(i));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23390 return format == input_format_t::json
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23391 ? parser(std::move(ia), nullptr, true, ignore_comments).sax_parse(sax, strict)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23392 : detail::binary_reader<basic_json, decltype(ia), SAX>(std::move(ia), format).sax_parse(format, sax, strict);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23393 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23394
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23395 /// @brief generate SAX events
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23396 /// @sa https://json.nlohmann.me/api/basic_json/sax_parse/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23397 template<class IteratorType, class SAX>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23398 JSON_HEDLEY_NON_NULL(3)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23399 static bool sax_parse(IteratorType first, IteratorType last, SAX* sax,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23400 input_format_t format = input_format_t::json,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23401 const bool strict = true,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23402 const bool ignore_comments = false)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23403 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23404 auto ia = detail::input_adapter(std::move(first), std::move(last));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23405 return format == input_format_t::json
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23406 ? parser(std::move(ia), nullptr, true, ignore_comments).sax_parse(sax, strict)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23407 : detail::binary_reader<basic_json, decltype(ia), SAX>(std::move(ia), format).sax_parse(format, sax, strict);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23408 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23409
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23410 /// @brief generate SAX events
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23411 /// @sa https://json.nlohmann.me/api/basic_json/sax_parse/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23412 /// @deprecated This function is deprecated since 3.8.0 and will be removed in
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23413 /// version 4.0.0 of the library. Please use
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23414 /// sax_parse(ptr, ptr + len) instead.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23415 template <typename SAX>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23416 JSON_HEDLEY_DEPRECATED_FOR(3.8.0, sax_parse(ptr, ptr + len, ...))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23417 JSON_HEDLEY_NON_NULL(2)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23418 static bool sax_parse(detail::span_input_adapter&& i, SAX* sax,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23419 input_format_t format = input_format_t::json,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23420 const bool strict = true,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23421 const bool ignore_comments = false)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23422 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23423 auto ia = i.get();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23424 return format == input_format_t::json
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23425 // NOLINTNEXTLINE(hicpp-move-const-arg,performance-move-const-arg)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23426 ? parser(std::move(ia), nullptr, true, ignore_comments).sax_parse(sax, strict)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23427 // NOLINTNEXTLINE(hicpp-move-const-arg,performance-move-const-arg)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23428 : detail::binary_reader<basic_json, decltype(ia), SAX>(std::move(ia), format).sax_parse(format, sax, strict);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23429 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23430 #ifndef JSON_NO_IO
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23431 /// @brief deserialize from stream
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23432 /// @sa https://json.nlohmann.me/api/basic_json/operator_gtgt/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23433 /// @deprecated This stream operator is deprecated since 3.0.0 and will be removed in
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23434 /// version 4.0.0 of the library. Please use
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23435 /// operator>>(std::istream&, basic_json&) instead; that is,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23436 /// replace calls like `j << i;` with `i >> j;`.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23437 JSON_HEDLEY_DEPRECATED_FOR(3.0.0, operator>>(std::istream&, basic_json&))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23438 friend std::istream& operator<<(basic_json& j, std::istream& i)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23439 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23440 return operator>>(i, j);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23441 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23442
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23443 /// @brief deserialize from stream
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23444 /// @sa https://json.nlohmann.me/api/basic_json/operator_gtgt/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23445 friend std::istream& operator>>(std::istream& i, basic_json& j)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23446 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23447 parser(detail::input_adapter(i)).parse(false, j);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23448 return i;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23449 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23450 #endif // JSON_NO_IO
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23451 /// @}
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23452
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23453 ///////////////////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23454 // convenience functions //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23455 ///////////////////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23456
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23457 /// @brief return the type as string
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23458 /// @sa https://json.nlohmann.me/api/basic_json/type_name/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23459 JSON_HEDLEY_RETURNS_NON_NULL
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23460 const char* type_name() const noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23461 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23462 switch (m_data.m_type)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23463 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23464 case value_t::null:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23465 return "null";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23466 case value_t::object:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23467 return "object";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23468 case value_t::array:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23469 return "array";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23470 case value_t::string:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23471 return "string";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23472 case value_t::boolean:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23473 return "boolean";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23474 case value_t::binary:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23475 return "binary";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23476 case value_t::discarded:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23477 return "discarded";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23478 case value_t::number_integer:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23479 case value_t::number_unsigned:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23480 case value_t::number_float:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23481 default:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23482 return "number";
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23483 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23484 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23485
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23486 JSON_PRIVATE_UNLESS_TESTED:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23487 //////////////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23488 // member variables //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23489 //////////////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23490
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23491 struct data
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23492 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23493 /// the type of the current element
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23494 value_t m_type = value_t::null;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23495
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23496 /// the value of the current element
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23497 json_value m_value = {};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23498
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23499 data(const value_t v)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23500 : m_type(v), m_value(v)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23501 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23502 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23503
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23504 data(size_type cnt, const basic_json& val)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23505 : m_type(value_t::array)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23506 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23507 m_value.array = create<array_t>(cnt, val);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23508 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23509
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23510 data() noexcept = default;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23511 data(data&&) noexcept = default;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23512 data(const data&) noexcept = delete;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23513 data& operator=(data&&) noexcept = delete;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23514 data& operator=(const data&) noexcept = delete;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23515
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23516 ~data() noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23517 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23518 m_value.destroy(m_type);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23519 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23520 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23521
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23522 data m_data = {};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23523
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23524 #if JSON_DIAGNOSTICS
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23525 /// a pointer to a parent value (for debugging purposes)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23526 basic_json* m_parent = nullptr;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23527 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23528
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23529 //////////////////////////////////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23530 // binary serialization/deserialization //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23531 //////////////////////////////////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23532
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23533 /// @name binary serialization/deserialization support
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23534 /// @{
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23535
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23536 public:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23537 /// @brief create a CBOR serialization of a given JSON value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23538 /// @sa https://json.nlohmann.me/api/basic_json/to_cbor/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23539 static std::vector<std::uint8_t> to_cbor(const basic_json& j)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23540 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23541 std::vector<std::uint8_t> result;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23542 to_cbor(j, result);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23543 return result;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23544 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23545
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23546 /// @brief create a CBOR serialization of a given JSON value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23547 /// @sa https://json.nlohmann.me/api/basic_json/to_cbor/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23548 static void to_cbor(const basic_json& j, detail::output_adapter<std::uint8_t> o)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23549 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23550 binary_writer<std::uint8_t>(o).write_cbor(j);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23551 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23552
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23553 /// @brief create a CBOR serialization of a given JSON value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23554 /// @sa https://json.nlohmann.me/api/basic_json/to_cbor/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23555 static void to_cbor(const basic_json& j, detail::output_adapter<char> o)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23556 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23557 binary_writer<char>(o).write_cbor(j);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23558 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23559
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23560 /// @brief create a MessagePack serialization of a given JSON value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23561 /// @sa https://json.nlohmann.me/api/basic_json/to_msgpack/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23562 static std::vector<std::uint8_t> to_msgpack(const basic_json& j)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23563 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23564 std::vector<std::uint8_t> result;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23565 to_msgpack(j, result);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23566 return result;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23567 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23568
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23569 /// @brief create a MessagePack serialization of a given JSON value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23570 /// @sa https://json.nlohmann.me/api/basic_json/to_msgpack/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23571 static void to_msgpack(const basic_json& j, detail::output_adapter<std::uint8_t> o)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23572 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23573 binary_writer<std::uint8_t>(o).write_msgpack(j);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23574 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23575
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23576 /// @brief create a MessagePack serialization of a given JSON value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23577 /// @sa https://json.nlohmann.me/api/basic_json/to_msgpack/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23578 static void to_msgpack(const basic_json& j, detail::output_adapter<char> o)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23579 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23580 binary_writer<char>(o).write_msgpack(j);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23581 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23582
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23583 /// @brief create a UBJSON serialization of a given JSON value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23584 /// @sa https://json.nlohmann.me/api/basic_json/to_ubjson/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23585 static std::vector<std::uint8_t> to_ubjson(const basic_json& j,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23586 const bool use_size = false,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23587 const bool use_type = false)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23588 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23589 std::vector<std::uint8_t> result;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23590 to_ubjson(j, result, use_size, use_type);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23591 return result;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23592 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23593
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23594 /// @brief create a UBJSON serialization of a given JSON value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23595 /// @sa https://json.nlohmann.me/api/basic_json/to_ubjson/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23596 static void to_ubjson(const basic_json& j, detail::output_adapter<std::uint8_t> o,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23597 const bool use_size = false, const bool use_type = false)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23598 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23599 binary_writer<std::uint8_t>(o).write_ubjson(j, use_size, use_type);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23600 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23601
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23602 /// @brief create a UBJSON serialization of a given JSON value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23603 /// @sa https://json.nlohmann.me/api/basic_json/to_ubjson/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23604 static void to_ubjson(const basic_json& j, detail::output_adapter<char> o,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23605 const bool use_size = false, const bool use_type = false)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23606 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23607 binary_writer<char>(o).write_ubjson(j, use_size, use_type);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23608 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23609
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23610 /// @brief create a BJData serialization of a given JSON value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23611 /// @sa https://json.nlohmann.me/api/basic_json/to_bjdata/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23612 static std::vector<std::uint8_t> to_bjdata(const basic_json& j,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23613 const bool use_size = false,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23614 const bool use_type = false)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23615 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23616 std::vector<std::uint8_t> result;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23617 to_bjdata(j, result, use_size, use_type);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23618 return result;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23619 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23620
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23621 /// @brief create a BJData serialization of a given JSON value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23622 /// @sa https://json.nlohmann.me/api/basic_json/to_bjdata/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23623 static void to_bjdata(const basic_json& j, detail::output_adapter<std::uint8_t> o,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23624 const bool use_size = false, const bool use_type = false)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23625 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23626 binary_writer<std::uint8_t>(o).write_ubjson(j, use_size, use_type, true, true);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23627 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23628
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23629 /// @brief create a BJData serialization of a given JSON value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23630 /// @sa https://json.nlohmann.me/api/basic_json/to_bjdata/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23631 static void to_bjdata(const basic_json& j, detail::output_adapter<char> o,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23632 const bool use_size = false, const bool use_type = false)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23633 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23634 binary_writer<char>(o).write_ubjson(j, use_size, use_type, true, true);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23635 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23636
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23637 /// @brief create a BSON serialization of a given JSON value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23638 /// @sa https://json.nlohmann.me/api/basic_json/to_bson/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23639 static std::vector<std::uint8_t> to_bson(const basic_json& j)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23640 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23641 std::vector<std::uint8_t> result;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23642 to_bson(j, result);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23643 return result;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23644 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23645
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23646 /// @brief create a BSON serialization of a given JSON value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23647 /// @sa https://json.nlohmann.me/api/basic_json/to_bson/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23648 static void to_bson(const basic_json& j, detail::output_adapter<std::uint8_t> o)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23649 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23650 binary_writer<std::uint8_t>(o).write_bson(j);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23651 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23652
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23653 /// @brief create a BSON serialization of a given JSON value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23654 /// @sa https://json.nlohmann.me/api/basic_json/to_bson/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23655 static void to_bson(const basic_json& j, detail::output_adapter<char> o)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23656 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23657 binary_writer<char>(o).write_bson(j);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23658 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23659
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23660 /// @brief create a JSON value from an input in CBOR format
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23661 /// @sa https://json.nlohmann.me/api/basic_json/from_cbor/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23662 template<typename InputType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23663 JSON_HEDLEY_WARN_UNUSED_RESULT
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23664 static basic_json from_cbor(InputType&& i,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23665 const bool strict = true,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23666 const bool allow_exceptions = true,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23667 const cbor_tag_handler_t tag_handler = cbor_tag_handler_t::error)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23668 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23669 basic_json result;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23670 detail::json_sax_dom_parser<basic_json> sdp(result, allow_exceptions);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23671 auto ia = detail::input_adapter(std::forward<InputType>(i));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23672 const bool res = binary_reader<decltype(ia)>(std::move(ia), input_format_t::cbor).sax_parse(input_format_t::cbor, &sdp, strict, tag_handler);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23673 return res ? result : basic_json(value_t::discarded);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23674 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23675
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23676 /// @brief create a JSON value from an input in CBOR format
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23677 /// @sa https://json.nlohmann.me/api/basic_json/from_cbor/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23678 template<typename IteratorType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23679 JSON_HEDLEY_WARN_UNUSED_RESULT
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23680 static basic_json from_cbor(IteratorType first, IteratorType last,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23681 const bool strict = true,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23682 const bool allow_exceptions = true,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23683 const cbor_tag_handler_t tag_handler = cbor_tag_handler_t::error)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23684 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23685 basic_json result;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23686 detail::json_sax_dom_parser<basic_json> sdp(result, allow_exceptions);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23687 auto ia = detail::input_adapter(std::move(first), std::move(last));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23688 const bool res = binary_reader<decltype(ia)>(std::move(ia), input_format_t::cbor).sax_parse(input_format_t::cbor, &sdp, strict, tag_handler);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23689 return res ? result : basic_json(value_t::discarded);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23690 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23691
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23692 template<typename T>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23693 JSON_HEDLEY_WARN_UNUSED_RESULT
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23694 JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_cbor(ptr, ptr + len))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23695 static basic_json from_cbor(const T* ptr, std::size_t len,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23696 const bool strict = true,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23697 const bool allow_exceptions = true,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23698 const cbor_tag_handler_t tag_handler = cbor_tag_handler_t::error)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23699 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23700 return from_cbor(ptr, ptr + len, strict, allow_exceptions, tag_handler);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23701 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23702
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23703 JSON_HEDLEY_WARN_UNUSED_RESULT
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23704 JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_cbor(ptr, ptr + len))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23705 static basic_json from_cbor(detail::span_input_adapter&& i,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23706 const bool strict = true,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23707 const bool allow_exceptions = true,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23708 const cbor_tag_handler_t tag_handler = cbor_tag_handler_t::error)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23709 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23710 basic_json result;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23711 detail::json_sax_dom_parser<basic_json> sdp(result, allow_exceptions);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23712 auto ia = i.get();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23713 // NOLINTNEXTLINE(hicpp-move-const-arg,performance-move-const-arg)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23714 const bool res = binary_reader<decltype(ia)>(std::move(ia), input_format_t::cbor).sax_parse(input_format_t::cbor, &sdp, strict, tag_handler);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23715 return res ? result : basic_json(value_t::discarded);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23716 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23717
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23718 /// @brief create a JSON value from an input in MessagePack format
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23719 /// @sa https://json.nlohmann.me/api/basic_json/from_msgpack/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23720 template<typename InputType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23721 JSON_HEDLEY_WARN_UNUSED_RESULT
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23722 static basic_json from_msgpack(InputType&& i,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23723 const bool strict = true,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23724 const bool allow_exceptions = true)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23725 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23726 basic_json result;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23727 detail::json_sax_dom_parser<basic_json> sdp(result, allow_exceptions);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23728 auto ia = detail::input_adapter(std::forward<InputType>(i));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23729 const bool res = binary_reader<decltype(ia)>(std::move(ia), input_format_t::msgpack).sax_parse(input_format_t::msgpack, &sdp, strict);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23730 return res ? result : basic_json(value_t::discarded);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23731 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23732
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23733 /// @brief create a JSON value from an input in MessagePack format
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23734 /// @sa https://json.nlohmann.me/api/basic_json/from_msgpack/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23735 template<typename IteratorType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23736 JSON_HEDLEY_WARN_UNUSED_RESULT
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23737 static basic_json from_msgpack(IteratorType first, IteratorType last,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23738 const bool strict = true,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23739 const bool allow_exceptions = true)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23740 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23741 basic_json result;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23742 detail::json_sax_dom_parser<basic_json> sdp(result, allow_exceptions);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23743 auto ia = detail::input_adapter(std::move(first), std::move(last));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23744 const bool res = binary_reader<decltype(ia)>(std::move(ia), input_format_t::msgpack).sax_parse(input_format_t::msgpack, &sdp, strict);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23745 return res ? result : basic_json(value_t::discarded);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23746 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23747
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23748 template<typename T>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23749 JSON_HEDLEY_WARN_UNUSED_RESULT
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23750 JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_msgpack(ptr, ptr + len))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23751 static basic_json from_msgpack(const T* ptr, std::size_t len,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23752 const bool strict = true,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23753 const bool allow_exceptions = true)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23754 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23755 return from_msgpack(ptr, ptr + len, strict, allow_exceptions);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23756 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23757
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23758 JSON_HEDLEY_WARN_UNUSED_RESULT
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23759 JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_msgpack(ptr, ptr + len))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23760 static basic_json from_msgpack(detail::span_input_adapter&& i,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23761 const bool strict = true,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23762 const bool allow_exceptions = true)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23763 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23764 basic_json result;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23765 detail::json_sax_dom_parser<basic_json> sdp(result, allow_exceptions);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23766 auto ia = i.get();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23767 // NOLINTNEXTLINE(hicpp-move-const-arg,performance-move-const-arg)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23768 const bool res = binary_reader<decltype(ia)>(std::move(ia), input_format_t::msgpack).sax_parse(input_format_t::msgpack, &sdp, strict);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23769 return res ? result : basic_json(value_t::discarded);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23770 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23771
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23772 /// @brief create a JSON value from an input in UBJSON format
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23773 /// @sa https://json.nlohmann.me/api/basic_json/from_ubjson/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23774 template<typename InputType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23775 JSON_HEDLEY_WARN_UNUSED_RESULT
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23776 static basic_json from_ubjson(InputType&& i,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23777 const bool strict = true,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23778 const bool allow_exceptions = true)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23779 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23780 basic_json result;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23781 detail::json_sax_dom_parser<basic_json> sdp(result, allow_exceptions);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23782 auto ia = detail::input_adapter(std::forward<InputType>(i));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23783 const bool res = binary_reader<decltype(ia)>(std::move(ia), input_format_t::ubjson).sax_parse(input_format_t::ubjson, &sdp, strict);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23784 return res ? result : basic_json(value_t::discarded);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23785 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23786
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23787 /// @brief create a JSON value from an input in UBJSON format
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23788 /// @sa https://json.nlohmann.me/api/basic_json/from_ubjson/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23789 template<typename IteratorType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23790 JSON_HEDLEY_WARN_UNUSED_RESULT
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23791 static basic_json from_ubjson(IteratorType first, IteratorType last,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23792 const bool strict = true,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23793 const bool allow_exceptions = true)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23794 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23795 basic_json result;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23796 detail::json_sax_dom_parser<basic_json> sdp(result, allow_exceptions);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23797 auto ia = detail::input_adapter(std::move(first), std::move(last));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23798 const bool res = binary_reader<decltype(ia)>(std::move(ia), input_format_t::ubjson).sax_parse(input_format_t::ubjson, &sdp, strict);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23799 return res ? result : basic_json(value_t::discarded);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23800 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23801
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23802 template<typename T>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23803 JSON_HEDLEY_WARN_UNUSED_RESULT
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23804 JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_ubjson(ptr, ptr + len))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23805 static basic_json from_ubjson(const T* ptr, std::size_t len,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23806 const bool strict = true,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23807 const bool allow_exceptions = true)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23808 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23809 return from_ubjson(ptr, ptr + len, strict, allow_exceptions);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23810 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23811
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23812 JSON_HEDLEY_WARN_UNUSED_RESULT
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23813 JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_ubjson(ptr, ptr + len))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23814 static basic_json from_ubjson(detail::span_input_adapter&& i,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23815 const bool strict = true,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23816 const bool allow_exceptions = true)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23817 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23818 basic_json result;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23819 detail::json_sax_dom_parser<basic_json> sdp(result, allow_exceptions);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23820 auto ia = i.get();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23821 // NOLINTNEXTLINE(hicpp-move-const-arg,performance-move-const-arg)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23822 const bool res = binary_reader<decltype(ia)>(std::move(ia), input_format_t::ubjson).sax_parse(input_format_t::ubjson, &sdp, strict);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23823 return res ? result : basic_json(value_t::discarded);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23824 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23825
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23826 /// @brief create a JSON value from an input in BJData format
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23827 /// @sa https://json.nlohmann.me/api/basic_json/from_bjdata/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23828 template<typename InputType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23829 JSON_HEDLEY_WARN_UNUSED_RESULT
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23830 static basic_json from_bjdata(InputType&& i,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23831 const bool strict = true,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23832 const bool allow_exceptions = true)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23833 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23834 basic_json result;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23835 detail::json_sax_dom_parser<basic_json> sdp(result, allow_exceptions);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23836 auto ia = detail::input_adapter(std::forward<InputType>(i));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23837 const bool res = binary_reader<decltype(ia)>(std::move(ia), input_format_t::bjdata).sax_parse(input_format_t::bjdata, &sdp, strict);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23838 return res ? result : basic_json(value_t::discarded);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23839 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23840
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23841 /// @brief create a JSON value from an input in BJData format
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23842 /// @sa https://json.nlohmann.me/api/basic_json/from_bjdata/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23843 template<typename IteratorType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23844 JSON_HEDLEY_WARN_UNUSED_RESULT
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23845 static basic_json from_bjdata(IteratorType first, IteratorType last,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23846 const bool strict = true,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23847 const bool allow_exceptions = true)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23848 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23849 basic_json result;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23850 detail::json_sax_dom_parser<basic_json> sdp(result, allow_exceptions);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23851 auto ia = detail::input_adapter(std::move(first), std::move(last));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23852 const bool res = binary_reader<decltype(ia)>(std::move(ia), input_format_t::bjdata).sax_parse(input_format_t::bjdata, &sdp, strict);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23853 return res ? result : basic_json(value_t::discarded);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23854 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23855
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23856 /// @brief create a JSON value from an input in BSON format
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23857 /// @sa https://json.nlohmann.me/api/basic_json/from_bson/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23858 template<typename InputType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23859 JSON_HEDLEY_WARN_UNUSED_RESULT
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23860 static basic_json from_bson(InputType&& i,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23861 const bool strict = true,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23862 const bool allow_exceptions = true)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23863 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23864 basic_json result;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23865 detail::json_sax_dom_parser<basic_json> sdp(result, allow_exceptions);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23866 auto ia = detail::input_adapter(std::forward<InputType>(i));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23867 const bool res = binary_reader<decltype(ia)>(std::move(ia), input_format_t::bson).sax_parse(input_format_t::bson, &sdp, strict);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23868 return res ? result : basic_json(value_t::discarded);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23869 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23870
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23871 /// @brief create a JSON value from an input in BSON format
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23872 /// @sa https://json.nlohmann.me/api/basic_json/from_bson/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23873 template<typename IteratorType>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23874 JSON_HEDLEY_WARN_UNUSED_RESULT
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23875 static basic_json from_bson(IteratorType first, IteratorType last,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23876 const bool strict = true,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23877 const bool allow_exceptions = true)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23878 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23879 basic_json result;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23880 detail::json_sax_dom_parser<basic_json> sdp(result, allow_exceptions);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23881 auto ia = detail::input_adapter(std::move(first), std::move(last));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23882 const bool res = binary_reader<decltype(ia)>(std::move(ia), input_format_t::bson).sax_parse(input_format_t::bson, &sdp, strict);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23883 return res ? result : basic_json(value_t::discarded);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23884 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23885
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23886 template<typename T>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23887 JSON_HEDLEY_WARN_UNUSED_RESULT
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23888 JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_bson(ptr, ptr + len))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23889 static basic_json from_bson(const T* ptr, std::size_t len,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23890 const bool strict = true,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23891 const bool allow_exceptions = true)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23892 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23893 return from_bson(ptr, ptr + len, strict, allow_exceptions);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23894 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23895
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23896 JSON_HEDLEY_WARN_UNUSED_RESULT
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23897 JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_bson(ptr, ptr + len))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23898 static basic_json from_bson(detail::span_input_adapter&& i,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23899 const bool strict = true,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23900 const bool allow_exceptions = true)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23901 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23902 basic_json result;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23903 detail::json_sax_dom_parser<basic_json> sdp(result, allow_exceptions);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23904 auto ia = i.get();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23905 // NOLINTNEXTLINE(hicpp-move-const-arg,performance-move-const-arg)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23906 const bool res = binary_reader<decltype(ia)>(std::move(ia), input_format_t::bson).sax_parse(input_format_t::bson, &sdp, strict);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23907 return res ? result : basic_json(value_t::discarded);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23908 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23909 /// @}
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23910
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23911 //////////////////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23912 // JSON Pointer support //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23913 //////////////////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23914
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23915 /// @name JSON Pointer functions
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23916 /// @{
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23917
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23918 /// @brief access specified element via JSON Pointer
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23919 /// @sa https://json.nlohmann.me/api/basic_json/operator%5B%5D/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23920 reference operator[](const json_pointer& ptr)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23921 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23922 return ptr.get_unchecked(this);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23923 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23924
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23925 template<typename BasicJsonType, detail::enable_if_t<detail::is_basic_json<BasicJsonType>::value, int> = 0>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23926 JSON_HEDLEY_DEPRECATED_FOR(3.11.0, basic_json::json_pointer or nlohmann::json_pointer<basic_json::string_t>) // NOLINT(readability/alt_tokens)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23927 reference operator[](const ::nlohmann::json_pointer<BasicJsonType>& ptr)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23928 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23929 return ptr.get_unchecked(this);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23930 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23931
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23932 /// @brief access specified element via JSON Pointer
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23933 /// @sa https://json.nlohmann.me/api/basic_json/operator%5B%5D/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23934 const_reference operator[](const json_pointer& ptr) const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23935 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23936 return ptr.get_unchecked(this);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23937 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23938
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23939 template<typename BasicJsonType, detail::enable_if_t<detail::is_basic_json<BasicJsonType>::value, int> = 0>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23940 JSON_HEDLEY_DEPRECATED_FOR(3.11.0, basic_json::json_pointer or nlohmann::json_pointer<basic_json::string_t>) // NOLINT(readability/alt_tokens)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23941 const_reference operator[](const ::nlohmann::json_pointer<BasicJsonType>& ptr) const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23942 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23943 return ptr.get_unchecked(this);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23944 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23945
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23946 /// @brief access specified element via JSON Pointer
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23947 /// @sa https://json.nlohmann.me/api/basic_json/at/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23948 reference at(const json_pointer& ptr)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23949 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23950 return ptr.get_checked(this);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23951 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23952
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23953 template<typename BasicJsonType, detail::enable_if_t<detail::is_basic_json<BasicJsonType>::value, int> = 0>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23954 JSON_HEDLEY_DEPRECATED_FOR(3.11.0, basic_json::json_pointer or nlohmann::json_pointer<basic_json::string_t>) // NOLINT(readability/alt_tokens)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23955 reference at(const ::nlohmann::json_pointer<BasicJsonType>& ptr)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23956 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23957 return ptr.get_checked(this);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23958 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23959
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23960 /// @brief access specified element via JSON Pointer
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23961 /// @sa https://json.nlohmann.me/api/basic_json/at/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23962 const_reference at(const json_pointer& ptr) const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23963 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23964 return ptr.get_checked(this);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23965 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23966
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23967 template<typename BasicJsonType, detail::enable_if_t<detail::is_basic_json<BasicJsonType>::value, int> = 0>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23968 JSON_HEDLEY_DEPRECATED_FOR(3.11.0, basic_json::json_pointer or nlohmann::json_pointer<basic_json::string_t>) // NOLINT(readability/alt_tokens)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23969 const_reference at(const ::nlohmann::json_pointer<BasicJsonType>& ptr) const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23970 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23971 return ptr.get_checked(this);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23972 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23973
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23974 /// @brief return flattened JSON value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23975 /// @sa https://json.nlohmann.me/api/basic_json/flatten/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23976 basic_json flatten() const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23977 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23978 basic_json result(value_t::object);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23979 json_pointer::flatten("", *this, result);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23980 return result;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23981 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23982
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23983 /// @brief unflatten a previously flattened JSON value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23984 /// @sa https://json.nlohmann.me/api/basic_json/unflatten/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23985 basic_json unflatten() const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23986 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23987 return json_pointer::unflatten(*this);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23988 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23989
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23990 /// @}
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23991
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23992 //////////////////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23993 // JSON Patch functions //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23994 //////////////////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23995
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23996 /// @name JSON Patch functions
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23997 /// @{
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23998
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23999 /// @brief applies a JSON patch in-place without copying the object
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24000 /// @sa https://json.nlohmann.me/api/basic_json/patch/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24001 void patch_inplace(const basic_json& json_patch)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24002 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24003 basic_json& result = *this;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24004 // the valid JSON Patch operations
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24005 enum class patch_operations {add, remove, replace, move, copy, test, invalid};
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24006
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24007 const auto get_op = [](const std::string & op)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24008 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24009 if (op == "add")
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24010 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24011 return patch_operations::add;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24012 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24013 if (op == "remove")
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24014 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24015 return patch_operations::remove;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24016 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24017 if (op == "replace")
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24018 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24019 return patch_operations::replace;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24020 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24021 if (op == "move")
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24022 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24023 return patch_operations::move;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24024 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24025 if (op == "copy")
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24026 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24027 return patch_operations::copy;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24028 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24029 if (op == "test")
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24030 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24031 return patch_operations::test;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24032 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24033
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24034 return patch_operations::invalid;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24035 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24036
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24037 // wrapper for "add" operation; add value at ptr
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24038 const auto operation_add = [&result](json_pointer & ptr, basic_json val)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24039 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24040 // adding to the root of the target document means replacing it
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24041 if (ptr.empty())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24042 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24043 result = val;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24044 return;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24045 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24046
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24047 // make sure the top element of the pointer exists
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24048 json_pointer const top_pointer = ptr.top();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24049 if (top_pointer != ptr)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24050 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24051 result.at(top_pointer);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24052 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24053
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24054 // get reference to parent of JSON pointer ptr
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24055 const auto last_path = ptr.back();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24056 ptr.pop_back();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24057 // parent must exist when performing patch add per RFC6902 specs
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24058 basic_json& parent = result.at(ptr);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24059
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24060 switch (parent.m_data.m_type)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24061 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24062 case value_t::null:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24063 case value_t::object:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24064 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24065 // use operator[] to add value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24066 parent[last_path] = val;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24067 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24068 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24069
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24070 case value_t::array:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24071 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24072 if (last_path == "-")
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24073 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24074 // special case: append to back
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24075 parent.push_back(val);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24076 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24077 else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24078 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24079 const auto idx = json_pointer::template array_index<basic_json_t>(last_path);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24080 if (JSON_HEDLEY_UNLIKELY(idx > parent.size()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24081 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24082 // avoid undefined behavior
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24083 JSON_THROW(out_of_range::create(401, detail::concat("array index ", std::to_string(idx), " is out of range"), &parent));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24084 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24085
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24086 // default case: insert add offset
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24087 parent.insert(parent.begin() + static_cast<difference_type>(idx), val);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24088 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24089 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24090 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24091
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24092 // if there exists a parent it cannot be primitive
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24093 case value_t::string: // LCOV_EXCL_LINE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24094 case value_t::boolean: // LCOV_EXCL_LINE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24095 case value_t::number_integer: // LCOV_EXCL_LINE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24096 case value_t::number_unsigned: // LCOV_EXCL_LINE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24097 case value_t::number_float: // LCOV_EXCL_LINE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24098 case value_t::binary: // LCOV_EXCL_LINE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24099 case value_t::discarded: // LCOV_EXCL_LINE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24100 default: // LCOV_EXCL_LINE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24101 JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24102 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24103 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24104
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24105 // wrapper for "remove" operation; remove value at ptr
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24106 const auto operation_remove = [this, & result](json_pointer & ptr)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24107 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24108 // get reference to parent of JSON pointer ptr
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24109 const auto last_path = ptr.back();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24110 ptr.pop_back();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24111 basic_json& parent = result.at(ptr);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24112
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24113 // remove child
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24114 if (parent.is_object())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24115 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24116 // perform range check
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24117 auto it = parent.find(last_path);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24118 if (JSON_HEDLEY_LIKELY(it != parent.end()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24119 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24120 parent.erase(it);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24121 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24122 else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24123 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24124 JSON_THROW(out_of_range::create(403, detail::concat("key '", last_path, "' not found"), this));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24125 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24126 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24127 else if (parent.is_array())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24128 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24129 // note erase performs range check
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24130 parent.erase(json_pointer::template array_index<basic_json_t>(last_path));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24131 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24132 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24133
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24134 // type check: top level value must be an array
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24135 if (JSON_HEDLEY_UNLIKELY(!json_patch.is_array()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24136 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24137 JSON_THROW(parse_error::create(104, 0, "JSON patch must be an array of objects", &json_patch));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24138 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24139
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24140 // iterate and apply the operations
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24141 for (const auto& val : json_patch)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24142 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24143 // wrapper to get a value for an operation
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24144 const auto get_value = [&val](const std::string & op,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24145 const std::string & member,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24146 bool string_type) -> basic_json &
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24147 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24148 // find value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24149 auto it = val.m_data.m_value.object->find(member);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24150
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24151 // context-sensitive error message
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24152 const auto error_msg = (op == "op") ? "operation" : detail::concat("operation '", op, '\'');
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24153
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24154 // check if desired value is present
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24155 if (JSON_HEDLEY_UNLIKELY(it == val.m_data.m_value.object->end()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24156 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24157 // NOLINTNEXTLINE(performance-inefficient-string-concatenation)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24158 JSON_THROW(parse_error::create(105, 0, detail::concat(error_msg, " must have member '", member, "'"), &val));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24159 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24160
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24161 // check if result is of type string
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24162 if (JSON_HEDLEY_UNLIKELY(string_type && !it->second.is_string()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24163 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24164 // NOLINTNEXTLINE(performance-inefficient-string-concatenation)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24165 JSON_THROW(parse_error::create(105, 0, detail::concat(error_msg, " must have string member '", member, "'"), &val));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24166 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24167
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24168 // no error: return value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24169 return it->second;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24170 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24171
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24172 // type check: every element of the array must be an object
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24173 if (JSON_HEDLEY_UNLIKELY(!val.is_object()))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24174 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24175 JSON_THROW(parse_error::create(104, 0, "JSON patch must be an array of objects", &val));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24176 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24177
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24178 // collect mandatory members
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24179 const auto op = get_value("op", "op", true).template get<std::string>();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24180 const auto path = get_value(op, "path", true).template get<std::string>();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24181 json_pointer ptr(path);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24182
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24183 switch (get_op(op))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24184 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24185 case patch_operations::add:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24186 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24187 operation_add(ptr, get_value("add", "value", false));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24188 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24189 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24190
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24191 case patch_operations::remove:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24192 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24193 operation_remove(ptr);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24194 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24195 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24196
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24197 case patch_operations::replace:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24198 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24199 // the "path" location must exist - use at()
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24200 result.at(ptr) = get_value("replace", "value", false);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24201 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24202 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24203
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24204 case patch_operations::move:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24205 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24206 const auto from_path = get_value("move", "from", true).template get<std::string>();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24207 json_pointer from_ptr(from_path);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24208
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24209 // the "from" location must exist - use at()
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24210 basic_json const v = result.at(from_ptr);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24211
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24212 // The move operation is functionally identical to a
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24213 // "remove" operation on the "from" location, followed
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24214 // immediately by an "add" operation at the target
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24215 // location with the value that was just removed.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24216 operation_remove(from_ptr);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24217 operation_add(ptr, v);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24218 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24219 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24220
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24221 case patch_operations::copy:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24222 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24223 const auto from_path = get_value("copy", "from", true).template get<std::string>();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24224 const json_pointer from_ptr(from_path);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24225
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24226 // the "from" location must exist - use at()
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24227 basic_json const v = result.at(from_ptr);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24228
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24229 // The copy is functionally identical to an "add"
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24230 // operation at the target location using the value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24231 // specified in the "from" member.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24232 operation_add(ptr, v);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24233 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24234 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24235
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24236 case patch_operations::test:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24237 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24238 bool success = false;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24239 JSON_TRY
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24240 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24241 // check if "value" matches the one at "path"
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24242 // the "path" location must exist - use at()
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24243 success = (result.at(ptr) == get_value("test", "value", false));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24244 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24245 JSON_INTERNAL_CATCH (out_of_range&)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24246 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24247 // ignore out of range errors: success remains false
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24248 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24249
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24250 // throw an exception if test fails
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24251 if (JSON_HEDLEY_UNLIKELY(!success))
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24252 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24253 JSON_THROW(other_error::create(501, detail::concat("unsuccessful: ", val.dump()), &val));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24254 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24255
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24256 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24257 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24258
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24259 case patch_operations::invalid:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24260 default:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24261 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24262 // op must be "add", "remove", "replace", "move", "copy", or
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24263 // "test"
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24264 JSON_THROW(parse_error::create(105, 0, detail::concat("operation value '", op, "' is invalid"), &val));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24265 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24266 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24267 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24268 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24269
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24270 /// @brief applies a JSON patch to a copy of the current object
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24271 /// @sa https://json.nlohmann.me/api/basic_json/patch/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24272 basic_json patch(const basic_json& json_patch) const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24273 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24274 basic_json result = *this;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24275 result.patch_inplace(json_patch);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24276 return result;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24277 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24278
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24279 /// @brief creates a diff as a JSON patch
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24280 /// @sa https://json.nlohmann.me/api/basic_json/diff/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24281 JSON_HEDLEY_WARN_UNUSED_RESULT
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24282 static basic_json diff(const basic_json& source, const basic_json& target,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24283 const std::string& path = "")
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24284 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24285 // the patch
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24286 basic_json result(value_t::array);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24287
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24288 // if the values are the same, return empty patch
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24289 if (source == target)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24290 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24291 return result;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24292 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24293
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24294 if (source.type() != target.type())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24295 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24296 // different types: replace value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24297 result.push_back(
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24298 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24299 {"op", "replace"}, {"path", path}, {"value", target}
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24300 });
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24301 return result;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24302 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24303
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24304 switch (source.type())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24305 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24306 case value_t::array:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24307 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24308 // first pass: traverse common elements
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24309 std::size_t i = 0;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24310 while (i < source.size() && i < target.size())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24311 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24312 // recursive call to compare array values at index i
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24313 auto temp_diff = diff(source[i], target[i], detail::concat(path, '/', std::to_string(i)));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24314 result.insert(result.end(), temp_diff.begin(), temp_diff.end());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24315 ++i;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24316 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24317
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24318 // We now reached the end of at least one array
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24319 // in a second pass, traverse the remaining elements
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24320
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24321 // remove my remaining elements
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24322 const auto end_index = static_cast<difference_type>(result.size());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24323 while (i < source.size())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24324 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24325 // add operations in reverse order to avoid invalid
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24326 // indices
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24327 result.insert(result.begin() + end_index, object(
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24328 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24329 {"op", "remove"},
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24330 {"path", detail::concat(path, '/', std::to_string(i))}
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24331 }));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24332 ++i;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24333 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24334
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24335 // add other remaining elements
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24336 while (i < target.size())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24337 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24338 result.push_back(
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24339 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24340 {"op", "add"},
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24341 {"path", detail::concat(path, "/-")},
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24342 {"value", target[i]}
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24343 });
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24344 ++i;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24345 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24346
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24347 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24348 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24349
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24350 case value_t::object:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24351 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24352 // first pass: traverse this object's elements
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24353 for (auto it = source.cbegin(); it != source.cend(); ++it)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24354 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24355 // escape the key name to be used in a JSON patch
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24356 const auto path_key = detail::concat(path, '/', detail::escape(it.key()));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24357
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24358 if (target.find(it.key()) != target.end())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24359 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24360 // recursive call to compare object values at key it
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24361 auto temp_diff = diff(it.value(), target[it.key()], path_key);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24362 result.insert(result.end(), temp_diff.begin(), temp_diff.end());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24363 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24364 else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24365 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24366 // found a key that is not in o -> remove it
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24367 result.push_back(object(
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24368 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24369 {"op", "remove"}, {"path", path_key}
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24370 }));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24371 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24372 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24373
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24374 // second pass: traverse other object's elements
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24375 for (auto it = target.cbegin(); it != target.cend(); ++it)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24376 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24377 if (source.find(it.key()) == source.end())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24378 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24379 // found a key that is not in this -> add it
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24380 const auto path_key = detail::concat(path, '/', detail::escape(it.key()));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24381 result.push_back(
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24382 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24383 {"op", "add"}, {"path", path_key},
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24384 {"value", it.value()}
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24385 });
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24386 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24387 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24388
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24389 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24390 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24391
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24392 case value_t::null:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24393 case value_t::string:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24394 case value_t::boolean:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24395 case value_t::number_integer:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24396 case value_t::number_unsigned:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24397 case value_t::number_float:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24398 case value_t::binary:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24399 case value_t::discarded:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24400 default:
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24401 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24402 // both primitive type: replace value
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24403 result.push_back(
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24404 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24405 {"op", "replace"}, {"path", path}, {"value", target}
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24406 });
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24407 break;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24408 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24409 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24410
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24411 return result;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24412 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24413 /// @}
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24414
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24415 ////////////////////////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24416 // JSON Merge Patch functions //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24417 ////////////////////////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24418
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24419 /// @name JSON Merge Patch functions
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24420 /// @{
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24421
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24422 /// @brief applies a JSON Merge Patch
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24423 /// @sa https://json.nlohmann.me/api/basic_json/merge_patch/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24424 void merge_patch(const basic_json& apply_patch)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24425 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24426 if (apply_patch.is_object())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24427 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24428 if (!is_object())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24429 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24430 *this = object();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24431 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24432 for (auto it = apply_patch.begin(); it != apply_patch.end(); ++it)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24433 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24434 if (it.value().is_null())
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24435 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24436 erase(it.key());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24437 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24438 else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24439 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24440 operator[](it.key()).merge_patch(it.value());
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24441 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24442 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24443 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24444 else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24445 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24446 *this = apply_patch;
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24447 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24448 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24449
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24450 /// @}
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24451 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24452
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24453 /// @brief user-defined to_string function for JSON values
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24454 /// @sa https://json.nlohmann.me/api/basic_json/to_string/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24455 NLOHMANN_BASIC_JSON_TPL_DECLARATION
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24456 std::string to_string(const NLOHMANN_BASIC_JSON_TPL& j)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24457 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24458 return j.dump();
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24459 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24460
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24461 inline namespace literals
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24462 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24463 inline namespace json_literals
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24464 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24465
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24466 /// @brief user-defined string literal for JSON values
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24467 /// @sa https://json.nlohmann.me/api/basic_json/operator_literal_json/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24468 JSON_HEDLEY_NON_NULL(1)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24469 #if !defined(JSON_HEDLEY_GCC_VERSION) || JSON_HEDLEY_GCC_VERSION_CHECK(4,9,0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24470 inline nlohmann::json operator ""_json(const char* s, std::size_t n)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24471 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24472 inline nlohmann::json operator "" _json(const char* s, std::size_t n)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24473 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24474 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24475 return nlohmann::json::parse(s, s + n);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24476 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24477
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24478 /// @brief user-defined string literal for JSON pointer
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24479 /// @sa https://json.nlohmann.me/api/basic_json/operator_literal_json_pointer/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24480 JSON_HEDLEY_NON_NULL(1)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24481 #if !defined(JSON_HEDLEY_GCC_VERSION) || JSON_HEDLEY_GCC_VERSION_CHECK(4,9,0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24482 inline nlohmann::json::json_pointer operator ""_json_pointer(const char* s, std::size_t n)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24483 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24484 inline nlohmann::json::json_pointer operator "" _json_pointer(const char* s, std::size_t n)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24485 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24486 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24487 return nlohmann::json::json_pointer(std::string(s, n));
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24488 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24489
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24490 } // namespace json_literals
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24491 } // namespace literals
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24492 NLOHMANN_JSON_NAMESPACE_END
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24493
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24494 ///////////////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24495 // nonmember support //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24496 ///////////////////////
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24497
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24498 namespace std // NOLINT(cert-dcl58-cpp)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24499 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24500
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24501 /// @brief hash value for JSON objects
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24502 /// @sa https://json.nlohmann.me/api/basic_json/std_hash/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24503 NLOHMANN_BASIC_JSON_TPL_DECLARATION
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24504 struct hash<nlohmann::NLOHMANN_BASIC_JSON_TPL> // NOLINT(cert-dcl58-cpp)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24505 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24506 std::size_t operator()(const nlohmann::NLOHMANN_BASIC_JSON_TPL& j) const
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24507 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24508 return nlohmann::detail::hash(j);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24509 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24510 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24511
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24512 // specialization for std::less<value_t>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24513 template<>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24514 struct less< ::nlohmann::detail::value_t> // do not remove the space after '<', see https://github.com/nlohmann/json/pull/679
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24515 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24516 /*!
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24517 @brief compare two value_t enum values
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24518 @since version 3.0.0
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24519 */
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24520 bool operator()(::nlohmann::detail::value_t lhs,
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24521 ::nlohmann::detail::value_t rhs) const noexcept
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24522 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24523 #if JSON_HAS_THREE_WAY_COMPARISON
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24524 return std::is_lt(lhs <=> rhs); // *NOPAD*
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24525 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24526 return ::nlohmann::detail::operator<(lhs, rhs);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24527 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24528 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24529 };
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24530
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24531 // C++20 prohibit function specialization in the std namespace.
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24532 #ifndef JSON_HAS_CPP_20
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24533
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24534 /// @brief exchanges the values of two JSON objects
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24535 /// @sa https://json.nlohmann.me/api/basic_json/std_swap/
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24536 NLOHMANN_BASIC_JSON_TPL_DECLARATION
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24537 inline void swap(nlohmann::NLOHMANN_BASIC_JSON_TPL& j1, nlohmann::NLOHMANN_BASIC_JSON_TPL& j2) noexcept( // NOLINT(readability-inconsistent-declaration-parameter-name, cert-dcl58-cpp)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24538 is_nothrow_move_constructible<nlohmann::NLOHMANN_BASIC_JSON_TPL>::value&& // NOLINT(misc-redundant-expression,cppcoreguidelines-noexcept-swap,performance-noexcept-swap)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24539 is_nothrow_move_assignable<nlohmann::NLOHMANN_BASIC_JSON_TPL>::value)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24540 {
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24541 j1.swap(j2);
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24542 }
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24543
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24544 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24545
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24546 } // namespace std
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24547
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24548 #if JSON_USE_GLOBAL_UDLS
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24549 #if !defined(JSON_HEDLEY_GCC_VERSION) || JSON_HEDLEY_GCC_VERSION_CHECK(4,9,0)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24550 using nlohmann::literals::json_literals::operator ""_json; // NOLINT(misc-unused-using-decls,google-global-names-in-headers)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24551 using nlohmann::literals::json_literals::operator ""_json_pointer; //NOLINT(misc-unused-using-decls,google-global-names-in-headers)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24552 #else
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24553 using nlohmann::literals::json_literals::operator "" _json; // NOLINT(misc-unused-using-decls,google-global-names-in-headers)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24554 using nlohmann::literals::json_literals::operator "" _json_pointer; //NOLINT(misc-unused-using-decls,google-global-names-in-headers)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24555 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24556 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24557
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24558 // #include <nlohmann/detail/macro_unscope.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24559 // __ _____ _____ _____
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24560 // __| | __| | | | JSON for Modern C++
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24561 // | | |__ | | | | | | version 3.11.3
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24562 // |_____|_____|_____|_|___| https://github.com/nlohmann/json
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24563 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24564 // SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24565 // SPDX-License-Identifier: MIT
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24566
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24567
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24568
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24569 // restore clang diagnostic settings
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24570 #if defined(__clang__)
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24571 #pragma clang diagnostic pop
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24572 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24573
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24574 // clean up
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24575 #undef JSON_ASSERT
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24576 #undef JSON_INTERNAL_CATCH
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24577 #undef JSON_THROW
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24578 #undef JSON_PRIVATE_UNLESS_TESTED
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24579 #undef NLOHMANN_BASIC_JSON_TPL_DECLARATION
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24580 #undef NLOHMANN_BASIC_JSON_TPL
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24581 #undef JSON_EXPLICIT
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24582 #undef NLOHMANN_CAN_CALL_STD_FUNC_IMPL
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24583 #undef JSON_INLINE_VARIABLE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24584 #undef JSON_NO_UNIQUE_ADDRESS
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24585 #undef JSON_DISABLE_ENUM_SERIALIZATION
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24586 #undef JSON_USE_GLOBAL_UDLS
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24587
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24588 #ifndef JSON_TEST_KEEP_MACROS
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24589 #undef JSON_CATCH
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24590 #undef JSON_TRY
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24591 #undef JSON_HAS_CPP_11
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24592 #undef JSON_HAS_CPP_14
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24593 #undef JSON_HAS_CPP_17
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24594 #undef JSON_HAS_CPP_20
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24595 #undef JSON_HAS_FILESYSTEM
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24596 #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24597 #undef JSON_HAS_THREE_WAY_COMPARISON
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24598 #undef JSON_HAS_RANGES
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24599 #undef JSON_HAS_STATIC_RTTI
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24600 #undef JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24601 #endif
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24602
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24603 // #include <nlohmann/thirdparty/hedley/hedley_undef.hpp>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24604 // __ _____ _____ _____
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24605 // __| | __| | | | JSON for Modern C++
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24606 // | | |__ | | | | | | version 3.11.3
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24607 // |_____|_____|_____|_|___| https://github.com/nlohmann/json
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24608 //
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24609 // SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24610 // SPDX-License-Identifier: MIT
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24611
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24612
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24613
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24614 #undef JSON_HEDLEY_ALWAYS_INLINE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24615 #undef JSON_HEDLEY_ARM_VERSION
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24616 #undef JSON_HEDLEY_ARM_VERSION_CHECK
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24617 #undef JSON_HEDLEY_ARRAY_PARAM
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24618 #undef JSON_HEDLEY_ASSUME
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24619 #undef JSON_HEDLEY_BEGIN_C_DECLS
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24620 #undef JSON_HEDLEY_CLANG_HAS_ATTRIBUTE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24621 #undef JSON_HEDLEY_CLANG_HAS_BUILTIN
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24622 #undef JSON_HEDLEY_CLANG_HAS_CPP_ATTRIBUTE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24623 #undef JSON_HEDLEY_CLANG_HAS_DECLSPEC_DECLSPEC_ATTRIBUTE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24624 #undef JSON_HEDLEY_CLANG_HAS_EXTENSION
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24625 #undef JSON_HEDLEY_CLANG_HAS_FEATURE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24626 #undef JSON_HEDLEY_CLANG_HAS_WARNING
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24627 #undef JSON_HEDLEY_COMPCERT_VERSION
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24628 #undef JSON_HEDLEY_COMPCERT_VERSION_CHECK
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24629 #undef JSON_HEDLEY_CONCAT
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24630 #undef JSON_HEDLEY_CONCAT3
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24631 #undef JSON_HEDLEY_CONCAT3_EX
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24632 #undef JSON_HEDLEY_CONCAT_EX
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24633 #undef JSON_HEDLEY_CONST
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24634 #undef JSON_HEDLEY_CONSTEXPR
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24635 #undef JSON_HEDLEY_CONST_CAST
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24636 #undef JSON_HEDLEY_CPP_CAST
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24637 #undef JSON_HEDLEY_CRAY_VERSION
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24638 #undef JSON_HEDLEY_CRAY_VERSION_CHECK
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24639 #undef JSON_HEDLEY_C_DECL
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24640 #undef JSON_HEDLEY_DEPRECATED
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24641 #undef JSON_HEDLEY_DEPRECATED_FOR
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24642 #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24643 #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24644 #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24645 #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24646 #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24647 #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24648 #undef JSON_HEDLEY_DIAGNOSTIC_POP
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24649 #undef JSON_HEDLEY_DIAGNOSTIC_PUSH
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24650 #undef JSON_HEDLEY_DMC_VERSION
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24651 #undef JSON_HEDLEY_DMC_VERSION_CHECK
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24652 #undef JSON_HEDLEY_EMPTY_BASES
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24653 #undef JSON_HEDLEY_EMSCRIPTEN_VERSION
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24654 #undef JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24655 #undef JSON_HEDLEY_END_C_DECLS
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24656 #undef JSON_HEDLEY_FLAGS
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24657 #undef JSON_HEDLEY_FLAGS_CAST
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24658 #undef JSON_HEDLEY_GCC_HAS_ATTRIBUTE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24659 #undef JSON_HEDLEY_GCC_HAS_BUILTIN
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24660 #undef JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24661 #undef JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24662 #undef JSON_HEDLEY_GCC_HAS_EXTENSION
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24663 #undef JSON_HEDLEY_GCC_HAS_FEATURE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24664 #undef JSON_HEDLEY_GCC_HAS_WARNING
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24665 #undef JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24666 #undef JSON_HEDLEY_GCC_VERSION
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24667 #undef JSON_HEDLEY_GCC_VERSION_CHECK
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24668 #undef JSON_HEDLEY_GNUC_HAS_ATTRIBUTE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24669 #undef JSON_HEDLEY_GNUC_HAS_BUILTIN
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24670 #undef JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24671 #undef JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24672 #undef JSON_HEDLEY_GNUC_HAS_EXTENSION
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24673 #undef JSON_HEDLEY_GNUC_HAS_FEATURE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24674 #undef JSON_HEDLEY_GNUC_HAS_WARNING
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24675 #undef JSON_HEDLEY_GNUC_VERSION
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24676 #undef JSON_HEDLEY_GNUC_VERSION_CHECK
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24677 #undef JSON_HEDLEY_HAS_ATTRIBUTE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24678 #undef JSON_HEDLEY_HAS_BUILTIN
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24679 #undef JSON_HEDLEY_HAS_CPP_ATTRIBUTE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24680 #undef JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24681 #undef JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24682 #undef JSON_HEDLEY_HAS_EXTENSION
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24683 #undef JSON_HEDLEY_HAS_FEATURE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24684 #undef JSON_HEDLEY_HAS_WARNING
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24685 #undef JSON_HEDLEY_IAR_VERSION
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24686 #undef JSON_HEDLEY_IAR_VERSION_CHECK
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24687 #undef JSON_HEDLEY_IBM_VERSION
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24688 #undef JSON_HEDLEY_IBM_VERSION_CHECK
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24689 #undef JSON_HEDLEY_IMPORT
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24690 #undef JSON_HEDLEY_INLINE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24691 #undef JSON_HEDLEY_INTEL_CL_VERSION
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24692 #undef JSON_HEDLEY_INTEL_CL_VERSION_CHECK
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24693 #undef JSON_HEDLEY_INTEL_VERSION
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24694 #undef JSON_HEDLEY_INTEL_VERSION_CHECK
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24695 #undef JSON_HEDLEY_IS_CONSTANT
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24696 #undef JSON_HEDLEY_IS_CONSTEXPR_
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24697 #undef JSON_HEDLEY_LIKELY
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24698 #undef JSON_HEDLEY_MALLOC
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24699 #undef JSON_HEDLEY_MCST_LCC_VERSION
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24700 #undef JSON_HEDLEY_MCST_LCC_VERSION_CHECK
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24701 #undef JSON_HEDLEY_MESSAGE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24702 #undef JSON_HEDLEY_MSVC_VERSION
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24703 #undef JSON_HEDLEY_MSVC_VERSION_CHECK
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24704 #undef JSON_HEDLEY_NEVER_INLINE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24705 #undef JSON_HEDLEY_NON_NULL
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24706 #undef JSON_HEDLEY_NO_ESCAPE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24707 #undef JSON_HEDLEY_NO_RETURN
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24708 #undef JSON_HEDLEY_NO_THROW
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24709 #undef JSON_HEDLEY_NULL
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24710 #undef JSON_HEDLEY_PELLES_VERSION
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24711 #undef JSON_HEDLEY_PELLES_VERSION_CHECK
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24712 #undef JSON_HEDLEY_PGI_VERSION
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24713 #undef JSON_HEDLEY_PGI_VERSION_CHECK
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24714 #undef JSON_HEDLEY_PREDICT
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24715 #undef JSON_HEDLEY_PRINTF_FORMAT
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24716 #undef JSON_HEDLEY_PRIVATE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24717 #undef JSON_HEDLEY_PUBLIC
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24718 #undef JSON_HEDLEY_PURE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24719 #undef JSON_HEDLEY_REINTERPRET_CAST
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24720 #undef JSON_HEDLEY_REQUIRE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24721 #undef JSON_HEDLEY_REQUIRE_CONSTEXPR
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24722 #undef JSON_HEDLEY_REQUIRE_MSG
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24723 #undef JSON_HEDLEY_RESTRICT
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24724 #undef JSON_HEDLEY_RETURNS_NON_NULL
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24725 #undef JSON_HEDLEY_SENTINEL
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24726 #undef JSON_HEDLEY_STATIC_ASSERT
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24727 #undef JSON_HEDLEY_STATIC_CAST
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24728 #undef JSON_HEDLEY_STRINGIFY
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24729 #undef JSON_HEDLEY_STRINGIFY_EX
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24730 #undef JSON_HEDLEY_SUNPRO_VERSION
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24731 #undef JSON_HEDLEY_SUNPRO_VERSION_CHECK
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24732 #undef JSON_HEDLEY_TINYC_VERSION
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24733 #undef JSON_HEDLEY_TINYC_VERSION_CHECK
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24734 #undef JSON_HEDLEY_TI_ARMCL_VERSION
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24735 #undef JSON_HEDLEY_TI_ARMCL_VERSION_CHECK
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24736 #undef JSON_HEDLEY_TI_CL2000_VERSION
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24737 #undef JSON_HEDLEY_TI_CL2000_VERSION_CHECK
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24738 #undef JSON_HEDLEY_TI_CL430_VERSION
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24739 #undef JSON_HEDLEY_TI_CL430_VERSION_CHECK
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24740 #undef JSON_HEDLEY_TI_CL6X_VERSION
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24741 #undef JSON_HEDLEY_TI_CL6X_VERSION_CHECK
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24742 #undef JSON_HEDLEY_TI_CL7X_VERSION
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24743 #undef JSON_HEDLEY_TI_CL7X_VERSION_CHECK
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24744 #undef JSON_HEDLEY_TI_CLPRU_VERSION
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24745 #undef JSON_HEDLEY_TI_CLPRU_VERSION_CHECK
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24746 #undef JSON_HEDLEY_TI_VERSION
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24747 #undef JSON_HEDLEY_TI_VERSION_CHECK
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24748 #undef JSON_HEDLEY_UNAVAILABLE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24749 #undef JSON_HEDLEY_UNLIKELY
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24750 #undef JSON_HEDLEY_UNPREDICTABLE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24751 #undef JSON_HEDLEY_UNREACHABLE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24752 #undef JSON_HEDLEY_UNREACHABLE_RETURN
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24753 #undef JSON_HEDLEY_VERSION
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24754 #undef JSON_HEDLEY_VERSION_DECODE_MAJOR
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24755 #undef JSON_HEDLEY_VERSION_DECODE_MINOR
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24756 #undef JSON_HEDLEY_VERSION_DECODE_REVISION
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24757 #undef JSON_HEDLEY_VERSION_ENCODE
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24758 #undef JSON_HEDLEY_WARNING
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24759 #undef JSON_HEDLEY_WARN_UNUSED_RESULT
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24760 #undef JSON_HEDLEY_WARN_UNUSED_RESULT_MSG
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24761 #undef JSON_HEDLEY_FALL_THROUGH
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24762
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24763
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24764
9b10175be389 dep/json: update to v3.11.3
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24765 #endif // INCLUDE_NLOHMANN_JSON_HPP_