diff --git a/extras/conf_test/avr.cpp b/extras/conf_test/avr.cpp index 769317a8..ae1ec6f1 100644 --- a/extras/conf_test/avr.cpp +++ b/extras/conf_test/avr.cpp @@ -12,7 +12,7 @@ static_assert(ARDUINOJSON_LITTLE_ENDIAN == 1, "ARDUINOJSON_LITTLE_ENDIAN"); static_assert(ARDUINOJSON_USE_DOUBLE == 0, "ARDUINOJSON_USE_DOUBLE"); -static_assert(ArduinoJson::detail::ResourceManager::slotSize == 6, "slot size"); +static_assert(sizeof(ArduinoJson::detail::VariantData) == 6, "slot size"); void setup() {} void loop() {} diff --git a/extras/conf_test/esp8266.cpp b/extras/conf_test/esp8266.cpp index b37bfd67..3e509b36 100644 --- a/extras/conf_test/esp8266.cpp +++ b/extras/conf_test/esp8266.cpp @@ -10,7 +10,7 @@ static_assert(ARDUINOJSON_LITTLE_ENDIAN == 1, "ARDUINOJSON_LITTLE_ENDIAN"); static_assert(ARDUINOJSON_USE_DOUBLE == 1, "ARDUINOJSON_USE_DOUBLE"); -static_assert(ArduinoJson::detail::ResourceManager::slotSize == 8, "slot size"); +static_assert(sizeof(ArduinoJson::detail::VariantData) == 8, "slot size"); void setup() {} void loop() {} diff --git a/extras/conf_test/x64.cpp b/extras/conf_test/x64.cpp index df6b044b..c221cd1d 100644 --- a/extras/conf_test/x64.cpp +++ b/extras/conf_test/x64.cpp @@ -10,7 +10,6 @@ static_assert(ARDUINOJSON_LITTLE_ENDIAN == 1, "ARDUINOJSON_LITTLE_ENDIAN"); static_assert(ARDUINOJSON_USE_DOUBLE == 1, "ARDUINOJSON_USE_DOUBLE"); -static_assert(ArduinoJson::detail::ResourceManager::slotSize == 16, - "slot size"); +static_assert(sizeof(ArduinoJson::detail::VariantData) == 16, "slot size"); int main() {} diff --git a/extras/conf_test/x86.cpp b/extras/conf_test/x86.cpp index 9dff8f17..8d7f4773 100644 --- a/extras/conf_test/x86.cpp +++ b/extras/conf_test/x86.cpp @@ -10,6 +10,6 @@ static_assert(ARDUINOJSON_LITTLE_ENDIAN == 1, "ARDUINOJSON_LITTLE_ENDIAN"); static_assert(ARDUINOJSON_USE_DOUBLE == 1, "ARDUINOJSON_USE_DOUBLE"); -static_assert(ArduinoJson::detail::ResourceManager::slotSize == 8, "slot size"); +static_assert(sizeof(ArduinoJson::detail::VariantData) == 8, "slot size"); int main() {} diff --git a/extras/tests/Helpers/Allocators.hpp b/extras/tests/Helpers/Allocators.hpp index 6b65ad01..37684113 100644 --- a/extras/tests/Helpers/Allocators.hpp +++ b/extras/tests/Helpers/Allocators.hpp @@ -269,10 +269,10 @@ inline size_t sizeofPoolList(size_t n = ARDUINOJSON_INITIAL_POOL_COUNT) { return sizeof(MemoryPool) * n; } +template inline size_t sizeofPool( ArduinoJson::detail::SlotCount n = ARDUINOJSON_POOL_CAPACITY) { - using namespace ArduinoJson::detail; - return MemoryPool::slotsToBytes(n); + return ArduinoJson::detail::MemoryPool::slotsToBytes(n); } inline size_t sizeofStaticStringPool( diff --git a/extras/tests/JsonArray/add.cpp b/extras/tests/JsonArray/add.cpp index bb64ef06..e8b09241 100644 --- a/extras/tests/JsonArray/add.cpp +++ b/extras/tests/JsonArray/add.cpp @@ -8,7 +8,7 @@ #include "Allocators.hpp" #include "Literals.hpp" -using ArduinoJson::detail::sizeofArray; +using namespace ArduinoJson::detail; TEST_CASE("JsonArray::add(T)") { SpyingAllocator spy; @@ -33,7 +33,8 @@ TEST_CASE("JsonArray::add(T)") { REQUIRE(array[0].is()); REQUIRE_FALSE(array[0].is()); REQUIRE(spy.log() == AllocatorLog{ - Allocate(sizeofPool()), + Allocate(sizeofPool()), + Allocate(sizeofPool()), }); } diff --git a/extras/tests/JsonDeserializer/array.cpp b/extras/tests/JsonDeserializer/array.cpp index e6fb18d5..ad534604 100644 --- a/extras/tests/JsonDeserializer/array.cpp +++ b/extras/tests/JsonDeserializer/array.cpp @@ -7,7 +7,7 @@ #include "Allocators.hpp" -using ArduinoJson::detail::sizeofArray; +using namespace ArduinoJson::detail; TEST_CASE("deserialize JSON array") { SpyingAllocator spy; @@ -92,8 +92,12 @@ TEST_CASE("deserialize JSON array") { REQUIRE(arr[0].as() == Approx(4.2123456)); REQUIRE(arr[1] == -7E89); REQUIRE(spy.log() == AllocatorLog{ - Allocate(sizeofPool()), - Reallocate(sizeofPool(), sizeofPool(4)), + Allocate(sizeofPool()), + Allocate(sizeofPool()), + Reallocate(sizeofPool(), + sizeofPool(2)), + Reallocate(sizeofPool(), + sizeofPool(2)), }); } diff --git a/extras/tests/JsonDeserializer/errors.cpp b/extras/tests/JsonDeserializer/errors.cpp index 35d3ca39..3fabe4d4 100644 --- a/extras/tests/JsonDeserializer/errors.cpp +++ b/extras/tests/JsonDeserializer/errors.cpp @@ -121,7 +121,7 @@ TEST_CASE("deserializeJson() returns NoMemory if string length overflows") { } } -TEST_CASE("deserializeJson() returns NoMemory if extension allocation fails") { +TEST_CASE("deserializeJson() returns NoMemory if 8-bit slot allocation fails") { JsonDocument doc(FailingAllocator::instance()); SECTION("uint32_t should pass") { diff --git a/extras/tests/JsonVariant/set.cpp b/extras/tests/JsonVariant/set.cpp index 04ffeddc..420a3d85 100644 --- a/extras/tests/JsonVariant/set.cpp +++ b/extras/tests/JsonVariant/set.cpp @@ -8,7 +8,7 @@ #include "Allocators.hpp" #include "Literals.hpp" -using ArduinoJson::detail::sizeofObject; +using namespace ArduinoJson::detail; enum ErrorCode { ERROR_01 = 1, ERROR_10 = 10 }; @@ -197,11 +197,11 @@ TEST_CASE("JsonVariant::set() when there is enough memory") { REQUIRE(result == true); REQUIRE(variant.is() == true); REQUIRE(variant.as() == 1.2); - REQUIRE(spy.log() == - AllocatorLog{ - Allocate(sizeofPool()), - Reallocate(sizeofPool(), sizeofPool(1)), // one extension slot - }); + REQUIRE(spy.log() == AllocatorLog{ + Allocate(sizeofPool()), + Reallocate(sizeofPool(), + sizeofPool(1)), + }); } SECTION("int32_t") { @@ -220,11 +220,11 @@ TEST_CASE("JsonVariant::set() when there is enough memory") { REQUIRE(result == true); REQUIRE(variant.is() == true); REQUIRE(variant.as() == -2147483649LL); - REQUIRE(spy.log() == - AllocatorLog{ - Allocate(sizeofPool()), - Reallocate(sizeofPool(), sizeofPool(1)), // one extension slot - }); + REQUIRE(spy.log() == AllocatorLog{ + Allocate(sizeofPool()), + Reallocate(sizeofPool(), + sizeofPool(1)), + }); } SECTION("uint32_t") { @@ -243,11 +243,11 @@ TEST_CASE("JsonVariant::set() when there is enough memory") { REQUIRE(result == true); REQUIRE(variant.is() == true); REQUIRE(variant.as() == 4294967296); - REQUIRE(spy.log() == - AllocatorLog{ - Allocate(sizeofPool()), - Reallocate(sizeofPool(), sizeofPool(1)), // one extension slot - }); + REQUIRE(spy.log() == AllocatorLog{ + Allocate(sizeofPool()), + Reallocate(sizeofPool(), + sizeofPool(1)), + }); } SECTION("JsonDocument") { @@ -378,7 +378,7 @@ TEST_CASE("JsonVariant::set() releases the previous value") { } SECTION("float") { - v.set(1.2); + v.set(1.2f); REQUIRE(spy.log() == AllocatorLog{ Deallocate(sizeofString("world")), }); @@ -393,7 +393,7 @@ TEST_CASE("JsonVariant::set() releases the previous value") { } } -TEST_CASE("JsonVariant::set() reuses extension slot") { +TEST_CASE("JsonVariant::set() reuses 8-bit slot") { SpyingAllocator spy; JsonDocument doc(&spy); JsonVariant variant = doc.to(); diff --git a/src/ArduinoJson/Array/ArrayImpl.hpp b/src/ArduinoJson/Array/ArrayImpl.hpp index b4fb1264..8db18959 100644 --- a/src/ArduinoJson/Array/ArrayImpl.hpp +++ b/src/ArduinoJson/Array/ArrayImpl.hpp @@ -73,7 +73,7 @@ inline bool ArrayData::addValue(const T& value, ResourceManager* resources) { // Returns the size (in bytes) of an array with n elements. constexpr size_t sizeofArray(size_t n) { - return n * ResourceManager::slotSize; + return n * sizeof(VariantData); } ARDUINOJSON_END_PRIVATE_NAMESPACE diff --git a/src/ArduinoJson/Configuration.hpp b/src/ArduinoJson/Configuration.hpp index 696ce4c9..38d78f46 100644 --- a/src/ArduinoJson/Configuration.hpp +++ b/src/ArduinoJson/Configuration.hpp @@ -274,9 +274,9 @@ #endif #if ARDUINOJSON_USE_LONG_LONG || ARDUINOJSON_USE_DOUBLE -# define ARDUINOJSON_USE_EXTENSIONS 1 +# define ARDUINOJSON_USE_8_BYTE_POOL 1 #else -# define ARDUINOJSON_USE_EXTENSIONS 0 +# define ARDUINOJSON_USE_8_BYTE_POOL 0 #endif #if defined(nullptr) diff --git a/src/ArduinoJson/Memory/ResourceManager.hpp b/src/ArduinoJson/Memory/ResourceManager.hpp index 12a379c8..4ea6b7b3 100644 --- a/src/ArduinoJson/Memory/ResourceManager.hpp +++ b/src/ArduinoJson/Memory/ResourceManager.hpp @@ -18,16 +18,7 @@ class VariantData; class VariantWithId; class ResourceManager { - union SlotData { - VariantData variant; -#if ARDUINOJSON_USE_EXTENSIONS - VariantExtension extension; -#endif - }; - public: - constexpr static size_t slotSize = sizeof(SlotData); - ResourceManager(Allocator* allocator = DefaultAllocator::instance()) : allocator_(allocator), overflowed_(false) {} @@ -35,6 +26,9 @@ class ResourceManager { stringPool_.clear(allocator_); variantPools_.clear(allocator_); staticStringsPools_.clear(allocator_); +#if ARDUINOJSON_USE_8_BYTE_POOL + eightBytePools_.clear(allocator_); +#endif } ResourceManager(const ResourceManager&) = delete; @@ -44,6 +38,9 @@ class ResourceManager { swap(a.stringPool_, b.stringPool_); swap(a.variantPools_, b.variantPools_); swap(a.staticStringsPools_, b.staticStringsPools_); +#if ARDUINOJSON_USE_8_BYTE_POOL + swap(a.eightBytePools_, b.eightBytePools_); +#endif swap_(a.allocator_, b.allocator_); swap_(a.overflowed_, b.overflowed_); } @@ -64,10 +61,10 @@ class ResourceManager { void freeVariant(Slot slot); VariantData* getVariant(SlotId id) const; -#if ARDUINOJSON_USE_EXTENSIONS - Slot allocExtension(); - void freeExtension(SlotId slot); - VariantExtension* getExtension(SlotId id) const; +#if ARDUINOJSON_USE_8_BYTE_POOL + Slot allocEightByte(); + void freeEightByte(SlotId slot); + EightByteValue* getEightByte(SlotId id) const; #endif template @@ -136,19 +133,28 @@ class ResourceManager { variantPools_.clear(allocator_); stringPool_.clear(allocator_); staticStringsPools_.clear(allocator_); +#if ARDUINOJSON_USE_8_BYTE_POOL + eightBytePools_.clear(allocator_); +#endif } void shrinkToFit() { variantPools_.shrinkToFit(allocator_); staticStringsPools_.shrinkToFit(allocator_); +#if ARDUINOJSON_USE_8_BYTE_POOL + eightBytePools_.shrinkToFit(allocator_); +#endif } private: Allocator* allocator_; bool overflowed_; StringPool stringPool_; - MemoryPoolList variantPools_; + MemoryPoolList variantPools_; MemoryPoolList staticStringsPools_; +#if ARDUINOJSON_USE_8_BYTE_POOL + MemoryPoolList eightBytePools_; +#endif }; ARDUINOJSON_END_PRIVATE_NAMESPACE diff --git a/src/ArduinoJson/Memory/ResourceManagerImpl.hpp b/src/ArduinoJson/Memory/ResourceManagerImpl.hpp index a701c0d4..c5cf7df2 100644 --- a/src/ArduinoJson/Memory/ResourceManagerImpl.hpp +++ b/src/ArduinoJson/Memory/ResourceManagerImpl.hpp @@ -12,40 +12,41 @@ ARDUINOJSON_BEGIN_PRIVATE_NAMESPACE inline Slot ResourceManager::allocVariant() { - auto p = variantPools_.allocSlot(allocator_); - if (!p) { + auto slot = variantPools_.allocSlot(allocator_); + if (!slot) { overflowed_ = true; return {}; } - return {new (&p->variant) VariantData, p.id()}; + new (slot.ptr()) VariantData(); + return slot; } -inline void ResourceManager::freeVariant(Slot variant) { - variant->clear(this); - variantPools_.freeSlot({alias_cast(variant.ptr()), variant.id()}); +inline void ResourceManager::freeVariant(Slot slot) { + slot->clear(this); + variantPools_.freeSlot(slot); } inline VariantData* ResourceManager::getVariant(SlotId id) const { return reinterpret_cast(variantPools_.getSlot(id)); } -#if ARDUINOJSON_USE_EXTENSIONS -inline Slot ResourceManager::allocExtension() { - auto p = variantPools_.allocSlot(allocator_); - if (!p) { +#if ARDUINOJSON_USE_8_BYTE_POOL +inline Slot ResourceManager::allocEightByte() { + auto slot = eightBytePools_.allocSlot(allocator_); + if (!slot) { overflowed_ = true; return {}; } - return {&p->extension, p.id()}; + return slot; } -inline void ResourceManager::freeExtension(SlotId id) { - auto p = getExtension(id); - variantPools_.freeSlot({reinterpret_cast(p), id}); +inline void ResourceManager::freeEightByte(SlotId id) { + auto p = getEightByte(id); + eightBytePools_.freeSlot({p, id}); } -inline VariantExtension* ResourceManager::getExtension(SlotId id) const { - return &variantPools_.getSlot(id)->extension; +inline EightByteValue* ResourceManager::getEightByte(SlotId id) const { + return eightBytePools_.getSlot(id); } #endif diff --git a/src/ArduinoJson/Object/ObjectImpl.hpp b/src/ArduinoJson/Object/ObjectImpl.hpp index 34da0dab..ab9727c3 100644 --- a/src/ArduinoJson/Object/ObjectImpl.hpp +++ b/src/ArduinoJson/Object/ObjectImpl.hpp @@ -86,7 +86,7 @@ inline VariantData* ObjectData::addPair(VariantData** value, // Returns the size (in bytes) of an object with n members. constexpr size_t sizeofObject(size_t n) { - return 2 * n * ResourceManager::slotSize; + return 2 * n * sizeof(VariantData); } ARDUINOJSON_END_PRIVATE_NAMESPACE diff --git a/src/ArduinoJson/Variant/VariantContent.hpp b/src/ArduinoJson/Variant/VariantContent.hpp index 9c0b820f..7b2994fb 100644 --- a/src/ArduinoJson/Variant/VariantContent.hpp +++ b/src/ArduinoJson/Variant/VariantContent.hpp @@ -16,8 +16,8 @@ ARDUINOJSON_BEGIN_PRIVATE_NAMESPACE enum class VariantTypeBits : uint8_t { OwnedStringBit = 0x01, // 0000 0001 NumberBit = 0x08, // 0000 1000 -#if ARDUINOJSON_USE_EXTENSIONS - ExtensionBit = 0x10, // 0001 0000 +#if ARDUINOJSON_USE_8_BYTE_POOL + EightByteBit = 0x10, // 0001 0000 #endif CollectionMask = 0x60, }; @@ -64,8 +64,8 @@ union VariantContent { char asTinyString[tinyStringMaxLength + 1]; }; -#if ARDUINOJSON_USE_EXTENSIONS -union VariantExtension { +#if ARDUINOJSON_USE_8_BYTE_POOL +union EightByteValue { # if ARDUINOJSON_USE_LONG_LONG uint64_t asUint64; int64_t asInt64; @@ -74,6 +74,9 @@ union VariantExtension { double asDouble; # endif }; + +static_assert(sizeof(EightByteValue) == 8, + "sizeof(EightByteValue) must be 8 bytes"); #endif ARDUINOJSON_END_PRIVATE_NAMESPACE diff --git a/src/ArduinoJson/Variant/VariantData.hpp b/src/ArduinoJson/Variant/VariantData.hpp index e9d7429d..71f8ad6f 100644 --- a/src/ArduinoJson/Variant/VariantData.hpp +++ b/src/ArduinoJson/Variant/VariantData.hpp @@ -53,8 +53,8 @@ class VariantData { template typename TVisitor::result_type accept( TVisitor& visit, const ResourceManager* resources) const { -#if ARDUINOJSON_USE_EXTENSIONS - auto extension = getExtension(resources); +#if ARDUINOJSON_USE_8_BYTE_POOL + auto eightByteValue = getEightByte(resources); #else (void)resources; // silence warning #endif @@ -64,7 +64,7 @@ class VariantData { #if ARDUINOJSON_USE_DOUBLE case VariantType::Double: - return visit.visit(extension->asDouble); + return visit.visit(eightByteValue->asDouble); #endif case VariantType::Array: @@ -95,10 +95,10 @@ class VariantData { #if ARDUINOJSON_USE_LONG_LONG case VariantType::Int64: - return visit.visit(extension->asInt64); + return visit.visit(eightByteValue->asInt64); case VariantType::Uint64: - return visit.visit(extension->asUint64); + return visit.visit(eightByteValue->asUint64); #endif case VariantType::Boolean: @@ -145,8 +145,8 @@ class VariantData { } bool asBoolean(const ResourceManager* resources) const { -#if ARDUINOJSON_USE_EXTENSIONS - auto extension = getExtension(resources); +#if ARDUINOJSON_USE_8_BYTE_POOL + auto eightByteValue = getEightByte(resources); #else (void)resources; // silence warning #endif @@ -160,14 +160,14 @@ class VariantData { return content_.asFloat != 0; #if ARDUINOJSON_USE_DOUBLE case VariantType::Double: - return extension->asDouble != 0; + return eightByteValue->asDouble != 0; #endif case VariantType::Null: return false; #if ARDUINOJSON_USE_LONG_LONG case VariantType::Uint64: case VariantType::Int64: - return extension->asUint64 != 0; + return eightByteValue->asUint64 != 0; #endif default: return true; @@ -193,8 +193,8 @@ class VariantData { template T asFloat(const ResourceManager* resources) const { static_assert(is_floating_point::value, "T must be a floating point"); -#if ARDUINOJSON_USE_EXTENSIONS - auto extension = getExtension(resources); +#if ARDUINOJSON_USE_8_BYTE_POOL + auto eightByteValue = getEightByte(resources); #else (void)resources; // silence warning #endif @@ -208,9 +208,9 @@ class VariantData { return static_cast(content_.asInt32); #if ARDUINOJSON_USE_LONG_LONG case VariantType::Uint64: - return static_cast(extension->asUint64); + return static_cast(eightByteValue->asUint64); case VariantType::Int64: - return static_cast(extension->asInt64); + return static_cast(eightByteValue->asInt64); #endif case VariantType::TinyString: str = content_.asTinyString; @@ -225,7 +225,7 @@ class VariantData { return static_cast(content_.asFloat); #if ARDUINOJSON_USE_DOUBLE case VariantType::Double: - return static_cast(extension->asDouble); + return static_cast(eightByteValue->asDouble); #endif default: return 0.0; @@ -238,8 +238,8 @@ class VariantData { template T asIntegral(const ResourceManager* resources) const { static_assert(is_integral::value, "T must be an integral type"); -#if ARDUINOJSON_USE_EXTENSIONS - auto extension = getExtension(resources); +#if ARDUINOJSON_USE_8_BYTE_POOL + auto eightByteValue = getEightByte(resources); #else (void)resources; // silence warning #endif @@ -253,9 +253,9 @@ class VariantData { return convertNumber(content_.asInt32); #if ARDUINOJSON_USE_LONG_LONG case VariantType::Uint64: - return convertNumber(extension->asUint64); + return convertNumber(eightByteValue->asUint64); case VariantType::Int64: - return convertNumber(extension->asInt64); + return convertNumber(eightByteValue->asInt64); #endif case VariantType::TinyString: str = content_.asTinyString; @@ -270,7 +270,7 @@ class VariantData { return convertNumber(content_.asFloat); #if ARDUINOJSON_USE_DOUBLE case VariantType::Double: - return convertNumber(extension->asDouble); + return convertNumber(eightByteValue->asDouble); #endif default: return 0; @@ -314,8 +314,8 @@ class VariantData { } } -#if ARDUINOJSON_USE_EXTENSIONS - const VariantExtension* getExtension(const ResourceManager* resources) const; +#if ARDUINOJSON_USE_8_BYTE_POOL + const EightByteValue* getEightByte(const ResourceManager* resources) const; #endif VariantData* getElement(size_t index, @@ -378,7 +378,7 @@ class VariantData { template bool isInteger(const ResourceManager* resources) const { #if ARDUINOJSON_USE_LONG_LONG - auto extension = getExtension(resources); + auto eightByteValue = getEightByte(resources); #else (void)resources; // silence warning #endif @@ -391,10 +391,10 @@ class VariantData { #if ARDUINOJSON_USE_LONG_LONG case VariantType::Uint64: - return canConvertNumber(extension->asUint64); + return canConvertNumber(eightByteValue->asUint64); case VariantType::Int64: - return canConvertNumber(extension->asInt64); + return canConvertNumber(eightByteValue->asInt64); #endif default: diff --git a/src/ArduinoJson/Variant/VariantImpl.hpp b/src/ArduinoJson/Variant/VariantImpl.hpp index 1c5ec3a3..7004cd00 100644 --- a/src/ArduinoJson/Variant/VariantImpl.hpp +++ b/src/ArduinoJson/Variant/VariantImpl.hpp @@ -61,9 +61,9 @@ inline void VariantData::clear(ResourceManager* resources) { if (type_ & VariantTypeBits::OwnedStringBit) resources->dereferenceString(content_.asOwnedString->data); -#if ARDUINOJSON_USE_EXTENSIONS - if (type_ & VariantTypeBits::ExtensionBit) - resources->freeExtension(content_.asSlotId); +#if ARDUINOJSON_USE_8_BYTE_POOL + if (type_ & VariantTypeBits::EightByteBit) + resources->freeEightByte(content_.asSlotId); #endif auto collection = asCollection(); @@ -73,12 +73,12 @@ inline void VariantData::clear(ResourceManager* resources) { type_ = VariantType::Null; } -#if ARDUINOJSON_USE_EXTENSIONS -inline const VariantExtension* VariantData::getExtension( +#if ARDUINOJSON_USE_8_BYTE_POOL +inline const EightByteValue* VariantData::getEightByte( const ResourceManager* resources) const { - return type_ & VariantTypeBits::ExtensionBit - ? resources->getExtension(content_.asSlotId) - : nullptr; + return type_ & VariantTypeBits::EightByteBit + ? resources->getEightByte(content_.asSlotId) + : 0; } #endif @@ -101,12 +101,12 @@ enable_if_t VariantData::setFloat( type_ = VariantType::Float; content_.asFloat = valueAsFloat; } else { - auto extension = resources->allocExtension(); - if (!extension) + auto slot = resources->allocEightByte(); + if (!slot) return false; type_ = VariantType::Double; - content_.asSlotId = extension.id(); - extension->asDouble = value; + content_.asSlotId = slot.id(); + slot->asDouble = value; } #else type_ = VariantType::Float; @@ -127,12 +127,12 @@ enable_if_t::value, bool> VariantData::setInteger( } #if ARDUINOJSON_USE_LONG_LONG else { - auto extension = resources->allocExtension(); - if (!extension) + auto slot = resources->allocEightByte(); + if (!slot) return false; type_ = VariantType::Int64; - content_.asSlotId = extension.id(); - extension->asInt64 = value; + content_.asSlotId = slot.id(); + slot->asInt64 = value; } #endif return true; @@ -150,12 +150,12 @@ enable_if_t::value, bool> VariantData::setInteger( } #if ARDUINOJSON_USE_LONG_LONG else { - auto extension = resources->allocExtension(); - if (!extension) + auto slot = resources->allocEightByte(); + if (!slot) return false; type_ = VariantType::Uint64; - content_.asSlotId = extension.id(); - extension->asUint64 = value; + content_.asSlotId = slot.id(); + slot->asUint64 = value; } #endif return true;