ソースを参照

VariantImpl: extract `asOwnedString()`

Benoit Blanchon 6 ヶ月 前
コミット
372f2f2767
1 ファイル変更23 行追加14 行削除
  1. 23 14
      src/ArduinoJson/Variant/VariantImpl.hpp

+ 23 - 14
src/ArduinoJson/Variant/VariantImpl.hpp

@@ -64,13 +64,15 @@ class VariantImpl {
       case VariantType::LinkedString:
         return visit.visit(JsonString(asLinkedString(), true));
 
-      case VariantType::OwnedString:
-        return visit.visit(JsonString(data_->content.asOwnedString->data,
-                                      data_->content.asOwnedString->length));
+      case VariantType::OwnedString: {
+        auto s = asOwnedString();
+        return visit.visit(JsonString(s->data, s->length));
+      }
 
-      case VariantType::RawString:
-        return visit.visit(RawString(data_->content.asOwnedString->data,
-                                     data_->content.asOwnedString->length));
+      case VariantType::RawString: {
+        auto s = asOwnedString();
+        return visit.visit(RawString(s->data, s->length));
+      }
 
       case VariantType::Int32:
         return visit.visit(static_cast<JsonInteger>(data_->content.asInt32));
@@ -160,7 +162,7 @@ class VariantImpl {
         str = asLinkedString();
         break;
       case VariantType::OwnedString:
-        str = data_->content.asOwnedString->data;
+        str = asOwnedString()->data;
         break;
       case VariantType::Float:
         return static_cast<T>(data_->content.asFloat);
@@ -206,7 +208,7 @@ class VariantImpl {
         str = asLinkedString();
         break;
       case VariantType::OwnedString:
-        str = data_->content.asOwnedString->data;
+        str = asOwnedString()->data;
         break;
       case VariantType::Float:
         return convertNumber<T>(data_->content.asFloat);
@@ -224,9 +226,10 @@ class VariantImpl {
 
   JsonString asRawString() const {
     switch (type()) {
-      case VariantType::RawString:
-        return JsonString(data_->content.asOwnedString->data,
-                          data_->content.asOwnedString->length);
+      case VariantType::RawString: {
+        auto s = asOwnedString();
+        return JsonString(s->data, s->length);
+      }
       default:
         return JsonString();
     }
@@ -243,14 +246,20 @@ class VariantImpl {
         return JsonString(data_->content.asTinyString);
       case VariantType::LinkedString:
         return JsonString(asLinkedString(), true);
-      case VariantType::OwnedString:
-        return JsonString(data_->content.asOwnedString->data,
-                          data_->content.asOwnedString->length);
+      case VariantType::OwnedString: {
+        auto s = asOwnedString();
+        return JsonString(s->data, s->length);
+      }
       default:
         return JsonString();
     }
   }
 
+  StringNode* asOwnedString() const {
+    ARDUINOJSON_ASSERT(type() & VariantTypeBits::OwnedStringBit);
+    return data_->content.asOwnedString;
+  }
+
 #if ARDUINOJSON_USE_8_BYTE_POOL
   const EightByteValue* getEightByte() const {
     return type() & VariantTypeBits::EightByteBit