ソースを参照

CollectionIterator: add `value()` member function

Benoit Blanchon 7 ヶ月 前
コミット
dca5ba481f

+ 2 - 2
src/ArduinoJson/Array/JsonArrayIterator.hpp

@@ -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*();

+ 6 - 2
src/ArduinoJson/Collection/CollectionImpl.hpp

@@ -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;
   }

+ 3 - 15
src/ArduinoJson/Collection/CollectionIterator.hpp

@@ -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_;
   }

+ 2 - 3
src/ArduinoJson/Json/PrettyJsonSerializer.hpp

@@ -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(": ");

+ 4 - 6
src/ArduinoJson/Object/JsonPair.hpp

@@ -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));
     }
   }
 

+ 2 - 2
src/ArduinoJson/Object/ObjectImpl.hpp

@@ -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;
   }