22 #include "../config.h"
25 #include "RMonoAPIFunctionTypeAdapters.h"
26 #include "RMonoAPIFunctionSimple_Def.h"
27 #include "RMonoAPIFunctionRaw_Def.h"
28 #include "RMonoAPIFunctionWrap_Def.h"
29 #include "RMonoAPIFunctionAPI_Def.h"
30 #include "RMonoAPIBase_Def.h"
50 template <
typename ABI,
bool required,
typename RetT,
typename... ArgsT>
52 public RMonoAPIFunctionRaw<RMonoAPIFunctionBase<ABI, required, RetT, ArgsT...>, ABI, RetT, ArgsT...>,
53 public RMonoAPIFunctionWrap<RMonoAPIFunctionBase<ABI, required, RetT, ArgsT...>, ABI, RetT, ArgsT...>,
54 public RMonoAPIFunctionAPI<RMonoAPIFunctionBase<ABI, required, RetT, ArgsT...>, ABI, RetT, ArgsT...>
59 typedef RetT DefRetType;
60 typedef std::tuple<ArgsT...> DefArgsTuple;
63 constexpr
static bool isRequired()
93 void init(ABI* abi,
RMonoAPIBase* mono,
const std::string& name, blackbone::ptr_t rawFuncAddr)
98 this->initRaw(rawFuncAddr);
117 asmjit::Label
compile(blackbone::IAsmHelper& a)
119 return this->compileWrap(a);
128 void link(blackbone::ptr_t wrapFuncAddr)
130 this->linkWrap(wrapFuncAddr);
156 operator bool()
const {
return (
bool) rawFunc; }
159 template <
typename ArgsTupleT,
size_t argIdx>
160 void debugDumpSignaturesArgRecurse(std::string& sigStr);
174 template <
typename ABI,
bool required,
typename RetT,
typename... ArgsT>
177 typedef RetT DefRetType;
178 typedef std::tuple<ArgsT...> DefArgsTuple;
181 template <
typename ABI,
bool required,
typename RetT,
typename... ArgsT>
188 typedef typename RawComponent::RawRetType RawRetType;
189 typedef typename RawComponent::RawArgsTuple RawArgsTuple;
192 template <
typename ABI,
bool required,
typename RetT,
typename... ArgsT>
199 typedef typename WrapComponent::WrapRetType WrapRetType;
200 typedef typename WrapComponent::WrapArgsTuple WrapArgsTuple;
203 template <
typename ABI,
bool required,
typename RetT,
typename... ArgsT>
210 typedef typename APIComponent::APIRetType APIRetType;
211 typedef typename APIComponent::APIArgsTuple APIArgsTuple;
222 template <
typename ABI,
bool required,
typename RetT,
typename... ArgsT>
226 typename tags::ReturnNull<RetT>,
227 typename tags::ParamNull<ArgsT>...
236 template <
typename ABI,
bool required,
typename RetT,
typename... ArgsT>