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

README: added a link to ARDUINOJSON_ENABLE_ARDUINO_STREAM

Benoit Blanchon 4 лет назад
Родитель
Сommit
c81e8fc93a
3 измененных файлов с 42 добавлено и 50 удалено
  1. 3 3
      README.md
  2. 1 1
      src/ArduinoJson/Variant/ConverterImpl.hpp
  3. 38 46
      src/ArduinoJson/Variant/VariantData.hpp

+ 3 - 3
README.md

@@ -34,8 +34,8 @@ ArduinoJson is a C++ JSON library for Arduino and IoT (Internet Of Things).
     * Deduplicates strings
     * Deduplicates strings
 * Versatile
 * Versatile
     * [Supports custom allocators (to use external RAM chip, for example)](https://arduinojson.org/v6/how-to/use-external-ram-on-esp32/?utm_source=github&utm_medium=readme)
     * [Supports custom allocators (to use external RAM chip, for example)](https://arduinojson.org/v6/how-to/use-external-ram-on-esp32/?utm_source=github&utm_medium=readme)
-    * Supports [Arduino's `String`](https://arduinojson.org/v6/api/config/enable_arduino_string/) and [STL's `std::string`](https://arduinojson.org/v6/api/config/enable_std_string/?utm_source=github&utm_medium=readme)
-    * Supports Arduino's `Stream` and [STL's `std::istream`/`std::ostream`](https://arduinojson.org/v6/api/config/enable_std_stream/?utm_source=github&utm_medium=readme)
+    * Supports [Arduino's `String`](https://arduinojson.org/v6/api/config/enable_arduino_string/?utm_source=github&utm_medium=readme) and [STL's `std::string`](https://arduinojson.org/v6/api/config/enable_std_string/?utm_source=github&utm_medium=readme)
+    * Supports [Arduino's `Stream`](https://arduinojson.org/v6/api/config/enable_arduino_stream/?utm_source=github&utm_medium=readme) and [STL's `std::istream`/`std::ostream`](https://arduinojson.org/v6/api/config/enable_std_stream/?utm_source=github&utm_medium=readme)
     * [Supports Flash strings](https://arduinojson.org/v6/api/config/enable_progmem/?utm_source=github&utm_medium=readme)
     * [Supports Flash strings](https://arduinojson.org/v6/api/config/enable_progmem/?utm_source=github&utm_medium=readme)
     * Supports [custom readers](https://arduinojson.org/v6/api/json/deserializejson/?utm_source=github&utm_medium=readme#custom-reader) and [custom writers](https://arduinojson.org/v6/api/json/serializejson/?utm_source=github&utm_medium=readme#custom-writer)
     * Supports [custom readers](https://arduinojson.org/v6/api/json/deserializejson/?utm_source=github&utm_medium=readme#custom-reader) and [custom writers](https://arduinojson.org/v6/api/json/serializejson/?utm_source=github&utm_medium=readme#custom-writer)
     * Supports custom converters
     * Supports custom converters
@@ -87,7 +87,7 @@ ArduinoJson is a C++ JSON library for Arduino and IoT (Internet Of Things).
     * [How-tos](https://arduinojson.org/v6/example/?utm_source=github&utm_medium=readme)
     * [How-tos](https://arduinojson.org/v6/example/?utm_source=github&utm_medium=readme)
     * [FAQ](https://arduinojson.org/v6/faq/?utm_source=github&utm_medium=readme)
     * [FAQ](https://arduinojson.org/v6/faq/?utm_source=github&utm_medium=readme)
     * [Book](https://arduinojson.org/book/?utm_source=github&utm_medium=readme)
     * [Book](https://arduinojson.org/book/?utm_source=github&utm_medium=readme)
-    * [Changelog](changelog.md)
+    * [Changelog](CHANGELOG.md)
 * Vibrant user community
 * Vibrant user community
     * Most popular of all Arduino libraries on [GitHub](https://github.com/search?o=desc&q=arduino+library&s=stars&type=Repositories) and [PlatformIO](https://platformio.org/lib/search)
     * Most popular of all Arduino libraries on [GitHub](https://github.com/search?o=desc&q=arduino+library&s=stars&type=Repositories) and [PlatformIO](https://platformio.org/lib/search)
     * [Used in hundreds of projects](https://www.hackster.io/search?i=projects&q=arduinojson)
     * [Used in hundreds of projects](https://www.hackster.io/search?i=projects&q=arduinojson)

+ 1 - 1
src/ArduinoJson/Variant/ConverterImpl.hpp

@@ -263,7 +263,7 @@ inline bool convertToJson(VariantRef variant, const ::Printable& value) {
     data->setNull();
     data->setNull();
     return false;
     return false;
   }
   }
-  data->setOwnedString(print.c_str());
+  data->setStringPointer(print.c_str(), storage_policies::store_by_copy());
   return true;
   return true;
 }
 }
 
 

+ 38 - 46
src/ArduinoJson/Variant/VariantData.hpp

@@ -244,64 +244,21 @@ class VariantData {
     setType(VALUE_IS_NULL);
     setType(VALUE_IS_NULL);
   }
   }
 
 
-  void setOwnedString(const char *s) {
+  void setStringPointer(const char *s, storage_policies::store_by_copy) {
     ARDUINOJSON_ASSERT(s != 0);
     ARDUINOJSON_ASSERT(s != 0);
     setType(VALUE_IS_OWNED_STRING);
     setType(VALUE_IS_OWNED_STRING);
     _content.asString = s;
     _content.asString = s;
   }
   }
 
 
-  void setLinkedString(const char *s) {
+  void setStringPointer(const char *s, storage_policies::store_by_address) {
     ARDUINOJSON_ASSERT(s != 0);
     ARDUINOJSON_ASSERT(s != 0);
     setType(VALUE_IS_LINKED_STRING);
     setType(VALUE_IS_LINKED_STRING);
     _content.asString = s;
     _content.asString = s;
   }
   }
 
 
-  void setStringPointer(const char *s, storage_policies::store_by_copy) {
-    setOwnedString(s);
-  }
-
-  void setStringPointer(const char *s, storage_policies::store_by_address) {
-    setLinkedString(s);
-  }
-
   template <typename TAdaptedString>
   template <typename TAdaptedString>
   bool setString(TAdaptedString value, MemoryPool *pool) {
   bool setString(TAdaptedString value, MemoryPool *pool) {
-    return setString(value, pool, typename TAdaptedString::storage_policy());
-  }
-
-  template <typename TAdaptedString>
-  inline bool setString(TAdaptedString value, MemoryPool *pool,
-                        storage_policies::decide_at_runtime) {
-    if (value.isStatic())
-      return setString(value, pool, storage_policies::store_by_address());
-    else
-      return setString(value, pool, storage_policies::store_by_copy());
-  }
-
-  template <typename TAdaptedString>
-  inline bool setString(TAdaptedString value, MemoryPool *,
-                        storage_policies::store_by_address) {
-    if (value.isNull())
-      setNull();
-    else
-      setStringPointer(value.data(), storage_policies::store_by_address());
-    return true;
-  }
-
-  template <typename TAdaptedString>
-  inline bool setString(TAdaptedString value, MemoryPool *pool,
-                        storage_policies::store_by_copy) {
-    if (value.isNull()) {
-      setNull();
-      return true;
-    }
-    const char *copy = pool->saveString(value);
-    if (!copy) {
-      setNull();
-      return false;
-    }
-    setStringPointer(copy, storage_policies::store_by_copy());
-    return true;
+    return storeString(value, pool, typename TAdaptedString::storage_policy());
   }
   }
 
 
   CollectionData &toArray() {
   CollectionData &toArray() {
@@ -388,6 +345,41 @@ class VariantData {
     _flags &= KEY_IS_OWNED;
     _flags &= KEY_IS_OWNED;
     _flags |= t;
     _flags |= t;
   }
   }
+
+  template <typename TAdaptedString>
+  inline bool storeString(TAdaptedString value, MemoryPool *pool,
+                          storage_policies::decide_at_runtime) {
+    if (value.isStatic())
+      return storeString(value, pool, storage_policies::store_by_address());
+    else
+      return storeString(value, pool, storage_policies::store_by_copy());
+  }
+
+  template <typename TAdaptedString>
+  inline bool storeString(TAdaptedString value, MemoryPool *,
+                          storage_policies::store_by_address) {
+    if (value.isNull())
+      setNull();
+    else
+      setStringPointer(value.data(), storage_policies::store_by_address());
+    return true;
+  }
+
+  template <typename TAdaptedString>
+  inline bool storeString(TAdaptedString value, MemoryPool *pool,
+                          storage_policies::store_by_copy) {
+    if (value.isNull()) {
+      setNull();
+      return true;
+    }
+    const char *copy = pool->saveString(value);
+    if (!copy) {
+      setNull();
+      return false;
+    }
+    setStringPointer(copy, storage_policies::store_by_copy());
+    return true;
+  }
 };
 };
 
 
 }  // namespace ARDUINOJSON_NAMESPACE
 }  // namespace ARDUINOJSON_NAMESPACE