Add pointers support for virtual methods.
As introduced in godot for virtual methods. Custom structs are not yet supported.pull/625/head
parent
a44e9aa3f9
commit
80fdb9146f
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue