19            template <
class F, 
class Tuple, std::size_t... I, 
class... Args>
 
   20            inline constexpr decltype(
auto) 
CallbackImpl(F&& a_func, Tuple&& a_tuple, std::index_sequence<I...>, Args&&... a_args)
 
   23                    std::forward<F>(a_func),
 
   24                    std::forward<Args>(a_args)...,
 
   25                    std::get<I>(std::forward<Tuple>(a_tuple))...);
 
 
   28            template <
class F, 
class Tuple, 
class... Args>
 
   29            inline constexpr decltype(
auto) 
CallBack(F&& a_func, Tuple&& a_tuple, Args&&... a_args)
 
   32                    std::forward<F>(a_func),
 
   33                    std::forward<Tuple>(a_tuple),
 
   35                    std::forward<Args>(a_args)...);
 
 
   38            template <
class... Args, std::size_t... I>
 
   41                return std::forward_as_tuple(
 
 
   46            template <
class... Args>
 
   49                return MakeTupleImpl<Args...>(a_frame, a_page, std::index_sequence_for<Args...>{});
 
 
   53        template <
bool IS_LONG, 
class F, 
class R, 
class Base, 
class... Args>
 
   71                _retType = GetRawType<result_type>();
 
 
   78                return static_cast<bool>(
_stub);
 
 
   84                if constexpr (std::negation_v<is_static_base<base_type>>) {
 
   91                auto page = a_frame.GetPageForFrame();
 
   93                if constexpr (std::is_void_v<result_type>) {
 
   94                    if constexpr (IS_LONG) {
 
   96                        a_resultValue.SetNone();
 
   99                        a_resultValue.SetNone();
 
  102                    if constexpr (IS_LONG) {
 
  103                        auto result = 
Impl::CallBack(
_stub, std::move(args), std::addressof(a_vm), a_stackID, std::move(base));
 
  104                        a_resultValue.Pack<
result_type>(std::move(result));
 
  107                        a_resultValue.Pack<
result_type>(std::move(result));
 
 
 
  120    template <
class F, 
class = 
void>
 
  123    template <
class R, 
class Cls, 
class... Args>
 
  124    class NativeFunction<R(Cls, Args...), 
std::enable_if_t<BSScript::is_valid_short_sig_v<R, Cls, Args...>>> :
 
 
  138    template <
class Int, 
class R, 
class Cls, 
class... Args>
 
  139    class NativeFunction<R(BSScript::Internal::VirtualMachine*, Int, Cls, Args...), std::enable_if_t<BSScript::is_valid_long_sig_v<Int, R, Cls, Args...>>> :
 
 
  153    template <
class Int, 
class R, 
class Cls, 
class... Args>
 
  154    class NativeFunction<R(BSScript::IVirtualMachine*, Int, Cls, Args...), std::enable_if_t<BSScript::is_valid_long_sig_v<Int, R, Cls, Args...>>> :
 
 
  177            if (a_callableFromTasklets) {
 
 
Definition IVirtualMachine.h:39
void SetCallableFromTasklets(const char *a_className, const char *a_stateName, const char *a_fnName, bool a_callable)
void RegisterFunction(std::string_view a_fnName, std::string_view a_className, F a_callback, bool a_callableFromTasklets=false)
Definition NativeFunction.h:174
virtual bool BindNativeMethod(IFunction *a_fn)=0
Definition VirtualMachine.h:46
Definition NativeFunctionBase.h:23
TypeInfo _retType
Definition NativeFunctionBase.h:65
NativeFunctionBase()=delete
Internal::VDescTable _descTable
Definition NativeFunctionBase.h:66
Definition NativeFunction.h:55
NativeFunction(NativeFunction &&)=delete
std::function< function_type > _stub
Definition NativeFunction.h:116
Base base_type
Definition NativeFunction.h:58
NativeFunction(const NativeFunction &)=delete
~NativeFunction() override=default
bool MarshallAndDispatch(Variable &a_baseValue, Internal::VirtualMachine &a_vm, VMStackID a_stackID, Variable &a_resultValue, const StackFrame &a_frame) const override
Definition NativeFunction.h:81
R result_type
Definition NativeFunction.h:57
bool HasStub() const override
Definition NativeFunction.h:76
F function_type
Definition NativeFunction.h:59
NativeFunction(std::string_view a_fnName, std::string_view a_className, function_type a_callback)
Definition NativeFunction.h:65
Definition StackFrame.h:15
Variable & GetStackFrameVariable(std::uint32_t a_index, std::uint32_t a_pageHint) const
T Unpack() const
Definition PackUnpack.h:298
typename super::function_type function_type
Definition NativeFunction.h:163
typename super::result_type result_type
Definition NativeFunction.h:161
typename super::base_type base_type
Definition NativeFunction.h:162
typename super::function_type function_type
Definition NativeFunction.h:148
typename super::result_type result_type
Definition NativeFunction.h:146
typename super::base_type base_type
Definition NativeFunction.h:147
typename super::result_type result_type
Definition NativeFunction.h:131
typename super::function_type function_type
Definition NativeFunction.h:133
typename super::base_type base_type
Definition NativeFunction.h:132
Definition NativeFunction.h:121
std::tuple< Args... > MakeTupleImpl(const StackFrame &a_frame, std::uint32_t a_page, std::index_sequence< I... >)
Definition NativeFunction.h:39
std::tuple< Args... > MakeTuple(const StackFrame &a_frame, std::uint32_t a_page)
Definition NativeFunction.h:47
constexpr decltype(auto) CallBack(F &&a_func, Tuple &&a_tuple, Args &&... a_args)
Definition NativeFunction.h:29
constexpr decltype(auto) CallbackImpl(F &&a_func, Tuple &&a_tuple, std::index_sequence< I... >, Args &&... a_args)
Definition NativeFunction.h:20
constexpr bool is_static_base_v
Definition TypeTraits.h:137
Definition AbsorbEffect.h:6
std::uint32_t VMStackID
Definition BSCoreTypes.h:8
Definition EffectArchetypes.h:65
SimpleArray< BSTTuple< BSFixedString, TypeInfo > > entries
Definition VDescTable.h:24
Definition CommonTypeTraits.h:191