|
@@ -389,6 +389,7 @@ Variant Variant::get_named(const StringName &p_member, bool &r_valid) const {
|
|
|
v.write[index] = PtrToArg<m_elem_type>::convert(member); \
|
|
|
} \
|
|
|
static Variant::Type get_index_type() { return GetTypeInfo<m_elem_type>::VARIANT_TYPE; } \
|
|
|
+ static uint32_t get_index_usage() { return GetTypeInfo<m_elem_type>::get_class_info().usage; } \
|
|
|
static uint64_t get_indexed_size(const Variant *base) { return VariantGetInternalPtr<m_base_type>::get_ptr(base)->size(); } \
|
|
|
};
|
|
|
|
|
@@ -460,6 +461,7 @@ Variant Variant::get_named(const StringName &p_member, bool &r_valid) const {
|
|
|
v.write[index] = PtrToArg<m_elem_type>::convert(member); \
|
|
|
} \
|
|
|
static Variant::Type get_index_type() { return GetTypeInfo<m_elem_type>::VARIANT_TYPE; } \
|
|
|
+ static uint32_t get_index_usage() { return GetTypeInfo<m_elem_type>::get_class_info().usage; } \
|
|
|
static uint64_t get_indexed_size(const Variant *base) { return VariantGetInternalPtr<m_base_type>::get_ptr(base)->size(); } \
|
|
|
};
|
|
|
|
|
@@ -515,6 +517,7 @@ Variant Variant::get_named(const StringName &p_member, bool &r_valid) const {
|
|
|
v[index] = PtrToArg<m_elem_type>::convert(member); \
|
|
|
} \
|
|
|
static Variant::Type get_index_type() { return GetTypeInfo<m_elem_type>::VARIANT_TYPE; } \
|
|
|
+ static uint32_t get_index_usage() { return GetTypeInfo<m_elem_type>::get_class_info().usage; } \
|
|
|
static uint64_t get_indexed_size(const Variant *base) { return m_max; } \
|
|
|
};
|
|
|
|
|
@@ -564,6 +567,7 @@ Variant Variant::get_named(const StringName &p_member, bool &r_valid) const {
|
|
|
v m_accessor[index] = PtrToArg<m_elem_type>::convert(member); \
|
|
|
} \
|
|
|
static Variant::Type get_index_type() { return GetTypeInfo<m_elem_type>::VARIANT_TYPE; } \
|
|
|
+ static uint32_t get_index_usage() { return GetTypeInfo<m_elem_type>::get_class_info().usage; } \
|
|
|
static uint64_t get_indexed_size(const Variant *base) { return m_max; } \
|
|
|
};
|
|
|
|
|
@@ -613,6 +617,7 @@ Variant Variant::get_named(const StringName &p_member, bool &r_valid) const {
|
|
|
v.m_set(index, PtrToArg<m_elem_type>::convert(member)); \
|
|
|
} \
|
|
|
static Variant::Type get_index_type() { return GetTypeInfo<m_elem_type>::VARIANT_TYPE; } \
|
|
|
+ static uint32_t get_index_usage() { return GetTypeInfo<m_elem_type>::get_class_info().usage; } \
|
|
|
static uint64_t get_indexed_size(const Variant *base) { return m_max; } \
|
|
|
};
|
|
|
|
|
@@ -683,6 +688,7 @@ struct VariantIndexedSetGet_Array {
|
|
|
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_NIL_IS_VARIANT; }
|
|
|
static uint64_t get_indexed_size(const Variant *base) { return 0; }
|
|
|
};
|
|
|
|
|
@@ -768,6 +774,7 @@ struct VariantIndexedSetGet_String {
|
|
|
}
|
|
|
}
|
|
|
static Variant::Type get_index_type() { return Variant::STRING; }
|
|
|
+ static uint32_t get_index_usage() { return PROPERTY_USAGE_DEFAULT; }
|
|
|
static uint64_t get_indexed_size(const Variant *base) { return VariantInternal::get_string(base)->length(); }
|
|
|
};
|
|
|
|
|
@@ -812,6 +819,7 @@ struct VariantIndexedSetGet_String {
|
|
|
v[index] = PtrToArg<Variant>::convert(member); \
|
|
|
} \
|
|
|
static Variant::Type get_index_type() { return Variant::NIL; } \
|
|
|
+ static uint32_t get_index_usage() { return PROPERTY_USAGE_DEFAULT; } \
|
|
|
static uint64_t get_indexed_size(const Variant *base) { return VariantGetInternalPtr<m_base_type>::get_ptr(base)->size(); } \
|
|
|
};
|
|
|
|
|
@@ -852,7 +860,8 @@ struct VariantIndexedSetterGetterInfo {
|
|
|
|
|
|
uint64_t (*get_indexed_size)(const Variant *base) = nullptr;
|
|
|
|
|
|
- Variant::Type index_type;
|
|
|
+ Variant::Type index_type = Variant::NIL;
|
|
|
+ uint32_t index_usage = PROPERTY_USAGE_DEFAULT;
|
|
|
|
|
|
bool valid = false;
|
|
|
};
|
|
@@ -872,6 +881,7 @@ static void register_indexed_member(Variant::Type p_type) {
|
|
|
sgi.ptr_getter = T::ptr_get;
|
|
|
|
|
|
sgi.index_type = T::get_index_type();
|
|
|
+ sgi.index_usage = T::get_index_usage();
|
|
|
sgi.get_indexed_size = T::get_indexed_size;
|
|
|
|
|
|
sgi.valid = true;
|
|
@@ -920,6 +930,11 @@ Variant::Type Variant::get_indexed_element_type(Variant::Type p_type) {
|
|
|
return variant_indexed_setters_getters[p_type].index_type;
|
|
|
}
|
|
|
|
|
|
+uint32_t Variant::get_indexed_element_usage(Variant::Type p_type) {
|
|
|
+ ERR_FAIL_INDEX_V(p_type, Variant::VARIANT_MAX, PROPERTY_USAGE_DEFAULT);
|
|
|
+ return variant_indexed_setters_getters[p_type].index_usage;
|
|
|
+}
|
|
|
+
|
|
|
Variant::ValidatedIndexedSetter Variant::get_member_validated_indexed_setter(Variant::Type p_type) {
|
|
|
ERR_FAIL_INDEX_V(p_type, Variant::VARIANT_MAX, nullptr);
|
|
|
return variant_indexed_setters_getters[p_type].validated_setter;
|