3030
3131#pragma once
3232
33- #include " core/object/object.h"
34- #include " core/variant/array.h"
35- #include " core/variant/binder_common.h"
36- #include " core/variant/method_ptrcall.h"
3733#include " core/variant/type_info.h"
38- #include " core/variant/variant.h"
3934
4035template <typename T>
4136class TypedArray : public Array {
@@ -44,11 +39,8 @@ class TypedArray : public Array {
4439 ERR_FAIL_COND_MSG (!is_same_typed (p_array), " Cannot assign an array with a different element type." );
4540 Array::operator =(p_array);
4641 }
47- _FORCE_INLINE_ TypedArray (const Variant &p_variant) :
48- TypedArray(Array(p_variant)) {
49- }
5042 _FORCE_INLINE_ TypedArray (const Array &p_array) {
51- set_typed (Variant::OBJECT, T::get_class_static (), Variant ());
43+ set_typed (GodotTypeInfo::Internal::get_variant_type<T>(), GodotTypeInfo::Internal::get_object_class_name_or_empty<T> (), Variant ());
5244 if (is_same_typed (p_array)) {
5345 Array::operator =(p_array);
5446 } else {
@@ -57,176 +49,8 @@ class TypedArray : public Array {
5749 }
5850 _FORCE_INLINE_ TypedArray (std::initializer_list<Variant> p_init) :
5951 TypedArray(Array(p_init)) {}
60- _FORCE_INLINE_ TypedArray () {
61- set_typed (Variant::OBJECT, T::get_class_static (), Variant ());
62- }
63- };
64-
65- template <typename T>
66- struct VariantInternalAccessor <TypedArray<T>> {
67- static _FORCE_INLINE_ TypedArray<T> get (const Variant *v) { return *VariantInternal::get_array (v); }
68- static _FORCE_INLINE_ void set (Variant *v, const TypedArray<T> &p_array) { *VariantInternal::get_array (v) = p_array; }
69- };
70- template <typename T>
71- struct VariantInternalAccessor <const TypedArray<T> &> {
72- static _FORCE_INLINE_ TypedArray<T> get (const Variant *v) { return *VariantInternal::get_array (v); }
73- static _FORCE_INLINE_ void set (Variant *v, const TypedArray<T> &p_array) { *VariantInternal::get_array (v) = p_array; }
74- };
75-
76- // specialization for the rest of variant types
77-
78- #define MAKE_TYPED_ARRAY (m_type, m_variant_type ) \
79- template <> \
80- class TypedArray <m_type> : public Array { \
81- public: \
82- _FORCE_INLINE_ void operator =(const Array &p_array) { \
83- ERR_FAIL_COND_MSG (!is_same_typed (p_array), " Cannot assign an array with a different element type." ); \
84- Array::operator =(p_array); \
85- } \
86- _FORCE_INLINE_ TypedArray (std::initializer_list<Variant> p_init) : \
87- Array(Array(p_init), m_variant_type, StringName(), Variant()) { \
88- } \
89- _FORCE_INLINE_ TypedArray (const Variant &p_variant) : \
90- TypedArray(Array(p_variant)) { \
91- } \
92- _FORCE_INLINE_ TypedArray (const Array &p_array) { \
93- set_typed (m_variant_type, StringName (), Variant ()); \
94- if (is_same_typed (p_array)) { \
95- Array::operator =(p_array); \
96- } else { \
97- assign (p_array); \
98- } \
99- } \
100- _FORCE_INLINE_ TypedArray () { \
101- set_typed (m_variant_type, StringName (), Variant ()); \
102- } \
103- };
10452
105- // All Variant::OBJECT types are intentionally omitted from this list because they are handled by
106- // the unspecialized TypedArray definition.
107- MAKE_TYPED_ARRAY (bool , Variant::BOOL)
108- MAKE_TYPED_ARRAY(uint8_t , Variant::INT)
109- MAKE_TYPED_ARRAY(int8_t , Variant::INT)
110- MAKE_TYPED_ARRAY(uint16_t , Variant::INT)
111- MAKE_TYPED_ARRAY(int16_t , Variant::INT)
112- MAKE_TYPED_ARRAY(uint32_t , Variant::INT)
113- MAKE_TYPED_ARRAY(int32_t , Variant::INT)
114- MAKE_TYPED_ARRAY(uint64_t , Variant::INT)
115- MAKE_TYPED_ARRAY(int64_t , Variant::INT)
116- MAKE_TYPED_ARRAY(float , Variant::FLOAT)
117- MAKE_TYPED_ARRAY(double , Variant::FLOAT)
118- MAKE_TYPED_ARRAY(String, Variant::STRING)
119- MAKE_TYPED_ARRAY(Vector2, Variant::VECTOR2)
120- MAKE_TYPED_ARRAY(Vector2i, Variant::VECTOR2I)
121- MAKE_TYPED_ARRAY(Rect2, Variant::RECT2)
122- MAKE_TYPED_ARRAY(Rect2i, Variant::RECT2I)
123- MAKE_TYPED_ARRAY(Vector3, Variant::VECTOR3)
124- MAKE_TYPED_ARRAY(Vector3i, Variant::VECTOR3I)
125- MAKE_TYPED_ARRAY(Transform2D, Variant::TRANSFORM2D)
126- MAKE_TYPED_ARRAY(Vector4, Variant::VECTOR4)
127- MAKE_TYPED_ARRAY(Vector4i, Variant::VECTOR4I)
128- MAKE_TYPED_ARRAY(Plane, Variant::PLANE)
129- MAKE_TYPED_ARRAY(Quaternion, Variant::QUATERNION)
130- MAKE_TYPED_ARRAY(AABB, Variant::AABB)
131- MAKE_TYPED_ARRAY(Basis, Variant::BASIS)
132- MAKE_TYPED_ARRAY(Transform3D, Variant::TRANSFORM3D)
133- MAKE_TYPED_ARRAY(Projection, Variant::PROJECTION)
134- MAKE_TYPED_ARRAY(Color, Variant::COLOR)
135- MAKE_TYPED_ARRAY(StringName, Variant::STRING_NAME)
136- MAKE_TYPED_ARRAY(NodePath, Variant::NODE_PATH)
137- MAKE_TYPED_ARRAY(RID, Variant::RID)
138- MAKE_TYPED_ARRAY(Callable, Variant::CALLABLE)
139- MAKE_TYPED_ARRAY(Signal, Variant::SIGNAL)
140- MAKE_TYPED_ARRAY(Dictionary, Variant::DICTIONARY)
141- MAKE_TYPED_ARRAY(Array, Variant::ARRAY)
142- MAKE_TYPED_ARRAY(PackedByteArray, Variant::PACKED_BYTE_ARRAY)
143- MAKE_TYPED_ARRAY(PackedInt32Array, Variant::PACKED_INT32_ARRAY)
144- MAKE_TYPED_ARRAY(PackedInt64Array, Variant::PACKED_INT64_ARRAY)
145- MAKE_TYPED_ARRAY(PackedFloat32Array, Variant::PACKED_FLOAT32_ARRAY)
146- MAKE_TYPED_ARRAY(PackedFloat64Array, Variant::PACKED_FLOAT64_ARRAY)
147- MAKE_TYPED_ARRAY(PackedStringArray, Variant::PACKED_STRING_ARRAY)
148- MAKE_TYPED_ARRAY(PackedVector2Array, Variant::PACKED_VECTOR2_ARRAY)
149- MAKE_TYPED_ARRAY(PackedVector3Array, Variant::PACKED_VECTOR3_ARRAY)
150- MAKE_TYPED_ARRAY(PackedColorArray, Variant::PACKED_COLOR_ARRAY)
151- MAKE_TYPED_ARRAY(PackedVector4Array, Variant::PACKED_VECTOR4_ARRAY)
152- MAKE_TYPED_ARRAY(IPAddress, Variant::STRING)
153-
154- template <typename T>
155- struct PtrToArg<TypedArray<T>> {
156- _FORCE_INLINE_ static TypedArray<T> convert (const void *p_ptr) {
157- return TypedArray<T>(*reinterpret_cast <const Array *>(p_ptr));
158- }
159- typedef Array EncodeT;
160- _FORCE_INLINE_ static void encode (TypedArray<T> p_val, void *p_ptr) {
161- *(Array *)p_ptr = p_val;
162- }
163- };
164-
165- template <typename T>
166- struct GetTypeInfo <TypedArray<T>> {
167- static const Variant::Type VARIANT_TYPE = Variant::ARRAY;
168- static const GodotTypeInfo::Metadata METADATA = GodotTypeInfo::METADATA_NONE;
169- static inline PropertyInfo get_class_info () {
170- return PropertyInfo (Variant::ARRAY, String (), PROPERTY_HINT_ARRAY_TYPE, T::get_class_static ());
53+ _FORCE_INLINE_ TypedArray () {
54+ set_typed (GodotTypeInfo::Internal::get_variant_type<T>(), GodotTypeInfo::Internal::get_object_class_name_or_empty<T>(), Variant ());
17155 }
17256};
173-
174- #define MAKE_TYPED_ARRAY_INFO (m_type, m_variant_type ) \
175- template <> \
176- struct GetTypeInfo <TypedArray<m_type>> { \
177- static const Variant::Type VARIANT_TYPE = Variant::ARRAY; \
178- static const GodotTypeInfo::Metadata METADATA = GodotTypeInfo::METADATA_NONE; \
179- static inline PropertyInfo get_class_info () { \
180- return PropertyInfo (Variant::ARRAY, String (), PROPERTY_HINT_ARRAY_TYPE, Variant::get_type_name (m_variant_type)); \
181- } \
182- };
183-
184- MAKE_TYPED_ARRAY_INFO (bool , Variant::BOOL)
185- MAKE_TYPED_ARRAY_INFO(uint8_t , Variant::INT)
186- MAKE_TYPED_ARRAY_INFO(int8_t , Variant::INT)
187- MAKE_TYPED_ARRAY_INFO(uint16_t , Variant::INT)
188- MAKE_TYPED_ARRAY_INFO(int16_t , Variant::INT)
189- MAKE_TYPED_ARRAY_INFO(uint32_t , Variant::INT)
190- MAKE_TYPED_ARRAY_INFO(int32_t , Variant::INT)
191- MAKE_TYPED_ARRAY_INFO(uint64_t , Variant::INT)
192- MAKE_TYPED_ARRAY_INFO(int64_t , Variant::INT)
193- MAKE_TYPED_ARRAY_INFO(float , Variant::FLOAT)
194- MAKE_TYPED_ARRAY_INFO(double , Variant::FLOAT)
195- MAKE_TYPED_ARRAY_INFO(String, Variant::STRING)
196- MAKE_TYPED_ARRAY_INFO(Vector2, Variant::VECTOR2)
197- MAKE_TYPED_ARRAY_INFO(Vector2i, Variant::VECTOR2I)
198- MAKE_TYPED_ARRAY_INFO(Rect2, Variant::RECT2)
199- MAKE_TYPED_ARRAY_INFO(Rect2i, Variant::RECT2I)
200- MAKE_TYPED_ARRAY_INFO(Vector3, Variant::VECTOR3)
201- MAKE_TYPED_ARRAY_INFO(Vector3i, Variant::VECTOR3I)
202- MAKE_TYPED_ARRAY_INFO(Transform2D, Variant::TRANSFORM2D)
203- MAKE_TYPED_ARRAY_INFO(Vector4, Variant::VECTOR4)
204- MAKE_TYPED_ARRAY_INFO(Vector4i, Variant::VECTOR4I)
205- MAKE_TYPED_ARRAY_INFO(Plane, Variant::PLANE)
206- MAKE_TYPED_ARRAY_INFO(Quaternion, Variant::QUATERNION)
207- MAKE_TYPED_ARRAY_INFO(AABB, Variant::AABB)
208- MAKE_TYPED_ARRAY_INFO(Basis, Variant::BASIS)
209- MAKE_TYPED_ARRAY_INFO(Transform3D, Variant::TRANSFORM3D)
210- MAKE_TYPED_ARRAY_INFO(Projection, Variant::PROJECTION)
211- MAKE_TYPED_ARRAY_INFO(Color, Variant::COLOR)
212- MAKE_TYPED_ARRAY_INFO(StringName, Variant::STRING_NAME)
213- MAKE_TYPED_ARRAY_INFO(NodePath, Variant::NODE_PATH)
214- MAKE_TYPED_ARRAY_INFO(RID, Variant::RID)
215- MAKE_TYPED_ARRAY_INFO(Callable, Variant::CALLABLE)
216- MAKE_TYPED_ARRAY_INFO(Signal, Variant::SIGNAL)
217- MAKE_TYPED_ARRAY_INFO(Dictionary, Variant::DICTIONARY)
218- MAKE_TYPED_ARRAY_INFO(Array, Variant::ARRAY)
219- MAKE_TYPED_ARRAY_INFO(PackedByteArray, Variant::PACKED_BYTE_ARRAY)
220- MAKE_TYPED_ARRAY_INFO(PackedInt32Array, Variant::PACKED_INT32_ARRAY)
221- MAKE_TYPED_ARRAY_INFO(PackedInt64Array, Variant::PACKED_INT64_ARRAY)
222- MAKE_TYPED_ARRAY_INFO(PackedFloat32Array, Variant::PACKED_FLOAT32_ARRAY)
223- MAKE_TYPED_ARRAY_INFO(PackedFloat64Array, Variant::PACKED_FLOAT64_ARRAY)
224- MAKE_TYPED_ARRAY_INFO(PackedStringArray, Variant::PACKED_STRING_ARRAY)
225- MAKE_TYPED_ARRAY_INFO(PackedVector2Array, Variant::PACKED_VECTOR2_ARRAY)
226- MAKE_TYPED_ARRAY_INFO(PackedVector3Array, Variant::PACKED_VECTOR3_ARRAY)
227- MAKE_TYPED_ARRAY_INFO(PackedColorArray, Variant::PACKED_COLOR_ARRAY)
228- MAKE_TYPED_ARRAY_INFO(PackedVector4Array, Variant::PACKED_VECTOR4_ARRAY)
229- MAKE_TYPED_ARRAY_INFO(IPAddress, Variant::STRING)
230-
231- #undef MAKE_TYPED_ARRAY
232- #undef MAKE_TYPED_ARRAY_INFO
0 commit comments