@@ -43,14 +43,18 @@ class VariantData {
4343 template <typename TVisitor>
4444 typename TVisitor::result_type accept (
4545 TVisitor& visit, const ResourceManager* resources) const {
46+ #if ARDUINOJSON_USE_EXTENSIONS
47+ auto extension = getExtension (resources);
48+ #else
4649 (void )resources; // silence warning
50+ #endif
4751 switch (type_) {
4852 case VariantType::Float:
4953 return visit.visit (content_.asFloat );
5054
5155#if ARDUINOJSON_USE_DOUBLE
5256 case VariantType::Double:
53- return visit.visit (getExtension (resources) ->asDouble );
57+ return visit.visit (extension ->asDouble );
5458#endif
5559
5660 case VariantType::Array:
@@ -79,10 +83,10 @@ class VariantData {
7983
8084#if ARDUINOJSON_USE_LONG_LONG
8185 case VariantType::Int64:
82- return visit.visit (getExtension (resources) ->asInt64 );
86+ return visit.visit (extension ->asInt64 );
8387
8488 case VariantType::Uint64:
85- return visit.visit (getExtension (resources) ->asUint64 );
89+ return visit.visit (extension ->asUint64 );
8690#endif
8791
8892 case VariantType::Boolean:
@@ -130,7 +134,11 @@ class VariantData {
130134 }
131135
132136 bool asBoolean (const ResourceManager* resources) const {
137+ #if ARDUINOJSON_USE_EXTENSIONS
138+ auto extension = getExtension (resources);
139+ #else
133140 (void )resources; // silence warning
141+ #endif
134142 switch (type_) {
135143 case VariantType::Boolean:
136144 return content_.asBoolean ;
@@ -141,14 +149,14 @@ class VariantData {
141149 return content_.asFloat != 0 ;
142150#if ARDUINOJSON_USE_DOUBLE
143151 case VariantType::Double:
144- return getExtension (resources) ->asDouble != 0 ;
152+ return extension ->asDouble != 0 ;
145153#endif
146154 case VariantType::Null:
147155 return false ;
148156#if ARDUINOJSON_USE_LONG_LONG
149157 case VariantType::Uint64:
150158 case VariantType::Int64:
151- return getExtension (resources) ->asUint64 != 0 ;
159+ return extension ->asUint64 != 0 ;
152160#endif
153161 default :
154162 return true ;
@@ -174,7 +182,11 @@ class VariantData {
174182 template <typename T>
175183 T asFloat (const ResourceManager* resources) const {
176184 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
177188 (void )resources; // silence warning
189+ #endif
178190 switch (type_) {
179191 case VariantType::Boolean:
180192 return static_cast <T>(content_.asBoolean );
@@ -184,9 +196,9 @@ class VariantData {
184196 return static_cast <T>(content_.asInt32 );
185197#if ARDUINOJSON_USE_LONG_LONG
186198 case VariantType::Uint64:
187- return static_cast <T>(getExtension (resources) ->asUint64 );
199+ return static_cast <T>(extension ->asUint64 );
188200 case VariantType::Int64:
189- return static_cast <T>(getExtension (resources) ->asInt64 );
201+ return static_cast <T>(extension ->asInt64 );
190202#endif
191203 case VariantType::LinkedString:
192204 case VariantType::OwnedString:
@@ -195,7 +207,7 @@ class VariantData {
195207 return static_cast <T>(content_.asFloat );
196208#if ARDUINOJSON_USE_DOUBLE
197209 case VariantType::Double:
198- return static_cast <T>(getExtension (resources) ->asDouble );
210+ return static_cast <T>(extension ->asDouble );
199211#endif
200212 default :
201213 return 0 ;
@@ -205,7 +217,11 @@ class VariantData {
205217 template <typename T>
206218 T asIntegral (const ResourceManager* resources) const {
207219 static_assert (is_integral<T>::value, " T must be an integral type" );
220+ #if ARDUINOJSON_USE_EXTENSIONS
221+ auto extension = getExtension (resources);
222+ #else
208223 (void )resources; // silence warning
224+ #endif
209225 switch (type_) {
210226 case VariantType::Boolean:
211227 return content_.asBoolean ;
@@ -215,9 +231,9 @@ class VariantData {
215231 return convertNumber<T>(content_.asInt32 );
216232#if ARDUINOJSON_USE_LONG_LONG
217233 case VariantType::Uint64:
218- return convertNumber<T>(getExtension (resources) ->asUint64 );
234+ return convertNumber<T>(extension ->asUint64 );
219235 case VariantType::Int64:
220- return convertNumber<T>(getExtension (resources) ->asInt64 );
236+ return convertNumber<T>(extension ->asInt64 );
221237#endif
222238 case VariantType::LinkedString:
223239 return parseNumber<T>(content_.asLinkedString );
@@ -227,7 +243,7 @@ class VariantData {
227243 return convertNumber<T>(content_.asFloat );
228244#if ARDUINOJSON_USE_DOUBLE
229245 case VariantType::Double:
230- return convertNumber<T>(getExtension (resources) ->asDouble );
246+ return convertNumber<T>(extension ->asDouble );
231247#endif
232248 default :
233249 return 0 ;
@@ -327,7 +343,11 @@ class VariantData {
327343
328344 template <typename T>
329345 bool isInteger (const ResourceManager* resources) const {
346+ #if ARDUINOJSON_USE_LONG_LONG
347+ auto extension = getExtension (resources);
348+ #else
330349 (void )resources; // silence warning
350+ #endif
331351 switch (type_) {
332352 case VariantType::Uint32:
333353 return canConvertNumber<T>(content_.asUint32 );
@@ -337,10 +357,10 @@ class VariantData {
337357
338358#if ARDUINOJSON_USE_LONG_LONG
339359 case VariantType::Uint64:
340- return canConvertNumber<T>(getExtension (resources) ->asUint64 );
360+ return canConvertNumber<T>(extension ->asUint64 );
341361
342362 case VariantType::Int64:
343- return canConvertNumber<T>(getExtension (resources) ->asInt64 );
363+ return canConvertNumber<T>(extension ->asInt64 );
344364#endif
345365
346366 default :
0 commit comments