Explorar el Código

Add pointers support for virtual methods.

As introduced in godot for virtual methods.
Custom structs are not yet supported.
Fabio Alessandrelli hace 3 años
padre
commit
80fdb9146f
Se han modificado 1 ficheros con 41 adiciones y 0 borrados
  1. 41 0
      include/godot_cpp/core/method_ptrcall.hpp

+ 41 - 0
include/godot_cpp/core/method_ptrcall.hpp

@@ -184,6 +184,47 @@ struct PtrToArg<const T *> {
 	}
 };
 
+// Pointers.
+#define GDVIRTUAL_NATIVE_PTR(m_type)                                     \
+	template <>                                                          \
+	struct PtrToArg<m_type *> {                                          \
+		_FORCE_INLINE_ static m_type *convert(const void *p_ptr) {       \
+			return (m_type *)(*(void **)p_ptr);                          \
+		}                                                                \
+		typedef m_type *EncodeT;                                         \
+		_FORCE_INLINE_ static void encode(m_type *p_var, void *p_ptr) {  \
+			*((void **)p_ptr) = p_var;                                   \
+		}                                                                \
+	};                                                                   \
+                                                                         \
+	template <>                                                          \
+	struct PtrToArg<const m_type *> {                                    \
+		_FORCE_INLINE_ static const m_type *convert(const void *p_ptr) { \
+			return (const m_type *)(*(const void **)p_ptr);              \
+		}                                                                \
+		typedef const m_type *EncodeT;                                   \
+		_FORCE_INLINE_ static void encode(m_type *p_var, void *p_ptr) {  \
+			*((void **)p_ptr) = p_var;                                   \
+		}                                                                \
+	}
+
+GDVIRTUAL_NATIVE_PTR(bool);
+GDVIRTUAL_NATIVE_PTR(char);
+GDVIRTUAL_NATIVE_PTR(char16_t);
+GDVIRTUAL_NATIVE_PTR(char32_t);
+GDVIRTUAL_NATIVE_PTR(wchar_t);
+GDVIRTUAL_NATIVE_PTR(uint8_t);
+GDVIRTUAL_NATIVE_PTR(uint8_t *);
+GDVIRTUAL_NATIVE_PTR(int8_t);
+GDVIRTUAL_NATIVE_PTR(uint16_t);
+GDVIRTUAL_NATIVE_PTR(int16_t);
+GDVIRTUAL_NATIVE_PTR(uint32_t);
+GDVIRTUAL_NATIVE_PTR(int32_t);
+GDVIRTUAL_NATIVE_PTR(int64_t);
+GDVIRTUAL_NATIVE_PTR(uint64_t);
+GDVIRTUAL_NATIVE_PTR(float);
+GDVIRTUAL_NATIVE_PTR(double);
+
 } // namespace godot
 
 #endif // ! GODOT_CPP_METHOD_PTRCALL_HPP