CommonLibSSE (Parapets fork)
Loading...
Searching...
No Matches
FunctionArguments.h
Go to the documentation of this file.
1#pragma once
2
4#include "RE/T/TypeTraits.h"
6
7namespace RE
8{
9 namespace BSScript
10 {
11 namespace Impl
12 {
13 template <class... Args, std::size_t... I>
14 void CopyArgsImpl(std::tuple<Args...>& a_tuple, BSScrapArray<Variable>& a_dst, std::index_sequence<I...>)
15 {
16 (a_dst[I].Pack(std::get<I>(a_tuple)), ...);
17 }
18
19 template <class... Args>
20 void CopyArgs(std::tuple<Args...>& a_tuple, BSScrapArray<Variable>& a_dst)
21 {
22 CopyArgsImpl(a_tuple, a_dst, std::index_sequence_for<Args...>{});
23 }
24 }
25
26 template <class Enable, class... Args>
28
29 template <class... Args>
31 std::enable_if_t<
32 std::conjunction_v<
33 is_return_convertible<Args>...>>,
34 Args...> :
36 {
37 private:
39
40 public:
41 FunctionArguments(Args&&... a_args) :
42 super(),
43 _args(std::forward<Args>(a_args)...)
44 {}
45
47 super(),
48 _args()
49 {}
50
52 super(),
53 _args(a_rhs._args)
54 {}
55
57 super(),
58 _args(std::move(a_rhs._args))
59 {}
60
61 ~FunctionArguments() override = default; // 00
62
63 bool operator()(BSScrapArray<Variable>& a_dst) const override // 01
64 {
65 a_dst.resize(sizeof...(Args));
66 auto& args = const_cast<std::add_lvalue_reference_t<std::decay_t<decltype(_args)>>>(_args);
67 Impl::CopyArgs(args, a_dst);
68 return true;
69 }
70
71 protected:
72 std::tuple<std::decay_t<Args>...> _args;
73 };
74 }
75
76 template <class... Args>
78
79 template <class... Args>
81 {
82 return new FunctionArguments<Args...>(std::forward<Args>(a_args)...);
83 }
84
85 template <>
87 {
89 }
90}
bool operator()(BSScrapArray< Variable > &a_dst) const override
Definition: FunctionArguments.h:63
Definition: FunctionArguments.h:27
Definition: IFunctionArguments.h:12
Definition: ZeroFunctionArguments.h:10
Definition: BSTArray.h:377
void CopyArgsImpl(std::tuple< Args... > &a_tuple, BSScrapArray< Variable > &a_dst, std::index_sequence< I... >)
Definition: FunctionArguments.h:14
void CopyArgs(std::tuple< Args... > &a_tuple, BSScrapArray< Variable > &a_dst)
Definition: FunctionArguments.h:20
Definition: AbsorbEffect.h:6
BSScript::IFunctionArguments * MakeFunctionArguments()
Definition: FunctionArguments.h:86
Definition: NiBinaryStream.h:94