Extract setFloat()

Before: 9902, 8796, 9724, 12682, 9978
After:  9894, 8796, 9708, 12674, 9970
Target: 9800, 8458, 9634, 12290, 9702
This commit is contained in:
Benoit Blanchon
2025-09-17 19:27:07 +02:00
parent 71063c4ddb
commit a9461f8e4d
4 changed files with 21 additions and 13 deletions

View File

@@ -534,14 +534,14 @@ class JsonDeserializer {
return DeserializationError::NoMemory;
case NumberType::Float:
if (VariantImpl(result, resources_).setFloat(number.asFloat()))
if (VariantImpl::setFloat(number.asFloat(), result, resources_))
return DeserializationError::Ok;
else
return DeserializationError::NoMemory;
#if ARDUINOJSON_USE_DOUBLE
case NumberType::Double:
if (VariantImpl(result, resources_).setFloat(number.asDouble()))
if (VariantImpl::setFloat(number.asDouble(), result, resources_))
return DeserializationError::Ok;
else
return DeserializationError::NoMemory;

View File

@@ -257,7 +257,7 @@ class MsgPackDeserializer {
return err;
fixEndianness(value);
VariantImpl(variant, resources_).setFloat(value);
VariantImpl::setFloat(value, variant, resources_);
return DeserializationError::Ok;
}
@@ -273,7 +273,7 @@ class MsgPackDeserializer {
return err;
fixEndianness(value);
if (VariantImpl(variant, resources_).setFloat(value))
if (VariantImpl::setFloat(value, variant, resources_))
return DeserializationError::Ok;
else
return DeserializationError::NoMemory;
@@ -293,7 +293,7 @@ class MsgPackDeserializer {
doubleToFloat(i, o);
fixEndianness(value);
VariantImpl(variant, resources_).setFloat(value);
VariantImpl::setFloat(value, variant, resources_);
return DeserializationError::Ok;
}

View File

@@ -424,17 +424,25 @@ class VariantImpl {
}
template <typename T>
enable_if_t<sizeof(T) == 4, bool> setFloat(T value) {
ARDUINOJSON_ASSERT(type() == VariantType::Null); // must call clear() first
bool setFloat(T value) {
if (!data_)
return false;
return setFloat(value, data_, resources_);
}
template <typename T>
static enable_if_t<sizeof(T) == 4, bool> setFloat(T value, VariantData* data_,
ResourceManager*) {
ARDUINOJSON_ASSERT(data_ != nullptr);
ARDUINOJSON_ASSERT(data_->type == VariantType::Null);
data_->type = VariantType::Float;
data_->content.asFloat = value;
return true;
}
template <typename T>
enable_if_t<sizeof(T) == 8, bool> setFloat(T value);
static enable_if_t<sizeof(T) == 8, bool> setFloat(
T value, VariantData* data_, ResourceManager* resources_);
template <typename T>
bool setInteger(T value) {

View File

@@ -70,11 +70,11 @@ inline const EightByteValue* VariantImpl::getEightByte() const {
#endif
template <typename T>
enable_if_t<sizeof(T) == 8, bool> VariantImpl::setFloat(T value) {
ARDUINOJSON_ASSERT(isNull()); // must call clear() first
if (!data_)
return false;
enable_if_t<sizeof(T) == 8, bool> VariantImpl::setFloat(
T value, VariantData* data_, ResourceManager* resources_) {
ARDUINOJSON_ASSERT(data_ != nullptr);
ARDUINOJSON_ASSERT(data_->type == VariantType::Null);
ARDUINOJSON_ASSERT(resources_ != nullptr);
float valueAsFloat = static_cast<float>(value);