mirror of
https://github.com/zebrajr/ladybird.git
synced 2025-12-06 00:19:53 +01:00
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.
This commit is contained in:
parent
eb1c60f37b
commit
14e808e574
15
AK/Variant.h
15
AK/Variant.h
|
|
@ -499,9 +499,24 @@ private:
|
||||||
template<typename... Ts>
|
template<typename... Ts>
|
||||||
struct TypeList<Variant<Ts...>> : TypeList<Ts...> { };
|
struct TypeList<Variant<Ts...>> : TypeList<Ts...> { };
|
||||||
|
|
||||||
|
namespace Detail {
|
||||||
|
template<typename T1, typename T2>
|
||||||
|
struct FlattenVariant;
|
||||||
|
|
||||||
|
template<typename... Ts1, typename... Ts2>
|
||||||
|
struct FlattenVariant<::AK::Variant<Ts1...>, ::AK::Variant<Ts2...>> {
|
||||||
|
using type = ::AK::Variant<Ts1..., Ts2...>;
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename T1, typename T2>
|
||||||
|
using FlattenVariant = Detail::FlattenVariant<T1, T2>::type;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#if USING_AK_GLOBALLY
|
#if USING_AK_GLOBALLY
|
||||||
using AK::Empty;
|
using AK::Empty;
|
||||||
|
using AK::FlattenVariant;
|
||||||
using AK::Variant;
|
using AK::Variant;
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -302,3 +302,19 @@ TEST_CASE(variant_equality)
|
||||||
EXPECT_EQ(variant1, variant2);
|
EXPECT_EQ(variant1, variant2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_CASE(flatten_variant)
|
||||||
|
{
|
||||||
|
using InnerVariant = Variant<Empty, int>;
|
||||||
|
using OuterVariant = FlattenVariant<InnerVariant, Variant<float>>;
|
||||||
|
using MyVariant = Variant<Empty, int, float>;
|
||||||
|
|
||||||
|
EXPECT_EQ((TypeList<MyVariant>::size), 3u);
|
||||||
|
EXPECT_EQ((TypeList<OuterVariant>::size), 3u);
|
||||||
|
EXPECT((IsSame<OuterVariant, MyVariant>));
|
||||||
|
|
||||||
|
using OuterList = TypeList<OuterVariant>;
|
||||||
|
EXPECT((IsSame<typename OuterList::template Type<0>, Empty>));
|
||||||
|
EXPECT((IsSame<typename OuterList::template Type<1>, int>));
|
||||||
|
EXPECT((IsSame<typename OuterList::template Type<2>, float>));
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user