link() takes a JsonVariantConst

This commit is contained in:
Benoit Blanchon
2022-03-10 14:45:50 +01:00
parent 2dc0600bd4
commit 0b2eebeabc
6 changed files with 10 additions and 8 deletions

View File

@@ -12,7 +12,7 @@ TEST_CASE("JsonVariant::link()") {
SECTION("JsonVariant::link(JsonDocument&)") {
doc2["hello"] = "world";
variant.link(doc2.as<JsonVariant>());
variant.link(doc2);
CHECK(variant.as<std::string>() == "{\"hello\":\"world\"}");
CHECK(variant.memoryUsage() == 0);

View File

@@ -42,7 +42,7 @@ TEST_CASE("JsonVariant::memoryUsage()") {
SECTION("ignore size of link document") {
StaticJsonDocument<128> doc2;
doc2["hello"] = "world";
var.link(doc2.as<JsonVariant>());
var.link(doc2);
CHECK(var.memoryUsage() == 0);
CHECK(var.memoryUsage() == doc.memoryUsage());
}

View File

@@ -51,7 +51,7 @@ union VariantContent {
UInt asUnsignedInteger;
Integer asSignedInteger;
CollectionData asCollection;
class VariantData *asPointer;
const class VariantData *asPointer;
struct {
const char *data;
size_t size;

View File

@@ -212,7 +212,7 @@ class VariantData {
setType(VALUE_IS_NULL);
}
void setPointer(VariantData *value) {
void setPointer(const VariantData *value) {
setType(VALUE_IS_POINTER);
_content.asPointer = value;
}

View File

@@ -181,4 +181,9 @@ bool CopyStringStoragePolicy::store(TAdaptedString str, MemoryPool *pool,
return copy != 0;
}
inline void VariantRef::link(VariantConstRef var) {
if (_data)
_data->setPointer(var._data);
}
} // namespace ARDUINOJSON_NAMESPACE

View File

@@ -198,10 +198,7 @@ class VariantRef : public VariantRefBase<VariantData>,
template <typename TString>
FORCE_INLINE VariantRef getOrAddMember(const TString &) const;
FORCE_INLINE void link(VariantRef var) {
if (_data)
_data->setPointer(var._data);
}
void link(class VariantConstRef var);
FORCE_INLINE void remove(size_t index) const {
if (_data)