"ScL Feature"
/
ScL Feature
0.0.1
C++20 composable proxy wrapper with pluggable executor strategy
Toggle main menu visibility
Loading...
Searching...
No Matches
access.h
Go to the documentation of this file.
1
#pragma once
2
6
7
#include <
scl/feature/type_traits/executor.h
>
8
9
#include <type_traits>
10
29
#define SCL_EXECUTOR_ACCESS(cv_ref) \
30
::scl::feature::executor_trait<s_c_l_type>::executor(static_cast<s_c_l_type cv_ref>(*this))
31
40
#define SCL_ACCESS_DECLVAL(cv_ref) \
41
s_c_l_executor_type::access(::std::declval<s_c_l_executor_type cv_ref>())
42
56
#define SCL_EXECUTE_OVERRIDED(name, cv_ref) \
57
s_c_l_executor_type::execute(SCL_EXECUTOR_ACCESS(cv_ref), \
58
[](auto && scl_e, ScLArgs &&... values) -> decltype(auto) { \
59
return s_c_l_executor_type::access(::std::forward<decltype(scl_e)>(scl_e)) \
60
.name(::scl::wrapper_cast(::std::forward<ScLArgs>(values))...); \
61
}, SCL_EXECUTOR_ACCESS(cv_ref), ::std::forward<ScLArgs>(scl_args)...)
62
73
#define SCL_EXECUTE_TEMPLATE_OVERRIDED(caller, cv_ref) \
74
s_c_l_executor_type::execute(SCL_EXECUTOR_ACCESS(cv_ref), \
75
[](auto && scl_e, ScLArgs &&... values) -> decltype(auto) { \
76
return caller::template call<ScLParam, ScLParams...>( \
77
s_c_l_executor_type::access(::std::forward<decltype(scl_e)>(scl_e)), \
78
::std::forward<ScLArgs>(values)...); \
79
}, SCL_EXECUTOR_ACCESS(cv_ref), ::std::forward<ScLArgs>(scl_args)...)
80
93
#define SCL_FRIEND_EXECUTOR_ACCESS(scl_self, cv_ref) \
94
::scl::feature::executor_trait<s_c_l_type>::executor(::std::forward<s_c_l_type cv_ref>(scl_self))
95
107
#define SCL_FRIEND_EXECUTE_OVERRIDED(name, scl_self, cv_ref) \
108
s_c_l_executor_type::execute(SCL_FRIEND_EXECUTOR_ACCESS(scl_self, cv_ref), \
109
[](auto && scl_e, ScLArgs &&... values) -> decltype(auto) { \
110
return s_c_l_executor_type::access(::std::forward<decltype(scl_e)>(scl_e)) \
111
.name(::scl::wrapper_cast(::std::forward<ScLArgs>(values))...); \
112
}, SCL_FRIEND_EXECUTOR_ACCESS(scl_self, cv_ref), ::std::forward<ScLArgs>(scl_args)...)
113
124
#define SCL_FRIEND_EXECUTE_TEMPLATE_OVERRIDED(caller, scl_self, cv_ref) \
125
s_c_l_executor_type::execute(SCL_FRIEND_EXECUTOR_ACCESS(scl_self, cv_ref), \
126
[](auto && scl_e, ScLArgs &&... values) -> decltype(auto) { \
127
return caller::template call<ScLParam, ScLParams...>( \
128
s_c_l_executor_type::access(::std::forward<decltype(scl_e)>(scl_e)), \
129
::std::forward<ScLArgs>(values)...); \
130
}, SCL_FRIEND_EXECUTOR_ACCESS(scl_self, cv_ref), ::std::forward<ScLArgs>(scl_args)...)
131
144
#define SCL_FRIEND_EXECUTE_OVERRIDED_NX(op, cv_ref) \
145
s_c_l_executor_type::execute(::std::declval<s_c_l_executor_type cv_ref>(), \
146
[](auto && scl_e, ScLArgs &&... values) -> decltype(auto) { \
147
return s_c_l_executor_type::access(::std::forward<decltype(scl_e)>(scl_e)) \
148
.op(::scl::wrapper_cast(::std::forward<ScLArgs>(values))...); \
149
}, ::std::declval<s_c_l_executor_type cv_ref>(), ::std::forward<ScLArgs>(scl_args)...)
150
160
#define SCL_FRIEND_EXECUTE_TEMPLATE_OVERRIDED_NX(caller, cv_ref) \
161
s_c_l_executor_type::execute(::std::declval<s_c_l_executor_type cv_ref>(), \
162
[](auto && scl_e, ScLArgs &&... values) -> decltype(auto) { \
163
return caller::template call<ScLParam, ScLParams...>( \
164
s_c_l_executor_type::access(::std::forward<decltype(scl_e)>(scl_e)), \
165
::std::forward<ScLArgs>(values)...); \
166
}, ::std::declval<s_c_l_executor_type cv_ref>(), ::std::forward<ScLArgs>(scl_args)...)
167
182
#define SCL_FRIEND_REVERSE_EXECUTE(op, scl_self, scl_lhs, cv_ref) \
183
s_c_l_executor_type::execute(SCL_FRIEND_EXECUTOR_ACCESS(scl_self, cv_ref), \
184
[](auto && scl_e, auto && scl_l) -> decltype(auto) { \
185
return ::std::forward<decltype(scl_l)>(scl_l) \
186
op s_c_l_executor_type::access(::std::forward<decltype(scl_e)>(scl_e)); \
187
}, SCL_FRIEND_EXECUTOR_ACCESS(scl_self, cv_ref), ::std::forward<ScLLhs>(scl_lhs))
188
200
#define SCL_FRIEND_REVERSE_EXECUTE_NX(op, cv_ref) \
201
s_c_l_executor_type::execute(::std::declval<s_c_l_executor_type cv_ref>(), \
202
[](auto && scl_e, auto && scl_l) -> decltype(auto) { \
203
return ::std::forward<decltype(scl_l)>(scl_l) \
204
op s_c_l_executor_type::access(::std::forward<decltype(scl_e)>(scl_e)); \
205
}, ::std::declval<s_c_l_executor_type cv_ref>(), ::std::declval<ScLLhs>())
executor.h
Executor type traits: interface detection and noexcept helpers.
src
scl
feature
reflection
access.h
Generated by
1.18.0