-
-
Notifications
You must be signed in to change notification settings - Fork 688
Add pointers support for virtual methods. #625
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -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 *); | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Comparing with https://github.com/godotengine/godot/blob/master/core/variant/native_ptr.h, this one seems unique here. Is that expected? Also There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Oh I haven't yet merged godotengine/godot#52481 , that's the PacketPeer
Yes, those should be auto-generated |
||
| 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 | ||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Maybe add a comment that this should be kept in sync with https://github.com/godotengine/godot/blob/master/core/variant/native_ptr.h (especially the
GDVIRTUAL_NATIVE_PTRcalls).