Add RequiredParam<T> and RequiredValue<T> to mark Object * arguments and return values as required

Co-authored-by: Thaddeus Crews <repiteo@outlook.com>
This commit is contained in:
David Snopek 2023-12-06 14:20:11 -06:00
parent bbe9654327
commit d95d49ee12
9 changed files with 376 additions and 1 deletions

View file

@ -608,6 +608,30 @@ struct VariantInternalAccessor<Object *> {
static _FORCE_INLINE_ void set(Variant *v, const Object *p_value) { VariantInternal::object_assign(v, p_value); }
};
template <class T>
struct VariantInternalAccessor<RequiredParam<T>> {
static _FORCE_INLINE_ RequiredParam<T> get(const Variant *v) { return RequiredParam<T>(Object::cast_to<T>(const_cast<Object *>(*VariantInternal::get_object(v)))); }
static _FORCE_INLINE_ void set(Variant *v, const RequiredParam<T> &p_value) { VariantInternal::object_assign(v, p_value.ptr()); }
};
template <class T>
struct VariantInternalAccessor<const RequiredParam<T> &> {
static _FORCE_INLINE_ RequiredParam<T> get(const Variant *v) { return RequiredParam<T>(Object::cast_to<T>(*VariantInternal::get_object(v))); }
static _FORCE_INLINE_ void set(Variant *v, const RequiredParam<T> &p_value) { VariantInternal::object_assign(v, p_value.ptr()); }
};
template <class T>
struct VariantInternalAccessor<RequiredResult<T>> {
static _FORCE_INLINE_ RequiredResult<T> get(const Variant *v) { return RequiredResult<T>(Object::cast_to<T>(const_cast<Object *>(*VariantInternal::get_object(v)))); }
static _FORCE_INLINE_ void set(Variant *v, const RequiredResult<T> &p_value) { VariantInternal::object_assign(v, p_value.ptr()); }
};
template <class T>
struct VariantInternalAccessor<const RequiredResult<T> &> {
static _FORCE_INLINE_ RequiredResult<T> get(const Variant *v) { return RequiredResult<T>(Object::cast_to<T>(*VariantInternal::get_object(v))); }
static _FORCE_INLINE_ void set(Variant *v, const RequiredResult<T> &p_value) { VariantInternal::object_assign(v, p_value.ptr()); }
};
template <>
struct VariantInternalAccessor<Variant> {
static _FORCE_INLINE_ Variant &get(Variant *v) { return *v; }