Skip to content

Commit 5cb6186

Browse files
committed
Review
1 parent de223c9 commit 5cb6186

File tree

1 file changed

+29
-16
lines changed

1 file changed

+29
-16
lines changed

Client/game_sa/gamesa_init.h

Lines changed: 29 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -115,13 +115,13 @@ template <typename... Args>
115115
struct GTAFuncSignature
116116
{
117117
std::tuple<Args...> args;
118-
GTAFuncSignature(Args... a) : args(std::forward<Args>(a)...) {}
118+
GTAFuncSignature(Args... a) : args(std::move(a)...) {}
119119
};
120120

121121
template <typename... Args>
122122
GTAFuncSignature<Args...> PrepareSignature(Args... args)
123123
{
124-
return GTAFuncSignature<Args...>(std::forward<Args>(args)...);
124+
return GTAFuncSignature<Args...>(std::move(args)...);
125125
}
126126

127127
template <typename ReturnType, typename Func, typename Tuple, std::size_t... I>
@@ -131,18 +131,31 @@ ReturnType apply_helper(Func&& f, Tuple&& t, std::index_sequence<I...>)
131131
}
132132

133133
template <typename ReturnType, typename CallingConvention, typename Func, typename... Args>
134-
ReturnType CallGTAFunction(Func function, GTAFuncSignature<Args...>& sig)
135-
{
136-
if constexpr (std::is_same_v<CallingConvention, __THISCALL>)
137-
return apply_helper<ReturnType>(reinterpret_cast<ReturnType(__thiscall*)(Args...)>(function), sig.args, std::index_sequence_for<Args...>{});
138-
else if constexpr (std::is_same_v<CallingConvention, __CDECL>)
139-
return apply_helper<ReturnType>(reinterpret_cast<ReturnType(__cdecl*)(Args...)>(function), sig.args, std::index_sequence_for<Args...>{});
140-
else if constexpr (std::is_same_v<CallingConvention, __STDCALL>)
141-
return apply_helper<ReturnType>(reinterpret_cast<ReturnType(__stdcall*)(Args...)>(function), sig.args, std::index_sequence_for<Args...>{});
142-
else if constexpr (std::is_same_v<CallingConvention, __FASTCALL>)
143-
return apply_helper<ReturnType>(reinterpret_cast<ReturnType(__fastcall*)(Args...)>(function), sig.args, std::index_sequence_for<Args...>{});
144-
else if constexpr (std::is_same_v<CallingConvention, __VECTORCALL>)
145-
return apply_helper<ReturnType>(reinterpret_cast<ReturnType(__vectorcall*)(Args...)>(function), sig.args, std::index_sequence_for<Args...>{});
146-
else
147-
static_assert(sizeof(char) == 0, "Invalid calling convention specified in CallGTAFunction");
134+
typename std::enable_if<std::is_same<CallingConvention, __THISCALL>::value, ReturnType>::type CallGTAFunction(Func function, GTAFuncSignature<Args...>& sig)
135+
{
136+
return apply_helper<ReturnType>(reinterpret_cast<ReturnType(__thiscall*)(Args...)>(function), sig.args, std::index_sequence_for<Args...>{});
137+
}
138+
139+
template <typename ReturnType, typename CallingConvention, typename Func, typename... Args>
140+
typename std::enable_if<std::is_same<CallingConvention, __CDECL>::value, ReturnType>::type CallGTAFunction(Func function, GTAFuncSignature<Args...>& sig)
141+
{
142+
return apply_helper<ReturnType>(reinterpret_cast<ReturnType(__cdecl*)(Args...)>(function), sig.args, std::index_sequence_for<Args...>{});
143+
}
144+
145+
template <typename ReturnType, typename CallingConvention, typename Func, typename... Args>
146+
typename std::enable_if<std::is_same<CallingConvention, __STDCALL>::value, ReturnType>::type CallGTAFunction(Func function, GTAFuncSignature<Args...>& sig)
147+
{
148+
return apply_helper<ReturnType>(reinterpret_cast<ReturnType(__stdcall*)(Args...)>(function), sig.args, std::index_sequence_for<Args...>{});
149+
}
150+
151+
template <typename ReturnType, typename CallingConvention, typename Func, typename... Args>
152+
typename std::enable_if<std::is_same<CallingConvention, __FASTCALL>::value, ReturnType>::type CallGTAFunction(Func function, GTAFuncSignature<Args...>& sig)
153+
{
154+
return apply_helper<ReturnType>(reinterpret_cast<ReturnType(__fastcall*)(Args...)>(function), sig.args, std::index_sequence_for<Args...>{});
155+
}
156+
157+
template <typename ReturnType, typename CallingConvention, typename Func, typename... Args>
158+
typename std::enable_if<std::is_same<CallingConvention, __VECTORCALL>::value, ReturnType>::type CallGTAFunction(Func function, GTAFuncSignature<Args...>& sig)
159+
{
160+
return apply_helper<ReturnType>(reinterpret_cast<ReturnType(__vectorcall*)(Args...)>(function), sig.args, std::index_sequence_for<Args...>{});
148161
}

0 commit comments

Comments
 (0)