Skip to content

Commit 71063c4

Browse files
committed
Extract setInteger()
Before: 9918, 8796, 9742, 12698, 9994 After: 9902, 8796, 9724, 12682, 9978 Target: 9800, 8458, 9634, 12290, 9702
1 parent 769e10c commit 71063c4

File tree

4 files changed

+34
-19
lines changed

4 files changed

+34
-19
lines changed

src/ArduinoJson/Json/JsonDeserializer.hpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -520,15 +520,15 @@ class JsonDeserializer {
520520
auto number = parseNumber(buffer_);
521521
switch (number.type()) {
522522
case NumberType::UnsignedInteger:
523-
if (VariantImpl(result, resources_)
524-
.setInteger(number.asUnsignedInteger()))
523+
if (VariantImpl::setInteger(number.asUnsignedInteger(), result,
524+
resources_))
525525
return DeserializationError::Ok;
526526
else
527527
return DeserializationError::NoMemory;
528528

529529
case NumberType::SignedInteger:
530-
if (VariantImpl(result, resources_)
531-
.setInteger(number.asSignedInteger()))
530+
if (VariantImpl::setInteger(number.asSignedInteger(), result,
531+
resources_))
532532
return DeserializationError::Ok;
533533
else
534534
return DeserializationError::NoMemory;

src/ArduinoJson/MsgPack/MsgPackDeserializer.hpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ class MsgPackDeserializer {
9191

9292
if (code <= 0x7f || code >= 0xe0) { // fixint
9393
if (allowValue)
94-
VariantImpl(variant, resources_).setInteger(static_cast<int8_t>(code));
94+
VariantImpl::setInteger(static_cast<int8_t>(code), variant, resources_);
9595
return DeserializationError::Ok;
9696
}
9797

@@ -231,14 +231,14 @@ class MsgPackDeserializer {
231231
if (isSigned) {
232232
auto truncatedValue = static_cast<JsonInteger>(signedValue);
233233
if (truncatedValue == signedValue) {
234-
if (!VariantImpl(variant, resources_).setInteger(truncatedValue))
234+
if (!VariantImpl::setInteger(truncatedValue, variant, resources_))
235235
return DeserializationError::NoMemory;
236236
}
237237
// else set null on overflow
238238
} else {
239239
auto truncatedValue = static_cast<JsonUInt>(unsignedValue);
240240
if (truncatedValue == unsignedValue)
241-
if (!VariantImpl(variant, resources_).setInteger(truncatedValue))
241+
if (!VariantImpl::setInteger(truncatedValue, variant, resources_))
242242
return DeserializationError::NoMemory;
243243
// else set null on overflow
244244
}

src/ArduinoJson/Variant/VariantData.hpp

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -437,10 +437,21 @@ class VariantImpl {
437437
enable_if_t<sizeof(T) == 8, bool> setFloat(T value);
438438

439439
template <typename T>
440-
enable_if_t<is_signed<T>::value, bool> setInteger(T value);
440+
bool setInteger(T value) {
441+
if (!data_)
442+
return false;
443+
return setInteger(value, data_, resources_);
444+
}
445+
446+
template <typename T>
447+
static enable_if_t<is_signed<T>::value, bool> setInteger(T value,
448+
VariantData*,
449+
ResourceManager*);
441450

442451
template <typename T>
443-
enable_if_t<is_unsigned<T>::value, bool> setInteger(T value);
452+
static enable_if_t<is_unsigned<T>::value, bool> setInteger(T value,
453+
VariantData*,
454+
ResourceManager*);
444455

445456
template <typename T>
446457
void setRawString(SerializedValue<T> value);

src/ArduinoJson/Variant/VariantImpl.hpp

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -98,11 +98,11 @@ enable_if_t<sizeof(T) == 8, bool> VariantImpl::setFloat(T value) {
9898
}
9999

100100
template <typename T>
101-
enable_if_t<is_signed<T>::value, bool> VariantImpl::setInteger(T value) {
102-
ARDUINOJSON_ASSERT(isNull()); // must call clear() first
103-
104-
if (!data_)
105-
return false;
101+
enable_if_t<is_signed<T>::value, bool> VariantImpl::setInteger(
102+
T value, VariantData* data_, ResourceManager* resources_) {
103+
ARDUINOJSON_ASSERT(data_ != nullptr);
104+
ARDUINOJSON_ASSERT(data_->type == VariantType::Null);
105+
ARDUINOJSON_ASSERT(resources_ != nullptr);
106106

107107
if (canConvertNumber<int32_t>(value)) {
108108
data_->type = VariantType::Int32;
@@ -117,16 +117,18 @@ enable_if_t<is_signed<T>::value, bool> VariantImpl::setInteger(T value) {
117117
data_->content.asSlotId = slot.id();
118118
slot->asInt64 = value;
119119
}
120+
#else
121+
(void)resources_;
120122
#endif
121123
return true;
122124
}
123125

124126
template <typename T>
125-
enable_if_t<is_unsigned<T>::value, bool> VariantImpl::setInteger(T value) {
126-
ARDUINOJSON_ASSERT(isNull()); // must call clear() first
127-
128-
if (!data_)
129-
return false;
127+
enable_if_t<is_unsigned<T>::value, bool> VariantImpl::setInteger(
128+
T value, VariantData* data_, ResourceManager* resources_) {
129+
ARDUINOJSON_ASSERT(data_ != nullptr);
130+
ARDUINOJSON_ASSERT(data_->type == VariantType::Null);
131+
ARDUINOJSON_ASSERT(resources_ != nullptr);
130132

131133
if (canConvertNumber<uint32_t>(value)) {
132134
data_->type = VariantType::Uint32;
@@ -141,6 +143,8 @@ enable_if_t<is_unsigned<T>::value, bool> VariantImpl::setInteger(T value) {
141143
data_->content.asSlotId = slot.id();
142144
slot->asUint64 = value;
143145
}
146+
#else
147+
(void)resources_;
144148
#endif
145149
return true;
146150
}

0 commit comments

Comments
 (0)