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