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_);
|
||||
switch (number.type()) {
|
||||
case NumberType::UnsignedInteger:
|
||||
if (VariantImpl(result, resources_)
|
||||
.setInteger(number.asUnsignedInteger()))
|
||||
if (VariantImpl::setInteger(number.asUnsignedInteger(), result,
|
||||
resources_))
|
||||
return DeserializationError::Ok;
|
||||
else
|
||||
return DeserializationError::NoMemory;
|
||||
|
||||
case NumberType::SignedInteger:
|
||||
if (VariantImpl(result, resources_)
|
||||
.setInteger(number.asSignedInteger()))
|
||||
if (VariantImpl::setInteger(number.asSignedInteger(), result,
|
||||
resources_))
|
||||
return DeserializationError::Ok;
|
||||
else
|
||||
return DeserializationError::NoMemory;
|
||||
|
@@ -91,7 +91,7 @@ class MsgPackDeserializer {
|
||||
|
||||
if (code <= 0x7f || code >= 0xe0) { // fixint
|
||||
if (allowValue)
|
||||
VariantImpl(variant, resources_).setInteger(static_cast<int8_t>(code));
|
||||
VariantImpl::setInteger(static_cast<int8_t>(code), variant, resources_);
|
||||
return DeserializationError::Ok;
|
||||
}
|
||||
|
||||
@@ -231,14 +231,14 @@ class MsgPackDeserializer {
|
||||
if (isSigned) {
|
||||
auto truncatedValue = static_cast<JsonInteger>(signedValue);
|
||||
if (truncatedValue == signedValue) {
|
||||
if (!VariantImpl(variant, resources_).setInteger(truncatedValue))
|
||||
if (!VariantImpl::setInteger(truncatedValue, variant, resources_))
|
||||
return DeserializationError::NoMemory;
|
||||
}
|
||||
// else set null on overflow
|
||||
} else {
|
||||
auto truncatedValue = static_cast<JsonUInt>(unsignedValue);
|
||||
if (truncatedValue == unsignedValue)
|
||||
if (!VariantImpl(variant, resources_).setInteger(truncatedValue))
|
||||
if (!VariantImpl::setInteger(truncatedValue, variant, resources_))
|
||||
return DeserializationError::NoMemory;
|
||||
// else set null on overflow
|
||||
}
|
||||
|
@@ -437,10 +437,21 @@ class VariantImpl {
|
||||
enable_if_t<sizeof(T) == 8, bool> setFloat(T value);
|
||||
|
||||
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>
|
||||
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>
|
||||
void setRawString(SerializedValue<T> value);
|
||||
|
@@ -98,11 +98,11 @@ enable_if_t<sizeof(T) == 8, bool> VariantImpl::setFloat(T value) {
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
enable_if_t<is_signed<T>::value, bool> VariantImpl::setInteger(T value) {
|
||||
ARDUINOJSON_ASSERT(isNull()); // must call clear() first
|
||||
|
||||
if (!data_)
|
||||
return false;
|
||||
enable_if_t<is_signed<T>::value, bool> VariantImpl::setInteger(
|
||||
T value, VariantData* data_, ResourceManager* resources_) {
|
||||
ARDUINOJSON_ASSERT(data_ != nullptr);
|
||||
ARDUINOJSON_ASSERT(data_->type == VariantType::Null);
|
||||
ARDUINOJSON_ASSERT(resources_ != nullptr);
|
||||
|
||||
if (canConvertNumber<int32_t>(value)) {
|
||||
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();
|
||||
slot->asInt64 = value;
|
||||
}
|
||||
#else
|
||||
(void)resources_;
|
||||
#endif
|
||||
return true;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
enable_if_t<is_unsigned<T>::value, bool> VariantImpl::setInteger(T value) {
|
||||
ARDUINOJSON_ASSERT(isNull()); // must call clear() first
|
||||
|
||||
if (!data_)
|
||||
return false;
|
||||
enable_if_t<is_unsigned<T>::value, bool> VariantImpl::setInteger(
|
||||
T value, VariantData* data_, ResourceManager* resources_) {
|
||||
ARDUINOJSON_ASSERT(data_ != nullptr);
|
||||
ARDUINOJSON_ASSERT(data_->type == VariantType::Null);
|
||||
ARDUINOJSON_ASSERT(resources_ != nullptr);
|
||||
|
||||
if (canConvertNumber<uint32_t>(value)) {
|
||||
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();
|
||||
slot->asUint64 = value;
|
||||
}
|
||||
#else
|
||||
(void)resources_;
|
||||
#endif
|
||||
return true;
|
||||
}
|
||||
|
Reference in New Issue
Block a user