@@ -43,14 +43,18 @@ class VariantData {
43
43
template <typename TVisitor>
44
44
typename TVisitor::result_type accept (
45
45
TVisitor& visit, const ResourceManager* resources) const {
46
+ #if ARDUINOJSON_USE_EXTENSIONS
47
+ auto extension = getExtension (resources);
48
+ #else
46
49
(void )resources; // silence warning
50
+ #endif
47
51
switch (type_) {
48
52
case VariantType::Float:
49
53
return visit.visit (content_.asFloat );
50
54
51
55
#if ARDUINOJSON_USE_DOUBLE
52
56
case VariantType::Double:
53
- return visit.visit (getExtension (resources) ->asDouble );
57
+ return visit.visit (extension ->asDouble );
54
58
#endif
55
59
56
60
case VariantType::Array:
@@ -79,10 +83,10 @@ class VariantData {
79
83
80
84
#if ARDUINOJSON_USE_LONG_LONG
81
85
case VariantType::Int64:
82
- return visit.visit (getExtension (resources) ->asInt64 );
86
+ return visit.visit (extension ->asInt64 );
83
87
84
88
case VariantType::Uint64:
85
- return visit.visit (getExtension (resources) ->asUint64 );
89
+ return visit.visit (extension ->asUint64 );
86
90
#endif
87
91
88
92
case VariantType::Boolean:
@@ -130,7 +134,11 @@ class VariantData {
130
134
}
131
135
132
136
bool asBoolean (const ResourceManager* resources) const {
137
+ #if ARDUINOJSON_USE_EXTENSIONS
138
+ auto extension = getExtension (resources);
139
+ #else
133
140
(void )resources; // silence warning
141
+ #endif
134
142
switch (type_) {
135
143
case VariantType::Boolean:
136
144
return content_.asBoolean ;
@@ -141,14 +149,14 @@ class VariantData {
141
149
return content_.asFloat != 0 ;
142
150
#if ARDUINOJSON_USE_DOUBLE
143
151
case VariantType::Double:
144
- return getExtension (resources) ->asDouble != 0 ;
152
+ return extension ->asDouble != 0 ;
145
153
#endif
146
154
case VariantType::Null:
147
155
return false ;
148
156
#if ARDUINOJSON_USE_LONG_LONG
149
157
case VariantType::Uint64:
150
158
case VariantType::Int64:
151
- return getExtension (resources) ->asUint64 != 0 ;
159
+ return extension ->asUint64 != 0 ;
152
160
#endif
153
161
default :
154
162
return true ;
@@ -174,7 +182,11 @@ class VariantData {
174
182
template <typename T>
175
183
T asFloat (const ResourceManager* resources) const {
176
184
static_assert (is_floating_point<T>::value, " T must be a floating point" );
185
+ #if ARDUINOJSON_USE_EXTENSIONS
186
+ auto extension = getExtension (resources);
187
+ #else
177
188
(void )resources; // silence warning
189
+ #endif
178
190
switch (type_) {
179
191
case VariantType::Boolean:
180
192
return static_cast <T>(content_.asBoolean );
@@ -184,9 +196,9 @@ class VariantData {
184
196
return static_cast <T>(content_.asInt32 );
185
197
#if ARDUINOJSON_USE_LONG_LONG
186
198
case VariantType::Uint64:
187
- return static_cast <T>(getExtension (resources) ->asUint64 );
199
+ return static_cast <T>(extension ->asUint64 );
188
200
case VariantType::Int64:
189
- return static_cast <T>(getExtension (resources) ->asInt64 );
201
+ return static_cast <T>(extension ->asInt64 );
190
202
#endif
191
203
case VariantType::LinkedString:
192
204
case VariantType::OwnedString:
@@ -195,7 +207,7 @@ class VariantData {
195
207
return static_cast <T>(content_.asFloat );
196
208
#if ARDUINOJSON_USE_DOUBLE
197
209
case VariantType::Double:
198
- return static_cast <T>(getExtension (resources) ->asDouble );
210
+ return static_cast <T>(extension ->asDouble );
199
211
#endif
200
212
default :
201
213
return 0 ;
@@ -205,7 +217,11 @@ class VariantData {
205
217
template <typename T>
206
218
T asIntegral (const ResourceManager* resources) const {
207
219
static_assert (is_integral<T>::value, " T must be an integral type" );
220
+ #if ARDUINOJSON_USE_EXTENSIONS
221
+ auto extension = getExtension (resources);
222
+ #else
208
223
(void )resources; // silence warning
224
+ #endif
209
225
switch (type_) {
210
226
case VariantType::Boolean:
211
227
return content_.asBoolean ;
@@ -215,9 +231,9 @@ class VariantData {
215
231
return convertNumber<T>(content_.asInt32 );
216
232
#if ARDUINOJSON_USE_LONG_LONG
217
233
case VariantType::Uint64:
218
- return convertNumber<T>(getExtension (resources) ->asUint64 );
234
+ return convertNumber<T>(extension ->asUint64 );
219
235
case VariantType::Int64:
220
- return convertNumber<T>(getExtension (resources) ->asInt64 );
236
+ return convertNumber<T>(extension ->asInt64 );
221
237
#endif
222
238
case VariantType::LinkedString:
223
239
return parseNumber<T>(content_.asLinkedString );
@@ -227,7 +243,7 @@ class VariantData {
227
243
return convertNumber<T>(content_.asFloat );
228
244
#if ARDUINOJSON_USE_DOUBLE
229
245
case VariantType::Double:
230
- return convertNumber<T>(getExtension (resources) ->asDouble );
246
+ return convertNumber<T>(extension ->asDouble );
231
247
#endif
232
248
default :
233
249
return 0 ;
@@ -327,7 +343,11 @@ class VariantData {
327
343
328
344
template <typename T>
329
345
bool isInteger (const ResourceManager* resources) const {
346
+ #if ARDUINOJSON_USE_LONG_LONG
347
+ auto extension = getExtension (resources);
348
+ #else
330
349
(void )resources; // silence warning
350
+ #endif
331
351
switch (type_) {
332
352
case VariantType::Uint32:
333
353
return canConvertNumber<T>(content_.asUint32 );
@@ -337,10 +357,10 @@ class VariantData {
337
357
338
358
#if ARDUINOJSON_USE_LONG_LONG
339
359
case VariantType::Uint64:
340
- return canConvertNumber<T>(getExtension (resources) ->asUint64 );
360
+ return canConvertNumber<T>(extension ->asUint64 );
341
361
342
362
case VariantType::Int64:
343
- return canConvertNumber<T>(getExtension (resources) ->asInt64 );
363
+ return canConvertNumber<T>(extension ->asInt64 );
344
364
#endif
345
365
346
366
default :
0 commit comments