WPILibC++
2027.0.0-alpha-2
Loading...
Searching...
No Matches
macro_scope.h
Go to the documentation of this file.
1
// __ _____ _____ _____
2
// __| | __| | | | JSON for Modern C++
3
// | | |__ | | | | | | version 3.11.3
4
// |_____|_____|_____|_|___| https://github.com/nlohmann/json
5
//
6
// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
7
// SPDX-License-Identifier: MIT
8
9
#pragma once
10
11
#include <utility>
// declval, pair
12
#include <
wpi/detail/meta/detected.h
>
13
#include <
wpi/thirdparty/hedley/hedley.h
>
14
15
// This file contains all internal macro definitions (except those affecting ABI)
16
// You MUST include macro_unscope.hpp at the end of json.hpp to undef all of them
17
18
#include <
wpi/detail/abi_macros.h
>
19
20
// exclude unsupported compilers
21
#if !defined(JSON_SKIP_UNSUPPORTED_COMPILER_CHECK)
22
#if defined(__clang__)
23
#if (__clang_major__ * 10000 + __clang_minor__ * 100 + __clang_patchlevel__) < 30400
24
#error "unsupported Clang version - see https://github.com/nlohmann/json#supported-compilers"
25
#endif
26
#elif defined(__GNUC__) && !(defined(__ICC) || defined(__INTEL_COMPILER))
27
#if (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) < 40800
28
#error "unsupported GCC version - see https://github.com/nlohmann/json#supported-compilers"
29
#endif
30
#endif
31
#endif
32
33
// C++ language standard detection
34
// if the user manually specified the used c++ version this is skipped
35
#if !defined(JSON_HAS_CPP_20) && !defined(JSON_HAS_CPP_17) && !defined(JSON_HAS_CPP_14) && !defined(JSON_HAS_CPP_11)
36
#if (defined(__cplusplus) && __cplusplus >= 202002L) || (defined(_MSVC_LANG) && _MSVC_LANG >= 202002L)
37
#define JSON_HAS_CPP_20
38
#define JSON_HAS_CPP_17
39
#define JSON_HAS_CPP_14
40
#elif (defined(__cplusplus) && __cplusplus >= 201703L) || (defined(_HAS_CXX17) && _HAS_CXX17 == 1)
// fix for issue #464
41
#define JSON_HAS_CPP_17
42
#define JSON_HAS_CPP_14
43
#elif (defined(__cplusplus) && __cplusplus >= 201402L) || (defined(_HAS_CXX14) && _HAS_CXX14 == 1)
44
#define JSON_HAS_CPP_14
45
#endif
46
// the cpp 11 flag is always specified because it is the minimal required version
47
#define JSON_HAS_CPP_11
48
#endif
49
50
#ifdef __has_include
51
#if __has_include(<version>)
52
#include <version>
53
#endif
54
#endif
55
56
#if !defined(JSON_HAS_FILESYSTEM) && !defined(JSON_HAS_EXPERIMENTAL_FILESYSTEM)
57
#ifdef JSON_HAS_CPP_17
58
#if defined(__cpp_lib_filesystem)
59
#define JSON_HAS_FILESYSTEM 1
60
#elif defined(__cpp_lib_experimental_filesystem)
61
#define JSON_HAS_EXPERIMENTAL_FILESYSTEM 1
62
#elif !defined(__has_include)
63
#define JSON_HAS_EXPERIMENTAL_FILESYSTEM 1
64
#elif __has_include(<filesystem>)
65
#define JSON_HAS_FILESYSTEM 1
66
#elif __has_include(<experimental/filesystem>)
67
#define JSON_HAS_EXPERIMENTAL_FILESYSTEM 1
68
#endif
69
70
// std::filesystem does not work on MinGW GCC 8: https://sourceforge.net/p/mingw-w64/bugs/737/
71
#if defined(__MINGW32__) && defined(__GNUC__) && __GNUC__ == 8
72
#undef JSON_HAS_FILESYSTEM
73
#undef JSON_HAS_EXPERIMENTAL_FILESYSTEM
74
#endif
75
76
// no filesystem support before GCC 8: https://en.cppreference.com/w/cpp/compiler_support
77
#if defined(__GNUC__) && !defined(__clang__) && __GNUC__ < 8
78
#undef JSON_HAS_FILESYSTEM
79
#undef JSON_HAS_EXPERIMENTAL_FILESYSTEM
80
#endif
81
82
// no filesystem support before Clang 7: https://en.cppreference.com/w/cpp/compiler_support
83
#if defined(__clang_major__) && __clang_major__ < 7
84
#undef JSON_HAS_FILESYSTEM
85
#undef JSON_HAS_EXPERIMENTAL_FILESYSTEM
86
#endif
87
88
// no filesystem support before MSVC 19.14: https://en.cppreference.com/w/cpp/compiler_support
89
#if defined(_MSC_VER) && _MSC_VER < 1914
90
#undef JSON_HAS_FILESYSTEM
91
#undef JSON_HAS_EXPERIMENTAL_FILESYSTEM
92
#endif
93
94
// no filesystem support before iOS 13
95
#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) && __IPHONE_OS_VERSION_MIN_REQUIRED < 130000
96
#undef JSON_HAS_FILESYSTEM
97
#undef JSON_HAS_EXPERIMENTAL_FILESYSTEM
98
#endif
99
100
// no filesystem support before macOS Catalina
101
#if defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && __MAC_OS_X_VERSION_MIN_REQUIRED < 101500
102
#undef JSON_HAS_FILESYSTEM
103
#undef JSON_HAS_EXPERIMENTAL_FILESYSTEM
104
#endif
105
#endif
106
#endif
107
108
#ifndef JSON_HAS_EXPERIMENTAL_FILESYSTEM
109
#define JSON_HAS_EXPERIMENTAL_FILESYSTEM 0
110
#endif
111
112
#ifndef JSON_HAS_FILESYSTEM
113
#define JSON_HAS_FILESYSTEM 0
114
#endif
115
116
#ifndef JSON_HAS_THREE_WAY_COMPARISON
117
#if defined(__cpp_impl_three_way_comparison) && __cpp_impl_three_way_comparison >= 201907L \
118
&& defined(__cpp_lib_three_way_comparison) && __cpp_lib_three_way_comparison >= 201907L
119
#define JSON_HAS_THREE_WAY_COMPARISON 1
120
#else
121
#define JSON_HAS_THREE_WAY_COMPARISON 0
122
#endif
123
#endif
124
125
#ifndef JSON_HAS_RANGES
126
// ranges header shipping in GCC 11.1.0 (released 2021-04-27) has syntax error
127
#if defined(__GLIBCXX__) && __GLIBCXX__ == 20210427
128
#define JSON_HAS_RANGES 0
129
#elif defined(__cpp_lib_ranges)
130
#define JSON_HAS_RANGES 1
131
#else
132
#define JSON_HAS_RANGES 0
133
#endif
134
#endif
135
136
#ifndef JSON_HAS_STATIC_RTTI
137
#if !defined(_HAS_STATIC_RTTI) || _HAS_STATIC_RTTI != 0
138
#define JSON_HAS_STATIC_RTTI 1
139
#else
140
#define JSON_HAS_STATIC_RTTI 0
141
#endif
142
#endif
143
144
#ifdef JSON_HAS_CPP_17
145
#define JSON_INLINE_VARIABLE inline
146
#else
147
#define JSON_INLINE_VARIABLE
148
#endif
149
150
#if JSON_HEDLEY_HAS_ATTRIBUTE(no_unique_address)
151
#define JSON_NO_UNIQUE_ADDRESS [[no_unique_address]]
152
#else
153
#define JSON_NO_UNIQUE_ADDRESS
154
#endif
155
156
// disable documentation warnings on clang
157
#if defined(__clang__)
158
#pragma clang diagnostic push
159
#pragma clang diagnostic ignored "-Wdocumentation"
160
#pragma clang diagnostic ignored "-Wdocumentation-unknown-command"
161
#endif
162
163
// allow disabling exceptions
164
#if (defined(__cpp_exceptions) || defined(__EXCEPTIONS) || defined(_CPPUNWIND)) && !defined(JSON_NOEXCEPTION)
165
#define JSON_THROW(exception) throw exception
166
#define JSON_TRY try
167
#define JSON_CATCH(exception) catch(exception)
168
#define JSON_INTERNAL_CATCH(exception) catch(exception)
169
#else
170
#include <cstdlib>
171
#define JSON_THROW(exception) std::abort()
172
#define JSON_TRY if(true)
173
#define JSON_CATCH(exception) if(false)
174
#define JSON_INTERNAL_CATCH(exception) if(false)
175
#endif
176
177
// override exception macros
178
#if defined(JSON_THROW_USER)
179
#undef JSON_THROW
180
#define JSON_THROW JSON_THROW_USER
181
#endif
182
#if defined(JSON_TRY_USER)
183
#undef JSON_TRY
184
#define JSON_TRY JSON_TRY_USER
185
#endif
186
#if defined(JSON_CATCH_USER)
187
#undef JSON_CATCH
188
#define JSON_CATCH JSON_CATCH_USER
189
#undef JSON_INTERNAL_CATCH
190
#define JSON_INTERNAL_CATCH JSON_CATCH_USER
191
#endif
192
#if defined(JSON_INTERNAL_CATCH_USER)
193
#undef JSON_INTERNAL_CATCH
194
#define JSON_INTERNAL_CATCH JSON_INTERNAL_CATCH_USER
195
#endif
196
197
// allow overriding assert
198
#if !defined(JSON_ASSERT)
199
#include <cassert>
// assert
200
#define JSON_ASSERT(x) assert(x)
201
#endif
202
203
// allow to access some private functions (needed by the test suite)
204
#if defined(JSON_TESTS_PRIVATE)
205
#define JSON_PRIVATE_UNLESS_TESTED public
206
#else
207
#define JSON_PRIVATE_UNLESS_TESTED private
208
#endif
209
210
/*!
211
@brief macro to briefly define a mapping between an enum and JSON
212
@def WPI_JSON_SERIALIZE_ENUM
213
@since version 3.4.0
214
*/
215
#define WPI_JSON_SERIALIZE_ENUM(ENUM_TYPE, ...) \
216
template<typename BasicJsonType> \
217
inline void to_json(BasicJsonType& j, const ENUM_TYPE& e) \
218
{ \
219
static_assert(std::is_enum<ENUM_TYPE>::value, #ENUM_TYPE " must be an enum!"); \
220
static const std::pair<ENUM_TYPE, BasicJsonType> m[] = __VA_ARGS__; \
221
auto it = std::find_if(std::begin(m), std::end(m), \
222
[e](const std::pair<ENUM_TYPE, BasicJsonType>& ej_pair) -> bool \
223
{ \
224
return ej_pair.first == e; \
225
}); \
226
j = ((it != std::end(m)) ? it : std::begin(m))->second; \
227
} \
228
template<typename BasicJsonType> \
229
inline void from_json(const BasicJsonType& j, ENUM_TYPE& e) \
230
{ \
231
static_assert(std::is_enum<ENUM_TYPE>::value, #ENUM_TYPE " must be an enum!"); \
232
static const std::pair<ENUM_TYPE, BasicJsonType> m[] = __VA_ARGS__; \
233
auto it = std::find_if(std::begin(m), std::end(m), \
234
[&j](const std::pair<ENUM_TYPE, BasicJsonType>& ej_pair) -> bool \
235
{ \
236
return ej_pair.second == j; \
237
}); \
238
e = ((it != std::end(m)) ? it : std::begin(m))->first; \
239
}
240
241
// Ugly macros to avoid uglier copy-paste when specializing basic_json. They
242
// may be removed in the future once the class is split.
243
244
#define WPI_BASIC_JSON_TPL_DECLARATION \
245
template<template<typename, typename, typename...> class ObjectType, \
246
template<typename, typename...> class ArrayType, \
247
class StringType, class BooleanType, class NumberIntegerType, \
248
class NumberUnsignedType, class NumberFloatType, \
249
template<typename> class AllocatorType, \
250
template<typename, typename = void> class JSONSerializer, \
251
class BinaryType, \
252
class CustomBaseClass>
253
254
#define WPI_BASIC_JSON_TPL \
255
basic_json<ObjectType, ArrayType, StringType, BooleanType, \
256
NumberIntegerType, NumberUnsignedType, NumberFloatType, \
257
AllocatorType, JSONSerializer, BinaryType, CustomBaseClass>
258
259
// Macros to simplify conversion from/to types
260
261
#define WPI_JSON_EXPAND( x ) x
262
#define WPI_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
263
#define WPI_JSON_PASTE(...) WPI_JSON_EXPAND(WPI_JSON_GET_MACRO(__VA_ARGS__, \
264
WPI_JSON_PASTE64, \
265
WPI_JSON_PASTE63, \
266
WPI_JSON_PASTE62, \
267
WPI_JSON_PASTE61, \
268
WPI_JSON_PASTE60, \
269
WPI_JSON_PASTE59, \
270
WPI_JSON_PASTE58, \
271
WPI_JSON_PASTE57, \
272
WPI_JSON_PASTE56, \
273
WPI_JSON_PASTE55, \
274
WPI_JSON_PASTE54, \
275
WPI_JSON_PASTE53, \
276
WPI_JSON_PASTE52, \
277
WPI_JSON_PASTE51, \
278
WPI_JSON_PASTE50, \
279
WPI_JSON_PASTE49, \
280
WPI_JSON_PASTE48, \
281
WPI_JSON_PASTE47, \
282
WPI_JSON_PASTE46, \
283
WPI_JSON_PASTE45, \
284
WPI_JSON_PASTE44, \
285
WPI_JSON_PASTE43, \
286
WPI_JSON_PASTE42, \
287
WPI_JSON_PASTE41, \
288
WPI_JSON_PASTE40, \
289
WPI_JSON_PASTE39, \
290
WPI_JSON_PASTE38, \
291
WPI_JSON_PASTE37, \
292
WPI_JSON_PASTE36, \
293
WPI_JSON_PASTE35, \
294
WPI_JSON_PASTE34, \
295
WPI_JSON_PASTE33, \
296
WPI_JSON_PASTE32, \
297
WPI_JSON_PASTE31, \
298
WPI_JSON_PASTE30, \
299
WPI_JSON_PASTE29, \
300
WPI_JSON_PASTE28, \
301
WPI_JSON_PASTE27, \
302
WPI_JSON_PASTE26, \
303
WPI_JSON_PASTE25, \
304
WPI_JSON_PASTE24, \
305
WPI_JSON_PASTE23, \
306
WPI_JSON_PASTE22, \
307
WPI_JSON_PASTE21, \
308
WPI_JSON_PASTE20, \
309
WPI_JSON_PASTE19, \
310
WPI_JSON_PASTE18, \
311
WPI_JSON_PASTE17, \
312
WPI_JSON_PASTE16, \
313
WPI_JSON_PASTE15, \
314
WPI_JSON_PASTE14, \
315
WPI_JSON_PASTE13, \
316
WPI_JSON_PASTE12, \
317
WPI_JSON_PASTE11, \
318
WPI_JSON_PASTE10, \
319
WPI_JSON_PASTE9, \
320
WPI_JSON_PASTE8, \
321
WPI_JSON_PASTE7, \
322
WPI_JSON_PASTE6, \
323
WPI_JSON_PASTE5, \
324
WPI_JSON_PASTE4, \
325
WPI_JSON_PASTE3, \
326
WPI_JSON_PASTE2, \
327
WPI_JSON_PASTE1)(__VA_ARGS__))
328
#define WPI_JSON_PASTE2(func, v1) func(v1)
329
#define WPI_JSON_PASTE3(func, v1, v2) WPI_JSON_PASTE2(func, v1) WPI_JSON_PASTE2(func, v2)
330
#define WPI_JSON_PASTE4(func, v1, v2, v3) WPI_JSON_PASTE2(func, v1) WPI_JSON_PASTE3(func, v2, v3)
331
#define WPI_JSON_PASTE5(func, v1, v2, v3, v4) WPI_JSON_PASTE2(func, v1) WPI_JSON_PASTE4(func, v2, v3, v4)
332
#define WPI_JSON_PASTE6(func, v1, v2, v3, v4, v5) WPI_JSON_PASTE2(func, v1) WPI_JSON_PASTE5(func, v2, v3, v4, v5)
333
#define WPI_JSON_PASTE7(func, v1, v2, v3, v4, v5, v6) WPI_JSON_PASTE2(func, v1) WPI_JSON_PASTE6(func, v2, v3, v4, v5, v6)
334
#define WPI_JSON_PASTE8(func, v1, v2, v3, v4, v5, v6, v7) WPI_JSON_PASTE2(func, v1) WPI_JSON_PASTE7(func, v2, v3, v4, v5, v6, v7)
335
#define WPI_JSON_PASTE9(func, v1, v2, v3, v4, v5, v6, v7, v8) WPI_JSON_PASTE2(func, v1) WPI_JSON_PASTE8(func, v2, v3, v4, v5, v6, v7, v8)
336
#define WPI_JSON_PASTE10(func, v1, v2, v3, v4, v5, v6, v7, v8, v9) WPI_JSON_PASTE2(func, v1) WPI_JSON_PASTE9(func, v2, v3, v4, v5, v6, v7, v8, v9)
337
#define WPI_JSON_PASTE11(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) WPI_JSON_PASTE2(func, v1) WPI_JSON_PASTE10(func, v2, v3, v4, v5, v6, v7, v8, v9, v10)
338
#define WPI_JSON_PASTE12(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) WPI_JSON_PASTE2(func, v1) WPI_JSON_PASTE11(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11)
339
#define WPI_JSON_PASTE13(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12) WPI_JSON_PASTE2(func, v1) WPI_JSON_PASTE12(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12)
340
#define WPI_JSON_PASTE14(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13) WPI_JSON_PASTE2(func, v1) WPI_JSON_PASTE13(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13)
341
#define WPI_JSON_PASTE15(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14) WPI_JSON_PASTE2(func, v1) WPI_JSON_PASTE14(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14)
342
#define WPI_JSON_PASTE16(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15) WPI_JSON_PASTE2(func, v1) WPI_JSON_PASTE15(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15)
343
#define WPI_JSON_PASTE17(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16) WPI_JSON_PASTE2(func, v1) WPI_JSON_PASTE16(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16)
344
#define WPI_JSON_PASTE18(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17) WPI_JSON_PASTE2(func, v1) WPI_JSON_PASTE17(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17)
345
#define WPI_JSON_PASTE19(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18) WPI_JSON_PASTE2(func, v1) WPI_JSON_PASTE18(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18)
346
#define WPI_JSON_PASTE20(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19) WPI_JSON_PASTE2(func, v1) WPI_JSON_PASTE19(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19)
347
#define WPI_JSON_PASTE21(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20) WPI_JSON_PASTE2(func, v1) WPI_JSON_PASTE20(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20)
348
#define WPI_JSON_PASTE22(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21) WPI_JSON_PASTE2(func, v1) WPI_JSON_PASTE21(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21)
349
#define WPI_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) WPI_JSON_PASTE2(func, v1) WPI_JSON_PASTE22(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22)
350
#define WPI_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) WPI_JSON_PASTE2(func, v1) WPI_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)
351
#define WPI_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) WPI_JSON_PASTE2(func, v1) WPI_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)
352
#define WPI_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) WPI_JSON_PASTE2(func, v1) WPI_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)
353
#define WPI_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) WPI_JSON_PASTE2(func, v1) WPI_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)
354
#define WPI_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) WPI_JSON_PASTE2(func, v1) WPI_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)
355
#define WPI_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) WPI_JSON_PASTE2(func, v1) WPI_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)
356
#define WPI_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) WPI_JSON_PASTE2(func, v1) WPI_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)
357
#define WPI_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) WPI_JSON_PASTE2(func, v1) WPI_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)
358
#define WPI_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) WPI_JSON_PASTE2(func, v1) WPI_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)
359
#define WPI_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) WPI_JSON_PASTE2(func, v1) WPI_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)
360
#define WPI_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) WPI_JSON_PASTE2(func, v1) WPI_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)
361
#define WPI_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) WPI_JSON_PASTE2(func, v1) WPI_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)
362
#define WPI_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) WPI_JSON_PASTE2(func, v1) WPI_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)
363
#define WPI_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) WPI_JSON_PASTE2(func, v1) WPI_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)
364
#define WPI_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) WPI_JSON_PASTE2(func, v1) WPI_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)
365
#define WPI_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) WPI_JSON_PASTE2(func, v1) WPI_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)
366
#define WPI_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) WPI_JSON_PASTE2(func, v1) WPI_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)
367
#define WPI_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) WPI_JSON_PASTE2(func, v1) WPI_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)
368
#define WPI_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) WPI_JSON_PASTE2(func, v1) WPI_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)
369
#define WPI_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) WPI_JSON_PASTE2(func, v1) WPI_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)
370
#define WPI_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) WPI_JSON_PASTE2(func, v1) WPI_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)
371
#define WPI_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) WPI_JSON_PASTE2(func, v1) WPI_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)
372
#define WPI_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) WPI_JSON_PASTE2(func, v1) WPI_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)
373
#define WPI_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) WPI_JSON_PASTE2(func, v1) WPI_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)
374
#define WPI_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) WPI_JSON_PASTE2(func, v1) WPI_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)
375
#define WPI_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) WPI_JSON_PASTE2(func, v1) WPI_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)
376
#define WPI_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) WPI_JSON_PASTE2(func, v1) WPI_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)
377
#define WPI_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) WPI_JSON_PASTE2(func, v1) WPI_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)
378
#define WPI_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) WPI_JSON_PASTE2(func, v1) WPI_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)
379
#define WPI_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) WPI_JSON_PASTE2(func, v1) WPI_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)
380
#define WPI_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) WPI_JSON_PASTE2(func, v1) WPI_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)
381
#define WPI_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) WPI_JSON_PASTE2(func, v1) WPI_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)
382
#define WPI_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) WPI_JSON_PASTE2(func, v1) WPI_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)
383
#define WPI_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) WPI_JSON_PASTE2(func, v1) WPI_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)
384
#define WPI_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) WPI_JSON_PASTE2(func, v1) WPI_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)
385
#define WPI_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) WPI_JSON_PASTE2(func, v1) WPI_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)
386
#define WPI_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) WPI_JSON_PASTE2(func, v1) WPI_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)
387
#define WPI_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) WPI_JSON_PASTE2(func, v1) WPI_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)
388
#define WPI_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) WPI_JSON_PASTE2(func, v1) WPI_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)
389
#define WPI_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) WPI_JSON_PASTE2(func, v1) WPI_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)
390
#define WPI_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) WPI_JSON_PASTE2(func, v1) WPI_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)
391
392
#define WPI_JSON_TO(v1) nlohmann_json_j[#v1] = nlohmann_json_t.v1;
393
#define WPI_JSON_FROM(v1) nlohmann_json_j.at(#v1).get_to(nlohmann_json_t.v1);
394
#define WPI_JSON_FROM_WITH_DEFAULT(v1) nlohmann_json_t.v1 = nlohmann_json_j.value(#v1, nlohmann_json_default_obj.v1);
395
396
/*!
397
@brief macro
398
@def WPI_DEFINE_TYPE_INTRUSIVE
399
@since version 3.9.0
400
*/
401
#define WPI_DEFINE_TYPE_INTRUSIVE(Type, ...) \
402
friend void to_json(wpi::json& nlohmann_json_j, const Type& nlohmann_json_t) { WPI_JSON_EXPAND(WPI_JSON_PASTE(WPI_JSON_TO, __VA_ARGS__)) } \
403
friend void from_json(const wpi::json& nlohmann_json_j, Type& nlohmann_json_t) { WPI_JSON_EXPAND(WPI_JSON_PASTE(WPI_JSON_FROM, __VA_ARGS__)) }
404
405
#define WPI_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT(Type, ...) \
406
friend void to_json(wpi::json& nlohmann_json_j, const Type& nlohmann_json_t) { WPI_JSON_EXPAND(WPI_JSON_PASTE(WPI_JSON_TO, __VA_ARGS__)) } \
407
friend void from_json(const wpi::json& nlohmann_json_j, Type& nlohmann_json_t) { const Type nlohmann_json_default_obj{}; WPI_JSON_EXPAND(WPI_JSON_PASTE(WPI_JSON_FROM_WITH_DEFAULT, __VA_ARGS__)) }
408
409
#define WPI_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE(Type, ...) \
410
friend void to_json(wpi::json& nlohmann_json_j, const Type& nlohmann_json_t) { WPI_JSON_EXPAND(WPI_JSON_PASTE(WPI_JSON_TO, __VA_ARGS__)) }
411
412
/*!
413
@brief macro
414
@def WPI_DEFINE_TYPE_NON_INTRUSIVE
415
@since version 3.9.0
416
*/
417
#define WPI_DEFINE_TYPE_NON_INTRUSIVE(Type, ...) \
418
inline void to_json(wpi::json& nlohmann_json_j, const Type& nlohmann_json_t) { WPI_JSON_EXPAND(WPI_JSON_PASTE(WPI_JSON_TO, __VA_ARGS__)) } \
419
inline void from_json(const wpi::json& nlohmann_json_j, Type& nlohmann_json_t) { WPI_JSON_EXPAND(WPI_JSON_PASTE(WPI_JSON_FROM, __VA_ARGS__)) }
420
421
#define WPI_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE(Type, ...) \
422
inline void to_json(wpi::json& nlohmann_json_j, const Type& nlohmann_json_t) { WPI_JSON_EXPAND(WPI_JSON_PASTE(WPI_JSON_TO, __VA_ARGS__)) }
423
424
#define WPI_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT(Type, ...) \
425
inline void to_json(wpi::json& nlohmann_json_j, const Type& nlohmann_json_t) { WPI_JSON_EXPAND(WPI_JSON_PASTE(WPI_JSON_TO, __VA_ARGS__)) } \
426
inline void from_json(const wpi::json& nlohmann_json_j, Type& nlohmann_json_t) { const Type nlohmann_json_default_obj{}; WPI_JSON_EXPAND(WPI_JSON_PASTE(WPI_JSON_FROM_WITH_DEFAULT, __VA_ARGS__)) }
427
428
// inspired from https://stackoverflow.com/a/26745591
429
// allows to call any std function as if (e.g. with begin):
430
// using std::begin; begin(x);
431
//
432
// it allows using the detected idiom to retrieve the return type
433
// of such an expression
434
#define WPI_CAN_CALL_STD_FUNC_IMPL(std_name) \
435
namespace detail { \
436
using std::std_name; \
437
\
438
template<typename... T> \
439
using result_of_##std_name = decltype(std_name(std::declval<T>()...)); \
440
} \
441
\
442
namespace detail2 { \
443
struct std_name##_tag \
444
{ \
445
}; \
446
\
447
template<typename... T> \
448
std_name##_tag std_name(T&&...); \
449
\
450
template<typename... T> \
451
using result_of_##std_name = decltype(std_name(std::declval<T>()...)); \
452
\
453
template<typename... T> \
454
struct would_call_std_##std_name \
455
{ \
456
static constexpr auto const value = ::wpi::detail:: \
457
is_detected_exact<std_name##_tag, result_of_##std_name, T...>::value; \
458
}; \
459
}
/* namespace detail2 */
\
460
\
461
template<typename... T> \
462
struct would_call_std_##std_name : detail2::would_call_std_##std_name<T...> \
463
{ \
464
}
465
466
#ifndef JSON_USE_IMPLICIT_CONVERSIONS
467
#define JSON_USE_IMPLICIT_CONVERSIONS 1
468
#endif
469
470
#if JSON_USE_IMPLICIT_CONVERSIONS
471
#define JSON_EXPLICIT
472
#else
473
#define JSON_EXPLICIT explicit
474
#endif
475
476
#ifndef JSON_DISABLE_ENUM_SERIALIZATION
477
#define JSON_DISABLE_ENUM_SERIALIZATION 0
478
#endif
479
480
#ifndef JSON_USE_GLOBAL_UDLS
481
#define JSON_USE_GLOBAL_UDLS 1
482
#endif
abi_macros.h
detected.h
hedley.h
wpi
detail
macro_scope.h
Generated on Wed Jul 23 2025 00:48:19 for WPILibC++ by
1.12.0