summaryrefslogtreecommitdiffstats
path: root/core/variant/variant_setget.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'core/variant/variant_setget.cpp')
-rw-r--r--core/variant/variant_setget.cpp44
1 files changed, 8 insertions, 36 deletions
diff --git a/core/variant/variant_setget.cpp b/core/variant/variant_setget.cpp
index b60ff83cf1..1652f81d99 100644
--- a/core/variant/variant_setget.cpp
+++ b/core/variant/variant_setget.cpp
@@ -252,20 +252,7 @@ void Variant::set_named(const StringName &p_member, const Variant &p_value, bool
}
} else if (type == Variant::DICTIONARY) {
Dictionary &dict = *VariantGetInternalPtr<Dictionary>::get_ptr(this);
-
- if (dict.is_read_only()) {
- r_valid = false;
- return;
- }
-
- Variant *v = dict.getptr(p_member);
- if (v) {
- *v = p_value;
- } else {
- dict[p_member] = p_value;
- }
-
- r_valid = true;
+ r_valid = dict.set(p_member, p_value);
} else {
r_valid = false;
}
@@ -721,26 +708,16 @@ struct VariantIndexedSetGet_Dictionary {
PtrToArg<Variant>::encode(*ptr, member);
}
static void set(Variant *base, int64_t index, const Variant *value, bool *valid, bool *oob) {
- if (VariantGetInternalPtr<Dictionary>::get_ptr(base)->is_read_only()) {
- *valid = false;
- *oob = true;
- return;
- }
- (*VariantGetInternalPtr<Dictionary>::get_ptr(base))[index] = *value;
- *oob = false;
- *valid = true;
+ *valid = VariantGetInternalPtr<Dictionary>::get_ptr(base)->set(index, *value);
+ *oob = VariantGetInternalPtr<Dictionary>::get_ptr(base)->is_read_only();
}
static void validated_set(Variant *base, int64_t index, const Variant *value, bool *oob) {
- if (VariantGetInternalPtr<Dictionary>::get_ptr(base)->is_read_only()) {
- *oob = true;
- return;
- }
- (*VariantGetInternalPtr<Dictionary>::get_ptr(base))[index] = *value;
- *oob = false;
+ VariantGetInternalPtr<Dictionary>::get_ptr(base)->set(index, *value);
+ *oob = VariantGetInternalPtr<Dictionary>::get_ptr(base)->is_read_only();
}
static void ptr_set(void *base, int64_t index, const void *member) {
Dictionary &v = *reinterpret_cast<Dictionary *>(base);
- v[index] = PtrToArg<Variant>::convert(member);
+ v.set(index, PtrToArg<Variant>::convert(member));
}
static Variant::Type get_index_type() { return Variant::NIL; }
static uint32_t get_index_usage() { return PROPERTY_USAGE_DEFAULT; }
@@ -1010,16 +987,11 @@ struct VariantKeyedSetGetDictionary {
PtrToArg<Variant>::encode(*ptr, value);
}
static void set(Variant *base, const Variant *key, const Variant *value, bool *r_valid) {
- if (VariantGetInternalPtr<Dictionary>::get_ptr(base)->is_read_only()) {
- *r_valid = false;
- return;
- }
- (*VariantGetInternalPtr<Dictionary>::get_ptr(base))[*key] = *value;
- *r_valid = true;
+ *r_valid = VariantGetInternalPtr<Dictionary>::get_ptr(base)->set(*key, *value);
}
static void ptr_set(void *base, const void *key, const void *value) {
Dictionary &v = *reinterpret_cast<Dictionary *>(base);
- v[PtrToArg<Variant>::convert(key)] = PtrToArg<Variant>::convert(value);
+ v.set(PtrToArg<Variant>::convert(key), PtrToArg<Variant>::convert(value));
}
static bool has(const Variant *base, const Variant *key, bool *r_valid) {