From 0729f0166c0dd6b4d4ed7697238406b2f8fd8a7b Mon Sep 17 00:00:00 2001 From: Rowan Goemans Date: Thu, 26 Sep 2024 18:24:59 +0200 Subject: [PATCH] nextpnr_base_types: Add overload lambda visitor helper --- common/kernel/nextpnr_base_types.h | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/common/kernel/nextpnr_base_types.h b/common/kernel/nextpnr_base_types.h index 80a0e24e..4f0d37fb 100644 --- a/common/kernel/nextpnr_base_types.h +++ b/common/kernel/nextpnr_base_types.h @@ -29,11 +29,27 @@ #include #include +#include #include "hashlib.h" #include "idstring.h" #include "nextpnr_namespaces.h" +/* Helper struct to overload lambdas for variabt visiting + so you can do: + std::variant var = 42; + + std::visit(overloaded{ + [](int arg) { std::cout << "Integer: " << arg << '\n'; }, + [](const std::string& arg) { std::cout << "String: " << arg << '\n'; } + }, var); +*/ +template struct overloaded : Ts... +{ + using Ts::operator()...; +}; +template overloaded(Ts...) -> overloaded; + NEXTPNR_NAMESPACE_BEGIN struct GraphicElement