Skip to content

Commit 8a9a91a

Browse files
committed
VariantImpl: extract asStringNode()
1 parent 736d736 commit 8a9a91a

File tree

1 file changed

+23
-14
lines changed

1 file changed

+23
-14
lines changed

src/ArduinoJson/Variant/VariantImpl.hpp

Lines changed: 23 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -61,13 +61,15 @@ class VariantImpl {
6161
case VariantType::TinyString:
6262
return visit.visit(JsonString(data_->content.asTinyString));
6363

64-
case VariantType::LongString:
65-
return visit.visit(JsonString(data_->content.asStringNode->data,
66-
data_->content.asStringNode->length));
64+
case VariantType::LongString: {
65+
auto s = asStringNode();
66+
return visit.visit(JsonString(s->data, s->length));
67+
}
6768

68-
case VariantType::RawString:
69-
return visit.visit(RawString(data_->content.asStringNode->data,
70-
data_->content.asStringNode->length));
69+
case VariantType::RawString: {
70+
auto s = asStringNode();
71+
return visit.visit(RawString(s->data, s->length));
72+
}
7173

7274
case VariantType::Int32:
7375
return visit.visit(static_cast<JsonInteger>(data_->content.asInt32));
@@ -154,7 +156,7 @@ class VariantImpl {
154156
str = data_->content.asTinyString;
155157
break;
156158
case VariantType::LongString:
157-
str = data_->content.asStringNode->data;
159+
str = asStringNode()->data;
158160
break;
159161
case VariantType::Float:
160162
return static_cast<T>(data_->content.asFloat);
@@ -197,7 +199,7 @@ class VariantImpl {
197199
str = data_->content.asTinyString;
198200
break;
199201
case VariantType::LongString:
200-
str = data_->content.asStringNode->data;
202+
str = asStringNode()->data;
201203
break;
202204
case VariantType::Float:
203205
return convertNumber<T>(data_->content.asFloat);
@@ -215,9 +217,10 @@ class VariantImpl {
215217

216218
JsonString asRawString() const {
217219
switch (type()) {
218-
case VariantType::RawString:
219-
return JsonString(data_->content.asStringNode->data,
220-
data_->content.asStringNode->length);
220+
case VariantType::RawString: {
221+
auto s = asStringNode();
222+
return JsonString(s->data, s->length);
223+
}
221224
default:
222225
return JsonString();
223226
}
@@ -227,14 +230,20 @@ class VariantImpl {
227230
switch (type()) {
228231
case VariantType::TinyString:
229232
return JsonString(data_->content.asTinyString);
230-
case VariantType::LongString:
231-
return JsonString(data_->content.asStringNode->data,
232-
data_->content.asStringNode->length);
233+
case VariantType::LongString: {
234+
auto s = asStringNode();
235+
return JsonString(s->data, s->length);
236+
}
233237
default:
234238
return JsonString();
235239
}
236240
}
237241

242+
StringNode* asStringNode() const {
243+
ARDUINOJSON_ASSERT(type() & VariantTypeBits::OwnedStringBit);
244+
return data_->content.asStringNode;
245+
}
246+
238247
#if ARDUINOJSON_USE_8_BYTE_POOL
239248
const EightByteValue* getEightByte() const {
240249
return type() & VariantTypeBits::EightByteBit

0 commit comments

Comments
 (0)