From 14e808e57456c0b9b36bd5bca2cf64216ed73eb1 Mon Sep 17 00:00:00 2001 From: Totto16 Date: Thu, 14 Nov 2024 14:14:36 +0100 Subject: [PATCH] AK: Add Flatten Variant helper This will be used in future commits. It has to be present for types, that are generated by the IDL since the IDL flattens variants of variants. --- AK/Variant.h | 15 +++++++++++++++ Tests/AK/TestVariant.cpp | 16 ++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/AK/Variant.h b/AK/Variant.h index 7ae5619ef63..58a014da765 100644 --- a/AK/Variant.h +++ b/AK/Variant.h @@ -499,9 +499,24 @@ private: template struct TypeList> : TypeList { }; +namespace Detail { +template +struct FlattenVariant; + +template +struct FlattenVariant<::AK::Variant, ::AK::Variant> { + using type = ::AK::Variant; +}; + +} + +template +using FlattenVariant = Detail::FlattenVariant::type; + } #if USING_AK_GLOBALLY using AK::Empty; +using AK::FlattenVariant; using AK::Variant; #endif diff --git a/Tests/AK/TestVariant.cpp b/Tests/AK/TestVariant.cpp index 44806a43101..63d61b7f6f3 100644 --- a/Tests/AK/TestVariant.cpp +++ b/Tests/AK/TestVariant.cpp @@ -302,3 +302,19 @@ TEST_CASE(variant_equality) EXPECT_EQ(variant1, variant2); } } + +TEST_CASE(flatten_variant) +{ + using InnerVariant = Variant; + using OuterVariant = FlattenVariant>; + using MyVariant = Variant; + + EXPECT_EQ((TypeList::size), 3u); + EXPECT_EQ((TypeList::size), 3u); + EXPECT((IsSame)); + + using OuterList = TypeList; + EXPECT((IsSame, Empty>)); + EXPECT((IsSame, int>)); + EXPECT((IsSame, float>)); +}