Change link() to shallowCopy() (issue #1343)

Instead of storing a pointer, the function copies the `VariantData`.

Benefits:
* smaller code
* no impact on programs that don't use this feature

Drawbacks:
* changes to the original variant are not always reflected on the copy
* modifying the original from the shallow copy leads to UB
This commit is contained in:
Benoit Blanchon
2022-07-05 17:07:43 +02:00
parent 3b3ab8c4e1
commit cd8373ad32
36 changed files with 78 additions and 543 deletions

View File

@ -129,44 +129,6 @@ TEST_CASE("JsonVariant::operator[]") {
REQUIRE(std::string("world") == variant[vla]);
}
#endif
SECTION("get value from linked object") {
StaticJsonDocument<1024> doc2;
doc2["hello"] = "world";
var.link(doc2);
CHECK(var["hello"].as<std::string>() == "world");
}
SECTION("set value to linked object") {
StaticJsonDocument<1024> doc2;
doc2["hello"] = "world";
var.link(doc2);
var["tutu"] = "toto"; // no-op
CHECK(doc.as<std::string>() == "{\"hello\":\"world\"}");
CHECK(doc2.as<std::string>() == "{\"hello\":\"world\"}");
}
SECTION("get value from linked array") {
StaticJsonDocument<1024> doc2;
doc2.add(42);
var.link(doc2);
CHECK(var[0].as<int>() == 42);
}
SECTION("set value to linked array") {
StaticJsonDocument<1024> doc2;
doc2.add(42);
var.link(doc2);
var[0] = 666; // no-op
CHECK(doc.as<std::string>() == "[42]");
CHECK(doc2.as<std::string>() == "[42]");
}
}
TEST_CASE("JsonVariantConst::operator[]") {
@ -239,20 +201,4 @@ TEST_CASE("JsonVariantConst::operator[]") {
REQUIRE(var.is<JsonObject>() == false);
REQUIRE(value == 0);
}
SECTION("get value from linked object") {
StaticJsonDocument<1024> doc2;
doc2["hello"] = "world";
var.link(doc2);
CHECK(cvar["hello"].as<std::string>() == "world");
}
SECTION("get value from linked array") {
StaticJsonDocument<1024> doc2;
doc2.add(42);
var.link(doc2);
CHECK(cvar[0].as<int>() == 42);
}
}