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

@@ -132,8 +132,8 @@ class MemberProxy : public VariantOperators<MemberProxy<TObject, TStringRef> >,
getUpstreamMember().remove(key);
}
FORCE_INLINE void link(VariantConstRef value) {
getOrAddUpstreamMember().link(value);
FORCE_INLINE void shallowCopy(VariantConstRef value) {
getOrAddUpstreamMember().shallowCopy(value);
}
template <typename TValue>

View File

@@ -269,12 +269,12 @@ struct Converter<ObjectConstRef> {
static ObjectConstRef fromJson(VariantConstRef src) {
const VariantData* data = getData(src);
return data != 0 ? data->resolve()->asObject() : 0;
return data != 0 ? data->asObject() : 0;
}
static bool checkJson(VariantConstRef src) {
const VariantData* data = getData(src);
return data && data->resolve()->isObject();
return data && data->isObject();
}
};