From b184af6d006e94d4a76e1943c6d3afa7e195a0f7 Mon Sep 17 00:00:00 2001 From: Benoit Blanchon Date: Tue, 29 Jan 2019 17:00:11 +0100 Subject: [PATCH] User can now use a JsonString as a key or a value --- CHANGELOG.md | 1 + src/ArduinoJson/Collection/CollectionData.hpp | 20 +-- src/ArduinoJson/Collection/CollectionImpl.hpp | 22 +-- .../Deserialization/deserialize.hpp | 19 +- src/ArduinoJson/Document/JsonDocument.hpp | 134 ++++++++------ src/ArduinoJson/Misc/SerializedValue.hpp | 4 +- src/ArduinoJson/Object/MemberProxy.hpp | 69 ++++---- src/ArduinoJson/Object/ObjectFunctions.hpp | 16 +- src/ArduinoJson/Object/ObjectImpl.hpp | 19 +- src/ArduinoJson/Object/ObjectRef.hpp | 167 +++++++++--------- src/ArduinoJson/Object/ObjectShortcuts.hpp | 72 ++++---- src/ArduinoJson/Object/Pair.hpp | 4 +- .../Operators/VariantComparisons.hpp | 16 +- ...ngWrapper.hpp => ArduinoStringAdapter.hpp} | 12 +- ...gWrapper.hpp => ConstRamStringAdapter.hpp} | 22 ++- ...ringWrapper.hpp => FlashStringAdapter.hpp} | 16 +- ...StringWrapper.hpp => RamStringAdapter.hpp} | 18 +- ...rapper.hpp => SizedFlashStringAdapter.hpp} | 14 +- ...gWrapper.hpp => SizedRamStringAdapter.hpp} | 12 +- ...StringWrapper.hpp => StlStringAdapter.hpp} | 12 +- src/ArduinoJson/Strings/String.hpp | 37 +++- ...{StringWrappers.hpp => StringAdapters.hpp} | 14 +- src/ArduinoJson/Variant/SlotFunctions.hpp | 23 ++- src/ArduinoJson/Variant/VariantData.hpp | 12 +- src/ArduinoJson/Variant/VariantFunctions.hpp | 12 +- src/ArduinoJson/Variant/VariantImpl.hpp | 22 +-- src/ArduinoJson/Variant/VariantRef.hpp | 55 +++--- test/JsonObject/subscript.cpp | 12 ++ test/JsonVariant/set.cpp | 20 +++ 29 files changed, 500 insertions(+), 376 deletions(-) rename src/ArduinoJson/Strings/{ArduinoStringWrapper.hpp => ArduinoStringAdapter.hpp} (81%) rename src/ArduinoJson/Strings/{ConstRamStringWrapper.hpp => ConstRamStringAdapter.hpp} (62%) rename src/ArduinoJson/Strings/{FlashStringWrapper.hpp => FlashStringAdapter.hpp} (75%) rename src/ArduinoJson/Strings/{RamStringWrapper.hpp => RamStringAdapter.hpp} (59%) rename src/ArduinoJson/Strings/{SizedFlashStringWrapper.hpp => SizedFlashStringAdapter.hpp} (72%) rename src/ArduinoJson/Strings/{SizedRamStringWrapper.hpp => SizedRamStringAdapter.hpp} (74%) rename src/ArduinoJson/Strings/{StlStringWrapper.hpp => StlStringAdapter.hpp} (77%) rename src/ArduinoJson/Strings/{StringWrappers.hpp => StringAdapters.hpp} (69%) diff --git a/CHANGELOG.md b/CHANGELOG.md index 37e78caa..cd676a22 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -28,6 +28,7 @@ HEAD * `JsonDocument` now support the same operations as `JsonVariant`. Calling `JsonDocument::as()` is not required anymore. * Fixed example `JsonHttpClient.ino` +* User can now use a `JsonString` as a key or a value > ### BREAKING CHANGES > diff --git a/src/ArduinoJson/Collection/CollectionData.hpp b/src/ArduinoJson/Collection/CollectionData.hpp index 0b29647b..34bc4f67 100644 --- a/src/ArduinoJson/Collection/CollectionData.hpp +++ b/src/ArduinoJson/Collection/CollectionData.hpp @@ -24,13 +24,13 @@ class CollectionData { VariantData *add(MemoryPool *pool); - template - VariantData *add(TKey key, MemoryPool *pool); + template + VariantData *add(TAdaptedString key, MemoryPool *pool); void clear(); - template - bool containsKey(const TKey &key) const; + template + bool containsKey(const TAdaptedString &key) const; bool copyFrom(const CollectionData &src, MemoryPool *pool); @@ -39,8 +39,8 @@ class CollectionData { VariantData *get(size_t index) const; - template - VariantData *get(TKey key) const; + template + VariantData *get(TAdaptedString key) const; VariantSlot *head() const { return _head; @@ -48,8 +48,8 @@ class CollectionData { void remove(size_t index); - template - void remove(TKey key) { + template + void remove(TAdaptedString key) { remove(getSlot(key)); } @@ -62,8 +62,8 @@ class CollectionData { private: VariantSlot *getSlot(size_t index) const; - template - VariantSlot *getSlot(TKey key) const; + template + VariantSlot *getSlot(TAdaptedString key) const; VariantSlot *getPreviousSlot(VariantSlot *) const; }; diff --git a/src/ArduinoJson/Collection/CollectionImpl.hpp b/src/ArduinoJson/Collection/CollectionImpl.hpp index 8b273379..d7a7e4d5 100644 --- a/src/ArduinoJson/Collection/CollectionImpl.hpp +++ b/src/ArduinoJson/Collection/CollectionImpl.hpp @@ -29,8 +29,8 @@ inline VariantData* CollectionData::add(MemoryPool* pool) { return addSlot(pool)->data(); } -template -inline VariantData* CollectionData::add(TKey key, MemoryPool* pool) { +template +inline VariantData* CollectionData::add(TAdaptedString key, MemoryPool* pool) { VariantSlot* slot = addSlot(pool); if (!slotSetKey(slot, key, pool)) return 0; return slot->data(); @@ -41,8 +41,8 @@ inline void CollectionData::clear() { _tail = 0; } -template -inline bool CollectionData::containsKey(const TKey& key) const { +template +inline bool CollectionData::containsKey(const TAdaptedString& key) const { return getSlot(key) != 0; } @@ -53,9 +53,9 @@ inline bool CollectionData::copyFrom(const CollectionData& src, VariantData* var; if (s->key() != 0) { if (s->ownsKey()) - var = add(RamStringWrapper(s->key()), pool); + var = add(RamStringAdapter(s->key()), pool); else - var = add(ConstRamStringWrapper(s->key()), pool); + var = add(ConstRamStringAdapter(s->key()), pool); } else { var = add(pool); } @@ -69,7 +69,7 @@ inline bool CollectionData::equalsObject(const CollectionData& other) const { size_t count = 0; for (VariantSlot* slot = _head; slot; slot = slot->next()) { VariantData* v1 = slot->data(); - VariantData* v2 = other.get(wrapString(slot->key())); + VariantData* v2 = other.get(adaptString(slot->key())); if (!variantEquals(v1, v2)) return false; count++; } @@ -88,8 +88,8 @@ inline bool CollectionData::equalsArray(const CollectionData& other) const { } } -template -inline VariantSlot* CollectionData::getSlot(TKey key) const { +template +inline VariantSlot* CollectionData::getSlot(TAdaptedString key) const { VariantSlot* slot = _head; while (slot) { if (key.equals(slot->key())) break; @@ -112,8 +112,8 @@ inline VariantSlot* CollectionData::getPreviousSlot(VariantSlot* target) const { return 0; } -template -inline VariantData* CollectionData::get(TKey key) const { +template +inline VariantData* CollectionData::get(TAdaptedString key) const { VariantSlot* slot = getSlot(key); return slot ? slot->data() : 0; } diff --git a/src/ArduinoJson/Deserialization/deserialize.hpp b/src/ArduinoJson/Deserialization/deserialize.hpp index c3a4fa69..5177edfb 100644 --- a/src/ArduinoJson/Deserialization/deserialize.hpp +++ b/src/ArduinoJson/Deserialization/deserialize.hpp @@ -23,8 +23,8 @@ TDeserializer makeDeserializer(MemoryPool &pool, return TDeserializer(pool, reader, writer, nestingLimit); } -// DeserializationError deserialize(JsonDocument& doc, TString input); -// TString = const std::string&, const String& +// deserialize(JsonDocument&, const std::string&); +// deserialize(JsonDocument&, const String&); template