diff --git a/include/godot_cpp/core/method_ptrcall.hpp b/include/godot_cpp/core/method_ptrcall.hpp index 28127551..dc627167 100644 --- a/include/godot_cpp/core/method_ptrcall.hpp +++ b/include/godot_cpp/core/method_ptrcall.hpp @@ -184,6 +184,47 @@ struct PtrToArg { } }; +// Pointers. +#define GDVIRTUAL_NATIVE_PTR(m_type) \ + template <> \ + struct PtrToArg { \ + _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 { \ + _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