Skip to content

Commit 56b269b

Browse files
committed
JsonArrayConst: replace ArrayData* member with VariantData*
1 parent 817998d commit 56b269b

File tree

5 files changed

+17
-13
lines changed

5 files changed

+17
-13
lines changed

src/ArduinoJson/Array/JsonArray.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ class JsonArray : public detail::VariantOperators<JsonArray> {
3737
// Returns a read-only reference to the array.
3838
// https://arduinojson.org/v7/api/jsonarrayconst/
3939
operator JsonArrayConst() const {
40-
return JsonArrayConst(data_, resources_);
40+
return JsonArrayConst(getData(), resources_);
4141
}
4242

4343
// Appends a new (empty) element to the array.

src/ArduinoJson/Array/JsonArrayConst.hpp

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,10 @@ class JsonArrayConst : public detail::VariantOperators<JsonArrayConst> {
2424
// Returns an iterator to the first element of the array.
2525
// https://arduinojson.org/v7/api/jsonarrayconst/begin/
2626
iterator begin() const {
27-
if (!data_)
27+
auto array = detail::VariantData::asArray(data_);
28+
if (!array)
2829
return iterator();
29-
return iterator(data_->createIterator(resources_), resources_);
30+
return iterator(array->createIterator(resources_), resources_);
3031
}
3132

3233
// Returns an iterator to the element following the last element of the array.
@@ -39,7 +40,7 @@ class JsonArrayConst : public detail::VariantOperators<JsonArrayConst> {
3940
JsonArrayConst() : data_(0), resources_(0) {}
4041

4142
// INTERNAL USE ONLY
42-
JsonArrayConst(const detail::ArrayData* data,
43+
JsonArrayConst(const detail::VariantData* data,
4344
const detail::ResourceManager* resources)
4445
: data_(data), resources_(resources) {}
4546

@@ -49,7 +50,7 @@ class JsonArrayConst : public detail::VariantOperators<JsonArrayConst> {
4950
detail::enable_if_t<detail::is_integral<T>::value, int> = 0>
5051
JsonVariantConst operator[](T index) const {
5152
return JsonVariantConst(
52-
detail::ArrayData::getElement(data_, size_t(index), resources_),
53+
detail::VariantData::getElement(data_, size_t(index), resources_),
5354
resources_);
5455
}
5556

@@ -71,13 +72,13 @@ class JsonArrayConst : public detail::VariantOperators<JsonArrayConst> {
7172
// Returns true if the reference is unbound.
7273
// https://arduinojson.org/v7/api/jsonarrayconst/isnull/
7374
bool isNull() const {
74-
return data_ == 0;
75+
return !data_ || !data_->isArray();
7576
}
7677

7778
// Returns true if the reference is bound.
7879
// https://arduinojson.org/v7/api/jsonarrayconst/isnull/
7980
operator bool() const {
80-
return data_ != 0;
81+
return !isNull();
8182
}
8283

8384
// Returns the depth (nesting level) of the array.
@@ -100,10 +101,10 @@ class JsonArrayConst : public detail::VariantOperators<JsonArrayConst> {
100101

101102
private:
102103
const detail::VariantData* getData() const {
103-
return collectionToVariant(data_);
104+
return data_;
104105
}
105106

106-
const detail::ArrayData* data_;
107+
const detail::VariantData* data_;
107108
const detail::ResourceManager* resources_;
108109
};
109110

src/ArduinoJson/Variant/ConverterImpl.hpp

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -329,9 +329,7 @@ struct Converter<JsonArrayConst> : private detail::VariantAttorney {
329329
}
330330

331331
static JsonArrayConst fromJson(JsonVariantConst src) {
332-
auto data = getData(src);
333-
auto array = data ? data->asArray() : nullptr;
334-
return JsonArrayConst(array, getResourceManager(src));
332+
return JsonArrayConst(getData(src), getResourceManager(src));
335333
}
336334

337335
static bool checkJson(JsonVariantConst src) {

src/ArduinoJson/Variant/JsonVariantVisitor.hpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,8 @@ class VisitorAdapter {
3030
: visitor_(&visitor), resources_(resources) {}
3131

3232
result_type visit(const ArrayData& value) {
33-
return visitor_->visit(JsonArrayConst(&value, resources_));
33+
return visitor_->visit(
34+
JsonArrayConst(collectionToVariant(&value), resources_));
3435
}
3536

3637
result_type visit(const ObjectData& value) {

src/ArduinoJson/Variant/VariantData.hpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,10 @@ class VariantData {
182182
return const_cast<VariantData*>(this)->asArray();
183183
}
184184

185+
static const ArrayData* asArray(const VariantData* var) {
186+
return var ? var->asArray() : 0;
187+
}
188+
185189
CollectionData* asCollection() {
186190
return isCollection() ? &content_.asCollection : 0;
187191
}

0 commit comments

Comments
 (0)