OGS
ProcessLib::Graph Namespace Reference

Namespaces

namespace  detail
 

Functions

template<typename Function , typename... Tuples>
auto apply (Function &f, Tuples &... ts) -> typename detail::GetFunctionReturnType< std::decay_t< Function > >::type
 
template<typename Function , typename... Tuples>
auto eval (Function &f, Tuples &... ts) -> typename detail::GetFunctionReturnType< decltype(&Function::eval)>::type
 
template<typename T , typename... Tuples>
auto & get (Tuples &... ts)
 

Function Documentation

◆ apply()

template<typename Function , typename... Tuples>
auto ProcessLib::Graph::apply ( Function & f,
Tuples &... ts ) -> typename detail::GetFunctionReturnType<std::decay_t<Function>>::type

Invokes the passed function (object) f with arguments taken from the passed tuples.

The passed arguments are determined from their types. Therefore, both the argument types of the function and the member types of all passed tuples must be unique.

Definition at line 250 of file Apply.h.

252{
253 static_assert(boost::mp11::mp_similar<std::tuple<>,
254 std::remove_cv_t<Tuples>...>::value,
255 "In the argument ts... there must be only std::tuple's.");
256
257 return detail::applyImpl(f, ts...);
258}

References ProcessLib::Graph::detail::applyImpl().

◆ eval()

template<typename Function , typename... Tuples>
auto ProcessLib::Graph::eval ( Function & f,
Tuples &... ts ) -> typename detail::GetFunctionReturnType<decltype(&Function::eval)>::type

Invokes the eval() method of the passed object f with arguments taken from the passed tuples.

See also
apply()

Definition at line 267 of file Apply.h.

269{
270 static_assert(boost::mp11::mp_similar<std::tuple<>,
271 std::remove_cv_t<Tuples>...>::value,
272 "In the argument ts... there must be only std::tuple's.");
273
274 return detail::applyImpl(&Function::eval, f, ts...);
275}

References ProcessLib::Graph::detail::applyImpl().

◆ get()

template<typename T , typename... Tuples>
auto & ProcessLib::Graph::get ( Tuples &... ts)

Type-based access of an element of any of the passed tuples.

This function does essentially the same as std::get<T>(some_tuple), but for any number of passed tuples.

The type T must be present in the Tuples's member types exactly once. The passed Tuples's member types might be cvref qualified, but T must not.

Definition at line 67 of file Get.h.

68{
69 using namespace boost::mp11;
70
71 static_assert(std::is_same_v<T, std::remove_cvref_t<T>>,
72 "The passed type T must not be cvref qualified.");
73
74 using FlattenedTuple = typename detail::GetFlattenedTupleTypes<
75 std::remove_cv_t<Tuples>...>::type;
76 using FlattenedTupleOfPlainTypes =
77 mp_transform<std::remove_cvref_t, FlattenedTuple>;
78
79 static_assert(
80 detail::mp_is_set_v<FlattenedTupleOfPlainTypes>,
81 "The types of all elements of all passed tuples must be unique.");
82
83 static_assert(detail::mp_contains_v<FlattenedTupleOfPlainTypes, T>,
84 "Type T must be inside any of the passed tuples.");
85
86 return detail::getImpl<T>(ts...);
87}