mirror of
https://github.com/bblanchon/ArduinoJson.git
synced 2025-07-31 11:17:34 +02:00
CollectionIterator: add value()
member function
This commit is contained in:
@ -35,7 +35,7 @@ class JsonArrayIterator {
|
|||||||
: iterator_(iterator), resources_(resources) {}
|
: iterator_(iterator), resources_(resources) {}
|
||||||
|
|
||||||
JsonVariant operator*() {
|
JsonVariant operator*() {
|
||||||
return JsonVariant(iterator_.data(), resources_);
|
return JsonVariant(iterator_.value(resources_));
|
||||||
}
|
}
|
||||||
Ptr<JsonVariant> operator->() {
|
Ptr<JsonVariant> operator->() {
|
||||||
return operator*();
|
return operator*();
|
||||||
@ -69,7 +69,7 @@ class JsonArrayConstIterator {
|
|||||||
: iterator_(iterator), resources_(resources) {}
|
: iterator_(iterator), resources_(resources) {}
|
||||||
|
|
||||||
JsonVariantConst operator*() const {
|
JsonVariantConst operator*() const {
|
||||||
return JsonVariantConst(iterator_.data(), resources_);
|
return JsonVariantConst(iterator_.value(resources_));
|
||||||
}
|
}
|
||||||
Ptr<JsonVariantConst> operator->() {
|
Ptr<JsonVariantConst> operator->() {
|
||||||
return operator*();
|
return operator*();
|
||||||
|
@ -19,6 +19,11 @@ inline void CollectionIterator::next(const ResourceManager* resources) {
|
|||||||
currentId_ = nextId;
|
currentId_ = nextId;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline VariantImpl CollectionIterator::value(ResourceManager* resources) const {
|
||||||
|
ARDUINOJSON_ASSERT(slot_ != nullptr);
|
||||||
|
return VariantImpl(slot_, resources);
|
||||||
|
}
|
||||||
|
|
||||||
inline VariantImpl::iterator VariantImpl::createIterator() const {
|
inline VariantImpl::iterator VariantImpl::createIterator() const {
|
||||||
if (!data_ || !data_->isCollection())
|
if (!data_ || !data_->isCollection())
|
||||||
return iterator();
|
return iterator();
|
||||||
@ -107,8 +112,7 @@ inline size_t VariantImpl::nesting() const {
|
|||||||
return 0;
|
return 0;
|
||||||
size_t maxChildNesting = 0;
|
size_t maxChildNesting = 0;
|
||||||
for (auto it = createIterator(); !it.done(); it.next(resources_)) {
|
for (auto it = createIterator(); !it.done(); it.next(resources_)) {
|
||||||
VariantImpl variant(it.data(), resources_);
|
auto childNesting = it.value(resources_).nesting();
|
||||||
size_t childNesting = variant.nesting();
|
|
||||||
if (childNesting > maxChildNesting)
|
if (childNesting > maxChildNesting)
|
||||||
maxChildNesting = childNesting;
|
maxChildNesting = childNesting;
|
||||||
}
|
}
|
||||||
|
@ -13,6 +13,7 @@ ARDUINOJSON_BEGIN_PRIVATE_NAMESPACE
|
|||||||
|
|
||||||
struct VariantData;
|
struct VariantData;
|
||||||
class ResourceManager;
|
class ResourceManager;
|
||||||
|
class VariantImpl;
|
||||||
|
|
||||||
class CollectionIterator {
|
class CollectionIterator {
|
||||||
friend class VariantImpl;
|
friend class VariantImpl;
|
||||||
@ -22,6 +23,8 @@ class CollectionIterator {
|
|||||||
|
|
||||||
void next(const ResourceManager* resources);
|
void next(const ResourceManager* resources);
|
||||||
|
|
||||||
|
VariantImpl value(ResourceManager* resources) const;
|
||||||
|
|
||||||
bool done() const {
|
bool done() const {
|
||||||
return slot_ == nullptr;
|
return slot_ == nullptr;
|
||||||
}
|
}
|
||||||
@ -34,21 +37,6 @@ class CollectionIterator {
|
|||||||
return slot_ != other.slot_;
|
return slot_ != other.slot_;
|
||||||
}
|
}
|
||||||
|
|
||||||
VariantData* operator->() {
|
|
||||||
ARDUINOJSON_ASSERT(slot_ != nullptr);
|
|
||||||
return data();
|
|
||||||
}
|
|
||||||
|
|
||||||
VariantData& operator*() {
|
|
||||||
ARDUINOJSON_ASSERT(slot_ != nullptr);
|
|
||||||
return *data();
|
|
||||||
}
|
|
||||||
|
|
||||||
const VariantData& operator*() const {
|
|
||||||
ARDUINOJSON_ASSERT(slot_ != nullptr);
|
|
||||||
return *data();
|
|
||||||
}
|
|
||||||
|
|
||||||
VariantData* data() {
|
VariantData* data() {
|
||||||
return slot_;
|
return slot_;
|
||||||
}
|
}
|
||||||
|
@ -26,8 +26,7 @@ class PrettyJsonSerializer : public JsonSerializer<TWriter> {
|
|||||||
nesting_++;
|
nesting_++;
|
||||||
while (!it.done()) {
|
while (!it.done()) {
|
||||||
indent();
|
indent();
|
||||||
VariantImpl(it.data(), base::resources_).accept(*this);
|
it.value(base::resources_).accept(*this);
|
||||||
|
|
||||||
it.next(base::resources_);
|
it.next(base::resources_);
|
||||||
base::write(it.done() ? "\r\n" : ",\r\n");
|
base::write(it.done() ? "\r\n" : ",\r\n");
|
||||||
}
|
}
|
||||||
@ -49,7 +48,7 @@ class PrettyJsonSerializer : public JsonSerializer<TWriter> {
|
|||||||
while (!it.done()) {
|
while (!it.done()) {
|
||||||
if (isKey)
|
if (isKey)
|
||||||
indent();
|
indent();
|
||||||
VariantImpl(it.data(), base::resources_).accept(*this);
|
it.value(base::resources_).accept(*this);
|
||||||
it.next(base::resources_);
|
it.next(base::resources_);
|
||||||
if (isKey)
|
if (isKey)
|
||||||
base::write(": ");
|
base::write(": ");
|
||||||
|
@ -18,10 +18,9 @@ class JsonPair {
|
|||||||
JsonPair(detail::VariantImpl::iterator iterator,
|
JsonPair(detail::VariantImpl::iterator iterator,
|
||||||
detail::ResourceManager* resources) {
|
detail::ResourceManager* resources) {
|
||||||
if (!iterator.done()) {
|
if (!iterator.done()) {
|
||||||
detail::VariantImpl variant(iterator.data(), resources);
|
key_ = iterator.value(resources).asString();
|
||||||
key_ = variant.asString();
|
|
||||||
iterator.next(resources);
|
iterator.next(resources);
|
||||||
value_ = JsonVariant(iterator.data(), resources);
|
value_ = JsonVariant(iterator.value(resources));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -47,10 +46,9 @@ class JsonPairConst {
|
|||||||
JsonPairConst(detail::VariantImpl::iterator iterator,
|
JsonPairConst(detail::VariantImpl::iterator iterator,
|
||||||
detail::ResourceManager* resources) {
|
detail::ResourceManager* resources) {
|
||||||
if (!iterator.done()) {
|
if (!iterator.done()) {
|
||||||
detail::VariantImpl variant(iterator.data(), resources);
|
key_ = iterator.value(resources).asString();
|
||||||
key_ = variant.asString();
|
|
||||||
iterator.next(resources);
|
iterator.next(resources);
|
||||||
value_ = JsonVariantConst(iterator.data(), resources);
|
value_ = JsonVariantConst(iterator.value(resources));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -34,8 +34,8 @@ inline VariantImpl::iterator VariantImpl::findKey(TAdaptedString key) const {
|
|||||||
return iterator();
|
return iterator();
|
||||||
bool isKey = true;
|
bool isKey = true;
|
||||||
for (auto it = createIterator(); !it.done(); it.next(resources_)) {
|
for (auto it = createIterator(); !it.done(); it.next(resources_)) {
|
||||||
VariantImpl variant(it.data(), resources_);
|
if (isKey &&
|
||||||
if (isKey && stringEquals(key, adaptString(variant.asString())))
|
stringEquals(key, adaptString(it.value(resources_).asString())))
|
||||||
return it;
|
return it;
|
||||||
isKey = !isKey;
|
isKey = !isKey;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user