Skip to content

Commit b827bb9

Browse files
committed
VariantImpl: add toArrayIfNull() and toObjectIfNull()
1 parent 810f264 commit b827bb9

File tree

7 files changed

+16
-40
lines changed

7 files changed

+16
-40
lines changed

src/ArduinoJson/Array/ElementProxy.hpp

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,7 @@ class ElementProxy : public VariantRefBase<ElementProxy<TUpstream>>,
5757

5858
VariantImpl getOrCreateImpl() const {
5959
auto impl = VariantAttorney::getOrCreateImpl(upstream_);
60-
auto data = impl.data();
61-
if (data)
62-
data->getOrCreateArray();
60+
impl.toArrayIfNull();
6361
return VariantImpl(impl.getOrAddElement(index_), impl.resources());
6462
}
6563

src/ArduinoJson/Array/JsonArray.hpp

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,6 @@ class JsonArray : public detail::VariantOperators<JsonArray> {
2525
// INTERNAL USE ONLY
2626
JsonArray(detail::VariantImpl impl) : impl_(impl) {}
2727

28-
// INTERNAL USE ONLY
29-
JsonArray(detail::VariantData* data, detail::ResourceManager* resources)
30-
: impl_(data, resources) {}
31-
3228
// Returns a JsonVariant pointing to the array.
3329
// https://arduinojson.org/v7/api/jsonvariant/
3430
operator JsonVariant() {

src/ArduinoJson/Document/JsonDocument.hpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -397,7 +397,9 @@ class JsonDocument : public detail::VariantOperators<const JsonDocument&> {
397397
}
398398

399399
JsonArray getOrCreateArray() {
400-
return JsonArray(data_.getOrCreateArray(), &resources_);
400+
auto impl = getImpl();
401+
impl.toArrayIfNull();
402+
return JsonArray(impl);
401403
}
402404

403405
JsonVariant getVariant() {

src/ArduinoJson/Object/MemberProxy.hpp

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,9 +58,7 @@ class MemberProxy
5858

5959
VariantImpl getOrCreateImpl() const {
6060
auto impl = VariantAttorney::getOrCreateImpl(upstream_);
61-
auto data = impl.data();
62-
if (data)
63-
data->getOrCreateObject();
61+
impl.toObjectIfNull();
6462
return VariantImpl(impl.getOrAddMember(key_), impl.resources());
6563
}
6664

src/ArduinoJson/Variant/VariantData.hpp

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -106,28 +106,6 @@ struct VariantData {
106106
VariantData* toObject() {
107107
return toCollection(VariantType::Object);
108108
}
109-
110-
VariantData* getOrCreateArray() {
111-
switch (type) {
112-
case VariantType::Null:
113-
return toArray();
114-
case VariantType::Array:
115-
return this;
116-
default:
117-
return nullptr;
118-
}
119-
}
120-
121-
VariantData* getOrCreateObject() {
122-
switch (type) {
123-
case VariantType::Null:
124-
return toObject();
125-
case VariantType::Object:
126-
return this;
127-
default:
128-
return nullptr;
129-
}
130-
}
131109
};
132110

133111
ARDUINOJSON_END_PRIVATE_NAMESPACE

src/ArduinoJson/Variant/VariantImpl.hpp

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -359,9 +359,6 @@ class VariantImpl {
359359
case VariantType::RawString:
360360
return setRawString(adaptString(src.asRawString()));
361361

362-
case VariantType::LinkedString:
363-
return setLinkedString(src.asLinkedString());
364-
365362
case VariantType::OwnedString:
366363
return setOwnedString(adaptString(src.asString()));
367364

@@ -494,7 +491,6 @@ class VariantImpl {
494491
return true;
495492
}
496493

497-
498494
if (isTinyString(value, value.size())) {
499495
data_->setTinyString(value);
500496
return true;
@@ -513,6 +509,16 @@ class VariantImpl {
513509
return true;
514510
}
515511

512+
void toArrayIfNull() {
513+
if (data_ && data_->type == VariantType::Null)
514+
data_->toArray();
515+
}
516+
517+
void toObjectIfNull() {
518+
if (data_ && data_->type == VariantType::Null)
519+
data_->toObject();
520+
}
521+
516522
void empty() {
517523
auto coll = getCollectionData();
518524

src/ArduinoJson/Variant/VariantRefBaseImpl.hpp

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -143,9 +143,7 @@ inline bool VariantRefBase<TDerived>::doSet(const T& value, true_type) const {
143143
template <typename TDerived>
144144
inline JsonArray VariantRefBase<TDerived>::getOrCreateArray() const {
145145
auto impl = getOrCreateImpl();
146-
auto data = impl.data();
147-
if (data)
148-
data->getOrCreateArray();
146+
impl.toArrayIfNull();
149147
return JsonArray(impl);
150148
}
151149

0 commit comments

Comments
 (0)