6 #ifndef JLM_RVSDG_MATCH_TYPE_HPP
7 #define JLM_RVSDG_MATCH_TYPE_HPP
22 template<
typename MFP>
26 template<
typename MFP,
typename Ret,
typename... Args>
30 using type = std::tuple_element_t<0, std::tuple<Args...>>;
34 template<
typename MFP,
typename Ret,
typename... Args>
38 using type = std::tuple_element_t<0, std::tuple<Args...>>;
47 template<
typename MFP>
51 template<
typename MFP,
typename Ret,
typename... Args>
59 template<
typename MFP,
typename Ret,
typename... Args>
72 template<
typename Callable>
80 template<
typename Ret,
typename... Args>
84 using type = std::tuple_element_t<0, std::tuple<Args...>>;
93 template<
typename Callable>
101 template<
typename Ret,
typename... Args>
122 template<
typename T,
typename... Fns>
133 template<
typename T,
typename Fn,
typename... Fns>
138 if (
auto i =
dynamic_cast<S *
>(&x))
165 template<
typename T,
typename... Fns>
170 template<
typename T,
typename Fn>
178 template<
typename T,
typename Fn,
typename... Fns>
183 if (
auto i =
dynamic_cast<S *
>(&x))
208 template<
typename T,
typename... Fns>
213 template<
typename T,
typename Fn>
218 if (
auto i =
dynamic_cast<S *
>(&x))
224 throw std::logic_error(std::string(
"Incomplete pattern matching on ") +
typeid(T).name());
229 template<
typename T,
typename Fn,
typename... Fns>
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.
static std::string type(const Node *n)
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.