From d921cd6d023a1b36a307e87600d6765a52f3d715 Mon Sep 17 00:00:00 2001 From: Benoit Blanchon Date: Mon, 26 Jun 2023 11:58:46 +0200 Subject: [PATCH] Convert "variant functions" to static member functions --- src/ArduinoJson/Array/ArrayImpl.hpp | 4 +- src/ArduinoJson/Array/ElementProxy.hpp | 10 +- src/ArduinoJson/Array/JsonArray.hpp | 10 +- src/ArduinoJson/Array/JsonArrayConst.hpp | 5 +- src/ArduinoJson/Document/JsonDocument.hpp | 10 +- src/ArduinoJson/Object/JsonObject.hpp | 10 +- src/ArduinoJson/Object/JsonObjectConst.hpp | 5 +- src/ArduinoJson/Object/JsonObjectImpl.hpp | 8 +- src/ArduinoJson/Object/MemberProxy.hpp | 12 +- src/ArduinoJson/Object/ObjectImpl.hpp | 4 +- src/ArduinoJson/Serialization/measure.hpp | 2 +- src/ArduinoJson/Serialization/serialize.hpp | 2 +- src/ArduinoJson/Variant/ConverterImpl.hpp | 28 ++- src/ArduinoJson/Variant/JsonVariant.hpp | 14 +- src/ArduinoJson/Variant/JsonVariantConst.hpp | 21 +- src/ArduinoJson/Variant/VariantCompare.hpp | 6 +- src/ArduinoJson/Variant/VariantData.hpp | 234 ++++++++----------- src/ArduinoJson/Variant/VariantRefBase.hpp | 18 +- 18 files changed, 196 insertions(+), 207 deletions(-) diff --git a/src/ArduinoJson/Array/ArrayImpl.hpp b/src/ArduinoJson/Array/ArrayImpl.hpp index 595a2915..0f9990f6 100644 --- a/src/ArduinoJson/Array/ArrayImpl.hpp +++ b/src/ArduinoJson/Array/ArrayImpl.hpp @@ -23,7 +23,9 @@ inline bool ArrayData::copyFrom(const ArrayData& src, for (VariantSlot* s = src.head(); s; s = s->next()) { auto var = addElement(resources); - if (!variantCopyFrom(var, s->data(), resources)) + if (!var) + return false; + if (!var->copyFrom(s->data(), resources)) return false; } return true; diff --git a/src/ArduinoJson/Array/ElementProxy.hpp b/src/ArduinoJson/Array/ElementProxy.hpp index 6f862aa6..fba613fc 100644 --- a/src/ArduinoJson/Array/ElementProxy.hpp +++ b/src/ArduinoJson/Array/ElementProxy.hpp @@ -45,13 +45,15 @@ class ElementProxy : public VariantRefBase>, } FORCE_INLINE VariantData* getData() const { - return variantGetElement(VariantAttorney::getData(upstream_), index_); + return VariantData::getElement(VariantAttorney::getData(upstream_), index_); } FORCE_INLINE VariantData* getOrCreateData() const { - return variantGetOrAddElement( - VariantAttorney::getOrCreateData(upstream_), index_, - VariantAttorney::getResourceManager(upstream_)); + auto data = VariantAttorney::getOrCreateData(upstream_); + if (!data) + return nullptr; + return data->getOrAddElement( + index_, VariantAttorney::getResourceManager(upstream_)); } TUpstream upstream_; diff --git a/src/ArduinoJson/Array/JsonArray.hpp b/src/ArduinoJson/Array/JsonArray.hpp index 859be620..d1675fba 100644 --- a/src/ArduinoJson/Array/JsonArray.hpp +++ b/src/ArduinoJson/Array/JsonArray.hpp @@ -150,7 +150,7 @@ class JsonArray : public detail::VariantOperators { // Returns the depth (nesting level) of the array. // https://arduinojson.org/v6/api/jsonarray/nesting/ FORCE_INLINE size_t nesting() const { - return variantNesting(collectionToVariant(data_)); + return detail::VariantData::nesting(collectionToVariant(data_)); } // Returns the number of elements in the array. @@ -179,7 +179,8 @@ class JsonArray : public detail::VariantOperators { template <> struct Converter : private detail::VariantAttorney { static void toJson(JsonVariantConst src, JsonVariant dst) { - variantCopyFrom(getData(dst), getData(src), getResourceManager(dst)); + detail::VariantData::copy(getData(dst), getData(src), + getResourceManager(dst)); } static JsonArray fromJson(JsonVariant src) { @@ -209,8 +210,9 @@ template template inline typename enable_if::value, JsonArray>::type VariantRefBase::to() const { - return JsonArray(variantToArray(getOrCreateData(), getResourceManager()), - getResourceManager()); + return JsonArray( + VariantData::toArray(getOrCreateData(), getResourceManager()), + getResourceManager()); } ARDUINOJSON_END_PRIVATE_NAMESPACE diff --git a/src/ArduinoJson/Array/JsonArrayConst.hpp b/src/ArduinoJson/Array/JsonArrayConst.hpp index 03874a23..063dc04b 100644 --- a/src/ArduinoJson/Array/JsonArrayConst.hpp +++ b/src/ArduinoJson/Array/JsonArrayConst.hpp @@ -78,7 +78,7 @@ class JsonArrayConst : public detail::VariantOperators { // Returns the depth (nesting level) of the array. // https://arduinojson.org/v6/api/jsonarrayconst/nesting/ FORCE_INLINE size_t nesting() const { - return variantNesting(collectionToVariant(data_)); + return detail::VariantData::nesting(collectionToVariant(data_)); } // Returns the number of elements in the array. @@ -98,7 +98,8 @@ class JsonArrayConst : public detail::VariantOperators { template <> struct Converter : private detail::VariantAttorney { static void toJson(JsonVariantConst src, JsonVariant dst) { - variantCopyFrom(getData(dst), getData(src), getResourceManager(dst)); + detail::VariantData::copy(getData(dst), getData(src), + getResourceManager(dst)); } static JsonArrayConst fromJson(JsonVariantConst src) { diff --git a/src/ArduinoJson/Document/JsonDocument.hpp b/src/ArduinoJson/Document/JsonDocument.hpp index 192533a8..555da34a 100644 --- a/src/ArduinoJson/Document/JsonDocument.hpp +++ b/src/ArduinoJson/Document/JsonDocument.hpp @@ -318,7 +318,7 @@ class JsonDocument : public detail::VariantOperators { // ⚠️ Doesn't release the memory associated with the removed element. // https://arduinojson.org/v6/api/jsondocument/remove/ FORCE_INLINE void remove(size_t index) { - variantRemoveElement(getData(), index, getResourceManager()); + detail::VariantData::removeElement(getData(), index, getResourceManager()); } // Removes a member of the root object. @@ -327,8 +327,8 @@ class JsonDocument : public detail::VariantOperators { template FORCE_INLINE typename detail::enable_if::value>::type remove(TChar* key) { - variantRemoveMember(getData(), detail::adaptString(key), - getResourceManager()); + detail::VariantData::removeMember(getData(), detail::adaptString(key), + getResourceManager()); } // Removes a member of the root object. @@ -338,8 +338,8 @@ class JsonDocument : public detail::VariantOperators { FORCE_INLINE typename detail::enable_if::value>::type remove(const TString& key) { - variantRemoveMember(getData(), detail::adaptString(key), - getResourceManager()); + detail::VariantData::removeMember(getData(), detail::adaptString(key), + getResourceManager()); } FORCE_INLINE operator JsonVariant() { diff --git a/src/ArduinoJson/Object/JsonObject.hpp b/src/ArduinoJson/Object/JsonObject.hpp index d8629692..aa8ab6bf 100644 --- a/src/ArduinoJson/Object/JsonObject.hpp +++ b/src/ArduinoJson/Object/JsonObject.hpp @@ -62,7 +62,7 @@ class JsonObject : public detail::VariantOperators { // Returns the depth (nesting level) of the object. // https://arduinojson.org/v6/api/jsonobject/nesting/ FORCE_INLINE size_t nesting() const { - return variantNesting(collectionToVariant(data_)); + return detail::VariantData::nesting(collectionToVariant(data_)); } // Returns the number of members in the object. @@ -210,7 +210,8 @@ class JsonObject : public detail::VariantOperators { template <> struct Converter : private detail::VariantAttorney { static void toJson(JsonVariantConst src, JsonVariant dst) { - variantCopyFrom(getData(dst), getData(src), getResourceManager(dst)); + detail::VariantData::copy(getData(dst), getData(src), + getResourceManager(dst)); } static JsonObject fromJson(JsonVariant src) { @@ -240,8 +241,9 @@ template template typename enable_if::value, JsonObject>::type VariantRefBase::to() const { - return JsonObject(variantToObject(getOrCreateData(), getResourceManager()), - getResourceManager()); + return JsonObject( + VariantData::toObject(getOrCreateData(), getResourceManager()), + getResourceManager()); } ARDUINOJSON_END_PRIVATE_NAMESPACE diff --git a/src/ArduinoJson/Object/JsonObjectConst.hpp b/src/ArduinoJson/Object/JsonObjectConst.hpp index 330ab3f2..fb4254c1 100644 --- a/src/ArduinoJson/Object/JsonObjectConst.hpp +++ b/src/ArduinoJson/Object/JsonObjectConst.hpp @@ -49,7 +49,7 @@ class JsonObjectConst : public detail::VariantOperators { // Returns the depth (nesting level) of the object. // https://arduinojson.org/v6/api/jsonobjectconst/nesting/ FORCE_INLINE size_t nesting() const { - return variantNesting(collectionToVariant(data_)); + return detail::VariantData::nesting(collectionToVariant(data_)); } // Returns the number of members in the object. @@ -122,7 +122,8 @@ class JsonObjectConst : public detail::VariantOperators { template <> struct Converter : private detail::VariantAttorney { static void toJson(JsonVariantConst src, JsonVariant dst) { - variantCopyFrom(getData(dst), getData(src), getResourceManager(dst)); + detail::VariantData::copy(getData(dst), getData(src), + getResourceManager(dst)); } static JsonObjectConst fromJson(JsonVariantConst src) { diff --git a/src/ArduinoJson/Object/JsonObjectImpl.hpp b/src/ArduinoJson/Object/JsonObjectImpl.hpp index 3b24081a..4e0192e3 100644 --- a/src/ArduinoJson/Object/JsonObjectImpl.hpp +++ b/src/ArduinoJson/Object/JsonObjectImpl.hpp @@ -54,16 +54,16 @@ template template inline typename enable_if::value, bool>::type VariantRefBase::containsKey(const TString& key) const { - return variantGetMember(VariantAttorney::getData(derived()), - adaptString(key)) != 0; + return VariantData::getMember(VariantAttorney::getData(derived()), + adaptString(key)) != 0; } template template inline typename enable_if::value, bool>::type VariantRefBase::containsKey(TChar* key) const { - return variantGetMember(VariantAttorney::getData(derived()), - adaptString(key)) != 0; + return VariantData::getMember(VariantAttorney::getData(derived()), + adaptString(key)) != 0; } template diff --git a/src/ArduinoJson/Object/MemberProxy.hpp b/src/ArduinoJson/Object/MemberProxy.hpp index c7230b56..85a1d293 100644 --- a/src/ArduinoJson/Object/MemberProxy.hpp +++ b/src/ArduinoJson/Object/MemberProxy.hpp @@ -46,14 +46,16 @@ class MemberProxy } FORCE_INLINE VariantData* getData() const { - return variantGetMember(VariantAttorney::getData(upstream_), - adaptString(key_)); + return VariantData::getMember(VariantAttorney::getData(upstream_), + adaptString(key_)); } FORCE_INLINE VariantData* getOrCreateData() const { - return variantGetOrAddMember( - VariantAttorney::getOrCreateData(upstream_), adaptString(key_), - VariantAttorney::getResourceManager(upstream_)); + auto data = VariantAttorney::getOrCreateData(upstream_); + if (!data) + return nullptr; + return data->getOrAddMember(adaptString(key_), + VariantAttorney::getResourceManager(upstream_)); } private: diff --git a/src/ArduinoJson/Object/ObjectImpl.hpp b/src/ArduinoJson/Object/ObjectImpl.hpp index 85db5bcf..db4450f5 100644 --- a/src/ArduinoJson/Object/ObjectImpl.hpp +++ b/src/ArduinoJson/Object/ObjectImpl.hpp @@ -49,7 +49,9 @@ inline bool ObjectData::copyFrom(const ObjectData& src, JsonString key(s->key(), s->ownsKey() ? JsonString::Copied : JsonString::Linked); auto var = addMember(adaptString(key), resources); - if (!variantCopyFrom(var, s->data(), resources)) + if (!var) + return false; + if (!var->copyFrom(s->data(), resources)) return false; } return true; diff --git a/src/ArduinoJson/Serialization/measure.hpp b/src/ArduinoJson/Serialization/measure.hpp index af0045fa..928f38f8 100644 --- a/src/ArduinoJson/Serialization/measure.hpp +++ b/src/ArduinoJson/Serialization/measure.hpp @@ -12,7 +12,7 @@ template