Sfoglia il codice sorgente

Remove most `FORCE_INLINE`s

I kept only the ones that had a positive impact on code size AND no negative impact on stack memory.

Fixes #2046
Benoit Blanchon 2 anni fa
parent
commit
cb0dc94db4

+ 1 - 1
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)

+ 5 - 5
src/ArduinoJson/Array/ElementProxy.hpp

@@ -22,25 +22,25 @@ class ElementProxy : public VariantRefBase<ElementProxy<TUpstream>>,
   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 <typename T>
-  FORCE_INLINE ElementProxy& operator=(const T& src) {
+  ElementProxy& operator=(const T& src) {
     this->set(src);
     return *this;
   }
 
   template <typename T>
-  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<ElementProxy<TUpstream>>,
         VariantAttorney::getResourceManager(upstream_));
   }
 
-  FORCE_INLINE VariantData* getOrCreateData() const {
+  VariantData* getOrCreateData() const {
     auto data = VariantAttorney::getOrCreateData(upstream_);
     if (!data)
       return nullptr;

+ 14 - 15
src/ArduinoJson/Array/JsonArray.hpp

@@ -20,11 +20,10 @@ class JsonArray : public detail::VariantOperators<JsonArray> {
   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<JsonArray> {
   // Appends a value to the array.
   // https://arduinojson.org/v7/api/jsonarray/add/
   template <typename T>
-  FORCE_INLINE bool add(const T& value) const {
+  bool add(const T& value) const {
     return add<JsonVariant>().set(value);
   }
 
   // Appends a value to the array.
   // https://arduinojson.org/v7/api/jsonarray/add/
   template <typename T>
-  FORCE_INLINE bool add(T* value) const {
+  bool add(T* value) const {
     return add<JsonVariant>().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<JsonArray> {
 
   // 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<JsonArray> {
 
   // 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<JsonArray> {
 
   // Gets or sets the element at the specified index.
   // https://arduinojson.org/v7/api/jsonarray/subscript/
-  FORCE_INLINE detail::ElementProxy<JsonArray> operator[](size_t index) const {
+  detail::ElementProxy<JsonArray> operator[](size_t index) const {
     return {*this, index};
   }
 
@@ -133,25 +132,25 @@ class JsonArray : public detail::VariantOperators<JsonArray> {
 
   // 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;
   }
 

+ 10 - 10
src/ArduinoJson/Array/JsonArrayConst.hpp

@@ -23,7 +23,7 @@ class JsonArrayConst : public detail::VariantOperators<JsonArrayConst> {
 
   // 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<JsonArrayConst> {
 
   // 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<JsonArrayConst> {
 
   // 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;
   }
 

+ 20 - 22
src/ArduinoJson/Document/JsonDocument.hpp

@@ -170,9 +170,8 @@ class JsonDocument : public detail::VariantOperators<const JsonDocument&> {
   // Gets or sets a root object's member.
   // https://arduinojson.org/v7/api/jsondocument/subscript/
   template <typename TString>
-  FORCE_INLINE typename detail::enable_if<
-      detail::IsString<TString>::value,
-      detail::MemberProxy<JsonDocument&, TString>>::type
+  typename detail::enable_if<detail::IsString<TString>::value,
+                             detail::MemberProxy<JsonDocument&, TString>>::type
   operator[](const TString& key) {
     return {*this, key};
   }
@@ -180,9 +179,8 @@ class JsonDocument : public detail::VariantOperators<const JsonDocument&> {
   // Gets or sets a root object's member.
   // https://arduinojson.org/v7/api/jsondocument/subscript/
   template <typename TChar>
-  FORCE_INLINE typename detail::enable_if<
-      detail::IsString<TChar*>::value,
-      detail::MemberProxy<JsonDocument&, TChar*>>::type
+  typename detail::enable_if<detail::IsString<TChar*>::value,
+                             detail::MemberProxy<JsonDocument&, TChar*>>::type
   operator[](TChar* key) {
     return {*this, key};
   }
@@ -190,8 +188,8 @@ class JsonDocument : public detail::VariantOperators<const JsonDocument&> {
   // Gets a root object's member.
   // https://arduinojson.org/v7/api/jsondocument/subscript/
   template <typename TString>
-  FORCE_INLINE typename detail::enable_if<detail::IsString<TString>::value,
-                                          JsonVariantConst>::type
+  typename detail::enable_if<detail::IsString<TString>::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<const JsonDocument&> {
   // Gets a root object's member.
   // https://arduinojson.org/v7/api/jsondocument/subscript/
   template <typename TChar>
-  FORCE_INLINE typename detail::enable_if<detail::IsString<TChar*>::value,
-                                          JsonVariantConst>::type
+  typename detail::enable_if<detail::IsString<TChar*>::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<const JsonDocument&> {
 
   // Gets or sets a root array's element.
   // https://arduinojson.org/v7/api/jsondocument/subscript/
-  FORCE_INLINE detail::ElementProxy<JsonDocument&> operator[](size_t index) {
+  detail::ElementProxy<JsonDocument&> 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<const JsonDocument&> {
   // Appends a value to the root array.
   // https://arduinojson.org/v7/api/jsondocument/add/
   template <typename TValue>
-  FORCE_INLINE bool add(const TValue& value) {
+  bool add(const TValue& value) {
     return add<JsonVariant>().set(value);
   }
 
   // Appends a value to the root array.
   // https://arduinojson.org/v7/api/jsondocument/add/
   template <typename TChar>
-  FORCE_INLINE bool add(TChar* value) {
+  bool add(TChar* value) {
     return add<JsonVariant>().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 <typename TChar>
-  FORCE_INLINE typename detail::enable_if<detail::IsString<TChar*>::value>::type
-  remove(TChar* key) {
+  typename detail::enable_if<detail::IsString<TChar*>::value>::type remove(
+      TChar* key) {
     detail::VariantData::removeMember(getData(), detail::adaptString(key),
                                       getResourceManager());
   }
@@ -269,18 +267,18 @@ class JsonDocument : public detail::VariantOperators<const JsonDocument&> {
   // Removes a member of the root object.
   // https://arduinojson.org/v7/api/jsondocument/remove/
   template <typename TString>
-  FORCE_INLINE
-      typename detail::enable_if<detail::IsString<TString>::value>::type
-      remove(const TString& key) {
+
+  typename detail::enable_if<detail::IsString<TString>::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();
   }
 

+ 23 - 24
src/ArduinoJson/Object/JsonObject.hpp

@@ -20,11 +20,10 @@ class JsonObject : public detail::VariantOperators<JsonObject> {
   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<JsonObject> {
 
   // 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<JsonObject> {
 
   // 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<JsonObject> {
 
   // 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<JsonObject> {
   // Gets or sets the member with specified key.
   // https://arduinojson.org/v7/api/jsonobject/subscript/
   template <typename TString>
-  FORCE_INLINE
-      typename detail::enable_if<detail::IsString<TString>::value,
-                                 detail::MemberProxy<JsonObject, TString>>::type
-      operator[](const TString& key) const {
+
+  typename detail::enable_if<detail::IsString<TString>::value,
+                             detail::MemberProxy<JsonObject, TString>>::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 <typename TChar>
-  FORCE_INLINE
-      typename detail::enable_if<detail::IsString<TChar*>::value,
-                                 detail::MemberProxy<JsonObject, TChar*>>::type
-      operator[](TChar* key) const {
+
+  typename detail::enable_if<detail::IsString<TChar*>::value,
+                             detail::MemberProxy<JsonObject, TChar*>>::type
+  operator[](TChar* key) const {
     return {*this, key};
   }
 
@@ -145,9 +144,9 @@ class JsonObject : public detail::VariantOperators<JsonObject> {
   // Returns true if the object contains the specified key.
   // https://arduinojson.org/v7/api/jsonobject/containskey/
   template <typename TString>
-  FORCE_INLINE
-      typename detail::enable_if<detail::IsString<TString>::value, bool>::type
-      containsKey(const TString& key) const {
+
+  typename detail::enable_if<detail::IsString<TString>::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<JsonObject> {
   // Returns true if the object contains the specified key.
   // https://arduinojson.org/v7/api/jsonobject/containskey/
   template <typename TChar>
-  FORCE_INLINE
-      typename detail::enable_if<detail::IsString<TChar*>::value, bool>::type
-      containsKey(TChar* key) const {
+
+  typename detail::enable_if<detail::IsString<TChar*>::value, bool>::type
+  containsKey(TChar* key) const {
     return detail::ObjectData::getMember(data_, detail::adaptString(key),
                                          resources_) != 0;
   }

+ 12 - 12
src/ArduinoJson/Object/JsonObjectConst.hpp

@@ -32,31 +32,31 @@ class JsonObjectConst : public detail::VariantOperators<JsonObjectConst> {
 
   // 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<JsonObjectConst> {
 
   // 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 <typename TString>
-  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<JsonObjectConst> {
   // Returns true if the object contains the specified key.
   // https://arduinojson.org/v7/api/jsonobjectconst/containskey/
   template <typename TChar>
-  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<JsonObjectConst> {
   // Gets the member with specified key.
   // https://arduinojson.org/v7/api/jsonobjectconst/subscript/
   template <typename TString>
-  FORCE_INLINE typename detail::enable_if<detail::IsString<TString>::value,
-                                          JsonVariantConst>::type
+  typename detail::enable_if<detail::IsString<TString>::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<JsonObjectConst> {
   // Gets the member with specified key.
   // https://arduinojson.org/v7/api/jsonobjectconst/subscript/
   template <typename TChar>
-  FORCE_INLINE typename detail::enable_if<detail::IsString<TChar*>::value,
-                                          JsonVariantConst>::type
+  typename detail::enable_if<detail::IsString<TChar*>::value,
+                             JsonVariantConst>::type
   operator[](TChar* key) const {
     return JsonVariantConst(detail::ObjectData::getMember(
                                 data_, detail::adaptString(key), resources_),

+ 7 - 7
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 <typename T>
-  FORCE_INLINE MemberProxy& operator=(const T& src) {
+  MemberProxy& operator=(const T& src) {
     this->set(src);
     return *this;
   }
 
   template <typename T>
-  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;

+ 3 - 3
src/ArduinoJson/Variant/JsonVariant.hpp

@@ -23,15 +23,15 @@ class JsonVariant : public detail::VariantRefBase<JsonVariant>,
       : 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_;
   }
 

+ 21 - 21
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 <typename T>
-  FORCE_INLINE typename detail::enable_if<!detail::is_same<T, char*>::value &&
-                                              !detail::is_same<T, char>::value,
-                                          T>::type
+  typename detail::enable_if<!detail::is_same<T, char*>::value &&
+                                 !detail::is_same<T, char>::value,
+                             T>::type
   as() const {
     return Converter<T>::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 <typename T>
-  FORCE_INLINE typename detail::enable_if<!detail::is_same<T, char*>::value &&
-                                              !detail::is_same<T, char>::value,
-                                          bool>::type
+  typename detail::enable_if<!detail::is_same<T, char*>::value &&
+                                 !detail::is_same<T, char>::value,
+                             bool>::type
   is() const {
     return Converter<T>::checkJson(*this);
   }
 
   template <typename T>
-  FORCE_INLINE operator T() const {
+  operator T() const {
     return as<T>();
   }
 
   // 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 <typename TString>
-  FORCE_INLINE typename detail::enable_if<detail::IsString<TString>::value,
-                                          JsonVariantConst>::type
+  typename detail::enable_if<detail::IsString<TString>::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 <typename TChar>
-  FORCE_INLINE typename detail::enable_if<detail::IsString<TChar*>::value,
-                                          JsonVariantConst>::type
+  typename detail::enable_if<detail::IsString<TChar*>::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 <typename TString>
-  FORCE_INLINE
-      typename detail::enable_if<detail::IsString<TString>::value, bool>::type
-      containsKey(const TString& key) const {
+
+  typename detail::enable_if<detail::IsString<TString>::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 <typename TChar>
-  FORCE_INLINE
-      typename detail::enable_if<detail::IsString<TChar*>::value, bool>::type
-      containsKey(TChar* key) const {
+
+  typename detail::enable_if<detail::IsString<TChar*>::value, bool>::type
+  containsKey(TChar* key) const {
     return detail::VariantData::getMember(getData(), detail::adaptString(key),
                                           resources_) != 0;
   }

+ 3 - 4
src/ArduinoJson/Variant/VariantAttorney.hpp

@@ -16,19 +16,18 @@ ARDUINOJSON_BEGIN_PRIVATE_NAMESPACE
 class VariantAttorney {
  public:
   template <typename TClient>
-  FORCE_INLINE static auto getResourceManager(TClient& client)
+  static auto getResourceManager(TClient& client)
       -> decltype(client.getResourceManager()) {
     return client.getResourceManager();
   }
 
   template <typename TClient>
-  FORCE_INLINE static auto getData(TClient& client)
-      -> decltype(client.getData()) {
+  static auto getData(TClient& client) -> decltype(client.getData()) {
     return client.getData();
   }
 
   template <typename TClient>
-  FORCE_INLINE static VariantData* getOrCreateData(TClient& client) {
+  static VariantData* getOrCreateData(TClient& client) {
     return client.getOrCreateData();
   }
 };

+ 26 - 28
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 <typename T>
-  FORCE_INLINE
-      typename enable_if<!ConverterNeedsWriteableRef<T>::value, T>::type
-      as() const {
+
+  typename enable_if<!ConverterNeedsWriteableRef<T>::value, T>::type as()
+      const {
     return Converter<T>::fromJson(getVariantConst());
   }
 
   // Casts the value to the specified type.
   // https://arduinojson.org/v7/api/jsonvariant/as/
   template <typename T>
-  FORCE_INLINE typename enable_if<ConverterNeedsWriteableRef<T>::value, T>::type
-  as() const;
+  typename enable_if<ConverterNeedsWriteableRef<T>::value, T>::type as() const;
 
   template <typename T,
             typename = typename enable_if<!is_same<T, TDerived>::value>::type>
-  FORCE_INLINE operator T() const {
+  operator T() const {
     return as<T>();
   }
 
@@ -100,22 +99,22 @@ class VariantRefBase : public VariantTag {
   // Copies the specified value.
   // https://arduinojson.org/v7/api/jsonvariant/set/
   template <typename T>
-  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 <typename T>
-  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 <typename T>
-  FORCE_INLINE bool add(const T& value) const {
+  bool add(const T& value) const {
     return add<JsonVariant>().set(value);
   }
 
   // Appends a value to the array.
   // https://arduinojson.org/v7/api/jsonvariant/add/
   template <typename T>
-  FORCE_INLINE bool add(T* value) const {
+  bool add(T* value) const {
     return add<JsonVariant>().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 <typename TChar>
-  FORCE_INLINE typename enable_if<IsString<TChar*>::value>::type remove(
-      TChar* key) const {
+  typename enable_if<IsString<TChar*>::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 <typename TString>
-  FORCE_INLINE typename enable_if<IsString<TString>::value>::type remove(
+  typename enable_if<IsString<TString>::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<TDerived> operator[](size_t index) const;
+  ElementProxy<TDerived> operator[](size_t index) const;
 
   // Returns true if the object contains the specified key.
   // https://arduinojson.org/v7/api/jsonvariant/containskey/
   template <typename TString>
-  FORCE_INLINE typename enable_if<IsString<TString>::value, bool>::type
-  containsKey(const TString& key) const;
+  typename enable_if<IsString<TString>::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 <typename TChar>
-  FORCE_INLINE typename enable_if<IsString<TChar*>::value, bool>::type
-  containsKey(TChar* key) const;
+  typename enable_if<IsString<TChar*>::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<const TDerived&>(*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