Эх сурвалжийг харах

JsonString: change default ownership to `Copied`

Benoit Blanchon 1 жил өмнө
parent
commit
8931651317

+ 1 - 0
CHANGELOG.md

@@ -7,6 +7,7 @@ HEAD
 * Fix support for NUL characters in `deserializeJson()`
 * Make `ElementProxy` and `MemberProxy` non-copyable
 * Change string copy policy: only string literal are stored by pointer
+* `JsonString` is now stored by copy, unless specified otherwise
 
 > ### BREAKING CHANGES
 >

+ 1 - 1
extras/tests/Misc/JsonString.cpp

@@ -96,7 +96,7 @@ TEST_CASE("JsonString") {
     JsonString s("hello world", 5);
 
     CHECK(s.size() == 5);
-    CHECK(s.isLinked() == true);
+    CHECK(s.isLinked() == false);
     CHECK(s == "hello");
     CHECK(s != "hello world");
   }

+ 2 - 1
extras/tests/MsgPackSerializer/serializeVariant.cpp

@@ -139,7 +139,8 @@ TEST_CASE("serialize MsgPack value") {
 
   SECTION("str 32") {
     std::string shortest(65536, '?');
-    checkVariant(JsonString(shortest.c_str(), true),  // force store by pointer
+    checkVariant(JsonString(shortest.c_str(),
+                            JsonString::Linked),  // force store by pointer
                  "\xDB\x00\x01\x00\x00"_s + shortest);
   }
 

+ 1 - 1
src/ArduinoJson/MsgPack/MsgPackSerializer.hpp

@@ -96,7 +96,7 @@ class MsgPackSerializer : public VariantDataVisitor<size_t> {
   }
 
   size_t visit(JsonString value) {
-    ARDUINOJSON_ASSERT(value != NULL);
+    ARDUINOJSON_ASSERT(!value.isNull());
 
     auto n = value.size();
 

+ 2 - 2
src/ArduinoJson/Strings/JsonString.hpp

@@ -22,10 +22,10 @@ class JsonString {
 
   JsonString() : str_(nullptr, 0, true) {}
 
-  JsonString(const char* data, Ownership ownership = Linked)
+  JsonString(const char* data, Ownership ownership = Copied)
       : str_(data, data ? ::strlen(data) : 0, ownership == Linked) {}
 
-  JsonString(const char* data, size_t sz, Ownership ownership = Linked)
+  JsonString(const char* data, size_t sz, Ownership ownership = Copied)
       : str_(data, sz, ownership == Linked) {}
 
   // Returns a pointer to the characters.

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

@@ -178,7 +178,7 @@ struct Converter<JsonString> : private detail::VariantAttorney {
 
   static JsonString fromJson(JsonVariantConst src) {
     auto data = getData(src);
-    return data ? data->asString() : 0;
+    return data ? data->asString() : JsonString();
   }
 
   static bool checkJson(JsonVariantConst src) {

+ 2 - 1
src/ArduinoJson/Variant/VariantData.hpp

@@ -64,7 +64,8 @@ class VariantData {
         return visit.visit(content_.asObject);
 
       case VariantType::LinkedString:
-        return visit.visit(JsonString(content_.asLinkedString));
+        return visit.visit(
+            JsonString(content_.asLinkedString, JsonString::Linked));
 
       case VariantType::OwnedString:
         return visit.visit(JsonString(content_.asOwnedString->data,