OGS
ProcessLib::Graph::detail Namespace Reference

Classes

struct  GetFlattenedTupleOfPassedArgs
 
struct  GetFlattenedTupleOfPassedArgs< Result(*)(DeclaredArgs...), Tuples... >
 
struct  GetFlattenedTupleOfPassedArgs< Result(Class::*)(DeclaredArgs...) const, ClassAndPassedArgsTuples... >
 
struct  GetFlattenedTupleOfPassedArgs< Result(Class::*)(DeclaredArgs...), ClassAgain, PassedArgsTuples... >
 
struct  GetFlattenedTupleTypes
 
struct  GetFunctionArgumentTypesPlain
 
struct  GetFunctionArgumentTypesPlain< Result(*)(Args...)>
 
struct  GetFunctionArgumentTypesPlain< Result(Class::*)(Args...) const >
 
struct  GetFunctionArgumentTypesPlain< Result(Class::*)(Args...)>
 
struct  GetFunctionReturnType
 
struct  GetFunctionReturnType< Result(*)(Args...)>
 
struct  GetFunctionReturnType< Result(Class::*)(Args...) const >
 
struct  GetFunctionReturnType< Result(Class::*)(Args...)>
 

Functions

template<typename Object , typename... Tuples, typename... MemberFunctionArgumentTypesPlain>
auto unpackAndInvoke (boost::mp11::mp_list< MemberFunctionArgumentTypesPlain... >, Object &&o, Tuples &... ts) -> typename GetFunctionReturnType< decltype(&std::decay_t< Object >::operator())>::type
 
template<typename Result , typename Object , typename... Args, typename... Tuples, typename... MemberFunctionArgumentTypesPlain>
Result unpackAndInvoke (boost::mp11::mp_list< MemberFunctionArgumentTypesPlain... >, Result(Object::*m)(Args...), Object &o, Tuples &... ts)
 
template<typename Result , typename Object , typename... Args, typename... Tuples, typename... MemberFunctionArgumentTypesPlain>
Result unpackAndInvoke (boost::mp11::mp_list< MemberFunctionArgumentTypesPlain... >, Result(Object::*m)(Args...), Object &&o, Tuples &... ts)
 
template<typename Result , typename Object , typename... Args, typename... Tuples, typename... MemberFunctionArgumentTypesPlain>
Result unpackAndInvoke (boost::mp11::mp_list< MemberFunctionArgumentTypesPlain... >, Result(Object::*m)(Args...) const, Object const &o, Tuples &... ts)
 
template<typename Result , typename... Args, typename... Tuples, typename... FunctionArgumentTypesPlain>
Result unpackAndInvoke (boost::mp11::mp_list< FunctionArgumentTypesPlain... >, Result(*fct)(Args...), Tuples &... ts)
 
template<typename Function , typename... Args>
auto applyImpl (Function &&f, Args &&... args) -> typename detail::GetFunctionReturnType< std::decay_t< Function > >::type
 
template<typename T , typename Tuple , typename... Tuples>
auto & getImpl (Tuple &t, Tuples &... ts)
 

Variables

template<typename List , typename Elem >
constexpr bool mp_contains_v = boost::mp11::mp_contains<List, Elem>::value
 
template<typename Set >
constexpr bool mp_is_set_v = boost::mp11::mp_is_set<Set>::value
 

Function Documentation

◆ applyImpl()

template<typename Function , typename... Args>
auto ProcessLib::Graph::detail::applyImpl ( Function && f,
Args &&... args ) -> typename detail::GetFunctionReturnType<std::decay_t<Function>>::type

Invokes the passed function f.

f can be a function object, a free function, or a member function pointer. In the latter case, the first entry of args must be the object for which f shall be invoked. (The remainder of) args are an arbitrary number of tuples from which arguments to f are taken based on their types.

See also
ProcessLib::Graph::apply()

Definition at line 213 of file Apply.h.

215{
216 using namespace boost::mp11;
217
218 using FunctionPlain = std::decay_t<Function>;
219 using FlattenedTuple =
220 typename GetFlattenedTupleOfPassedArgs<FunctionPlain, Args...>::type;
221 using FlattenedTupleOfPlainTypes =
222 mp_transform<std::remove_cvref_t, FlattenedTuple>;
223
224 static_assert(
225 boost::mp11::mp_is_set<FlattenedTupleOfPlainTypes>::value,
226 "The types of all elements of all passed tuples must be unique.");
227
228 using FunctionArgumentTypesPlain =
230
231 static_assert(
232 boost::mp11::mp_is_set<FunctionArgumentTypesPlain>::value,
233 "The argument types of the function to be called must be unique.");
234
235 return unpackAndInvoke(FunctionArgumentTypesPlain{},
236 std::forward<Function>(f),
237 std::forward<Args>(args)...);
238}
auto unpackAndInvoke(boost::mp11::mp_list< MemberFunctionArgumentTypesPlain... >, Object &&o, Tuples &... ts) -> typename GetFunctionReturnType< decltype(&std::decay_t< Object >::operator())>::type
Definition Apply.h:84

References unpackAndInvoke().

Referenced by ProcessLib::Graph::apply(), and ProcessLib::Graph::eval().

◆ getImpl()

template<typename T , typename Tuple , typename... Tuples>
auto & ProcessLib::Graph::detail::getImpl ( Tuple & t,
Tuples &... ts )

Definition at line 19 of file Get.h.

20{
21 using namespace boost::mp11;
22
23 using PlainTuple = std::remove_cv_t<Tuple>;
24 using TupleOfPlainTypes = mp_transform<std::remove_cvref_t, PlainTuple>;
25 using Index = mp_find<TupleOfPlainTypes, T>;
26
27 if constexpr (Index::value != mp_size<PlainTuple>::value)
28 {
29 return std::get<Index::value>(t);
30 }
31 else
32 {
33 return getImpl<T>(ts...);
34 }
35}

◆ unpackAndInvoke() [1/5]

template<typename Result , typename... Args, typename... Tuples, typename... FunctionArgumentTypesPlain>
Result ProcessLib::Graph::detail::unpackAndInvoke ( boost::mp11::mp_list< FunctionArgumentTypesPlain... > ,
Result(*)(Args...) fct,
Tuples &... ts )

Definition at line 148 of file Apply.h.

151{
152 return fct(ProcessLib::Graph::get<FunctionArgumentTypesPlain>(ts...)...);
153}

◆ unpackAndInvoke() [2/5]

template<typename Object , typename... Tuples, typename... MemberFunctionArgumentTypesPlain>
auto ProcessLib::Graph::detail::unpackAndInvoke ( boost::mp11::mp_list< MemberFunctionArgumentTypesPlain... > ,
Object && o,
Tuples &... ts ) -> typename GetFunctionReturnType< decltype(&std::decay_t<Object>::operator())>::type

Definition at line 84 of file Apply.h.

90{
91 return o(
92 ProcessLib::Graph::get<MemberFunctionArgumentTypesPlain>(ts...)...);
93}

Referenced by applyImpl().

◆ unpackAndInvoke() [3/5]

template<typename Result , typename Object , typename... Args, typename... Tuples, typename... MemberFunctionArgumentTypesPlain>
Result ProcessLib::Graph::detail::unpackAndInvoke ( boost::mp11::mp_list< MemberFunctionArgumentTypesPlain... > ,
Result(Object::*)(Args...) const m,
Object const & o,
Tuples &... ts )

Definition at line 133 of file Apply.h.

138{
139 return (o.*m)(
140 ProcessLib::Graph::get<MemberFunctionArgumentTypesPlain>(ts...)...);
141}

◆ unpackAndInvoke() [4/5]

template<typename Result , typename Object , typename... Args, typename... Tuples, typename... MemberFunctionArgumentTypesPlain>
Result ProcessLib::Graph::detail::unpackAndInvoke ( boost::mp11::mp_list< MemberFunctionArgumentTypesPlain... > ,
Result(Object::*)(Args...) m,
Object && o,
Tuples &... ts )

Definition at line 117 of file Apply.h.

122{
123 return (o.*m)(
124 ProcessLib::Graph::get<MemberFunctionArgumentTypesPlain>(ts...)...);
125}

◆ unpackAndInvoke() [5/5]

template<typename Result , typename Object , typename... Args, typename... Tuples, typename... MemberFunctionArgumentTypesPlain>
Result ProcessLib::Graph::detail::unpackAndInvoke ( boost::mp11::mp_list< MemberFunctionArgumentTypesPlain... > ,
Result(Object::*)(Args...) m,
Object & o,
Tuples &... ts )

Definition at line 101 of file Apply.h.

106{
107 return (o.*m)(
108 ProcessLib::Graph::get<MemberFunctionArgumentTypesPlain>(ts...)...);
109}

Variable Documentation

◆ mp_contains_v

template<typename List , typename Elem >
constexpr bool ProcessLib::Graph::detail::mp_contains_v = boost::mp11::mp_contains<List, Elem>::value
constexpr

Definition at line 50 of file Get.h.

◆ mp_is_set_v

template<typename Set >
constexpr bool ProcessLib::Graph::detail::mp_is_set_v = boost::mp11::mp_is_set<Set>::value
constexpr

Definition at line 55 of file Get.h.