Skip to content

Commit dd1d96e

Browse files
committed
Group calls to getExtension()
This slightly reduces the code size.
1 parent 3b64197 commit dd1d96e

File tree

2 files changed

+36
-15
lines changed

2 files changed

+36
-15
lines changed

src/ArduinoJson/Variant/VariantData.hpp

Lines changed: 33 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -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:

src/ArduinoJson/Variant/VariantImpl.hpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,9 @@ inline void VariantData::clear(ResourceManager* resources) {
5959
#if ARDUINOJSON_USE_EXTENSIONS
6060
inline const VariantExtension* VariantData::getExtension(
6161
const ResourceManager* resources) const {
62-
ARDUINOJSON_ASSERT(type_ & VariantTypeBits::ExtensionBit);
63-
return resources->getExtension(content_.asSlotId);
62+
return type_ & VariantTypeBits::ExtensionBit
63+
? resources->getExtension(content_.asSlotId)
64+
: nullptr;
6465
}
6566
#endif
6667

0 commit comments

Comments
 (0)