Skip to content

Commit bd90d19

Browse files
committed
VariantImpl: add toArrayIfNull() and toObjectIfNull()
1 parent d397dc4 commit bd90d19

File tree

7 files changed

+16
-36
lines changed

7 files changed

+16
-36
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
@@ -98,28 +98,6 @@ struct VariantData {
9898
VariantData* toObject() {
9999
return toCollection(VariantType::Object);
100100
}
101-
102-
VariantData* getOrCreateArray() {
103-
switch (type) {
104-
case VariantType::Null:
105-
return toArray();
106-
case VariantType::Array:
107-
return this;
108-
default:
109-
return nullptr;
110-
}
111-
}
112-
113-
VariantData* getOrCreateObject() {
114-
switch (type) {
115-
case VariantType::Null:
116-
return toObject();
117-
case VariantType::Object:
118-
return this;
119-
default:
120-
return nullptr;
121-
}
122-
}
123101
};
124102

125103
ARDUINOJSON_END_PRIVATE_NAMESPACE

src/ArduinoJson/Variant/VariantImpl.hpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -493,6 +493,16 @@ class VariantImpl {
493493
return true;
494494
}
495495

496+
void toArrayIfNull() {
497+
if (data_ && data_->type == VariantType::Null)
498+
data_->toArray();
499+
}
500+
501+
void toObjectIfNull() {
502+
if (data_ && data_->type == VariantType::Null)
503+
data_->toObject();
504+
}
505+
496506
void empty() {
497507
auto coll = getCollectionData();
498508

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)