From 3e1be980d93e47b2a0073efeeb9a9396fd7a83be Mon Sep 17 00:00:00 2001 From: Benoit Blanchon Date: Thu, 7 Dec 2023 14:43:40 +0100 Subject: [PATCH] Fix `function returns incomplete class type` on IAR (issue #2001) --- CHANGELOG.md | 5 ++++ src/ArduinoJson/Variant/VariantImpl.hpp | 30 ++++++++++++++++++++++ src/ArduinoJson/Variant/VariantRefBase.hpp | 20 +++------------ 3 files changed, 39 insertions(+), 16 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 477e6fda..cf6e804d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,11 @@ ArduinoJson: change log ======================= +HEAD +---- + +* Fix warning `function returns incomplete class type` on IAR (issue #2001) + v6.21.4 (2023-12-07) ------- diff --git a/src/ArduinoJson/Variant/VariantImpl.hpp b/src/ArduinoJson/Variant/VariantImpl.hpp index c122a2f4..23edbe61 100644 --- a/src/ArduinoJson/Variant/VariantImpl.hpp +++ b/src/ArduinoJson/Variant/VariantImpl.hpp @@ -110,6 +110,13 @@ inline JsonVariant VariantRefBase::add() const { variantAddElement(getOrCreateData(), getPool())); } +template +template +inline typename enable_if::value, T>::type +VariantRefBase::as() const { + return Converter::fromJson(getVariant()); +} + template inline JsonVariant VariantRefBase::getVariant() const { return JsonVariant(getPool(), getData()); @@ -120,6 +127,29 @@ inline JsonVariant VariantRefBase::getOrCreateVariant() const { return JsonVariant(getPool(), getOrCreateData()); } +template +template +inline typename enable_if::value, bool>::type +VariantRefBase::is() const { + return Converter::checkJson(getVariant()); +} + +template +template +inline bool VariantRefBase::set(const T& value) const { + Converter::toJson(value, getOrCreateVariant()); + MemoryPool* pool = getPool(); + return pool && !pool->overflowed(); +} + +template +template +inline bool VariantRefBase::set(T* value) const { + Converter::toJson(value, getOrCreateVariant()); + MemoryPool* pool = getPool(); + return pool && !pool->overflowed(); +} + template template inline typename enable_if::value, JsonArray>::type diff --git a/src/ArduinoJson/Variant/VariantRefBase.hpp b/src/ArduinoJson/Variant/VariantRefBase.hpp index 321aca09..3f29608a 100644 --- a/src/ArduinoJson/Variant/VariantRefBase.hpp +++ b/src/ArduinoJson/Variant/VariantRefBase.hpp @@ -57,9 +57,7 @@ class VariantRefBase : public VariantTag { // https://arduinojson.org/v6/api/jsonvariant/as/ template FORCE_INLINE typename enable_if::value, T>::type - as() const { - return Converter::fromJson(getVariant()); - } + as() const; template ::value>::type> @@ -92,9 +90,7 @@ class VariantRefBase : public VariantTag { template FORCE_INLINE typename enable_if::value, bool>::type - is() const { - return Converter::checkJson(getVariant()); - } + is() const; // Returns true if the value is of the specified type. // https://arduinojson.org/v6/api/jsonvariant/is/ @@ -123,20 +119,12 @@ class VariantRefBase : public VariantTag { // Copies the specified value. // https://arduinojson.org/v6/api/jsonvariant/set/ template - FORCE_INLINE bool set(const T& value) const { - Converter::toJson(value, getOrCreateVariant()); - MemoryPool* pool = getPool(); - return pool && !pool->overflowed(); - } + FORCE_INLINE bool set(const T& value) const; // Copies the specified value. // https://arduinojson.org/v6/api/jsonvariant/set/ template - FORCE_INLINE bool set(T* value) const { - Converter::toJson(value, getOrCreateVariant()); - MemoryPool* pool = getPool(); - return pool && !pool->overflowed(); - } + FORCE_INLINE bool set(T* value) const; // Returns the size of the array or object. // https://arduinojson.org/v6/api/jsonvariant/size/