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; return DeserializationError::NoMemory;
case NumberType::Float: case NumberType::Float:
if (VariantImpl(result, resources_).setFloat(number.asFloat())) if (VariantImpl::setFloat(number.asFloat(), result, resources_))
return DeserializationError::Ok; return DeserializationError::Ok;
else else
return DeserializationError::NoMemory; return DeserializationError::NoMemory;
#if ARDUINOJSON_USE_DOUBLE #if ARDUINOJSON_USE_DOUBLE
case NumberType::Double: case NumberType::Double:
if (VariantImpl(result, resources_).setFloat(number.asDouble())) if (VariantImpl::setFloat(number.asDouble(), result, resources_))
return DeserializationError::Ok; return DeserializationError::Ok;
else else
return DeserializationError::NoMemory; return DeserializationError::NoMemory;

View File

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

View File

@@ -424,17 +424,25 @@ class VariantImpl {
} }
template <typename T> template <typename T>
enable_if_t<sizeof(T) == 4, bool> setFloat(T value) { bool setFloat(T value) {
ARDUINOJSON_ASSERT(type() == VariantType::Null); // must call clear() first
if (!data_) if (!data_)
return false; 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_->type = VariantType::Float;
data_->content.asFloat = value; data_->content.asFloat = value;
return true; return true;
} }
template <typename T> 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> template <typename T>
bool setInteger(T value) { bool setInteger(T value) {

View File

@@ -70,11 +70,11 @@ inline const EightByteValue* VariantImpl::getEightByte() const {
#endif #endif
template <typename T> template <typename T>
enable_if_t<sizeof(T) == 8, bool> VariantImpl::setFloat(T value) { enable_if_t<sizeof(T) == 8, bool> VariantImpl::setFloat(
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);
float valueAsFloat = static_cast<float>(value); float valueAsFloat = static_cast<float>(value);