JsonString: change default ownership to Copied

This commit is contained in:
Benoit Blanchon
2024-11-26 10:10:52 +01:00
parent c078957282
commit 8931651317
7 changed files with 10 additions and 7 deletions

View File

@ -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
>

View File

@ -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");
}

View File

@ -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);
}

View File

@ -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();

View File

@ -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.

View File

@ -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) {

View File

@ -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,