Jlm
Loading...
Searching...
No Matches
MatchVariant.hpp
Go to the documentation of this file.
1/*
2 * Copyright 2026 Helge Bahmann <hcb@chaoticmind.net>
3 * See COPYING for terms of redistribution.
4 */
5
6#ifndef JLM_RVSDG_MATCH_VARIANT_HPP
7#define JLM_RVSDG_MATCH_VARIANT_HPP
8
9#include <variant>
10
11namespace jlm::rvsdg
12{
13
14namespace
15{
16// The usual C++ "overloaded" pattern & deduction pattern.
17template<class... Ts>
18struct Overloaded : Ts...
19{
20 using Ts::operator()...;
21};
22template<class... Ts>
23Overloaded(Ts...) -> Overloaded<Ts...>;
24}
25
46template<typename T, typename... Fns>
47decltype(auto)
49{
50 return std::visit(Overloaded{ std::forward<Fns>(fns)... }, std::forward<T>(obj));
51}
52
53}
54
55#endif
decltype(auto) MatchVariant(T &&obj, Fns &&... fns)
Pattern match over variant.
NodeType * TryGetOwnerNode(const rvsdg::Input &input) noexcept
Checks if this is an input to a node of specified type.
Definition node.hpp:872