• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //     __ _____ _____ _____
2 //  __|  |   __|     |   | |  JSON for Modern C++
3 // |  |  |__   |  |  | | | |  version 3.11.2
4 // |_____|_____|_____|_|___|  https://github.com/nlohmann/json
5 //
6 // SPDX-FileCopyrightText: 2013-2022 Niels Lohmann <https://nlohmann.me>
7 // SPDX-License-Identifier: MIT
8 
9 #ifndef INCLUDE_NLOHMANN_JSON_FWD_HPP_
10 #define INCLUDE_NLOHMANN_JSON_FWD_HPP_
11 
12 #include <cstdint> // int64_t, uint64_t
13 #include <map> // map
14 #include <memory> // allocator
15 #include <string> // string
16 #include <vector> // vector
17 
18 // #include <nlohmann/detail/abi_macros.hpp>
19 //     __ _____ _____ _____
20 //  __|  |   __|     |   | |  JSON for Modern C++
21 // |  |  |__   |  |  | | | |  version 3.11.2
22 // |_____|_____|_____|_|___|  https://github.com/nlohmann/json
23 //
24 // SPDX-FileCopyrightText: 2013-2022 Niels Lohmann <https://nlohmann.me>
25 // SPDX-License-Identifier: MIT
26 
27 
28 
29 // This file contains all macro definitions affecting or depending on the ABI
30 
31 #ifndef JSON_SKIP_LIBRARY_VERSION_CHECK
32     #if defined(NLOHMANN_JSON_VERSION_MAJOR) && defined(NLOHMANN_JSON_VERSION_MINOR) && defined(NLOHMANN_JSON_VERSION_PATCH)
33         #if NLOHMANN_JSON_VERSION_MAJOR != 3 || NLOHMANN_JSON_VERSION_MINOR != 11 || NLOHMANN_JSON_VERSION_PATCH != 2
34             #warning "Already included a different version of the library!"
35         #endif
36     #endif
37 #endif
38 
39 #define NLOHMANN_JSON_VERSION_MAJOR 3   // NOLINT(modernize-macro-to-enum)
40 #define NLOHMANN_JSON_VERSION_MINOR 11  // NOLINT(modernize-macro-to-enum)
41 #define NLOHMANN_JSON_VERSION_PATCH 2   // NOLINT(modernize-macro-to-enum)
42 
43 #ifndef JSON_DIAGNOSTICS
44     #define JSON_DIAGNOSTICS 0
45 #endif
46 
47 #ifndef JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON
48     #define JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON 0
49 #endif
50 
51 #if JSON_DIAGNOSTICS
52     #define NLOHMANN_JSON_ABI_TAG_DIAGNOSTICS _diag
53 #else
54     #define NLOHMANN_JSON_ABI_TAG_DIAGNOSTICS
55 #endif
56 
57 #if JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON
58     #define NLOHMANN_JSON_ABI_TAG_LEGACY_DISCARDED_VALUE_COMPARISON _ldvcmp
59 #else
60     #define NLOHMANN_JSON_ABI_TAG_LEGACY_DISCARDED_VALUE_COMPARISON
61 #endif
62 
63 #ifndef NLOHMANN_JSON_NAMESPACE_NO_VERSION
64     #define NLOHMANN_JSON_NAMESPACE_NO_VERSION 0
65 #endif
66 
67 // Construct the namespace ABI tags component
68 #define NLOHMANN_JSON_ABI_TAGS_CONCAT_EX(a, b) json_abi ## a ## b
69 #define NLOHMANN_JSON_ABI_TAGS_CONCAT(a, b) \
70     NLOHMANN_JSON_ABI_TAGS_CONCAT_EX(a, b)
71 
72 #define NLOHMANN_JSON_ABI_TAGS                                       \
73     NLOHMANN_JSON_ABI_TAGS_CONCAT(                                   \
74             NLOHMANN_JSON_ABI_TAG_DIAGNOSTICS,                       \
75             NLOHMANN_JSON_ABI_TAG_LEGACY_DISCARDED_VALUE_COMPARISON)
76 
77 // Construct the namespace version component
78 #define NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT_EX(major, minor, patch) \
79     _v ## major ## _ ## minor ## _ ## patch
80 #define NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT(major, minor, patch) \
81     NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT_EX(major, minor, patch)
82 
83 #if NLOHMANN_JSON_NAMESPACE_NO_VERSION
84 #define NLOHMANN_JSON_NAMESPACE_VERSION
85 #else
86 #define NLOHMANN_JSON_NAMESPACE_VERSION                                 \
87     NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT(NLOHMANN_JSON_VERSION_MAJOR, \
88                                            NLOHMANN_JSON_VERSION_MINOR, \
89                                            NLOHMANN_JSON_VERSION_PATCH)
90 #endif
91 
92 // Combine namespace components
93 #define NLOHMANN_JSON_NAMESPACE_CONCAT_EX(a, b) a ## b
94 #define NLOHMANN_JSON_NAMESPACE_CONCAT(a, b) \
95     NLOHMANN_JSON_NAMESPACE_CONCAT_EX(a, b)
96 
97 #ifndef NLOHMANN_JSON_NAMESPACE
98 #define NLOHMANN_JSON_NAMESPACE               \
99     nlohmann::NLOHMANN_JSON_NAMESPACE_CONCAT( \
100             NLOHMANN_JSON_ABI_TAGS,           \
101             NLOHMANN_JSON_NAMESPACE_VERSION)
102 #endif
103 
104 #ifndef NLOHMANN_JSON_NAMESPACE_BEGIN
105 #define NLOHMANN_JSON_NAMESPACE_BEGIN                \
106     namespace nlohmann                               \
107     {                                                \
108     inline namespace NLOHMANN_JSON_NAMESPACE_CONCAT( \
109                 NLOHMANN_JSON_ABI_TAGS,              \
110                 NLOHMANN_JSON_NAMESPACE_VERSION)     \
111     {
112 #endif
113 
114 #ifndef NLOHMANN_JSON_NAMESPACE_END
115 #define NLOHMANN_JSON_NAMESPACE_END                                     \
116     }  /* namespace (inline namespace) NOLINT(readability/namespace) */ \
117     }  // namespace nlohmann
118 #endif
119 
120 
121 /*!
122 @brief namespace for Niels Lohmann
123 @see https://github.com/nlohmann
124 @since version 1.0.0
125 */
126 NLOHMANN_JSON_NAMESPACE_BEGIN
127 
128 /*!
129 @brief default JSONSerializer template argument
130 
131 This serializer ignores the template arguments and uses ADL
132 ([argument-dependent lookup](https://en.cppreference.com/w/cpp/language/adl))
133 for serialization.
134 */
135 template<typename T = void, typename SFINAE = void>
136 struct adl_serializer;
137 
138 /// a class to store JSON values
139 /// @sa https://json.nlohmann.me/api/basic_json/
140 template<template<typename U, typename V, typename... Args> class ObjectType =
141          std::map,
142          template<typename U, typename... Args> class ArrayType = std::vector,
143          class StringType = std::string, class BooleanType = bool,
144          class NumberIntegerType = std::int64_t,
145          class NumberUnsignedType = std::uint64_t,
146          class NumberFloatType = double,
147          template<typename U> class AllocatorType = std::allocator,
148          template<typename T, typename SFINAE = void> class JSONSerializer =
149          adl_serializer,
150          class BinaryType = std::vector<std::uint8_t>>
151 class basic_json;
152 
153 /// @brief JSON Pointer defines a string syntax for identifying a specific value within a JSON document
154 /// @sa https://json.nlohmann.me/api/json_pointer/
155 template<typename RefStringType>
156 class json_pointer;
157 
158 /*!
159 @brief default specialization
160 @sa https://json.nlohmann.me/api/json/
161 */
162 using json = basic_json<>;
163 
164 /// @brief a minimal map-like container that preserves insertion order
165 /// @sa https://json.nlohmann.me/api/ordered_map/
166 template<class Key, class T, class IgnoredLess, class Allocator>
167 struct ordered_map;
168 
169 /// @brief specialization that maintains the insertion order of object keys
170 /// @sa https://json.nlohmann.me/api/ordered_json/
171 using ordered_json = basic_json<nlohmann::ordered_map>;
172 
173 NLOHMANN_JSON_NAMESPACE_END
174 
175 #endif  // INCLUDE_NLOHMANN_JSON_FWD_HPP_
176