diff --git a/CHANGELOG.md b/CHANGELOG.md index 8c24619f..cb318ae7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,7 @@ HEAD ---- * Improve error messages when using `char` or `char*` (issue #2043) -* Reduce `serializeJson()`'s size and stack usage (issue #2046) +* Reduce stack consumption (issue #2046) * Fix compatibility with GCC 4.8 (issue #2045) v7.0.2 (2024-01-19) diff --git a/src/ArduinoJson/Array/ElementProxy.hpp b/src/ArduinoJson/Array/ElementProxy.hpp index 2ae26624..f36b68ea 100644 --- a/src/ArduinoJson/Array/ElementProxy.hpp +++ b/src/ArduinoJson/Array/ElementProxy.hpp @@ -22,25 +22,25 @@ class ElementProxy : public VariantRefBase>, ElementProxy(const ElementProxy& src) : upstream_(src.upstream_), index_(src.index_) {} - FORCE_INLINE ElementProxy& operator=(const ElementProxy& src) { + ElementProxy& operator=(const ElementProxy& src) { this->set(src); return *this; } template - FORCE_INLINE ElementProxy& operator=(const T& src) { + ElementProxy& operator=(const T& src) { this->set(src); return *this; } template - FORCE_INLINE ElementProxy& operator=(T* src) { + ElementProxy& operator=(T* src) { this->set(src); return *this; } private: - FORCE_INLINE ResourceManager* getResourceManager() const { + ResourceManager* getResourceManager() const { return VariantAttorney::getResourceManager(upstream_); } @@ -50,7 +50,7 @@ class ElementProxy : public VariantRefBase>, VariantAttorney::getResourceManager(upstream_)); } - FORCE_INLINE VariantData* getOrCreateData() const { + VariantData* getOrCreateData() const { auto data = VariantAttorney::getOrCreateData(upstream_); if (!data) return nullptr; diff --git a/src/ArduinoJson/Array/JsonArray.hpp b/src/ArduinoJson/Array/JsonArray.hpp index 069c353d..29233630 100644 --- a/src/ArduinoJson/Array/JsonArray.hpp +++ b/src/ArduinoJson/Array/JsonArray.hpp @@ -20,11 +20,10 @@ class JsonArray : public detail::VariantOperators { typedef JsonArrayIterator iterator; // Constructs an unbound reference. - FORCE_INLINE JsonArray() : data_(0), resources_(0) {} + JsonArray() : data_(0), resources_(0) {} // INTERNAL USE ONLY - FORCE_INLINE JsonArray(detail::ArrayData* data, - detail::ResourceManager* resources) + JsonArray(detail::ArrayData* data, detail::ResourceManager* resources) : data_(data), resources_(resources) {} // Returns a JsonVariant pointing to the array. @@ -63,20 +62,20 @@ class JsonArray : public detail::VariantOperators { // Appends a value to the array. // https://arduinojson.org/v7/api/jsonarray/add/ template - FORCE_INLINE bool add(const T& value) const { + bool add(const T& value) const { return add().set(value); } // Appends a value to the array. // https://arduinojson.org/v7/api/jsonarray/add/ template - FORCE_INLINE bool add(T* value) const { + bool add(T* value) const { return add().set(value); } // Returns an iterator to the first element of the array. // https://arduinojson.org/v7/api/jsonarray/begin/ - FORCE_INLINE iterator begin() const { + iterator begin() const { if (!data_) return iterator(); return iterator(data_->createIterator(resources_), resources_); @@ -84,13 +83,13 @@ class JsonArray : public detail::VariantOperators { // Returns an iterator following the last element of the array. // https://arduinojson.org/v7/api/jsonarray/end/ - FORCE_INLINE iterator end() const { + iterator end() const { return iterator(); } // Copies an array. // https://arduinojson.org/v7/api/jsonarray/set/ - FORCE_INLINE bool set(JsonArrayConst src) const { + bool set(JsonArrayConst src) const { if (!data_) return false; @@ -105,13 +104,13 @@ class JsonArray : public detail::VariantOperators { // Removes the element at the specified iterator. // https://arduinojson.org/v7/api/jsonarray/remove/ - FORCE_INLINE void remove(iterator it) const { + void remove(iterator it) const { detail::ArrayData::remove(data_, it.iterator_, resources_); } // Removes the element at the specified index. // https://arduinojson.org/v7/api/jsonarray/remove/ - FORCE_INLINE void remove(size_t index) const { + void remove(size_t index) const { detail::ArrayData::removeElement(data_, index, resources_); } @@ -123,7 +122,7 @@ class JsonArray : public detail::VariantOperators { // Gets or sets the element at the specified index. // https://arduinojson.org/v7/api/jsonarray/subscript/ - FORCE_INLINE detail::ElementProxy operator[](size_t index) const { + detail::ElementProxy operator[](size_t index) const { return {*this, index}; } @@ -133,25 +132,25 @@ class JsonArray : public detail::VariantOperators { // Returns true if the reference is unbound. // https://arduinojson.org/v7/api/jsonarray/isnull/ - FORCE_INLINE bool isNull() const { + bool isNull() const { return data_ == 0; } // Returns true if the reference is bound. // https://arduinojson.org/v7/api/jsonarray/isnull/ - FORCE_INLINE operator bool() const { + operator bool() const { return data_ != 0; } // Returns the depth (nesting level) of the array. // https://arduinojson.org/v7/api/jsonarray/nesting/ - FORCE_INLINE size_t nesting() const { + size_t nesting() const { return detail::VariantData::nesting(collectionToVariant(data_), resources_); } // Returns the number of elements in the array. // https://arduinojson.org/v7/api/jsonarray/size/ - FORCE_INLINE size_t size() const { + size_t size() const { return data_ ? data_->size(resources_) : 0; } diff --git a/src/ArduinoJson/Array/JsonArrayConst.hpp b/src/ArduinoJson/Array/JsonArrayConst.hpp index 526975a2..6c0d7db2 100644 --- a/src/ArduinoJson/Array/JsonArrayConst.hpp +++ b/src/ArduinoJson/Array/JsonArrayConst.hpp @@ -23,7 +23,7 @@ class JsonArrayConst : public detail::VariantOperators { // Returns an iterator to the first element of the array. // https://arduinojson.org/v7/api/jsonarrayconst/begin/ - FORCE_INLINE iterator begin() const { + iterator begin() const { if (!data_) return iterator(); return iterator(data_->createIterator(resources_), resources_); @@ -31,21 +31,21 @@ class JsonArrayConst : public detail::VariantOperators { // Returns an iterator to the element following the last element of the array. // https://arduinojson.org/v7/api/jsonarrayconst/end/ - FORCE_INLINE iterator end() const { + iterator end() const { return iterator(); } // Creates an unbound reference. - FORCE_INLINE JsonArrayConst() : data_(0) {} + JsonArrayConst() : data_(0) {} // INTERNAL USE ONLY - FORCE_INLINE JsonArrayConst(const detail::ArrayData* data, - const detail::ResourceManager* resources) + JsonArrayConst(const detail::ArrayData* data, + const detail::ResourceManager* resources) : data_(data), resources_(resources) {} // Returns the element at the specified index. // https://arduinojson.org/v7/api/jsonarrayconst/subscript/ - FORCE_INLINE JsonVariantConst operator[](size_t index) const { + JsonVariantConst operator[](size_t index) const { return JsonVariantConst( detail::ArrayData::getElement(data_, index, resources_), resources_); } @@ -56,25 +56,25 @@ class JsonArrayConst : public detail::VariantOperators { // Returns true if the reference is unbound. // https://arduinojson.org/v7/api/jsonarrayconst/isnull/ - FORCE_INLINE bool isNull() const { + bool isNull() const { return data_ == 0; } // Returns true if the reference is bound. // https://arduinojson.org/v7/api/jsonarrayconst/isnull/ - FORCE_INLINE operator bool() const { + operator bool() const { return data_ != 0; } // Returns the depth (nesting level) of the array. // https://arduinojson.org/v7/api/jsonarrayconst/nesting/ - FORCE_INLINE size_t nesting() const { + size_t nesting() const { return detail::VariantData::nesting(getData(), resources_); } // Returns the number of elements in the array. // https://arduinojson.org/v7/api/jsonarrayconst/size/ - FORCE_INLINE size_t size() const { + size_t size() const { return data_ ? data_->size(resources_) : 0; } diff --git a/src/ArduinoJson/Document/JsonDocument.hpp b/src/ArduinoJson/Document/JsonDocument.hpp index 6e07ce2e..0f336f1a 100644 --- a/src/ArduinoJson/Document/JsonDocument.hpp +++ b/src/ArduinoJson/Document/JsonDocument.hpp @@ -170,9 +170,8 @@ class JsonDocument : public detail::VariantOperators { // Gets or sets a root object's member. // https://arduinojson.org/v7/api/jsondocument/subscript/ template - FORCE_INLINE typename detail::enable_if< - detail::IsString::value, - detail::MemberProxy>::type + typename detail::enable_if::value, + detail::MemberProxy>::type operator[](const TString& key) { return {*this, key}; } @@ -180,9 +179,8 @@ class JsonDocument : public detail::VariantOperators { // Gets or sets a root object's member. // https://arduinojson.org/v7/api/jsondocument/subscript/ template - FORCE_INLINE typename detail::enable_if< - detail::IsString::value, - detail::MemberProxy>::type + typename detail::enable_if::value, + detail::MemberProxy>::type operator[](TChar* key) { return {*this, key}; } @@ -190,8 +188,8 @@ class JsonDocument : public detail::VariantOperators { // Gets a root object's member. // https://arduinojson.org/v7/api/jsondocument/subscript/ template - FORCE_INLINE typename detail::enable_if::value, - JsonVariantConst>::type + typename detail::enable_if::value, + JsonVariantConst>::type operator[](const TString& key) const { return JsonVariantConst( data_.getMember(detail::adaptString(key), &resources_), &resources_); @@ -200,8 +198,8 @@ class JsonDocument : public detail::VariantOperators { // Gets a root object's member. // https://arduinojson.org/v7/api/jsondocument/subscript/ template - FORCE_INLINE typename detail::enable_if::value, - JsonVariantConst>::type + typename detail::enable_if::value, + JsonVariantConst>::type operator[](TChar* key) const { return JsonVariantConst( data_.getMember(detail::adaptString(key), &resources_), &resources_); @@ -209,13 +207,13 @@ class JsonDocument : public detail::VariantOperators { // Gets or sets a root array's element. // https://arduinojson.org/v7/api/jsondocument/subscript/ - FORCE_INLINE detail::ElementProxy operator[](size_t index) { + detail::ElementProxy operator[](size_t index) { return {*this, index}; } // Gets a root array's member. // https://arduinojson.org/v7/api/jsondocument/subscript/ - FORCE_INLINE JsonVariantConst operator[](size_t index) const { + JsonVariantConst operator[](size_t index) const { return JsonVariantConst(data_.getElement(index, &resources_), &resources_); } @@ -240,28 +238,28 @@ class JsonDocument : public detail::VariantOperators { // Appends a value to the root array. // https://arduinojson.org/v7/api/jsondocument/add/ template - FORCE_INLINE bool add(const TValue& value) { + bool add(const TValue& value) { return add().set(value); } // Appends a value to the root array. // https://arduinojson.org/v7/api/jsondocument/add/ template - FORCE_INLINE bool add(TChar* value) { + bool add(TChar* value) { return add().set(value); } // Removes an element of the root array. // https://arduinojson.org/v7/api/jsondocument/remove/ - FORCE_INLINE void remove(size_t index) { + void remove(size_t index) { detail::VariantData::removeElement(getData(), index, getResourceManager()); } // Removes a member of the root object. // https://arduinojson.org/v7/api/jsondocument/remove/ template - FORCE_INLINE typename detail::enable_if::value>::type - remove(TChar* key) { + typename detail::enable_if::value>::type remove( + TChar* key) { detail::VariantData::removeMember(getData(), detail::adaptString(key), getResourceManager()); } @@ -269,18 +267,18 @@ class JsonDocument : public detail::VariantOperators { // Removes a member of the root object. // https://arduinojson.org/v7/api/jsondocument/remove/ template - FORCE_INLINE - typename detail::enable_if::value>::type - remove(const TString& key) { + + typename detail::enable_if::value>::type remove( + const TString& key) { detail::VariantData::removeMember(getData(), detail::adaptString(key), getResourceManager()); } - FORCE_INLINE operator JsonVariant() { + operator JsonVariant() { return getVariant(); } - FORCE_INLINE operator JsonVariantConst() const { + operator JsonVariantConst() const { return getVariant(); } diff --git a/src/ArduinoJson/Object/JsonObject.hpp b/src/ArduinoJson/Object/JsonObject.hpp index 096afa87..e4e7dee4 100644 --- a/src/ArduinoJson/Object/JsonObject.hpp +++ b/src/ArduinoJson/Object/JsonObject.hpp @@ -20,11 +20,10 @@ class JsonObject : public detail::VariantOperators { typedef JsonObjectIterator iterator; // Creates an unbound reference. - FORCE_INLINE JsonObject() : data_(0), resources_(0) {} + JsonObject() : data_(0), resources_(0) {} // INTERNAL USE ONLY - FORCE_INLINE JsonObject(detail::ObjectData* data, - detail::ResourceManager* resource) + JsonObject(detail::ObjectData* data, detail::ResourceManager* resource) : data_(data), resources_(resource) {} operator JsonVariant() const { @@ -43,31 +42,31 @@ class JsonObject : public detail::VariantOperators { // Returns true if the reference is unbound. // https://arduinojson.org/v7/api/jsonobject/isnull/ - FORCE_INLINE bool isNull() const { + bool isNull() const { return data_ == 0; } // Returns true if the reference is bound. // https://arduinojson.org/v7/api/jsonobject/isnull/ - FORCE_INLINE operator bool() const { + operator bool() const { return data_ != 0; } // Returns the depth (nesting level) of the object. // https://arduinojson.org/v7/api/jsonobject/nesting/ - FORCE_INLINE size_t nesting() const { + size_t nesting() const { return detail::VariantData::nesting(collectionToVariant(data_), resources_); } // Returns the number of members in the object. // https://arduinojson.org/v7/api/jsonobject/size/ - FORCE_INLINE size_t size() const { + size_t size() const { return data_ ? data_->size(resources_) : 0; } // Returns an iterator to the first key-value pair of the object. // https://arduinojson.org/v7/api/jsonobject/begin/ - FORCE_INLINE iterator begin() const { + iterator begin() const { if (!data_) return iterator(); return iterator(data_->createIterator(resources_), resources_); @@ -75,7 +74,7 @@ class JsonObject : public detail::VariantOperators { // Returns an iterator following the last key-value pair of the object. // https://arduinojson.org/v7/api/jsonobject/end/ - FORCE_INLINE iterator end() const { + iterator end() const { return iterator(); } @@ -87,7 +86,7 @@ class JsonObject : public detail::VariantOperators { // Copies an object. // https://arduinojson.org/v7/api/jsonobject/set/ - FORCE_INLINE bool set(JsonObjectConst src) { + bool set(JsonObjectConst src) { if (!data_ || !src.data_) return false; @@ -103,20 +102,20 @@ class JsonObject : public detail::VariantOperators { // Gets or sets the member with specified key. // https://arduinojson.org/v7/api/jsonobject/subscript/ template - FORCE_INLINE - typename detail::enable_if::value, - detail::MemberProxy>::type - operator[](const TString& key) const { + + typename detail::enable_if::value, + detail::MemberProxy>::type + operator[](const TString& key) const { return {*this, key}; } // Gets or sets the member with specified key. // https://arduinojson.org/v7/api/jsonobject/subscript/ template - FORCE_INLINE - typename detail::enable_if::value, - detail::MemberProxy>::type - operator[](TChar* key) const { + + typename detail::enable_if::value, + detail::MemberProxy>::type + operator[](TChar* key) const { return {*this, key}; } @@ -145,9 +144,9 @@ class JsonObject : public detail::VariantOperators { // Returns true if the object contains the specified key. // https://arduinojson.org/v7/api/jsonobject/containskey/ template - FORCE_INLINE - typename detail::enable_if::value, bool>::type - containsKey(const TString& key) const { + + typename detail::enable_if::value, bool>::type + containsKey(const TString& key) const { return detail::ObjectData::getMember(data_, detail::adaptString(key), resources_) != 0; } @@ -155,9 +154,9 @@ class JsonObject : public detail::VariantOperators { // Returns true if the object contains the specified key. // https://arduinojson.org/v7/api/jsonobject/containskey/ template - FORCE_INLINE - typename detail::enable_if::value, bool>::type - containsKey(TChar* key) const { + + typename detail::enable_if::value, bool>::type + containsKey(TChar* key) const { return detail::ObjectData::getMember(data_, detail::adaptString(key), resources_) != 0; } diff --git a/src/ArduinoJson/Object/JsonObjectConst.hpp b/src/ArduinoJson/Object/JsonObjectConst.hpp index 8f2c8bb1..908fa275 100644 --- a/src/ArduinoJson/Object/JsonObjectConst.hpp +++ b/src/ArduinoJson/Object/JsonObjectConst.hpp @@ -32,31 +32,31 @@ class JsonObjectConst : public detail::VariantOperators { // Returns true if the reference is unbound. // https://arduinojson.org/v7/api/jsonobjectconst/isnull/ - FORCE_INLINE bool isNull() const { + bool isNull() const { return data_ == 0; } // Returns true if the reference is bound. // https://arduinojson.org/v7/api/jsonobjectconst/isnull/ - FORCE_INLINE operator bool() const { + operator bool() const { return data_ != 0; } // Returns the depth (nesting level) of the object. // https://arduinojson.org/v7/api/jsonobjectconst/nesting/ - FORCE_INLINE size_t nesting() const { + size_t nesting() const { return detail::VariantData::nesting(getData(), resources_); } // Returns the number of members in the object. // https://arduinojson.org/v7/api/jsonobjectconst/size/ - FORCE_INLINE size_t size() const { + size_t size() const { return data_ ? data_->size(resources_) : 0; } // Returns an iterator to the first key-value pair of the object. // https://arduinojson.org/v7/api/jsonobjectconst/begin/ - FORCE_INLINE iterator begin() const { + iterator begin() const { if (!data_) return iterator(); return iterator(data_->createIterator(resources_), resources_); @@ -64,14 +64,14 @@ class JsonObjectConst : public detail::VariantOperators { // Returns an iterator following the last key-value pair of the object. // https://arduinojson.org/v7/api/jsonobjectconst/end/ - FORCE_INLINE iterator end() const { + iterator end() const { return iterator(); } // Returns true if the object contains the specified key. // https://arduinojson.org/v7/api/jsonobjectconst/containskey/ template - FORCE_INLINE bool containsKey(const TString& key) const { + bool containsKey(const TString& key) const { return detail::ObjectData::getMember(data_, detail::adaptString(key), resources_) != 0; } @@ -79,7 +79,7 @@ class JsonObjectConst : public detail::VariantOperators { // Returns true if the object contains the specified key. // https://arduinojson.org/v7/api/jsonobjectconst/containskey/ template - FORCE_INLINE bool containsKey(TChar* key) const { + bool containsKey(TChar* key) const { return detail::ObjectData::getMember(data_, detail::adaptString(key), resources_) != 0; } @@ -87,8 +87,8 @@ class JsonObjectConst : public detail::VariantOperators { // Gets the member with specified key. // https://arduinojson.org/v7/api/jsonobjectconst/subscript/ template - FORCE_INLINE typename detail::enable_if::value, - JsonVariantConst>::type + typename detail::enable_if::value, + JsonVariantConst>::type operator[](const TString& key) const { return JsonVariantConst(detail::ObjectData::getMember( data_, detail::adaptString(key), resources_), @@ -98,8 +98,8 @@ class JsonObjectConst : public detail::VariantOperators { // Gets the member with specified key. // https://arduinojson.org/v7/api/jsonobjectconst/subscript/ template - FORCE_INLINE typename detail::enable_if::value, - JsonVariantConst>::type + typename detail::enable_if::value, + JsonVariantConst>::type operator[](TChar* key) const { return JsonVariantConst(detail::ObjectData::getMember( data_, detail::adaptString(key), resources_), diff --git a/src/ArduinoJson/Object/MemberProxy.hpp b/src/ArduinoJson/Object/MemberProxy.hpp index 2a56f6da..eb9feede 100644 --- a/src/ArduinoJson/Object/MemberProxy.hpp +++ b/src/ArduinoJson/Object/MemberProxy.hpp @@ -17,41 +17,41 @@ class MemberProxy friend class VariantAttorney; public: - FORCE_INLINE MemberProxy(TUpstream upstream, TStringRef key) + MemberProxy(TUpstream upstream, TStringRef key) : upstream_(upstream), key_(key) {} MemberProxy(const MemberProxy& src) : upstream_(src.upstream_), key_(src.key_) {} - FORCE_INLINE MemberProxy& operator=(const MemberProxy& src) { + MemberProxy& operator=(const MemberProxy& src) { this->set(src); return *this; } template - FORCE_INLINE MemberProxy& operator=(const T& src) { + MemberProxy& operator=(const T& src) { this->set(src); return *this; } template - FORCE_INLINE MemberProxy& operator=(T* src) { + MemberProxy& operator=(T* src) { this->set(src); return *this; } private: - FORCE_INLINE ResourceManager* getResourceManager() const { + ResourceManager* getResourceManager() const { return VariantAttorney::getResourceManager(upstream_); } - FORCE_INLINE VariantData* getData() const { + VariantData* getData() const { return VariantData::getMember( VariantAttorney::getData(upstream_), adaptString(key_), VariantAttorney::getResourceManager(upstream_)); } - FORCE_INLINE VariantData* getOrCreateData() const { + VariantData* getOrCreateData() const { auto data = VariantAttorney::getOrCreateData(upstream_); if (!data) return nullptr; diff --git a/src/ArduinoJson/Variant/JsonVariant.hpp b/src/ArduinoJson/Variant/JsonVariant.hpp index f38963c1..5039c38a 100644 --- a/src/ArduinoJson/Variant/JsonVariant.hpp +++ b/src/ArduinoJson/Variant/JsonVariant.hpp @@ -23,15 +23,15 @@ class JsonVariant : public detail::VariantRefBase, : data_(data), resources_(resources) {} private: - FORCE_INLINE detail::ResourceManager* getResourceManager() const { + detail::ResourceManager* getResourceManager() const { return resources_; } - FORCE_INLINE detail::VariantData* getData() const { + detail::VariantData* getData() const { return data_; } - FORCE_INLINE detail::VariantData* getOrCreateData() const { + detail::VariantData* getOrCreateData() const { return data_; } diff --git a/src/ArduinoJson/Variant/JsonVariantConst.hpp b/src/ArduinoJson/Variant/JsonVariantConst.hpp index 8ff74111..7e7b8c0d 100644 --- a/src/ArduinoJson/Variant/JsonVariantConst.hpp +++ b/src/ArduinoJson/Variant/JsonVariantConst.hpp @@ -38,18 +38,18 @@ class JsonVariantConst : public detail::VariantTag, // Returns true if the value is null or the reference is unbound. // https://arduinojson.org/v7/api/jsonvariantconst/isnull/ - FORCE_INLINE bool isNull() const { + bool isNull() const { return detail::VariantData::isNull(data_); } // Returns true if the reference is unbound. - FORCE_INLINE bool isUnbound() const { + bool isUnbound() const { return !data_; } // Returns the depth (nesting level) of the value. // https://arduinojson.org/v7/api/jsonvariantconst/nesting/ - FORCE_INLINE size_t nesting() const { + size_t nesting() const { return detail::VariantData::nesting(data_, resources_); } @@ -62,9 +62,9 @@ class JsonVariantConst : public detail::VariantTag, // Casts the value to the specified type. // https://arduinojson.org/v7/api/jsonvariantconst/as/ template - FORCE_INLINE typename detail::enable_if::value && - !detail::is_same::value, - T>::type + typename detail::enable_if::value && + !detail::is_same::value, + T>::type as() const { return Converter::fromJson(*this); } @@ -72,21 +72,21 @@ class JsonVariantConst : public detail::VariantTag, // Returns true if the value is of the specified type. // https://arduinojson.org/v7/api/jsonvariantconst/is/ template - FORCE_INLINE typename detail::enable_if::value && - !detail::is_same::value, - bool>::type + typename detail::enable_if::value && + !detail::is_same::value, + bool>::type is() const { return Converter::checkJson(*this); } template - FORCE_INLINE operator T() const { + operator T() const { return as(); } // Gets array's element at specified index. // https://arduinojson.org/v7/api/jsonvariantconst/subscript/ - FORCE_INLINE JsonVariantConst operator[](size_t index) const { + JsonVariantConst operator[](size_t index) const { return JsonVariantConst( detail::VariantData::getElement(data_, index, resources_), resources_); } @@ -94,8 +94,8 @@ class JsonVariantConst : public detail::VariantTag, // Gets object's member with specified key. // https://arduinojson.org/v7/api/jsonvariantconst/subscript/ template - FORCE_INLINE typename detail::enable_if::value, - JsonVariantConst>::type + typename detail::enable_if::value, + JsonVariantConst>::type operator[](const TString& key) const { return JsonVariantConst(detail::VariantData::getMember( data_, detail::adaptString(key), resources_), @@ -105,8 +105,8 @@ class JsonVariantConst : public detail::VariantTag, // Gets object's member with specified key. // https://arduinojson.org/v7/api/jsonvariantconst/subscript/ template - FORCE_INLINE typename detail::enable_if::value, - JsonVariantConst>::type + typename detail::enable_if::value, + JsonVariantConst>::type operator[](TChar* key) const { return JsonVariantConst(detail::VariantData::getMember( data_, detail::adaptString(key), resources_), @@ -116,9 +116,9 @@ class JsonVariantConst : public detail::VariantTag, // Returns true if tge object contains the specified key. // https://arduinojson.org/v7/api/jsonvariantconst/containskey/ template - FORCE_INLINE - typename detail::enable_if::value, bool>::type - containsKey(const TString& key) const { + + typename detail::enable_if::value, bool>::type + containsKey(const TString& key) const { return detail::VariantData::getMember(getData(), detail::adaptString(key), resources_) != 0; } @@ -126,9 +126,9 @@ class JsonVariantConst : public detail::VariantTag, // Returns true if tge object contains the specified key. // https://arduinojson.org/v7/api/jsonvariantconst/containskey/ template - FORCE_INLINE - typename detail::enable_if::value, bool>::type - containsKey(TChar* key) const { + + typename detail::enable_if::value, bool>::type + containsKey(TChar* key) const { return detail::VariantData::getMember(getData(), detail::adaptString(key), resources_) != 0; } diff --git a/src/ArduinoJson/Variant/VariantAttorney.hpp b/src/ArduinoJson/Variant/VariantAttorney.hpp index 24f22dda..b75eb380 100644 --- a/src/ArduinoJson/Variant/VariantAttorney.hpp +++ b/src/ArduinoJson/Variant/VariantAttorney.hpp @@ -16,19 +16,18 @@ ARDUINOJSON_BEGIN_PRIVATE_NAMESPACE class VariantAttorney { public: template - FORCE_INLINE static auto getResourceManager(TClient& client) + static auto getResourceManager(TClient& client) -> decltype(client.getResourceManager()) { return client.getResourceManager(); } template - FORCE_INLINE static auto getData(TClient& client) - -> decltype(client.getData()) { + static auto getData(TClient& client) -> decltype(client.getData()) { return client.getData(); } template - FORCE_INLINE static VariantData* getOrCreateData(TClient& client) { + static VariantData* getOrCreateData(TClient& client) { return client.getOrCreateData(); } }; diff --git a/src/ArduinoJson/Variant/VariantRefBase.hpp b/src/ArduinoJson/Variant/VariantRefBase.hpp index da7226ae..318915e8 100644 --- a/src/ArduinoJson/Variant/VariantRefBase.hpp +++ b/src/ArduinoJson/Variant/VariantRefBase.hpp @@ -28,39 +28,38 @@ class VariantRefBase : public VariantTag { public: // Sets the value to null. // https://arduinojson.org/v7/api/jsonvariant/clear/ - FORCE_INLINE void clear() const { + void clear() const { VariantData::setNull(getOrCreateData(), getResourceManager()); } // Returns true if the value is null or the reference is unbound. // https://arduinojson.org/v7/api/jsonvariant/isnull/ - FORCE_INLINE bool isNull() const { + bool isNull() const { return VariantData::isNull(getData()); } // Returns true if the reference is unbound. - FORCE_INLINE bool isUnbound() const { + bool isUnbound() const { return !getData(); } // Casts the value to the specified type. // https://arduinojson.org/v7/api/jsonvariant/as/ template - FORCE_INLINE - typename enable_if::value, T>::type - as() const { + + typename enable_if::value, T>::type as() + const { return Converter::fromJson(getVariantConst()); } // Casts the value to the specified type. // https://arduinojson.org/v7/api/jsonvariant/as/ template - FORCE_INLINE typename enable_if::value, T>::type - as() const; + typename enable_if::value, T>::type as() const; template ::value>::type> - FORCE_INLINE operator T() const { + operator T() const { return as(); } @@ -100,22 +99,22 @@ class VariantRefBase : public VariantTag { // Copies the specified value. // https://arduinojson.org/v7/api/jsonvariant/set/ template - FORCE_INLINE bool set(const T& value) const; + bool set(const T& value) const; // Copies the specified value. // https://arduinojson.org/v7/api/jsonvariant/set/ template - FORCE_INLINE bool set(T* value) const; + bool set(T* value) const; // Returns the size of the array or object. // https://arduinojson.org/v7/api/jsonvariant/size/ - FORCE_INLINE size_t size() const { + size_t size() const { return VariantData::size(getData(), getResourceManager()); } // Returns the depth (nesting level) of the value. // https://arduinojson.org/v7/api/jsonvariant/nesting/ - FORCE_INLINE size_t nesting() const { + size_t nesting() const { return VariantData::nesting(getData(), getResourceManager()); } @@ -136,28 +135,27 @@ class VariantRefBase : public VariantTag { // Appends a value to the array. // https://arduinojson.org/v7/api/jsonvariant/add/ template - FORCE_INLINE bool add(const T& value) const { + bool add(const T& value) const { return add().set(value); } // Appends a value to the array. // https://arduinojson.org/v7/api/jsonvariant/add/ template - FORCE_INLINE bool add(T* value) const { + bool add(T* value) const { return add().set(value); } // Removes an element of the array. // https://arduinojson.org/v7/api/jsonvariant/remove/ - FORCE_INLINE void remove(size_t index) const { + void remove(size_t index) const { VariantData::removeElement(getData(), index, getResourceManager()); } // Removes a member of the object. // https://arduinojson.org/v7/api/jsonvariant/remove/ template - FORCE_INLINE typename enable_if::value>::type remove( - TChar* key) const { + typename enable_if::value>::type remove(TChar* key) const { VariantData::removeMember(getData(), adaptString(key), getResourceManager()); } @@ -165,7 +163,7 @@ class VariantRefBase : public VariantTag { // Removes a member of the object. // https://arduinojson.org/v7/api/jsonvariant/remove/ template - FORCE_INLINE typename enable_if::value>::type remove( + typename enable_if::value>::type remove( const TString& key) const { VariantData::removeMember(getData(), adaptString(key), getResourceManager()); @@ -173,19 +171,19 @@ class VariantRefBase : public VariantTag { // Gets or sets an array element. // https://arduinojson.org/v7/api/jsonvariant/subscript/ - FORCE_INLINE ElementProxy operator[](size_t index) const; + ElementProxy operator[](size_t index) const; // Returns true if the object contains the specified key. // https://arduinojson.org/v7/api/jsonvariant/containskey/ template - FORCE_INLINE typename enable_if::value, bool>::type - containsKey(const TString& key) const; + typename enable_if::value, bool>::type containsKey( + const TString& key) const; // Returns true if the object contains the specified key. // https://arduinojson.org/v7/api/jsonvariant/containskey/ template - FORCE_INLINE typename enable_if::value, bool>::type - containsKey(TChar* key) const; + typename enable_if::value, bool>::type containsKey( + TChar* key) const; // Gets or sets an object member. // https://arduinojson.org/v7/api/jsonvariant/subscript/ @@ -254,15 +252,15 @@ class VariantRefBase : public VariantTag { return static_cast(*this); } - FORCE_INLINE ResourceManager* getResourceManager() const { + ResourceManager* getResourceManager() const { return VariantAttorney::getResourceManager(derived()); } - FORCE_INLINE VariantData* getData() const { + VariantData* getData() const { return VariantAttorney::getData(derived()); } - FORCE_INLINE VariantData* getOrCreateData() const { + VariantData* getOrCreateData() const { return VariantAttorney::getOrCreateData(derived()); } @@ -272,7 +270,7 @@ class VariantRefBase : public VariantTag { return ArduinoJson::JsonVariantConst(getData(), getResourceManager()); } - FORCE_INLINE ArduinoJson::JsonVariant getOrCreateVariant() const; + ArduinoJson::JsonVariant getOrCreateVariant() const; }; ARDUINOJSON_END_PRIVATE_NAMESPACE