From dea62df69b02c52fd0efe37b8b39a592220a7bf0 Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Mon, 28 Feb 2022 11:39:28 +0300 Subject: [PATCH] Replaced index-based accessor with type-based one in variant text. --- ui/text/text_variant.cpp | 38 ++++++++++++++++++++------------------ 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/ui/text/text_variant.cpp b/ui/text/text_variant.cpp index b795d94..943867c 100644 --- a/ui/text/text_variant.cpp +++ b/ui/text/text_variant.cpp @@ -11,16 +11,17 @@ namespace v::text { rpl::producer take_plain( data &&d, rpl::producer &&fallback) { - if (const auto empty = std::get_if<0>(&d)) { + using RplMarked = rpl::producer; + if (const auto empty = std::get_if(&d)) { return std::move(fallback); - } else if (const auto plainPtr = std::get_if<1>(&d)) { - return rpl::single(base::take(*plainPtr)); - } else if (const auto rplPlainPtr = std::get_if<2>(&d)) { - return base::take(*rplPlainPtr); - } else if (const auto markedPtr = std::get_if<3>(&d)) { - return rpl::single(base::take(*markedPtr).text); - } else if (const auto rplMarkedPtr = std::get_if<4>(&d)) { - return base::take(*rplMarkedPtr) | rpl::map([](const auto &marked) { + } else if (const auto ptr = std::get_if(&d)) { + return rpl::single(base::take(*ptr)); + } else if (const auto ptr = std::get_if>(&d)) { + return base::take(*ptr); + } else if (const auto ptr = std::get_if(&d)) { + return rpl::single(base::take(*ptr).text); + } else if (const auto ptr = std::get_if(&d)) { + return base::take(*ptr) | rpl::map([](const auto &marked) { return marked.text; }); } @@ -30,16 +31,17 @@ rpl::producer take_plain( rpl::producer take_marked( data &&d, rpl::producer &&fallback) { - if (const auto empty = std::get_if<0>(&d)) { + using RplMarked = rpl::producer; + if (const auto empty = std::get_if(&d)) { return std::move(fallback); - } else if (const auto plainPtr = std::get_if<1>(&d)) { - return rpl::single(TextWithEntities{ base::take(*plainPtr) }); - } else if (const auto rplPlainPtr = std::get_if<2>(&d)) { - return base::take(*rplPlainPtr) | rpl::map(TextWithEntities::Simple); - } else if (const auto markedPtr = std::get_if<3>(&d)) { - return rpl::single(base::take(*markedPtr)); - } else if (const auto rplMarkedPtr = std::get_if<4>(&d)) { - return base::take(*rplMarkedPtr); + } else if (const auto ptr = std::get_if(&d)) { + return rpl::single(TextWithEntities{ base::take(*ptr) }); + } else if (const auto ptr = std::get_if>(&d)) { + return base::take(*ptr) | rpl::map(TextWithEntities::Simple); + } else if (const auto ptr = std::get_if(&d)) { + return rpl::single(base::take(*ptr)); + } else if (const auto ptr = std::get_if(&d)) { + return base::take(*ptr); } Unexpected("Bad variant in take_marked."); }