Jelajahi Sumber

Added a default implementation in the Visitor class

Benoit Blanchon 5 tahun lalu
induk
melakukan
22904a48a6

+ 1 - 40
src/ArduinoJson/Array/Utilities.hpp

@@ -6,6 +6,7 @@
 
 #include <ArduinoJson/Array/ArrayRef.hpp>
 #include <ArduinoJson/Document/JsonDocument.hpp>
+#include <ArduinoJson/Variant/Visitor.hpp>
 
 namespace ARDUINOJSON_NAMESPACE {
 
@@ -81,38 +82,6 @@ class ArrayCopier1D : public Visitor<size_t> {
     return size;
   }
 
-  size_t visitObject(const CollectionData&) {
-    return 0;
-  }
-
-  size_t visitFloat(Float) {
-    return 0;
-  }
-
-  size_t visitString(const char*) {
-    return 0;
-  }
-
-  size_t visitRawJson(const char*, size_t) {
-    return 0;
-  }
-
-  size_t visitNegativeInteger(UInt) {
-    return 0;
-  }
-
-  size_t visitPositiveInteger(UInt) {
-    return 0;
-  }
-
-  size_t visitBoolean(bool) {
-    return 0;
-  }
-
-  size_t visitNull() {
-    return 0;
-  }
-
  private:
   T* _destination;
   size_t _capacity;
@@ -132,14 +101,6 @@ class ArrayCopier2D : public Visitor<void> {
       slot = slot->next();
     }
   }
-  void visitObject(const CollectionData&) {}
-  void visitFloat(Float) {}
-  void visitString(const char*) {}
-  void visitRawJson(const char*, size_t) {}
-  void visitNegativeInteger(UInt) {}
-  void visitPositiveInteger(UInt) {}
-  void visitBoolean(bool) {}
-  void visitNull() {}
 
  private:
   T (*_destination)[N1][N2];

+ 1 - 6
src/ArduinoJson/Misc/Visitable.hpp

@@ -8,11 +8,6 @@
 
 namespace ARDUINOJSON_NAMESPACE {
 
-template <typename TResult>
-struct Visitor {
-  typedef TResult result_type;
-};
-
 struct Visitable {
   // template<Visitor>
   // void accept(Visitor&) const;
@@ -22,5 +17,5 @@ template <typename T>
 struct IsVisitable : is_base_of<Visitable, T> {};
 
 template <typename T>
-struct IsVisitable<T&> : IsVisitable<T> {};
+struct IsVisitable<T &> : IsVisitable<T> {};
 }  // namespace ARDUINOJSON_NAMESPACE

+ 2 - 29
src/ArduinoJson/Variant/VariantCompare.hpp

@@ -9,40 +9,13 @@
 #include <ArduinoJson/Numbers/arithmeticCompare.hpp>
 #include <ArduinoJson/Polyfills/type_traits.hpp>
 #include <ArduinoJson/Strings/IsString.hpp>
+#include <ArduinoJson/Variant/Visitor.hpp>
 
 namespace ARDUINOJSON_NAMESPACE {
 
 class CollectionData;
 
-struct ComparerBase : Visitor<CompareResult> {
-  CompareResult visitArray(const CollectionData &) {
-    return COMPARE_RESULT_DIFFER;
-  }
-  CompareResult visitBoolean(bool) {
-    return COMPARE_RESULT_DIFFER;
-  }
-  CompareResult visitFloat(Float) {
-    return COMPARE_RESULT_DIFFER;
-  }
-  CompareResult visitNegativeInteger(UInt) {
-    return COMPARE_RESULT_DIFFER;
-  }
-  CompareResult visitNull() {
-    return COMPARE_RESULT_DIFFER;
-  }
-  CompareResult visitObject(const CollectionData &) {
-    return COMPARE_RESULT_DIFFER;
-  }
-  CompareResult visitPositiveInteger(UInt) {
-    return COMPARE_RESULT_DIFFER;
-  }
-  CompareResult visitRawJson(const char *, size_t) {
-    return COMPARE_RESULT_DIFFER;
-  }
-  CompareResult visitString(const char *) {
-    return COMPARE_RESULT_DIFFER;
-  }
-};
+struct ComparerBase : Visitor<CompareResult> {};
 
 template <typename T, typename Enable = void>
 struct Comparer;

+ 54 - 0
src/ArduinoJson/Variant/Visitor.hpp

@@ -0,0 +1,54 @@
+// ArduinoJson - arduinojson.org
+// Copyright Benoit Blanchon 2014-2021
+// MIT License
+
+#pragma once
+
+#include <ArduinoJson/Collection/CollectionData.hpp>
+#include <ArduinoJson/Numbers/Float.hpp>
+#include <ArduinoJson/Numbers/Integer.hpp>
+
+namespace ARDUINOJSON_NAMESPACE {
+
+template <typename TResult>
+struct Visitor {
+  typedef TResult result_type;
+
+  TResult visitArray(const CollectionData &) {
+    return TResult();
+  }
+
+  TResult visitBoolean(bool) {
+    return TResult();
+  }
+
+  TResult visitFloat(Float) {
+    return TResult();
+  }
+
+  TResult visitNegativeInteger(UInt) {
+    return TResult();
+  }
+
+  TResult visitNull() {
+    return TResult();
+  }
+
+  TResult visitObject(const CollectionData &) {
+    return TResult();
+  }
+
+  TResult visitPositiveInteger(UInt) {
+    return TResult();
+  }
+
+  TResult visitRawJson(const char *, size_t) {
+    return TResult();
+  }
+
+  TResult visitString(const char *) {
+    return TResult();
+  }
+};
+
+}  // namespace ARDUINOJSON_NAMESPACE