template <typename T, typename TTypeList>
using Contains = std::integral_constant<bool, ContainsHelper<T, TTypeList>::value >;
+
+ template <typename T, typename... Types>
+ struct IndexOf
+ {
+ };
+
+ template <typename T, typename... Types>
+ struct IndexOf<T, TypeList<T, Types...> > :
+ std::integral_constant<std::size_t, 0>
+ {
+ };
+
+ template <typename T, typename Type, typename... Types>
+ struct IndexOf<T, TypeList<Type, Types...> > :
+ std::integral_constant<std::size_t, 1 +
+ IndexOf<T, TypeList<Types...> >::value
+ >
+ {
+ };
}
}
#include <EC/Meta.hpp>
+struct C0 {};
+struct C1 {};
+struct C2 {};
+struct C3 {};
+
+using listAll = EC::Meta::TypeList<C0, C1, C2, C3>;
+using listSome = EC::Meta::TypeList<C1, C3>;
+
TEST(Meta, Contains)
{
- struct C0 {};
- struct C1 {};
- struct C2 {};
- struct C3 {};
-
- using listAll = EC::Meta::TypeList<C0, C1, C2, C3>;
int size = listAll::size;
EXPECT_EQ(size, 4);
result = EC::Meta::Contains<C3, listAll>::value;
EXPECT_TRUE(result);
- using listSome = EC::Meta::TypeList<C1, C3>;
size = listSome::size;
EXPECT_EQ(size, 2);
result = EC::Meta::Contains<C3, listSome>::value;
EXPECT_TRUE(result);
}
+
+TEST(Meta, IndexOf)
+{
+ int index = EC::Meta::IndexOf<C0, listAll>::value;
+ EXPECT_EQ(index, 0);
+ index = EC::Meta::IndexOf<C1, listAll>::value;
+ EXPECT_EQ(index, 1);
+ index = EC::Meta::IndexOf<C2, listAll>::value;
+ EXPECT_EQ(index, 2);
+ index = EC::Meta::IndexOf<C3, listAll>::value;
+ EXPECT_EQ(index, 3);
+
+ index = EC::Meta::IndexOf<C1, listSome>::value;
+ EXPECT_EQ(index, 0);
+ index = EC::Meta::IndexOf<C3, listSome>::value;
+ EXPECT_EQ(index, 1);
+}
+