Просмотр исходного кода

VariantImpl: extract static `size()`

Benoit Blanchon 3 месяцев назад
Родитель
Сommit
6dbdeca58a
1 измененных файлов с 16 добавлено и 5 удалено
  1. 16 5
      src/ArduinoJson/Variant/VariantImpl.hpp

+ 16 - 5
src/ArduinoJson/Variant/VariantImpl.hpp

@@ -537,13 +537,24 @@ class VariantImpl {
   }
 
   size_t size() {
-    if (isObject())
-      return asObject().size();
+    if (!data_)
+      return 0;
 
-    if (isArray())
-      return asArray().size();
+    return size(data_, resources_);
+  }
+
+  static size_t size(VariantData* data, ResourceManager* resources) {
+    ARDUINOJSON_ASSERT(data != nullptr);
+    ARDUINOJSON_ASSERT(resources != nullptr);
+
+    size_t n = CollectionImpl(data, resources).size();
+
+    if (data->type == VariantType::Object) {
+      ARDUINOJSON_ASSERT((n % 2) == 0);
+      n /= 2;
+    }
 
-    return 0;
+    return n;
   }
 
   ArrayImpl toArray() {