Added IndexOf
This commit is contained in:
parent
8ffacb16b1
commit
4092c7c565
2 changed files with 45 additions and 7 deletions
|
@ -33,6 +33,25 @@ namespace EC
|
||||||
|
|
||||||
template <typename T, typename TTypeList>
|
template <typename T, typename TTypeList>
|
||||||
using Contains = std::integral_constant<bool, ContainsHelper<T, TTypeList>::value >;
|
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
|
||||||
|
>
|
||||||
|
{
|
||||||
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3,14 +3,16 @@
|
||||||
|
|
||||||
#include <EC/Meta.hpp>
|
#include <EC/Meta.hpp>
|
||||||
|
|
||||||
TEST(Meta, Contains)
|
|
||||||
{
|
|
||||||
struct C0 {};
|
struct C0 {};
|
||||||
struct C1 {};
|
struct C1 {};
|
||||||
struct C2 {};
|
struct C2 {};
|
||||||
struct C3 {};
|
struct C3 {};
|
||||||
|
|
||||||
using listAll = EC::Meta::TypeList<C0, C1, C2, C3>;
|
using listAll = EC::Meta::TypeList<C0, C1, C2, C3>;
|
||||||
|
using listSome = EC::Meta::TypeList<C1, C3>;
|
||||||
|
|
||||||
|
TEST(Meta, Contains)
|
||||||
|
{
|
||||||
|
|
||||||
int size = listAll::size;
|
int size = listAll::size;
|
||||||
EXPECT_EQ(size, 4);
|
EXPECT_EQ(size, 4);
|
||||||
|
@ -24,7 +26,6 @@ TEST(Meta, Contains)
|
||||||
result = EC::Meta::Contains<C3, listAll>::value;
|
result = EC::Meta::Contains<C3, listAll>::value;
|
||||||
EXPECT_TRUE(result);
|
EXPECT_TRUE(result);
|
||||||
|
|
||||||
using listSome = EC::Meta::TypeList<C1, C3>;
|
|
||||||
size = listSome::size;
|
size = listSome::size;
|
||||||
EXPECT_EQ(size, 2);
|
EXPECT_EQ(size, 2);
|
||||||
|
|
||||||
|
@ -37,3 +38,21 @@ TEST(Meta, Contains)
|
||||||
result = EC::Meta::Contains<C3, listSome>::value;
|
result = EC::Meta::Contains<C3, listSome>::value;
|
||||||
EXPECT_TRUE(result);
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue