From c5838a876b598222a46d3afeb530ff4f055e971c Mon Sep 17 00:00:00 2001 From: Benoit Blanchon Date: Thu, 7 Jul 2022 14:16:06 +0200 Subject: [PATCH] Remove `getElement()`, `getOrAddElement()`, `getMember()`, and `getOrAddMember()` --- CHANGELOG.md | 20 ++++ extras/tests/JsonArray/CMakeLists.txt | 1 - extras/tests/JsonArray/get.cpp | 16 ---- src/ArduinoJson/Array/ArrayRef.hpp | 31 +++--- src/ArduinoJson/Array/ElementProxy.hpp | 61 ++++-------- src/ArduinoJson/Document/JsonDocument.hpp | 97 +++++-------------- src/ArduinoJson/Object/MemberProxy.hpp | 64 ++----------- src/ArduinoJson/Object/ObjectFunctions.hpp | 10 -- src/ArduinoJson/Object/ObjectImpl.hpp | 12 +-- src/ArduinoJson/Object/ObjectRef.hpp | 84 ++++------------- src/ArduinoJson/Variant/VariantFunctions.hpp | 22 ++++- src/ArduinoJson/Variant/VariantRef.hpp | 99 ++++---------------- 12 files changed, 142 insertions(+), 375 deletions(-) delete mode 100644 extras/tests/JsonArray/get.cpp diff --git a/CHANGELOG.md b/CHANGELOG.md index 335b7040..fe78ab06 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,26 @@ HEAD * Fix comparison operators for `JsonArray`, `JsonArrayConst`, `JsonObject`, and `JsonObjectConst` * Remove undocumented `accept()` functions * Rename `addElement()` to `add()` +* Remove `getElement()`, `getOrAddElement()`, `getMember()`, and `getOrAddMember()` + +> ### BREAKING CHANGES +> +> This release hides `JsonVariant`'s functions that were only intended for internal use. +> If you were using them in your programs, you must replace with `operator[]` and `to()`, like so: +> +> ```c++ +> // before +> JsonVariant a = variant.getElement(idx); +> JsonVariant b = variant.getOrAddElement(idx); +> JsonVariant c = variant.getMember(key); +> JsonVariant d = variant.getOrAddMember(key); +> +> // after +> JsonVariant a = variant[idx]; +> JsonVariant b = variant[idx].to(); +> JsonVariant c = variant[key]; +> JsonVariant d = variant[key].to(); +> ``` v6.19.4 (2022-04-05) ------- diff --git a/extras/tests/JsonArray/CMakeLists.txt b/extras/tests/JsonArray/CMakeLists.txt index a841c531..9f897992 100644 --- a/extras/tests/JsonArray/CMakeLists.txt +++ b/extras/tests/JsonArray/CMakeLists.txt @@ -9,7 +9,6 @@ add_executable(JsonArrayTests copyArray.cpp createNested.cpp equals.cpp - get.cpp isNull.cpp iterator.cpp memoryUsage.cpp diff --git a/extras/tests/JsonArray/get.cpp b/extras/tests/JsonArray/get.cpp deleted file mode 100644 index 895a2f65..00000000 --- a/extras/tests/JsonArray/get.cpp +++ /dev/null @@ -1,16 +0,0 @@ -// ArduinoJson - https://arduinojson.org -// Copyright © 2014-2022, Benoit BLANCHON -// MIT License - -#include -#include - -TEST_CASE("JsonArray::get()") { - DynamicJsonDocument doc(4096); - deserializeJson(doc, "[1,2,3]"); - JsonArray array = doc.as(); - - SECTION("Overflow") { - REQUIRE(array.getElement(3).isNull()); - } -} diff --git a/src/ArduinoJson/Array/ArrayRef.hpp b/src/ArduinoJson/Array/ArrayRef.hpp index 36d58bbe..80639cb4 100644 --- a/src/ArduinoJson/Array/ArrayRef.hpp +++ b/src/ArduinoJson/Array/ArrayRef.hpp @@ -96,10 +96,6 @@ class ArrayConstRef : public ArrayRefBase, } FORCE_INLINE VariantConstRef operator[](size_t index) const { - return getElementConst(index); - } - - FORCE_INLINE VariantConstRef getElementConst(size_t index) const { return VariantConstRef(_data ? _data->getElement(index) : 0); } }; @@ -152,21 +148,6 @@ class ArrayRef : public ArrayRefBase, return ArrayConstRef(_data) == ArrayConstRef(rhs._data); } - // Internal use - FORCE_INLINE VariantRef getOrAddElement(size_t index) const { - return VariantRef(_pool, _data ? _data->getOrAddElement(index, _pool) : 0); - } - - // Gets the value at the specified index. - FORCE_INLINE VariantRef getElement(size_t index) const { - return VariantRef(_pool, _data ? _data->getElement(index) : 0); - } - - // Gets the value at the specified index. - FORCE_INLINE VariantConstRef getElementConst(size_t index) const { - return VariantConstRef(_data ? _data->getElement(index) : 0); - } - // Removes element at specified position. FORCE_INLINE void remove(iterator it) const { if (!_data) @@ -187,6 +168,18 @@ class ArrayRef : public ArrayRefBase, _data->clear(); } + MemoryPool* getPool() const { + return _pool; + } + + VariantData* getData() const { + return collectionToVariant(_data); + } + + VariantData* getOrCreateData() const { + return collectionToVariant(_data); + } + private: MemoryPool* _pool; }; diff --git a/src/ArduinoJson/Array/ElementProxy.hpp b/src/ArduinoJson/Array/ElementProxy.hpp index fa074c83..58cf729b 100644 --- a/src/ArduinoJson/Array/ElementProxy.hpp +++ b/src/ArduinoJson/Array/ElementProxy.hpp @@ -135,54 +135,12 @@ class ElementProxy : public VariantOperators >, return getUpstreamElementConst().memoryUsage(); } - template - VariantRef getMember(TNestedKey* key) const { - return getUpstreamElement().getMember(key); - } - - template - VariantRef getMember(const TNestedKey& key) const { - return getUpstreamElement().getMember(key); - } - - template - VariantConstRef getMemberConst(TNestedKey* key) const { - return getUpstreamElementConst().getMemberConst(key); - } - - template - VariantConstRef getMemberConst(const TNestedKey& key) const { - return getUpstreamElementConst().getMemberConst(key); - } - - template - VariantRef getOrAddMember(TNestedKey* key) const { - return getOrAddUpstreamElement().getOrAddMember(key); - } - - template - VariantRef getOrAddMember(const TNestedKey& key) const { - return getOrAddUpstreamElement().getOrAddMember(key); - } - VariantRef add() const { return getOrAddUpstreamElement().add(); } using ArrayShortcuts >::add; - VariantRef getElement(size_t index) const { - return getOrAddUpstreamElement().getElement(index); - } - - VariantConstRef getElementConst(size_t index) const { - return getUpstreamElementConst().getElementConst(index); - } - - VariantRef getOrAddElement(size_t index) const { - return getOrAddUpstreamElement().getOrAddElement(index); - } - FORCE_INLINE void remove(size_t index) const { getUpstreamElement().remove(index); } @@ -202,17 +160,30 @@ class ElementProxy : public VariantOperators >, getUpstreamElement().remove(key); } + FORCE_INLINE MemoryPool* getPool() const { + return _array.getPool(); + } + + FORCE_INLINE VariantData* getData() const { + return variantGetElement(_array.getData(), _index); + } + + FORCE_INLINE VariantData* getOrCreateData() const { + return variantGetOrAddElement(_array.getOrCreateData(), _index, + _array.getPool()); + } + private: FORCE_INLINE VariantRef getUpstreamElement() const { - return _array.getElement(_index); + return VariantRef(getPool(), getData()); } FORCE_INLINE VariantConstRef getUpstreamElementConst() const { - return _array.getElementConst(_index); + return VariantConstRef(getData()); } FORCE_INLINE VariantRef getOrAddUpstreamElement() const { - return _array.getOrAddElement(_index); + return VariantRef(getPool(), getOrCreateData()); } friend void convertToJson(const this_type& src, VariantRef dst) { diff --git a/src/ArduinoJson/Document/JsonDocument.hpp b/src/ArduinoJson/Document/JsonDocument.hpp index 51223192..cef3da65 100644 --- a/src/ArduinoJson/Document/JsonDocument.hpp +++ b/src/ArduinoJson/Document/JsonDocument.hpp @@ -100,14 +100,14 @@ class JsonDocument : public VariantOperators { // createNestedArray(const __FlashStringHelper*) template ArrayRef createNestedArray(TChar* key) { - return getOrAddMember(key).template to(); + return operator[](key).template to(); } // createNestedArray(const std::string&) // createNestedArray(const String&) template ArrayRef createNestedArray(const TString& key) { - return getOrAddMember(key).template to(); + return operator[](key).template to(); } ObjectRef createNestedObject() { @@ -119,14 +119,14 @@ class JsonDocument : public VariantOperators { // createNestedObject(const __FlashStringHelper*) template ObjectRef createNestedObject(TChar* key) { - return getOrAddMember(key).template to(); + return operator[](key).template to(); } // createNestedObject(const std::string&) // createNestedObject(const String&) template ObjectRef createNestedObject(const TString& key) { - return getOrAddMember(key).template to(); + return operator[](key).template to(); } // containsKey(char*) const @@ -134,14 +134,14 @@ class JsonDocument : public VariantOperators { // containsKey(const __FlashStringHelper*) const template bool containsKey(TChar* key) const { - return !getMemberConst(key).isUnbound(); + return _data.getMember(adaptString(key)) != 0; } // containsKey(const std::string&) const // containsKey(const String&) const template bool containsKey(const TString& key) const { - return !getMemberConst(key).isUnbound(); + return _data.getMember(adaptString(key)) != 0; } // operator[](const std::string&) @@ -169,7 +169,7 @@ class JsonDocument : public VariantOperators { FORCE_INLINE typename enable_if::value, VariantConstRef>::type operator[](const TString& key) const { - return getMemberConst(key); + return VariantConstRef(_data.getMember(adaptString(key))); } // operator[](char*) const @@ -179,7 +179,7 @@ class JsonDocument : public VariantOperators { FORCE_INLINE typename enable_if::value, VariantConstRef>::type operator[](TChar* key) const { - return getMemberConst(key); + return VariantConstRef(_data.getMember(adaptString(key))); } FORCE_INLINE ElementProxy operator[](size_t index) { @@ -187,73 +187,9 @@ class JsonDocument : public VariantOperators { } FORCE_INLINE VariantConstRef operator[](size_t index) const { - return getElementConst(index); - } - - FORCE_INLINE VariantRef getElement(size_t index) { - return VariantRef(&_pool, _data.getElement(index)); - } - - FORCE_INLINE VariantConstRef getElementConst(size_t index) const { return VariantConstRef(_data.getElement(index)); } - FORCE_INLINE VariantRef getOrAddElement(size_t index) { - return VariantRef(&_pool, _data.getOrAddElement(index, &_pool)); - } - - // JsonVariantConst getMemberConst(char*) const - // JsonVariantConst getMemberConst(const char*) const - // JsonVariantConst getMemberConst(const __FlashStringHelper*) const - template - FORCE_INLINE VariantConstRef getMemberConst(TChar* key) const { - return VariantConstRef(_data.getMember(adaptString(key))); - } - - // JsonVariantConst getMemberConst(const std::string&) const - // JsonVariantConst getMemberConst(const String&) const - template - FORCE_INLINE - typename enable_if::value, VariantConstRef>::type - getMemberConst(const TString& key) const { - return VariantConstRef(_data.getMember(adaptString(key))); - } - - // JsonVariant getMember(char*) - // JsonVariant getMember(const char*) - // JsonVariant getMember(const __FlashStringHelper*) - template - FORCE_INLINE VariantRef getMember(TChar* key) { - return VariantRef(&_pool, _data.getMember(adaptString(key))); - } - - // JsonVariant getMember(const std::string&) - // JsonVariant getMember(const String&) - template - FORCE_INLINE typename enable_if::value, VariantRef>::type - getMember(const TString& key) { - return VariantRef(&_pool, _data.getMember(adaptString(key))); - } - - // getOrAddMember(char*) - // getOrAddMember(const char*) - // getOrAddMember(const __FlashStringHelper*) - template - FORCE_INLINE VariantRef getOrAddMember(TChar* key) { - return VariantRef(&_pool, - _data.getOrAddMember(adaptString(key), &_pool, - getStringStoragePolicy(key))); - } - - // getOrAddMember(const std::string&) - // getOrAddMember(const String&) - template - FORCE_INLINE VariantRef getOrAddMember(const TString& key) { - return VariantRef(&_pool, - _data.getOrAddMember(adaptString(key), &_pool, - getStringStoragePolicy(key))); - } - FORCE_INLINE VariantRef add() { return VariantRef(&_pool, _data.addElement(&_pool)); } @@ -331,6 +267,23 @@ class JsonDocument : public VariantOperators { private: JsonDocument(const JsonDocument&); JsonDocument& operator=(const JsonDocument&); + + public: + MemoryPool* getPool() { + return &_pool; + } + + VariantData* getData() { + return &_data; + } + + const VariantData* getData() const { + return &_data; + } + + VariantData* getOrCreateData() { + return &_data; + } }; inline void convertToJson(const JsonDocument& src, VariantRef dst) { diff --git a/src/ArduinoJson/Object/MemberProxy.hpp b/src/ArduinoJson/Object/MemberProxy.hpp index 81f3f08d..7aa36fa0 100644 --- a/src/ArduinoJson/Object/MemberProxy.hpp +++ b/src/ArduinoJson/Object/MemberProxy.hpp @@ -160,74 +160,30 @@ class MemberProxy : public VariantOperators >, using ArrayShortcuts >::add; - FORCE_INLINE VariantRef getElement(size_t index) const { - return getUpstreamMember().getElement(index); + FORCE_INLINE MemoryPool *getPool() const { + return _object.getPool(); } - FORCE_INLINE VariantConstRef getElementConst(size_t index) const { - return getUpstreamMemberConst().getElementConst(index); + FORCE_INLINE VariantData *getData() const { + return variantGetMember(_object.getData(), adaptString(_key)); } - FORCE_INLINE VariantRef getOrAddElement(size_t index) const { - return getOrAddUpstreamMember().getOrAddElement(index); - } - - // getMember(char*) const - // getMember(const char*) const - // getMember(const __FlashStringHelper*) const - template - FORCE_INLINE VariantRef getMember(TChar *key) const { - return getUpstreamMember().getMember(key); - } - - // getMember(const std::string&) const - // getMember(const String&) const - template - FORCE_INLINE VariantRef getMember(const TString &key) const { - return getUpstreamMember().getMember(key); - } - - // getMemberConst(char*) const - // getMemberConst(const char*) const - // getMemberConst(const __FlashStringHelper*) const - template - FORCE_INLINE VariantConstRef getMemberConst(TChar *key) const { - return getUpstreamMemberConst().getMemberConst(key); - } - - // getMemberConst(const std::string&) const - // getMemberConst(const String&) const - template - FORCE_INLINE VariantConstRef getMemberConst(const TString &key) const { - return getUpstreamMemberConst().getMemberConst(key); - } - - // getOrAddMember(char*) const - // getOrAddMember(const char*) const - // getOrAddMember(const __FlashStringHelper*) const - template - FORCE_INLINE VariantRef getOrAddMember(TChar *key) const { - return getOrAddUpstreamMember().getOrAddMember(key); - } - - // getOrAddMember(const std::string&) const - // getOrAddMember(const String&) const - template - FORCE_INLINE VariantRef getOrAddMember(const TString &key) const { - return getOrAddUpstreamMember().getOrAddMember(key); + FORCE_INLINE VariantData *getOrCreateData() const { + return variantGetOrAddMember(_object.getOrCreateData(), _key, + _object.getPool()); } private: FORCE_INLINE VariantRef getUpstreamMember() const { - return _object.getMember(_key); + return VariantRef(getPool(), getData()); } FORCE_INLINE VariantConstRef getUpstreamMemberConst() const { - return _object.getMemberConst(_key); + return VariantConstRef(getData()); } FORCE_INLINE VariantRef getOrAddUpstreamMember() const { - return _object.getOrAddMember(_key); + return VariantRef(getPool(), getOrCreateData()); } friend void convertToJson(const this_type &src, VariantRef dst) { diff --git a/src/ArduinoJson/Object/ObjectFunctions.hpp b/src/ArduinoJson/Object/ObjectFunctions.hpp index 46412048..35549a55 100644 --- a/src/ArduinoJson/Object/ObjectFunctions.hpp +++ b/src/ArduinoJson/Object/ObjectFunctions.hpp @@ -22,14 +22,4 @@ void objectRemove(CollectionData *obj, TAdaptedString key) { return; obj->removeMember(key); } - -template -inline VariantData *objectGetOrAddMember(CollectionData *obj, - TAdaptedString key, MemoryPool *pool, - TStoragePolicy storage_policy) { - if (!obj) - return 0; - - return obj->getOrAddMember(key, pool, storage_policy); -} } // namespace ARDUINOJSON_NAMESPACE diff --git a/src/ArduinoJson/Object/ObjectImpl.hpp b/src/ArduinoJson/Object/ObjectImpl.hpp index ba327628..da2857e1 100644 --- a/src/ArduinoJson/Object/ObjectImpl.hpp +++ b/src/ArduinoJson/Object/ObjectImpl.hpp @@ -13,41 +13,41 @@ template template inline ArrayRef ObjectShortcuts::createNestedArray( const TString& key) const { - return impl()->getOrAddMember(key).template to(); + return impl()->operator[](key).template to(); } template template inline ArrayRef ObjectShortcuts::createNestedArray(TChar* key) const { - return impl()->getOrAddMember(key).template to(); + return impl()->operator[](key).template to(); } template template inline ObjectRef ObjectShortcuts::createNestedObject( const TString& key) const { - return impl()->getOrAddMember(key).template to(); + return impl()->operator[](key).template to(); } template template inline ObjectRef ObjectShortcuts::createNestedObject( TChar* key) const { - return impl()->getOrAddMember(key).template to(); + return impl()->operator[](key).template to(); } template template inline typename enable_if::value, bool>::type ObjectShortcuts::containsKey(const TString& key) const { - return !impl()->getMemberConst(key).isUnbound(); + return variantGetMember(impl()->getData(), adaptString(key)) != 0; } template template inline typename enable_if::value, bool>::type ObjectShortcuts::containsKey(TChar* key) const { - return !impl()->getMemberConst(key).isUnbound(); + return variantGetMember(impl()->getData(), adaptString(key)) != 0; } template diff --git a/src/ArduinoJson/Object/ObjectRef.hpp b/src/ArduinoJson/Object/ObjectRef.hpp index c8b25304..2de45d84 100644 --- a/src/ArduinoJson/Object/ObjectRef.hpp +++ b/src/ArduinoJson/Object/ObjectRef.hpp @@ -71,7 +71,7 @@ class ObjectConstRef : public ObjectRefBase, // containsKey(const String&) const template FORCE_INLINE bool containsKey(const TString& key) const { - return !getMemberConst(key).isUnbound(); + return objectGetMember(_data, adaptString(key)) != 0; } // containsKey(char*) const @@ -79,22 +79,7 @@ class ObjectConstRef : public ObjectRefBase, // containsKey(const __FlashStringHelper*) const template FORCE_INLINE bool containsKey(TChar* key) const { - return !getMemberConst(key).isUnbound(); - } - - // getMemberConst(const std::string&) const - // getMemberConst(const String&) const - template - FORCE_INLINE VariantConstRef getMemberConst(const TString& key) const { - return VariantConstRef(objectGetMember(_data, adaptString(key))); - } - - // getMemberConst(char*) const - // getMemberConst(const char*) const - // getMemberConst(const __FlashStringHelper*) const - template - FORCE_INLINE VariantConstRef getMemberConst(TChar* key) const { - return VariantConstRef(objectGetMember(_data, adaptString(key))); + return objectGetMember(_data, adaptString(key)) != 0; } // operator[](const std::string&) const @@ -103,7 +88,7 @@ class ObjectConstRef : public ObjectRefBase, FORCE_INLINE typename enable_if::value, VariantConstRef>::type operator[](const TString& key) const { - return getMemberConst(key); + return VariantConstRef(objectGetMember(_data, adaptString(key))); } // operator[](char*) const @@ -113,7 +98,7 @@ class ObjectConstRef : public ObjectRefBase, FORCE_INLINE typename enable_if::value, VariantConstRef>::type operator[](TChar* key) const { - return getMemberConst(key); + return VariantConstRef(objectGetMember(_data, adaptString(key))); } FORCE_INLINE bool operator==(ObjectConstRef rhs) const { @@ -178,55 +163,6 @@ class ObjectRef : public ObjectRefBase, return _data->copyFrom(*src._data, _pool); } - // getMember(const std::string&) const - // getMember(const String&) const - template - FORCE_INLINE VariantRef getMember(const TString& key) const { - return VariantRef(_pool, objectGetMember(_data, adaptString(key))); - } - - // getMember(char*) const - // getMember(const char*) const - // getMember(const __FlashStringHelper*) const - template - FORCE_INLINE VariantRef getMember(TChar* key) const { - return VariantRef(_pool, objectGetMember(_data, adaptString(key))); - } - - // getMemberConst(const std::string&) const - // getMemberConst(const String&) const - template - FORCE_INLINE VariantConstRef getMemberConst(const TString& key) const { - return VariantConstRef(objectGetMember(_data, adaptString(key))); - } - - // getMemberConst(char*) const - // getMemberConst(const char*) const - // getMemberConst(const __FlashStringHelper*) const - template - FORCE_INLINE VariantConstRef getMemberConst(TChar* key) const { - return VariantConstRef(objectGetMember(_data, adaptString(key))); - } - - // getOrAddMember(const std::string&) const - // getOrAddMember(const String&) const - template - FORCE_INLINE VariantRef getOrAddMember(const TString& key) const { - return VariantRef(_pool, - objectGetOrAddMember(_data, adaptString(key), _pool, - getStringStoragePolicy(key))); - } - - // getOrAddMember(char*) const - // getOrAddMember(const char*) const - // getOrAddMember(const __FlashStringHelper*) const - template - FORCE_INLINE VariantRef getOrAddMember(TChar* key) const { - return VariantRef(_pool, - objectGetOrAddMember(_data, adaptString(key), _pool, - getStringStoragePolicy(key))); - } - FORCE_INLINE bool operator==(ObjectRef rhs) const { return ObjectConstRef(_data) == ObjectConstRef(rhs._data); } @@ -252,6 +188,18 @@ class ObjectRef : public ObjectRefBase, objectRemove(_data, adaptString(key)); } + MemoryPool* getPool() const { + return _pool; + } + + VariantData* getData() const { + return collectionToVariant(_data); + } + + VariantData* getOrCreateData() const { + return collectionToVariant(_data); + } + private: MemoryPool* _pool; }; diff --git a/src/ArduinoJson/Variant/VariantFunctions.hpp b/src/ArduinoJson/Variant/VariantFunctions.hpp index 16e9b403..540b4961 100644 --- a/src/ArduinoJson/Variant/VariantFunctions.hpp +++ b/src/ArduinoJson/Variant/VariantFunctions.hpp @@ -59,6 +59,10 @@ inline CollectionData *variantToObject(VariantData *var) { return &var->toObject(); } +inline VariantData *variantGetElement(const VariantData *var, size_t index) { + return var != 0 ? var->getElement(index) : 0; +} + inline NO_INLINE VariantData *variantAddElement(VariantData *var, MemoryPool *pool) { return var != 0 ? var->addElement(pool) : 0; @@ -70,9 +74,18 @@ inline NO_INLINE VariantData *variantGetOrAddElement(VariantData *var, return var != 0 ? var->getOrAddElement(index, pool) : 0; } +template +VariantData *variantGetMember(const VariantData *var, AdaptedString key) { + if (!var) + return 0; + return var->getMember(key); +} + +// TODO: this function is inconsitent with the others: +// it should take an adapted string template -NO_INLINE VariantData *variantGetOrAddMember(VariantData *var, TChar *key, - MemoryPool *pool) { +VariantData *variantGetOrAddMember(VariantData *var, TChar *key, + MemoryPool *pool) { if (!var) return 0; return var->getOrAddMember(adaptString(key), pool, @@ -80,9 +93,8 @@ NO_INLINE VariantData *variantGetOrAddMember(VariantData *var, TChar *key, } template -NO_INLINE VariantData *variantGetOrAddMember(VariantData *var, - const TString &key, - MemoryPool *pool) { +VariantData *variantGetOrAddMember(VariantData *var, const TString &key, + MemoryPool *pool) { if (!var) return 0; return var->getOrAddMember(adaptString(key), pool, diff --git a/src/ArduinoJson/Variant/VariantRef.hpp b/src/ArduinoJson/Variant/VariantRef.hpp index bffd3114..5121f79e 100644 --- a/src/ArduinoJson/Variant/VariantRef.hpp +++ b/src/ArduinoJson/Variant/VariantRef.hpp @@ -116,27 +116,8 @@ class VariantConstRef : public VariantRefBase, return as(); } - FORCE_INLINE VariantConstRef getElementConst(size_t index) const { - return VariantConstRef(_data != 0 ? _data->getElement(index) : 0); - } - FORCE_INLINE VariantConstRef operator[](size_t index) const { - return getElementConst(index); - } - - // getMemberConst(const std::string&) const - // getMemberConst(const String&) const - template - FORCE_INLINE VariantConstRef getMemberConst(const TString &key) const { - return VariantConstRef(_data ? _data->getMember(adaptString(key)) : 0); - } - - // getMemberConst(char*) const - // getMemberConst(const char*) const - // getMemberConst(const __FlashStringHelper*) const - template - FORCE_INLINE VariantConstRef getMemberConst(TChar *key) const { - return VariantConstRef(_data ? _data->getMember(adaptString(key)) : 0); + return VariantConstRef(variantGetElement(_data, index)); } // operator[](const std::string&) const @@ -145,7 +126,7 @@ class VariantConstRef : public VariantRefBase, FORCE_INLINE typename enable_if::value, VariantConstRef>::type operator[](const TString &key) const { - return getMemberConst(key); + return VariantConstRef(variantGetMember(_data, adaptString(key))); } // operator[](char*) const @@ -155,7 +136,11 @@ class VariantConstRef : public VariantRefBase, FORCE_INLINE typename enable_if::value, VariantConstRef>::type operator[](TChar *key) const { - return getMemberConst(key); + return VariantConstRef(variantGetMember(_data, adaptString(key))); + } + + const VariantData *getData() const { + return _data; } }; @@ -275,62 +260,6 @@ class VariantRef : public VariantRefBase, using ArrayShortcuts::add; - FORCE_INLINE VariantConstRef getElementConst(size_t index) const { - return VariantConstRef(_data != 0 ? _data->getElement(index) : 0); - } - - FORCE_INLINE VariantRef getOrAddElement(size_t index) const { - return VariantRef(_pool, variantGetOrAddElement(_data, index, _pool)); - } - - // getMember(const char*) const - // getMember(const __FlashStringHelper*) const - template - FORCE_INLINE VariantRef getMember(TChar *key) const { - return VariantRef(_pool, - _data != 0 ? _data->getMember(adaptString(key)) : 0); - } - - // getMember(const std::string&) const - // getMember(const String&) const - template - FORCE_INLINE typename enable_if::value, VariantRef>::type - getMember(const TString &key) const { - return VariantRef(_pool, - _data != 0 ? _data->getMember(adaptString(key)) : 0); - } - - // getMemberConst(const char*) const - // getMemberConst(const __FlashStringHelper*) const - template - FORCE_INLINE VariantConstRef getMemberConst(TChar *key) const { - return VariantConstRef(_data ? _data->getMember(adaptString(key)) : 0); - } - - // getMemberConst(const std::string&) const - // getMemberConst(const String&) const - template - FORCE_INLINE - typename enable_if::value, VariantConstRef>::type - getMemberConst(const TString &key) const { - return VariantConstRef(_data ? _data->getMember(adaptString(key)) : 0); - } - - // getOrAddMember(char*) const - // getOrAddMember(const char*) const - // getOrAddMember(const __FlashStringHelper*) const - template - FORCE_INLINE VariantRef getOrAddMember(TChar *key) const { - return VariantRef(_pool, variantGetOrAddMember(_data, key, _pool)); - } - - // getOrAddMember(const std::string&) const - // getOrAddMember(const String&) const - template - FORCE_INLINE VariantRef getOrAddMember(const TString &key) const { - return VariantRef(_pool, variantGetOrAddMember(_data, key, _pool)); - } - FORCE_INLINE void remove(size_t index) const { if (_data) _data->remove(index); @@ -356,13 +285,25 @@ class VariantRef : public VariantRefBase, inline void shallowCopy(VariantConstRef target) { if (!_data) return; - const VariantData *targetData = getData(target); + const VariantData *targetData = target.getData(); if (targetData) *_data = *targetData; else _data->setNull(); } + MemoryPool *getPool() const { + return _pool; + } + + VariantData *getData() const { + return _data; + } + + VariantData *getOrCreateData() const { + return _data; + } + private: MemoryPool *_pool;