diff --git a/extras/conf_test/avr.cpp b/extras/conf_test/avr.cpp index 35105ef40..eeac6c0dd 100644 --- a/extras/conf_test/avr.cpp +++ b/extras/conf_test/avr.cpp @@ -10,8 +10,7 @@ static_assert(ARDUINOJSON_LITTLE_ENDIAN == 1, "ARDUINOJSON_LITTLE_ENDIAN"); static_assert(ARDUINOJSON_USE_DOUBLE == 0, "ARDUINOJSON_USE_DOUBLE"); -static_assert(sizeof(ArduinoJson::detail::VariantData) == 6, - "sizeof(VariantData)"); +static_assert(ArduinoJson::detail::ResourceManager::slotSize == 6, "slot size"); void setup() {} void loop() {} diff --git a/extras/conf_test/esp8266.cpp b/extras/conf_test/esp8266.cpp index 0b3d9f63a..18d0d7536 100644 --- a/extras/conf_test/esp8266.cpp +++ b/extras/conf_test/esp8266.cpp @@ -8,8 +8,7 @@ static_assert(ARDUINOJSON_LITTLE_ENDIAN == 1, "ARDUINOJSON_LITTLE_ENDIAN"); static_assert(ARDUINOJSON_USE_DOUBLE == 1, "ARDUINOJSON_USE_DOUBLE"); -static_assert(sizeof(ArduinoJson::detail::VariantData) == 8, - "sizeof(VariantData)"); +static_assert(ArduinoJson::detail::ResourceManager::slotSize == 8, "slot size"); void setup() {} void loop() {} diff --git a/extras/conf_test/x64.cpp b/extras/conf_test/x64.cpp index 0b6fd16bc..c7ce9ae24 100644 --- a/extras/conf_test/x64.cpp +++ b/extras/conf_test/x64.cpp @@ -8,7 +8,7 @@ static_assert(ARDUINOJSON_LITTLE_ENDIAN == 1, "ARDUINOJSON_LITTLE_ENDIAN"); static_assert(ARDUINOJSON_USE_DOUBLE == 1, "ARDUINOJSON_USE_DOUBLE"); -static_assert(sizeof(ArduinoJson::detail::VariantData) == 16, - "sizeof(VariantData)"); +static_assert(ArduinoJson::detail::ResourceManager::slotSize == 16, + "slot size"); int main() {} diff --git a/extras/conf_test/x86.cpp b/extras/conf_test/x86.cpp index befe73d35..a5f335e85 100644 --- a/extras/conf_test/x86.cpp +++ b/extras/conf_test/x86.cpp @@ -8,7 +8,6 @@ static_assert(ARDUINOJSON_LITTLE_ENDIAN == 1, "ARDUINOJSON_LITTLE_ENDIAN"); static_assert(ARDUINOJSON_USE_DOUBLE == 1, "ARDUINOJSON_USE_DOUBLE"); -static_assert(sizeof(ArduinoJson::detail::VariantData) == 8, - "sizeof(VariantData)"); +static_assert(ArduinoJson::detail::ResourceManager::slotSize == 8, "slot size"); int main() {} diff --git a/extras/tests/ResourceManager/shrinkToFit.cpp b/extras/tests/ResourceManager/shrinkToFit.cpp index a09fd8a3b..d35ee3430 100644 --- a/extras/tests/ResourceManager/shrinkToFit.cpp +++ b/extras/tests/ResourceManager/shrinkToFit.cpp @@ -28,7 +28,7 @@ TEST_CASE("ResourceManager::shrinkToFit()") { REQUIRE(spyingAllocator.log() == AllocatorLog{ Allocate(sizeofPool()), - Reallocate(sizeofPool(), sizeof(VariantData)), + Reallocate(sizeofPool(), sizeofPool(1)), }); } @@ -49,7 +49,7 @@ TEST_CASE("ResourceManager::shrinkToFit()") { REQUIRE(spyingAllocator.log() == AllocatorLog{ - Reallocate(sizeofPool(), sizeof(VariantData)), + Reallocate(sizeofPool(), sizeofPool(1)), Reallocate(sizeofPoolList(ARDUINOJSON_INITIAL_POOL_COUNT * 2), sizeofPoolList(ARDUINOJSON_INITIAL_POOL_COUNT + 1)), }); diff --git a/src/ArduinoJson/Array/ArrayImpl.hpp b/src/ArduinoJson/Array/ArrayImpl.hpp index d09aaa3f2..9599a5eb9 100644 --- a/src/ArduinoJson/Array/ArrayImpl.hpp +++ b/src/ArduinoJson/Array/ArrayImpl.hpp @@ -73,7 +73,7 @@ inline bool ArrayData::addValue(T&& value, ResourceManager* resources) { // Returns the size (in bytes) of an array with n elements. constexpr size_t sizeofArray(size_t n) { - return n * sizeof(VariantData); + return n * ResourceManager::slotSize; } ARDUINOJSON_END_PRIVATE_NAMESPACE diff --git a/src/ArduinoJson/Memory/ResourceManager.hpp b/src/ArduinoJson/Memory/ResourceManager.hpp index 53d425cf9..c8e0d5be0 100644 --- a/src/ArduinoJson/Memory/ResourceManager.hpp +++ b/src/ArduinoJson/Memory/ResourceManager.hpp @@ -26,6 +26,8 @@ class ResourceManager { }; public: + constexpr static size_t slotSize = sizeof(SlotData); + ResourceManager(Allocator* allocator = DefaultAllocator::instance()) : allocator_(allocator), overflowed_(false) {} diff --git a/src/ArduinoJson/Object/ObjectImpl.hpp b/src/ArduinoJson/Object/ObjectImpl.hpp index a5354d1dd..024d77237 100644 --- a/src/ArduinoJson/Object/ObjectImpl.hpp +++ b/src/ArduinoJson/Object/ObjectImpl.hpp @@ -70,7 +70,7 @@ inline VariantData* ObjectData::addMember(TAdaptedString key, // Returns the size (in bytes) of an object with n members. constexpr size_t sizeofObject(size_t n) { - return 2 * n * sizeof(VariantData); + return 2 * n * ResourceManager::slotSize; } ARDUINOJSON_END_PRIVATE_NAMESPACE