PtrToArg::convert() returns const-references where possible, avoids unnecessary copies

This commit is contained in:
Jan Haller 2023-07-30 23:18:02 +02:00
parent f2acfb1ffc
commit 38334fdc11
2 changed files with 23 additions and 24 deletions

View file

@ -38,26 +38,26 @@
template <class T> template <class T>
struct PtrToArg {}; struct PtrToArg {};
#define MAKE_PTRARG(m_type) \ #define MAKE_PTRARG(m_type) \
template <> \ template <> \
struct PtrToArg<m_type> { \ struct PtrToArg<m_type> { \
_FORCE_INLINE_ static m_type convert(const void *p_ptr) { \ _FORCE_INLINE_ static const m_type &convert(const void *p_ptr) { \
return *reinterpret_cast<const m_type *>(p_ptr); \ return *reinterpret_cast<const m_type *>(p_ptr); \
} \ } \
typedef m_type EncodeT; \ typedef m_type EncodeT; \
_FORCE_INLINE_ static void encode(m_type p_val, void *p_ptr) { \ _FORCE_INLINE_ static void encode(m_type p_val, void *p_ptr) { \
*((m_type *)p_ptr) = p_val; \ *((m_type *)p_ptr) = p_val; \
} \ } \
}; \ }; \
template <> \ template <> \
struct PtrToArg<const m_type &> { \ struct PtrToArg<const m_type &> { \
_FORCE_INLINE_ static m_type convert(const void *p_ptr) { \ _FORCE_INLINE_ static const m_type &convert(const void *p_ptr) { \
return *reinterpret_cast<const m_type *>(p_ptr); \ return *reinterpret_cast<const m_type *>(p_ptr); \
} \ } \
typedef m_type EncodeT; \ typedef m_type EncodeT; \
_FORCE_INLINE_ static void encode(m_type p_val, void *p_ptr) { \ _FORCE_INLINE_ static void encode(m_type p_val, void *p_ptr) { \
*((m_type *)p_ptr) = p_val; \ *((m_type *)p_ptr) = p_val; \
} \ } \
} }
#define MAKE_PTRARGCONV(m_type, m_conv) \ #define MAKE_PTRARGCONV(m_type, m_conv) \
@ -85,7 +85,7 @@ struct PtrToArg {};
#define MAKE_PTRARG_BY_REFERENCE(m_type) \ #define MAKE_PTRARG_BY_REFERENCE(m_type) \
template <> \ template <> \
struct PtrToArg<m_type> { \ struct PtrToArg<m_type> { \
_FORCE_INLINE_ static m_type convert(const void *p_ptr) { \ _FORCE_INLINE_ static const m_type &convert(const void *p_ptr) { \
return *reinterpret_cast<const m_type *>(p_ptr); \ return *reinterpret_cast<const m_type *>(p_ptr); \
} \ } \
typedef m_type EncodeT; \ typedef m_type EncodeT; \
@ -95,7 +95,7 @@ struct PtrToArg {};
}; \ }; \
template <> \ template <> \
struct PtrToArg<const m_type &> { \ struct PtrToArg<const m_type &> { \
_FORCE_INLINE_ static m_type convert(const void *p_ptr) { \ _FORCE_INLINE_ static const m_type &convert(const void *p_ptr) { \
return *reinterpret_cast<const m_type *>(p_ptr); \ return *reinterpret_cast<const m_type *>(p_ptr); \
} \ } \
typedef m_type EncodeT; \ typedef m_type EncodeT; \

View file

@ -145,8 +145,7 @@ struct PtrToArg<TypedArray<T>> {
template <class T> template <class T>
struct PtrToArg<const TypedArray<T> &> { struct PtrToArg<const TypedArray<T> &> {
typedef Array EncodeT; typedef Array EncodeT;
_FORCE_INLINE_ static TypedArray<T> _FORCE_INLINE_ static TypedArray<T> convert(const void *p_ptr) {
convert(const void *p_ptr) {
return TypedArray<T>(*reinterpret_cast<const Array *>(p_ptr)); return TypedArray<T>(*reinterpret_cast<const Array *>(p_ptr));
} }
}; };