mirror of
https://github.com/bblanchon/ArduinoJson.git
synced 2025-07-29 10:17:39 +02:00
JsonString: change default ownership to Copied
This commit is contained in:
@ -7,6 +7,7 @@ HEAD
|
|||||||
* Fix support for NUL characters in `deserializeJson()`
|
* Fix support for NUL characters in `deserializeJson()`
|
||||||
* Make `ElementProxy` and `MemberProxy` non-copyable
|
* Make `ElementProxy` and `MemberProxy` non-copyable
|
||||||
* Change string copy policy: only string literal are stored by pointer
|
* Change string copy policy: only string literal are stored by pointer
|
||||||
|
* `JsonString` is now stored by copy, unless specified otherwise
|
||||||
|
|
||||||
> ### BREAKING CHANGES
|
> ### BREAKING CHANGES
|
||||||
>
|
>
|
||||||
|
@ -96,7 +96,7 @@ TEST_CASE("JsonString") {
|
|||||||
JsonString s("hello world", 5);
|
JsonString s("hello world", 5);
|
||||||
|
|
||||||
CHECK(s.size() == 5);
|
CHECK(s.size() == 5);
|
||||||
CHECK(s.isLinked() == true);
|
CHECK(s.isLinked() == false);
|
||||||
CHECK(s == "hello");
|
CHECK(s == "hello");
|
||||||
CHECK(s != "hello world");
|
CHECK(s != "hello world");
|
||||||
}
|
}
|
||||||
|
@ -139,7 +139,8 @@ TEST_CASE("serialize MsgPack value") {
|
|||||||
|
|
||||||
SECTION("str 32") {
|
SECTION("str 32") {
|
||||||
std::string shortest(65536, '?');
|
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);
|
"\xDB\x00\x01\x00\x00"_s + shortest);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -96,7 +96,7 @@ class MsgPackSerializer : public VariantDataVisitor<size_t> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
size_t visit(JsonString value) {
|
size_t visit(JsonString value) {
|
||||||
ARDUINOJSON_ASSERT(value != NULL);
|
ARDUINOJSON_ASSERT(!value.isNull());
|
||||||
|
|
||||||
auto n = value.size();
|
auto n = value.size();
|
||||||
|
|
||||||
|
@ -22,10 +22,10 @@ class JsonString {
|
|||||||
|
|
||||||
JsonString() : str_(nullptr, 0, true) {}
|
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) {}
|
: 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) {}
|
: str_(data, sz, ownership == Linked) {}
|
||||||
|
|
||||||
// Returns a pointer to the characters.
|
// Returns a pointer to the characters.
|
||||||
|
@ -178,7 +178,7 @@ struct Converter<JsonString> : private detail::VariantAttorney {
|
|||||||
|
|
||||||
static JsonString fromJson(JsonVariantConst src) {
|
static JsonString fromJson(JsonVariantConst src) {
|
||||||
auto data = getData(src);
|
auto data = getData(src);
|
||||||
return data ? data->asString() : 0;
|
return data ? data->asString() : JsonString();
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool checkJson(JsonVariantConst src) {
|
static bool checkJson(JsonVariantConst src) {
|
||||||
|
@ -64,7 +64,8 @@ class VariantData {
|
|||||||
return visit.visit(content_.asObject);
|
return visit.visit(content_.asObject);
|
||||||
|
|
||||||
case VariantType::LinkedString:
|
case VariantType::LinkedString:
|
||||||
return visit.visit(JsonString(content_.asLinkedString));
|
return visit.visit(
|
||||||
|
JsonString(content_.asLinkedString, JsonString::Linked));
|
||||||
|
|
||||||
case VariantType::OwnedString:
|
case VariantType::OwnedString:
|
||||||
return visit.visit(JsonString(content_.asOwnedString->data,
|
return visit.visit(JsonString(content_.asOwnedString->data,
|
||||||
|
Reference in New Issue
Block a user