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&)") { SECTION("JsonVariant::link(JsonDocument&)") {
doc2["hello"] = "world"; doc2["hello"] = "world";
variant.link(doc2.as<JsonVariant>()); variant.link(doc2);
CHECK(variant.as<std::string>() == "{\"hello\":\"world\"}"); CHECK(variant.as<std::string>() == "{\"hello\":\"world\"}");
CHECK(variant.memoryUsage() == 0); CHECK(variant.memoryUsage() == 0);

View File

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

View File

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

View File

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

View File

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

View File

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