mirror of
https://github.com/bblanchon/ArduinoJson.git
synced 2025-07-30 18:57:32 +02:00
JsonArrayConst: replace ArrayData*
member with VariantData*
This commit is contained in:
@ -37,7 +37,7 @@ class JsonArray : public detail::VariantOperators<JsonArray> {
|
|||||||
// Returns a read-only reference to the array.
|
// Returns a read-only reference to the array.
|
||||||
// https://arduinojson.org/v7/api/jsonarrayconst/
|
// https://arduinojson.org/v7/api/jsonarrayconst/
|
||||||
operator JsonArrayConst() const {
|
operator JsonArrayConst() const {
|
||||||
return JsonArrayConst(data_, resources_);
|
return JsonArrayConst(getData(), resources_);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Appends a new (empty) element to the array.
|
// Appends a new (empty) element to the array.
|
||||||
|
@ -24,9 +24,10 @@ class JsonArrayConst : public detail::VariantOperators<JsonArrayConst> {
|
|||||||
// Returns an iterator to the first element of the array.
|
// Returns an iterator to the first element of the array.
|
||||||
// https://arduinojson.org/v7/api/jsonarrayconst/begin/
|
// https://arduinojson.org/v7/api/jsonarrayconst/begin/
|
||||||
iterator begin() const {
|
iterator begin() const {
|
||||||
if (!data_)
|
auto array = detail::VariantData::asArray(data_);
|
||||||
|
if (!array)
|
||||||
return iterator();
|
return iterator();
|
||||||
return iterator(data_->createIterator(resources_), resources_);
|
return iterator(array->createIterator(resources_), resources_);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Returns an iterator to the element following the last element of the array.
|
// Returns an iterator to the element following the last element of the array.
|
||||||
@ -39,7 +40,7 @@ class JsonArrayConst : public detail::VariantOperators<JsonArrayConst> {
|
|||||||
JsonArrayConst() : data_(0), resources_(0) {}
|
JsonArrayConst() : data_(0), resources_(0) {}
|
||||||
|
|
||||||
// INTERNAL USE ONLY
|
// INTERNAL USE ONLY
|
||||||
JsonArrayConst(const detail::ArrayData* data,
|
JsonArrayConst(const detail::VariantData* data,
|
||||||
const detail::ResourceManager* resources)
|
const detail::ResourceManager* resources)
|
||||||
: data_(data), resources_(resources) {}
|
: data_(data), resources_(resources) {}
|
||||||
|
|
||||||
@ -49,7 +50,7 @@ class JsonArrayConst : public detail::VariantOperators<JsonArrayConst> {
|
|||||||
detail::enable_if_t<detail::is_integral<T>::value, int> = 0>
|
detail::enable_if_t<detail::is_integral<T>::value, int> = 0>
|
||||||
JsonVariantConst operator[](T index) const {
|
JsonVariantConst operator[](T index) const {
|
||||||
return JsonVariantConst(
|
return JsonVariantConst(
|
||||||
detail::ArrayData::getElement(data_, size_t(index), resources_),
|
detail::VariantData::getElement(data_, size_t(index), resources_),
|
||||||
resources_);
|
resources_);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -71,13 +72,13 @@ class JsonArrayConst : public detail::VariantOperators<JsonArrayConst> {
|
|||||||
// Returns true if the reference is unbound.
|
// Returns true if the reference is unbound.
|
||||||
// https://arduinojson.org/v7/api/jsonarrayconst/isnull/
|
// https://arduinojson.org/v7/api/jsonarrayconst/isnull/
|
||||||
bool isNull() const {
|
bool isNull() const {
|
||||||
return data_ == 0;
|
return !data_ || !data_->isArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Returns true if the reference is bound.
|
// Returns true if the reference is bound.
|
||||||
// https://arduinojson.org/v7/api/jsonarrayconst/isnull/
|
// https://arduinojson.org/v7/api/jsonarrayconst/isnull/
|
||||||
operator bool() const {
|
operator bool() const {
|
||||||
return data_ != 0;
|
return !isNull();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Returns the depth (nesting level) of the array.
|
// Returns the depth (nesting level) of the array.
|
||||||
@ -100,10 +101,10 @@ class JsonArrayConst : public detail::VariantOperators<JsonArrayConst> {
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
const detail::VariantData* getData() const {
|
const detail::VariantData* getData() const {
|
||||||
return collectionToVariant(data_);
|
return data_;
|
||||||
}
|
}
|
||||||
|
|
||||||
const detail::ArrayData* data_;
|
const detail::VariantData* data_;
|
||||||
const detail::ResourceManager* resources_;
|
const detail::ResourceManager* resources_;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -329,9 +329,7 @@ struct Converter<JsonArrayConst> : private detail::VariantAttorney {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static JsonArrayConst fromJson(JsonVariantConst src) {
|
static JsonArrayConst fromJson(JsonVariantConst src) {
|
||||||
auto data = getData(src);
|
return JsonArrayConst(getData(src), getResourceManager(src));
|
||||||
auto array = data ? data->asArray() : nullptr;
|
|
||||||
return JsonArrayConst(array, getResourceManager(src));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool checkJson(JsonVariantConst src) {
|
static bool checkJson(JsonVariantConst src) {
|
||||||
|
@ -30,7 +30,8 @@ class VisitorAdapter {
|
|||||||
: visitor_(&visitor), resources_(resources) {}
|
: visitor_(&visitor), resources_(resources) {}
|
||||||
|
|
||||||
result_type visit(const ArrayData& value) {
|
result_type visit(const ArrayData& value) {
|
||||||
return visitor_->visit(JsonArrayConst(&value, resources_));
|
return visitor_->visit(
|
||||||
|
JsonArrayConst(collectionToVariant(&value), resources_));
|
||||||
}
|
}
|
||||||
|
|
||||||
result_type visit(const ObjectData& value) {
|
result_type visit(const ObjectData& value) {
|
||||||
|
@ -182,6 +182,10 @@ class VariantData {
|
|||||||
return const_cast<VariantData*>(this)->asArray();
|
return const_cast<VariantData*>(this)->asArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const ArrayData* asArray(const VariantData* var) {
|
||||||
|
return var ? var->asArray() : 0;
|
||||||
|
}
|
||||||
|
|
||||||
CollectionData* asCollection() {
|
CollectionData* asCollection() {
|
||||||
return isCollection() ? &content_.asCollection : 0;
|
return isCollection() ? &content_.asCollection : 0;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user