From 03da4aad99bf86e9eb0ef6edeec1366da867f5dc Mon Sep 17 00:00:00 2001 From: Benoit Blanchon Date: Wed, 23 Jul 2025 16:31:19 +0200 Subject: [PATCH] MsgPackSerializer: use iterators to serialize array and objects --- src/ArduinoJson/MsgPack/MsgPackSerializer.hpp | 16 ++++------------ src/ArduinoJson/Variant/VariantImpl.hpp | 4 ---- 2 files changed, 4 insertions(+), 16 deletions(-) diff --git a/src/ArduinoJson/MsgPack/MsgPackSerializer.hpp b/src/ArduinoJson/MsgPack/MsgPackSerializer.hpp index 41063e79..75ea95ae 100644 --- a/src/ArduinoJson/MsgPack/MsgPackSerializer.hpp +++ b/src/ArduinoJson/MsgPack/MsgPackSerializer.hpp @@ -59,12 +59,8 @@ class MsgPackSerializer : public VariantDataVisitor { writeInteger(uint32_t(n)); } - auto slotId = array.head(); - while (slotId != NULL_SLOT) { - auto slot = resources_->getVariant(slotId); - VariantImpl(slot, resources_).accept(*this); - slotId = slot->next; - } + for (auto it = array.createIterator(); !it.done(); it.move()) + it->accept(*this); return bytesWritten(); } @@ -81,12 +77,8 @@ class MsgPackSerializer : public VariantDataVisitor { writeInteger(uint32_t(n)); } - auto slotId = object.head(); - while (slotId != NULL_SLOT) { - auto slot = resources_->getVariant(slotId); - VariantImpl(slot, resources_).accept(*this); - slotId = slot->next; - } + for (auto it = object.createIterator(); !it.done(); it.move()) + it->accept(*this); return bytesWritten(); } diff --git a/src/ArduinoJson/Variant/VariantImpl.hpp b/src/ArduinoJson/Variant/VariantImpl.hpp index 746c8e27..10ec623a 100644 --- a/src/ArduinoJson/Variant/VariantImpl.hpp +++ b/src/ArduinoJson/Variant/VariantImpl.hpp @@ -266,10 +266,6 @@ class VariantImpl { } #endif - SlotId head() const { - return getCollectionData()->head; - } - iterator createIterator() const; VariantData* getElement(size_t index) const;