From 372f2f27676e706d5fb6bcaad9f2671b0827358f Mon Sep 17 00:00:00 2001 From: Benoit Blanchon Date: Wed, 16 Jul 2025 12:26:28 +0200 Subject: [PATCH] VariantImpl: extract `asOwnedString()` --- src/ArduinoJson/Variant/VariantImpl.hpp | 37 +++++++++++++++---------- 1 file changed, 23 insertions(+), 14 deletions(-) diff --git a/src/ArduinoJson/Variant/VariantImpl.hpp b/src/ArduinoJson/Variant/VariantImpl.hpp index 88263c00..47756f2b 100644 --- a/src/ArduinoJson/Variant/VariantImpl.hpp +++ b/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(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(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(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