Skip to content

Commit 659ef86

Browse files
committed
Use RequiredParam and RequiredResult in a handful of places in order to test
1 parent 1b4c495 commit 659ef86

File tree

12 files changed

+111
-105
lines changed

12 files changed

+111
-105
lines changed

core/io/resource_saver.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -97,8 +97,8 @@ void ResourceFormatSaver::_bind_methods() {
9797
GDVIRTUAL_BIND(_recognize_path, "resource", "path");
9898
}
9999

100-
Error ResourceSaver::save(const Ref<Resource> &p_resource, const String &p_path, uint32_t p_flags) {
101-
ERR_FAIL_COND_V_MSG(p_resource.is_null(), ERR_INVALID_PARAMETER, vformat("Can't save empty resource to path '%s'.", p_path));
100+
Error ResourceSaver::save(const RequiredParam<Resource> &rp_resource, const String &p_path, uint32_t p_flags) {
101+
EXTRACT_REQUIRED_PARAM_OR_FAIL_V_MSG(p_resource, rp_resource, ERR_INVALID_PARAMETER, vformat("Can't save empty resource to path '%s'.", p_path));
102102
String path = p_path;
103103
if (path.is_empty()) {
104104
path = p_resource->get_path();

core/io/resource_saver.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ class ResourceSaver {
8383
FLAG_REPLACE_SUBRESOURCE_PATHS = 64,
8484
};
8585

86-
static Error save(const Ref<Resource> &p_resource, const String &p_path = "", uint32_t p_flags = (uint32_t)FLAG_NONE);
86+
static Error save(const RequiredParam<Resource> &p_resource, const String &p_path = "", uint32_t p_flags = (uint32_t)FLAG_NONE);
8787
static void get_recognized_extensions(const Ref<Resource> &p_resource, List<String> *p_extensions);
8888
static void add_resource_format_saver(Ref<ResourceFormatSaver> p_format_saver, bool p_at_front = false);
8989
static void remove_resource_format_saver(Ref<ResourceFormatSaver> p_format_saver);

core/variant/method_ptrcall.h

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -273,7 +273,7 @@ struct PtrToArg<const T *> {
273273

274274
template <class T>
275275
struct PtrToArg<RequiredParam<T>> {
276-
typedef T *EncodeT;
276+
typedef typename RequiredParam<T>::value_type EncodeT;
277277

278278
_FORCE_INLINE_ static RequiredParam<T> convert(const void *p_ptr) {
279279
if (p_ptr == nullptr) {
@@ -286,27 +286,31 @@ struct PtrToArg<RequiredParam<T>> {
286286
}
287287

288288
_FORCE_INLINE_ static void encode(const RequiredParam<T> &p_var, void *p_ptr) {
289-
*((T **)p_ptr) = p_var._internal_ptr();
289+
GODOT_DEPRECATED_BEGIN
290+
*((typename RequiredParam<T>::value_type *)p_ptr) = p_var._internal_ptr();
291+
GODOT_DEPRECATED_END
290292
}
291293
};
292294

293-
// This is for RequiredValue.
295+
// This is for RequiredResult.
294296

295297
template <class T>
296-
struct PtrToArg<RequiredValue<T>> {
297-
typedef T *EncodeT;
298+
struct PtrToArg<RequiredResult<T>> {
299+
typedef typename RequiredResult<T>::value_type EncodeT;
298300

299-
_FORCE_INLINE_ static RequiredValue<T> convert(const void *p_ptr) {
301+
_FORCE_INLINE_ static RequiredResult<T> convert(const void *p_ptr) {
300302
if (p_ptr == nullptr) {
301303
GODOT_DEPRECATED_BEGIN
302-
return RequiredValue<T>::err_return();
304+
return RequiredResult<T>::err_return();
303305
GODOT_DEPRECATED_END
304306
}
305-
return RequiredValue<T>(*reinterpret_cast<T *const *>(p_ptr));
307+
return RequiredResult<T>(*reinterpret_cast<T *const *>(p_ptr));
306308
}
307309

308-
_FORCE_INLINE_ static void encode(const RequiredValue<T> &p_var, void *p_ptr) {
309-
*((T **)p_ptr) = p_var.ptr();
310+
_FORCE_INLINE_ static void encode(const RequiredResult<T> &p_var, void *p_ptr) {
311+
GODOT_DEPRECATED_BEGIN
312+
*((typename RequiredResult<T>::value_type *)p_ptr) = p_var._internal_ptr();
313+
GODOT_DEPRECATED_END
310314
}
311315
};
312316

core/variant/required_ptr.h

Lines changed: 23 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
#include "core/variant/variant.h"
3434

3535
template <typename T>
36-
class RequiredValue {
36+
class RequiredResult {
3737
// We can't explicitly check if the type is an Object here, as it might've been forward-declared.
3838
// However, we can at least assert that it's an unqualified, non-builtin type.
3939
static_assert(!std::is_scalar_v<T>, "T may not be a scalar type");
@@ -47,64 +47,66 @@ class RequiredValue {
4747
private:
4848
value_type _value;
4949

50-
_FORCE_INLINE_ RequiredValue() {
50+
_FORCE_INLINE_ RequiredResult() {
5151
if constexpr (!std::is_base_of_v<RefCounted, T>) {
5252
_value = nullptr;
5353
}
5454
}
5555

5656
public:
57-
RequiredValue(const RequiredValue &p_other) = default;
58-
RequiredValue(RequiredValue &&p_other) = default;
59-
RequiredValue &operator=(const RequiredValue &p_other) = default;
60-
RequiredValue &operator=(RequiredValue &&p_other) = default;
57+
RequiredResult(const RequiredResult &p_other) = default;
58+
RequiredResult(RequiredResult &&p_other) = default;
59+
RequiredResult &operator=(const RequiredResult &p_other) = default;
60+
RequiredResult &operator=(RequiredResult &&p_other) = default;
6161

62-
_FORCE_INLINE_ RequiredValue(std::nullptr_t) :
63-
RequiredValue() {}
64-
_FORCE_INLINE_ RequiredValue &operator=(std::nullptr_t) { _value = nullptr; }
62+
_FORCE_INLINE_ RequiredResult(std::nullptr_t) :
63+
RequiredResult() {}
64+
_FORCE_INLINE_ RequiredResult &operator=(std::nullptr_t) { _value = nullptr; }
6565

6666
[[nodiscard, deprecated("Should not be called directly; only for internal use.")]]
67-
_FORCE_INLINE_ static RequiredValue<T> err_return() { return RequiredValue<T>(); }
67+
_FORCE_INLINE_ value_type _internal_ptr() const { return _value; }
68+
[[nodiscard, deprecated("Should not be called directly; only for internal use.")]]
69+
_FORCE_INLINE_ static RequiredResult<T> err_return() { return RequiredResult<T>(); }
6870

6971
template <typename T_Other, std::enable_if_t<std::is_base_of_v<T, T_Other>, int> = 0>
70-
_FORCE_INLINE_ RequiredValue(const RequiredValue<T_Other> &p_other) :
72+
_FORCE_INLINE_ RequiredResult(const RequiredResult<T_Other> &p_other) :
7173
_value(p_other._value) {}
7274
template <typename T_Other, std::enable_if_t<std::is_base_of_v<T, T_Other>, int> = 0>
73-
_FORCE_INLINE_ RequiredValue &operator=(const RequiredValue<T_Other> &p_other) {
75+
_FORCE_INLINE_ RequiredResult &operator=(const RequiredResult<T_Other> &p_other) {
7476
_value = p_other._value;
7577
return *this;
7678
}
7779

7880
template <typename T_Other, std::enable_if_t<std::is_base_of_v<T, T_Other>, int> = 0>
79-
_FORCE_INLINE_ RequiredValue(const T_Other *p_ptr) :
81+
_FORCE_INLINE_ RequiredResult(const T_Other *p_ptr) :
8082
_value(const_cast<std::remove_const_t<T_Other> *>(p_ptr)) {}
8183
template <typename T_Other, std::enable_if_t<std::is_base_of_v<T, T_Other>, int> = 0>
82-
_FORCE_INLINE_ RequiredValue &operator=(const T_Other *p_ptr) {
84+
_FORCE_INLINE_ RequiredResult &operator=(const T_Other *p_ptr) {
8385
_value = const_cast<std::remove_const_t<T_Other> *>(p_ptr);
8486
return *this;
8587
}
8688

8789
template <typename T_Other, std::enable_if_t<std::is_base_of_v<T, T_Other>, int> = 0>
88-
_FORCE_INLINE_ RequiredValue(const Ref<T_Other> &p_ref) :
90+
_FORCE_INLINE_ RequiredResult(const Ref<T_Other> &p_ref) :
8991
_value(p_ref) {}
9092
template <typename T_Other, std::enable_if_t<std::is_base_of_v<T, T_Other>, int> = 0>
91-
_FORCE_INLINE_ RequiredValue &operator=(const Ref<T_Other> &p_ref) {
93+
_FORCE_INLINE_ RequiredResult &operator=(const Ref<T_Other> &p_ref) {
9294
_value = p_ref;
9395
return *this;
9496
}
9597

9698
template <typename T_Other, std::enable_if_t<std::is_base_of_v<T, T_Other>, int> = 0>
97-
_FORCE_INLINE_ RequiredValue(Ref<T_Other> &&p_ref) :
99+
_FORCE_INLINE_ RequiredResult(Ref<T_Other> &&p_ref) :
98100
_value(std::move(p_ref)) {}
99101
template <typename T_Other, std::enable_if_t<std::is_base_of_v<T, T_Other>, int> = 0>
100-
_FORCE_INLINE_ RequiredValue &operator=(Ref<T_Other> &&p_ref) {
102+
_FORCE_INLINE_ RequiredResult &operator=(Ref<T_Other> &&p_ref) {
101103
_value = std::move(p_ref);
102104
return &this;
103105
}
104106

105-
_FORCE_INLINE_ RequiredValue(const Variant &p_variant) :
107+
_FORCE_INLINE_ RequiredResult(const Variant &p_variant) :
106108
_value(static_cast<T *>(p_variant.get_validated_object())) {}
107-
_FORCE_INLINE_ RequiredValue &operator=(const Variant &p_variant) {
109+
_FORCE_INLINE_ RequiredResult &operator=(const Variant &p_variant) {
108110
_value = static_cast<T *>(p_variant.get_validated_object());
109111
return *this;
110112
}
@@ -251,6 +253,6 @@ class RequiredParam {
251253

252254
// Technically zero-constructible, but not recommended.
253255
template <typename T>
254-
struct is_zero_constructible<RequiredValue<T>> : std::true_type {};
256+
struct is_zero_constructible<RequiredResult<T>> : std::true_type {};
255257
template <typename T>
256258
struct is_zero_constructible<RequiredParam<T>> : std::true_type {};

core/variant/type_info.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,7 @@ template <class T>
187187
class RequiredParam;
188188

189189
template <class T>
190-
class RequiredValue;
190+
class RequiredResult;
191191

192192
template <typename T>
193193
struct GetTypeInfo<RequiredParam<T>, std::enable_if_t<std::is_base_of_v<Object, T>>> {
@@ -206,7 +206,7 @@ struct GetTypeInfo<RequiredParam<T>, std::enable_if_t<std::is_base_of_v<Object,
206206
};
207207

208208
template <typename T>
209-
struct GetTypeInfo<RequiredValue<T>, std::enable_if_t<std::is_base_of_v<Object, T>>> {
209+
struct GetTypeInfo<RequiredResult<T>, std::enable_if_t<std::is_base_of_v<Object, T>>> {
210210
static const Variant::Type VARIANT_TYPE = Variant::OBJECT;
211211
static const GodotTypeInfo::Metadata METADATA = GodotTypeInfo::METADATA_OBJECT_IS_REQUIRED;
212212

core/variant/variant_internal.h

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -609,15 +609,15 @@ struct VariantInternalAccessor<const RequiredParam<T> &> {
609609
};
610610

611611
template <class T>
612-
struct VariantInternalAccessor<RequiredValue<T>> {
613-
static _FORCE_INLINE_ RequiredValue<T> get(const Variant *v) { return RequiredValue<T>(Object::cast_to<T>(const_cast<Object *>(*VariantInternal::get_object(v)))); }
614-
static _FORCE_INLINE_ void set(Variant *v, const RequiredValue<T> &p_value) { VariantInternal::object_assign(v, p_value.ptr()); }
612+
struct VariantInternalAccessor<RequiredResult<T>> {
613+
static _FORCE_INLINE_ RequiredResult<T> get(const Variant *v) { return RequiredResult<T>(Object::cast_to<T>(const_cast<Object *>(*VariantInternal::get_object(v)))); }
614+
static _FORCE_INLINE_ void set(Variant *v, const RequiredResult<T> &p_value) { VariantInternal::object_assign(v, p_value.ptr()); }
615615
};
616616

617617
template <class T>
618-
struct VariantInternalAccessor<const RequiredValue<T> &> {
619-
static _FORCE_INLINE_ RequiredValue<T> get(const Variant *v) { return RequiredValue<T>(Object::cast_to<T>(*VariantInternal::get_object(v))); }
620-
static _FORCE_INLINE_ void set(Variant *v, const RequiredValue<T> &p_value) { VariantInternal::object_assign(v, p_value.ptr()); }
618+
struct VariantInternalAccessor<const RequiredResult<T> &> {
619+
static _FORCE_INLINE_ RequiredResult<T> get(const Variant *v) { return RequiredResult<T>(Object::cast_to<T>(*VariantInternal::get_object(v))); }
620+
static _FORCE_INLINE_ void set(Variant *v, const RequiredResult<T> &p_value) { VariantInternal::object_assign(v, p_value.ptr()); }
621621
};
622622

623623
template <>

0 commit comments

Comments
 (0)