diff --git a/src/ArduinoJson.hpp b/src/ArduinoJson.hpp index 5cc06db4..20045dd1 100644 --- a/src/ArduinoJson.hpp +++ b/src/ArduinoJson.hpp @@ -34,16 +34,15 @@ #include "ArduinoJson/Array/ArrayImpl.hpp" #include "ArduinoJson/Array/ElementProxy.hpp" -#include "ArduinoJson/Array/JsonArrayImpl.hpp" #include "ArduinoJson/Array/Utilities.hpp" #include "ArduinoJson/Collection/CollectionImpl.hpp" #include "ArduinoJson/Memory/VariantPoolImpl.hpp" -#include "ArduinoJson/Object/JsonObjectImpl.hpp" #include "ArduinoJson/Object/MemberProxy.hpp" #include "ArduinoJson/Object/ObjectImpl.hpp" #include "ArduinoJson/Variant/ConverterImpl.hpp" #include "ArduinoJson/Variant/JsonVariantCopier.hpp" #include "ArduinoJson/Variant/VariantCompare.hpp" +#include "ArduinoJson/Variant/VariantRefBaseImpl.hpp" #include "ArduinoJson/Json/JsonDeserializer.hpp" #include "ArduinoJson/Json/JsonSerializer.hpp" diff --git a/src/ArduinoJson/Array/JsonArray.hpp b/src/ArduinoJson/Array/JsonArray.hpp index 13418c86..09e45093 100644 --- a/src/ArduinoJson/Array/JsonArray.hpp +++ b/src/ArduinoJson/Array/JsonArray.hpp @@ -176,16 +176,3 @@ class JsonArray : public detail::VariantOperators { }; ARDUINOJSON_END_PUBLIC_NAMESPACE - -ARDUINOJSON_BEGIN_PRIVATE_NAMESPACE - -template -template -inline typename enable_if::value, JsonArray>::type -VariantRefBase::to() const { - return JsonArray( - VariantData::toArray(getOrCreateData(), getResourceManager()), - getResourceManager()); -} - -ARDUINOJSON_END_PRIVATE_NAMESPACE diff --git a/src/ArduinoJson/Array/JsonArrayImpl.hpp b/src/ArduinoJson/Array/JsonArrayImpl.hpp deleted file mode 100644 index 50d59a66..00000000 --- a/src/ArduinoJson/Array/JsonArrayImpl.hpp +++ /dev/null @@ -1,18 +0,0 @@ -// ArduinoJson - https://arduinojson.org -// Copyright © 2014-2023, Benoit BLANCHON -// MIT License - -#pragma once - -#include -#include - -ARDUINOJSON_BEGIN_PRIVATE_NAMESPACE - -template -inline ElementProxy VariantRefBase::operator[]( - size_t index) const { - return ElementProxy(derived(), index); -} - -ARDUINOJSON_END_PRIVATE_NAMESPACE diff --git a/src/ArduinoJson/Object/JsonObject.hpp b/src/ArduinoJson/Object/JsonObject.hpp index 829ec893..9f961184 100644 --- a/src/ArduinoJson/Object/JsonObject.hpp +++ b/src/ArduinoJson/Object/JsonObject.hpp @@ -184,16 +184,3 @@ class JsonObject : public detail::VariantOperators { }; ARDUINOJSON_END_PUBLIC_NAMESPACE - -ARDUINOJSON_BEGIN_PRIVATE_NAMESPACE - -template -template -typename enable_if::value, JsonObject>::type -VariantRefBase::to() const { - return JsonObject( - VariantData::toObject(getOrCreateData(), getResourceManager()), - getResourceManager()); -} - -ARDUINOJSON_END_PRIVATE_NAMESPACE diff --git a/src/ArduinoJson/Object/JsonObjectImpl.hpp b/src/ArduinoJson/Object/JsonObjectImpl.hpp deleted file mode 100644 index 3684228e..00000000 --- a/src/ArduinoJson/Object/JsonObjectImpl.hpp +++ /dev/null @@ -1,44 +0,0 @@ -// ArduinoJson - https://arduinojson.org -// Copyright © 2014-2023, Benoit BLANCHON -// MIT License - -#pragma once - -#include -#include - -ARDUINOJSON_BEGIN_PRIVATE_NAMESPACE - -template -template -inline typename enable_if::value, bool>::type -VariantRefBase::containsKey(const TString& key) const { - return VariantData::getMember(getData(), adaptString(key), - getResourceManager()) != 0; -} - -template -template -inline typename enable_if::value, bool>::type -VariantRefBase::containsKey(TChar* key) const { - return VariantData::getMember(getData(), adaptString(key), - getResourceManager()) != 0; -} - -template -template -inline typename enable_if::value, - MemberProxy>::type -VariantRefBase::operator[](TString* key) const { - return MemberProxy(derived(), key); -} - -template -template -inline typename enable_if::value, - MemberProxy>::type -VariantRefBase::operator[](const TString& key) const { - return MemberProxy(derived(), key); -} - -ARDUINOJSON_END_PRIVATE_NAMESPACE diff --git a/src/ArduinoJson/Variant/JsonVariant.hpp b/src/ArduinoJson/Variant/JsonVariant.hpp index d7b240ab..1cd0ccff 100644 --- a/src/ArduinoJson/Variant/JsonVariant.hpp +++ b/src/ArduinoJson/Variant/JsonVariant.hpp @@ -83,42 +83,3 @@ struct Converter : private detail::VariantAttorney { }; ARDUINOJSON_END_PUBLIC_NAMESPACE - -ARDUINOJSON_BEGIN_PRIVATE_NAMESPACE - -template -template -inline typename enable_if::value, T>::type -VariantRefBase::add() const { - return JsonVariant( - detail::VariantData::addElement(getOrCreateData(), getResourceManager()), - getResourceManager()); -} - -template -inline JsonVariant VariantRefBase::getVariant() const { - return JsonVariant(getData(), getResourceManager()); -} - -template -inline JsonVariant VariantRefBase::getOrCreateVariant() const { - return JsonVariant(getOrCreateData(), getResourceManager()); -} - -template -template -typename enable_if::value, JsonVariant>::type -VariantRefBase::to() const { - auto data = getOrCreateData(); - auto resources = getResourceManager(); - detail::VariantData::setNull(data, resources); - return JsonVariant(data, resources); -} - -template -inline void convertToJson(const VariantRefBase& src, - JsonVariant dst) { - dst.set(src.template as()); -} - -ARDUINOJSON_END_PRIVATE_NAMESPACE diff --git a/src/ArduinoJson/Variant/VariantRefBaseImpl.hpp b/src/ArduinoJson/Variant/VariantRefBaseImpl.hpp new file mode 100644 index 00000000..79cc8fa2 --- /dev/null +++ b/src/ArduinoJson/Variant/VariantRefBaseImpl.hpp @@ -0,0 +1,104 @@ +// ArduinoJson - https://arduinojson.org +// Copyright © 2014-2023, Benoit BLANCHON +// MIT License + +#pragma once + +#include +#include +#include + +ARDUINOJSON_BEGIN_PRIVATE_NAMESPACE + +template +inline void convertToJson(const VariantRefBase& src, + JsonVariant dst) { + dst.set(src.template as()); +} + +template +template +inline typename enable_if::value, T>::type +VariantRefBase::add() const { + return JsonVariant( + detail::VariantData::addElement(getOrCreateData(), getResourceManager()), + getResourceManager()); +} + +template +template +inline typename enable_if::value, bool>::type +VariantRefBase::containsKey(const TString& key) const { + return VariantData::getMember(getData(), adaptString(key), + getResourceManager()) != 0; +} + +template +template +inline typename enable_if::value, bool>::type +VariantRefBase::containsKey(TChar* key) const { + return VariantData::getMember(getData(), adaptString(key), + getResourceManager()) != 0; +} + +template +inline JsonVariant VariantRefBase::getVariant() const { + return JsonVariant(getData(), getResourceManager()); +} + +template +inline JsonVariant VariantRefBase::getOrCreateVariant() const { + return JsonVariant(getOrCreateData(), getResourceManager()); +} + +template +inline ElementProxy VariantRefBase::operator[]( + size_t index) const { + return ElementProxy(derived(), index); +} + +template +template +inline typename enable_if::value, + MemberProxy>::type +VariantRefBase::operator[](TString* key) const { + return MemberProxy(derived(), key); +} + +template +template +inline typename enable_if::value, + MemberProxy>::type +VariantRefBase::operator[](const TString& key) const { + return MemberProxy(derived(), key); +} + +template +template +inline typename enable_if::value, JsonArray>::type +VariantRefBase::to() const { + return JsonArray( + VariantData::toArray(getOrCreateData(), getResourceManager()), + getResourceManager()); +} + +template +template +typename enable_if::value, JsonObject>::type +VariantRefBase::to() const { + return JsonObject( + VariantData::toObject(getOrCreateData(), getResourceManager()), + getResourceManager()); +} + +template +template +typename enable_if::value, JsonVariant>::type +VariantRefBase::to() const { + auto data = getOrCreateData(); + auto resources = getResourceManager(); + detail::VariantData::setNull(data, resources); + return JsonVariant(data, resources); +} + +ARDUINOJSON_END_PRIVATE_NAMESPACE