6#ifndef JLM_RVSDG_MATCH_TYPE_HPP
7#define JLM_RVSDG_MATCH_TYPE_HPP
26template<
typename MFP,
typename Ret,
typename...
Args>
30 using type = std::tuple_element_t<0, std::tuple<
Args...>>;
34template<
typename MFP,
typename Ret,
typename...
Args>
38 using type = std::tuple_element_t<0, std::tuple<
Args...>>;
51template<
typename MFP,
typename Ret,
typename...
Args>
59template<
typename MFP,
typename Ret,
typename...
Args>
72template<
typename Callable>
80template<
typename Ret,
typename...
Args>
84 using type = std::tuple_element_t<0, std::tuple<
Args...>>;
93template<
typename Callable>
101template<
typename Ret,
typename...
Args>
122template<
typename T,
typename...
Fns>
133template<
typename T,
typename Fn,
typename...
Fns>
137 using S = std::remove_reference_t<typename CallableArgumentType<Fn>::type>;
138 if (
auto i =
dynamic_cast<S *
>(&
x))
165template<
typename T,
typename...
Fns>
170template<
typename T,
typename Fn>
178template<
typename T,
typename Fn,
typename...
Fns>
182 using S = std::remove_reference_t<typename CallableArgumentType<Fn>::type>;
183 if (
auto i =
dynamic_cast<S *
>(&
x))
208template<
typename T,
typename...
Fns>
213template<
typename T,
typename Fn>
217 using S = std::remove_reference_t<typename CallableArgumentType<Fn>::type>;
218 if (
auto i =
dynamic_cast<S *
>(&
x))
224 throw std::logic_error(std::string(
"Incomplete pattern matching on ") +
typeid(
T).name());
229template<
typename T,
typename Fn,
typename...
Fns>
233 using S = std::remove_reference_t<typename CallableArgumentType<Fn>::type>;
234 if (
auto i =
dynamic_cast<S *
>(&
x))
void MatchTypeWithDefault(T &obj, const Fns &... fns)
Pattern match over subclass type of given object with default handler.
void MatchTypeOrFail(T &obj, const Fns &... fns)
Pattern match over subclass type of given object.
void MatchType(T &obj, const Fns &... fns)
Pattern match over subclass type of given object.
NodeType * TryGetOwnerNode(const rvsdg::Input &input) noexcept
Checks if this is an input to a node of specified type.
std::tuple_element_t< 0, std::tuple< Args... > > type
Template helper to deduce first argument of a callable object.
typename member_function_pointer_argtype< decltype(&Callable::operator())>::type type
Template helper to deduce result of a callable object.
typename member_function_pointer_restype< decltype(&Callable::operator())>::type type
std::tuple_element_t< 0, std::tuple< Args... > > type
std::tuple_element_t< 0, std::tuple< Args... > > type
Template helper to deduce argument type of member function pointer.
Template helper to deduce result type of member function pointer.