Procházet zdrojové kódy

Replace `JsonString::Ownership` with `bool`

Benoit Blanchon před 1 rokem
rodič
revize
ed5f890d28

+ 1 - 0
CHANGELOG.md

@@ -8,6 +8,7 @@ HEAD
 * 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
+* Replace undocumented `JsonString::Ownership` with `bool`
 
 > ### BREAKING CHANGES
 >

+ 2 - 2
extras/tests/JsonObject/subscript.cpp

@@ -158,7 +158,7 @@ TEST_CASE("JsonObject::operator[]") {
   }
 
   SECTION("should duplicate a non-static JsonString key") {
-    obj[JsonString("hello", JsonString::Copied)] = "world";
+    obj[JsonString("hello", false)] = "world";
     REQUIRE(spy.log() == AllocatorLog{
                              Allocate(sizeofPool()),
                              Allocate(sizeofString("hello")),
@@ -166,7 +166,7 @@ TEST_CASE("JsonObject::operator[]") {
   }
 
   SECTION("should not duplicate a static JsonString key") {
-    obj[JsonString("hello", JsonString::Linked)] = "world";
+    obj[JsonString("hello", true)] = "world";
     REQUIRE(spy.log() == AllocatorLog{
                              Allocate(sizeofPool()),
                          });

+ 2 - 2
extras/tests/JsonVariant/set.cpp

@@ -132,7 +132,7 @@ TEST_CASE("JsonVariant::set() when there is enough memory") {
     char str[16];
 
     strcpy(str, "hello");
-    bool result = variant.set(JsonString(str, JsonString::Linked));
+    bool result = variant.set(JsonString(str, true));
     strcpy(str, "world");
 
     REQUIRE(result == true);
@@ -144,7 +144,7 @@ TEST_CASE("JsonVariant::set() when there is enough memory") {
     char str[16];
 
     strcpy(str, "hello");
-    bool result = variant.set(JsonString(str, JsonString::Copied));
+    bool result = variant.set(JsonString(str));
     strcpy(str, "world");
 
     REQUIRE(result == true);

+ 2 - 2
extras/tests/Misc/StringAdapters.cpp

@@ -101,7 +101,7 @@ TEST_CASE("adaptString()") {
   }
 
   SECTION("JsonString linked") {
-    JsonString orig("hello", JsonString::Ownership::Linked);
+    JsonString orig("hello", true);
     auto s = adaptString(orig);
 
     CHECK(s.isNull() == false);
@@ -110,7 +110,7 @@ TEST_CASE("adaptString()") {
   }
 
   SECTION("JsonString copied") {
-    JsonString orig("hello", JsonString::Ownership::Copied);
+    JsonString orig("hello", false);
     auto s = adaptString(orig);
 
     CHECK(s.isNull() == false);

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

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

+ 1 - 1
src/ArduinoJson/Memory/StringBuffer.hpp

@@ -55,7 +55,7 @@ class StringBuffer {
   JsonString str() const {
     ARDUINOJSON_ASSERT(node_ != nullptr);
 
-    return JsonString(node_->data, node_->length, JsonString::Copied);
+    return JsonString(node_->data, node_->length);
   }
 
  private:

+ 1 - 1
src/ArduinoJson/Memory/StringBuilder.hpp

@@ -68,7 +68,7 @@ class StringBuilder {
   JsonString str() const {
     ARDUINOJSON_ASSERT(node_ != nullptr);
     node_->data[size_] = 0;
-    return JsonString(node_->data, size_, JsonString::Copied);
+    return JsonString(node_->data, size_);
   }
 
  private:

+ 8 - 6
src/ArduinoJson/Strings/JsonString.hpp

@@ -4,6 +4,7 @@
 
 #pragma once
 
+#include <ArduinoJson/Polyfills/type_traits.hpp>
 #include <ArduinoJson/Strings/Adapters/RamString.hpp>
 
 #if ARDUINOJSON_ENABLE_STD_STREAM
@@ -18,15 +19,16 @@ class JsonString {
   friend struct detail::StringAdapter<JsonString>;
 
  public:
-  enum Ownership { Copied, Linked };
-
   JsonString() : str_(nullptr, 0, true) {}
 
-  JsonString(const char* data, Ownership ownership = Copied)
-      : str_(data, data ? ::strlen(data) : 0, ownership == Linked) {}
+  JsonString(const char* data, bool isStatic = false)
+      : str_(data, data ? ::strlen(data) : 0, isStatic) {}
 
-  JsonString(const char* data, size_t sz, Ownership ownership = Copied)
-      : str_(data, sz, ownership == Linked) {}
+  template <typename TSize, typename = detail::enable_if_t<
+                                detail::is_integral<TSize>::value &&
+                                !detail::is_same<TSize, bool>::value>>
+  JsonString(const char* data, TSize sz, bool isStatic = false)
+      : str_(data, size_t(sz), isStatic) {}
 
   // Returns a pointer to the characters.
   const char* c_str() const {

+ 5 - 7
src/ArduinoJson/Variant/VariantData.hpp

@@ -64,13 +64,11 @@ class VariantData {
         return visit.visit(content_.asObject);
 
       case VariantType::LinkedString:
-        return visit.visit(
-            JsonString(content_.asLinkedString, JsonString::Linked));
+        return visit.visit(JsonString(content_.asLinkedString, true));
 
       case VariantType::OwnedString:
         return visit.visit(JsonString(content_.asOwnedString->data,
-                                      content_.asOwnedString->length,
-                                      JsonString::Copied));
+                                      content_.asOwnedString->length));
 
       case VariantType::RawString:
         return visit.visit(RawString(content_.asOwnedString->data,
@@ -262,7 +260,7 @@ class VariantData {
     switch (type_) {
       case VariantType::RawString:
         return JsonString(content_.asOwnedString->data,
-                          content_.asOwnedString->length, JsonString::Copied);
+                          content_.asOwnedString->length);
       default:
         return JsonString();
     }
@@ -271,10 +269,10 @@ class VariantData {
   JsonString asString() const {
     switch (type_) {
       case VariantType::LinkedString:
-        return JsonString(content_.asLinkedString, JsonString::Linked);
+        return JsonString(content_.asLinkedString, true);
       case VariantType::OwnedString:
         return JsonString(content_.asOwnedString->data,
-                          content_.asOwnedString->length, JsonString::Copied);
+                          content_.asOwnedString->length);
       default:
         return JsonString();
     }