mirror of
https://github.com/bblanchon/ArduinoJson.git
synced 2025-09-25 22:40:56 +02:00
Extract setInteger()
Before: 9918, 8796, 9742, 12698, 9994 After: 9902, 8796, 9724, 12682, 9978 Target: 9800, 8458, 9634, 12290, 9702
This commit is contained in:
@@ -520,15 +520,15 @@ class JsonDeserializer {
|
|||||||
auto number = parseNumber(buffer_);
|
auto number = parseNumber(buffer_);
|
||||||
switch (number.type()) {
|
switch (number.type()) {
|
||||||
case NumberType::UnsignedInteger:
|
case NumberType::UnsignedInteger:
|
||||||
if (VariantImpl(result, resources_)
|
if (VariantImpl::setInteger(number.asUnsignedInteger(), result,
|
||||||
.setInteger(number.asUnsignedInteger()))
|
resources_))
|
||||||
return DeserializationError::Ok;
|
return DeserializationError::Ok;
|
||||||
else
|
else
|
||||||
return DeserializationError::NoMemory;
|
return DeserializationError::NoMemory;
|
||||||
|
|
||||||
case NumberType::SignedInteger:
|
case NumberType::SignedInteger:
|
||||||
if (VariantImpl(result, resources_)
|
if (VariantImpl::setInteger(number.asSignedInteger(), result,
|
||||||
.setInteger(number.asSignedInteger()))
|
resources_))
|
||||||
return DeserializationError::Ok;
|
return DeserializationError::Ok;
|
||||||
else
|
else
|
||||||
return DeserializationError::NoMemory;
|
return DeserializationError::NoMemory;
|
||||||
|
@@ -91,7 +91,7 @@ class MsgPackDeserializer {
|
|||||||
|
|
||||||
if (code <= 0x7f || code >= 0xe0) { // fixint
|
if (code <= 0x7f || code >= 0xe0) { // fixint
|
||||||
if (allowValue)
|
if (allowValue)
|
||||||
VariantImpl(variant, resources_).setInteger(static_cast<int8_t>(code));
|
VariantImpl::setInteger(static_cast<int8_t>(code), variant, resources_);
|
||||||
return DeserializationError::Ok;
|
return DeserializationError::Ok;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -231,14 +231,14 @@ class MsgPackDeserializer {
|
|||||||
if (isSigned) {
|
if (isSigned) {
|
||||||
auto truncatedValue = static_cast<JsonInteger>(signedValue);
|
auto truncatedValue = static_cast<JsonInteger>(signedValue);
|
||||||
if (truncatedValue == signedValue) {
|
if (truncatedValue == signedValue) {
|
||||||
if (!VariantImpl(variant, resources_).setInteger(truncatedValue))
|
if (!VariantImpl::setInteger(truncatedValue, variant, resources_))
|
||||||
return DeserializationError::NoMemory;
|
return DeserializationError::NoMemory;
|
||||||
}
|
}
|
||||||
// else set null on overflow
|
// else set null on overflow
|
||||||
} else {
|
} else {
|
||||||
auto truncatedValue = static_cast<JsonUInt>(unsignedValue);
|
auto truncatedValue = static_cast<JsonUInt>(unsignedValue);
|
||||||
if (truncatedValue == unsignedValue)
|
if (truncatedValue == unsignedValue)
|
||||||
if (!VariantImpl(variant, resources_).setInteger(truncatedValue))
|
if (!VariantImpl::setInteger(truncatedValue, variant, resources_))
|
||||||
return DeserializationError::NoMemory;
|
return DeserializationError::NoMemory;
|
||||||
// else set null on overflow
|
// else set null on overflow
|
||||||
}
|
}
|
||||||
|
@@ -437,10 +437,21 @@ class VariantImpl {
|
|||||||
enable_if_t<sizeof(T) == 8, bool> setFloat(T value);
|
enable_if_t<sizeof(T) == 8, bool> setFloat(T value);
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
enable_if_t<is_signed<T>::value, bool> setInteger(T value);
|
bool setInteger(T value) {
|
||||||
|
if (!data_)
|
||||||
|
return false;
|
||||||
|
return setInteger(value, data_, resources_);
|
||||||
|
}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
enable_if_t<is_unsigned<T>::value, bool> setInteger(T value);
|
static enable_if_t<is_signed<T>::value, bool> setInteger(T value,
|
||||||
|
VariantData*,
|
||||||
|
ResourceManager*);
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
static enable_if_t<is_unsigned<T>::value, bool> setInteger(T value,
|
||||||
|
VariantData*,
|
||||||
|
ResourceManager*);
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
void setRawString(SerializedValue<T> value);
|
void setRawString(SerializedValue<T> value);
|
||||||
|
@@ -98,11 +98,11 @@ enable_if_t<sizeof(T) == 8, bool> VariantImpl::setFloat(T value) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
enable_if_t<is_signed<T>::value, bool> VariantImpl::setInteger(T value) {
|
enable_if_t<is_signed<T>::value, bool> VariantImpl::setInteger(
|
||||||
ARDUINOJSON_ASSERT(isNull()); // must call clear() first
|
T value, VariantData* data_, ResourceManager* resources_) {
|
||||||
|
ARDUINOJSON_ASSERT(data_ != nullptr);
|
||||||
if (!data_)
|
ARDUINOJSON_ASSERT(data_->type == VariantType::Null);
|
||||||
return false;
|
ARDUINOJSON_ASSERT(resources_ != nullptr);
|
||||||
|
|
||||||
if (canConvertNumber<int32_t>(value)) {
|
if (canConvertNumber<int32_t>(value)) {
|
||||||
data_->type = VariantType::Int32;
|
data_->type = VariantType::Int32;
|
||||||
@@ -117,16 +117,18 @@ enable_if_t<is_signed<T>::value, bool> VariantImpl::setInteger(T value) {
|
|||||||
data_->content.asSlotId = slot.id();
|
data_->content.asSlotId = slot.id();
|
||||||
slot->asInt64 = value;
|
slot->asInt64 = value;
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
(void)resources_;
|
||||||
#endif
|
#endif
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
enable_if_t<is_unsigned<T>::value, bool> VariantImpl::setInteger(T value) {
|
enable_if_t<is_unsigned<T>::value, bool> VariantImpl::setInteger(
|
||||||
ARDUINOJSON_ASSERT(isNull()); // must call clear() first
|
T value, VariantData* data_, ResourceManager* resources_) {
|
||||||
|
ARDUINOJSON_ASSERT(data_ != nullptr);
|
||||||
if (!data_)
|
ARDUINOJSON_ASSERT(data_->type == VariantType::Null);
|
||||||
return false;
|
ARDUINOJSON_ASSERT(resources_ != nullptr);
|
||||||
|
|
||||||
if (canConvertNumber<uint32_t>(value)) {
|
if (canConvertNumber<uint32_t>(value)) {
|
||||||
data_->type = VariantType::Uint32;
|
data_->type = VariantType::Uint32;
|
||||||
@@ -141,6 +143,8 @@ enable_if_t<is_unsigned<T>::value, bool> VariantImpl::setInteger(T value) {
|
|||||||
data_->content.asSlotId = slot.id();
|
data_->content.asSlotId = slot.id();
|
||||||
slot->asUint64 = value;
|
slot->asUint64 = value;
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
(void)resources_;
|
||||||
#endif
|
#endif
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user