Parcourir la source

VariantImpl: move out-of-class definitions back in the class

Benoit Blanchon il y a 6 mois
Parent
commit
2fa8b9664c
1 fichiers modifiés avec 75 ajouts et 87 suppressions
  1. 75 87
      src/ArduinoJson/Variant/VariantImpl.hpp

+ 75 - 87
src/ArduinoJson/Variant/VariantImpl.hpp

@@ -441,14 +441,68 @@ class VariantImpl {
   }
 
   template <typename T>
-  void setRawString(SerializedValue<T> value);
+  void setRawString(SerializedValue<T> value) {
+    if (!data_)
+      return;
+    auto dup = resources_->saveString(adaptString(value.data(), value.size()));
+    if (dup)
+      data_->setRawString(dup);
+  }
 
   template <typename TAdaptedString>
-  bool setString(TAdaptedString value);
+  bool setString(TAdaptedString value) {
+    ARDUINOJSON_ASSERT(isNull());  // must call clear() first
+
+    if (!data_)
+      return false;
+
+    if (value.isNull())
+      return false;
 
-  bool setLinkedString(const char* s);
+    if (value.isStatic())
+      return setLinkedString(value.data());
 
-  void empty();
+    if (isTinyString(value, value.size())) {
+      data_->setTinyString(value);
+      return true;
+    }
+
+    auto dup = resources_->saveString(value);
+    if (dup) {
+      data_->setOwnedString(dup);
+      return true;
+    }
+
+    return false;
+  }
+
+  bool setLinkedString(const char* s) {
+    ARDUINOJSON_ASSERT(isNull());  // must call clear() first
+    ARDUINOJSON_ASSERT(s);
+
+    auto slotId = resources_->saveStaticString(s);
+    if (slotId == NULL_SLOT)
+      return false;
+
+    data_->type = VariantType::LinkedString;
+    data_->content.asSlotId = slotId;
+    return true;
+  }
+
+  void empty() {
+    auto coll = getCollectionData();
+
+    auto next = coll->head;
+    while (next != NULL_SLOT) {
+      auto currId = next;
+      auto slot = getVariant(next);
+      next = slot->next;
+      freeVariant({slot, currId});
+    }
+
+    coll->head = NULL_SLOT;
+    coll->tail = NULL_SLOT;
+  }
 
   size_t size() const;
 
@@ -457,7 +511,23 @@ class VariantImpl {
   }
 
   // Release the resources used by this variant and set it to null.
-  void clear();
+  void clear() {
+    if (!data_)
+      return;
+
+    if (data_->type & VariantTypeBits::OwnedStringBit)
+      resources_->dereferenceString(data_->content.asOwnedString->data);
+
+#if ARDUINOJSON_USE_8_BYTE_POOL
+    if (data_->type & VariantTypeBits::EightByteBit)
+      resources_->freeEightByte(data_->content.asSlotId);
+#endif
+
+    if (data_->type & VariantTypeBits::CollectionMask)
+      empty();
+
+    data_->type = VariantType::Null;
+  }
 
  private:
   template <typename TAdaptedString>
@@ -495,86 +565,4 @@ class VariantImpl {
   }
 };
 
-template <typename T>
-inline void VariantImpl::setRawString(SerializedValue<T> value) {
-  if (!data_)
-    return;
-  auto dup = resources_->saveString(adaptString(value.data(), value.size()));
-  if (dup)
-    data_->setRawString(dup);
-}
-
-inline bool VariantImpl::setLinkedString(const char* s) {
-  ARDUINOJSON_ASSERT(isNull());  // must call clear() first
-  ARDUINOJSON_ASSERT(s);
-
-  auto slotId = resources_->saveStaticString(s);
-  if (slotId == NULL_SLOT)
-    return false;
-
-  data_->type = VariantType::LinkedString;
-  data_->content.asSlotId = slotId;
-  return true;
-}
-
-template <typename TAdaptedString>
-inline bool VariantImpl::setString(TAdaptedString value) {
-  ARDUINOJSON_ASSERT(isNull());  // must call clear() first
-
-  if (!data_)
-    return false;
-
-  if (value.isNull())
-    return false;
-
-  if (value.isStatic())
-    return setLinkedString(value.data());
-
-  if (isTinyString(value, value.size())) {
-    data_->setTinyString(value);
-    return true;
-  }
-
-  auto dup = resources_->saveString(value);
-  if (dup) {
-    data_->setOwnedString(dup);
-    return true;
-  }
-
-  return false;
-}
-
-inline void VariantImpl::clear() {
-  if (!data_)
-    return;
-
-  if (data_->type & VariantTypeBits::OwnedStringBit)
-    resources_->dereferenceString(data_->content.asOwnedString->data);
-
-#if ARDUINOJSON_USE_8_BYTE_POOL
-  if (data_->type & VariantTypeBits::EightByteBit)
-    resources_->freeEightByte(data_->content.asSlotId);
-#endif
-
-  if (data_->type & VariantTypeBits::CollectionMask)
-    empty();
-
-  data_->type = VariantType::Null;
-}
-
-inline void VariantImpl::empty() {
-  auto coll = getCollectionData();
-
-  auto next = coll->head;
-  while (next != NULL_SLOT) {
-    auto currId = next;
-    auto slot = getVariant(next);
-    next = slot->next;
-    freeVariant({slot, currId});
-  }
-
-  coll->head = NULL_SLOT;
-  coll->tail = NULL_SLOT;
-}
-
 ARDUINOJSON_END_PRIVATE_NAMESPACE