]> git.seodisparate.com - EntityComponentMetaSystem/commitdiff
Added EC/Meta/Combine.hpp
authorStephen Seo <seo.disparate@gmail.com>
Fri, 4 Mar 2016 12:35:26 +0000 (21:35 +0900)
committerStephen Seo <seo.disparate@gmail.com>
Fri, 4 Mar 2016 12:35:26 +0000 (21:35 +0900)
Also some renaming in MetaTest.hpp

src/EC/Meta/Combine.hpp [new file with mode: 0644]
src/EC/Meta/Meta.hpp
src/test/MetaTest.cpp

diff --git a/src/EC/Meta/Combine.hpp b/src/EC/Meta/Combine.hpp
new file mode 100644 (file)
index 0000000..59e0e9a
--- /dev/null
@@ -0,0 +1,29 @@
+
+#ifndef EC_META_COMBINE_HPP
+#define EC_META_COMBINE_HPP
+
+#include "TypeList.hpp"
+
+namespace EC
+{
+    namespace Meta
+    {
+        template <typename TTypeListA, typename TTypeListB>
+        struct CombineHelper
+        {
+            using type = TypeList<>;
+        };
+
+        template <typename... TypesA, typename... TypesB>
+        struct CombineHelper<TypeList<TypesA...>, TypeList<TypesB...> >
+        {
+            using type = TypeList<TypesA..., TypesB...>;
+        };
+
+        template <typename TTypeListA, typename TTypeListB>
+        using Combine = typename CombineHelper<TTypeListA, TTypeListB>::type;
+    }
+}
+
+#endif
+
index c1578695deca739218945979d84a82d7d5d54cce..1bb976da4d99e34737c2eef8e5e6ad8fae658da9 100644 (file)
@@ -1,5 +1,6 @@
 
 #include "TypeList.hpp"
+#include "Combine.hpp"
 #include "Contains.hpp"
 #include "ContainsAll.hpp"
 #include "IndexOf.hpp"
index 4a78de8121423b15c87847e8cc85262da2ab9ad0..84771c11f3edf7763fb32f41cf6f8610cc439aaf 100644 (file)
@@ -12,81 +12,116 @@ struct C3 {};
 struct T0 {};
 struct T1 {};
 
-using listAll = EC::Meta::TypeList<C0, C1, C2, C3>;
-using listSome = EC::Meta::TypeList<C1, C3>;
+using ListComponentsAll = EC::Meta::TypeList<C0, C1, C2, C3>;
+using ListComponentsSome = EC::Meta::TypeList<C1, C3>;
 
-using listTagsAll = EC::Meta::TypeList<T0, T1>;
+using ListTagsAll = EC::Meta::TypeList<T0, T1>;
+
+using ListAll = EC::Meta::TypeList<C0, C1, C2, C3, T0, T1>;
 
 TEST(Meta, Contains)
 {
-    int size = listAll::size;
+    int size = ListComponentsAll::size;
     EXPECT_EQ(size, 4);
 
-    bool result = EC::Meta::Contains<C0, listAll>::value;
+    bool result = EC::Meta::Contains<C0, ListComponentsAll>::value;
     EXPECT_TRUE(result);
-    result = EC::Meta::Contains<C1, listAll>::value;
+    result = EC::Meta::Contains<C1, ListComponentsAll>::value;
     EXPECT_TRUE(result);
-    result = EC::Meta::Contains<C2, listAll>::value;
+    result = EC::Meta::Contains<C2, ListComponentsAll>::value;
     EXPECT_TRUE(result);
-    result = EC::Meta::Contains<C3, listAll>::value;
+    result = EC::Meta::Contains<C3, ListComponentsAll>::value;
     EXPECT_TRUE(result);
 
-    size = listSome::size;
+    size = ListComponentsSome::size;
     EXPECT_EQ(size, 2);
 
-    result = EC::Meta::Contains<C0, listSome>::value;
+    result = EC::Meta::Contains<C0, ListComponentsSome>::value;
     EXPECT_FALSE(result);
-    result = EC::Meta::Contains<C1, listSome>::value;
+    result = EC::Meta::Contains<C1, ListComponentsSome>::value;
     EXPECT_TRUE(result);
-    result = EC::Meta::Contains<C2, listSome>::value;
+    result = EC::Meta::Contains<C2, ListComponentsSome>::value;
     EXPECT_FALSE(result);
-    result = EC::Meta::Contains<C3, listSome>::value;
+    result = EC::Meta::Contains<C3, ListComponentsSome>::value;
     EXPECT_TRUE(result);
 }
 
 TEST(Meta, ContainsAll)
 {
-    bool contains = EC::Meta::ContainsAll<listSome, listAll>::value;
+    bool contains = EC::Meta::ContainsAll<ListComponentsSome, ListComponentsAll>::value;
     EXPECT_TRUE(contains);
 
-    contains = EC::Meta::ContainsAll<listAll, listSome>::value;
+    contains = EC::Meta::ContainsAll<ListComponentsAll, ListComponentsSome>::value;
     EXPECT_FALSE(contains);
 
-    contains = EC::Meta::ContainsAll<listAll, listAll>::value;
+    contains = EC::Meta::ContainsAll<ListComponentsAll, ListComponentsAll>::value;
     EXPECT_TRUE(contains);
 }
 
 TEST(Meta, IndexOf)
 {
-    int index = EC::Meta::IndexOf<C0, listAll>::value;
+    int index = EC::Meta::IndexOf<C0, ListComponentsAll>::value;
     EXPECT_EQ(index, 0);
-    index = EC::Meta::IndexOf<C1, listAll>::value;
+    index = EC::Meta::IndexOf<C1, ListComponentsAll>::value;
     EXPECT_EQ(index, 1);
-    index = EC::Meta::IndexOf<C2, listAll>::value;
+    index = EC::Meta::IndexOf<C2, ListComponentsAll>::value;
     EXPECT_EQ(index, 2);
-    index = EC::Meta::IndexOf<C3, listAll>::value;
+    index = EC::Meta::IndexOf<C3, ListComponentsAll>::value;
     EXPECT_EQ(index, 3);
 
-    index = EC::Meta::IndexOf<C1, listSome>::value;
+    index = EC::Meta::IndexOf<C1, ListComponentsSome>::value;
     EXPECT_EQ(index, 0);
-    index = EC::Meta::IndexOf<C3, listSome>::value;
+    index = EC::Meta::IndexOf<C3, ListComponentsSome>::value;
     EXPECT_EQ(index, 1);
 }
 
 TEST(Meta, Bitset)
 {
-    EC::Bitset<listAll, listTagsAll> bitset;
-    EXPECT_EQ(bitset.size(), listAll::size + listTagsAll::size);
+    EC::Bitset<ListComponentsAll, ListTagsAll> bitset;
+    EXPECT_EQ(bitset.size(), ListComponentsAll::size + ListTagsAll::size);
 
-    bitset[EC::Meta::IndexOf<C1, listAll>::value] = true;
+    bitset[EC::Meta::IndexOf<C1, ListComponentsAll>::value] = true;
     EXPECT_TRUE(bitset.getComponentBit<C1>());
     bitset.flip();
     EXPECT_FALSE(bitset.getComponentBit<C1>());
 
     bitset.reset();
-    bitset[listAll::size + EC::Meta::IndexOf<T0, listTagsAll>::value] = true;
+    bitset[ListComponentsAll::size + EC::Meta::IndexOf<T0, ListTagsAll>::value] = true;
     EXPECT_TRUE(bitset.getTagBit<T0>());
     bitset.flip();
     EXPECT_FALSE(bitset.getTagBit<T0>());
 }
 
+TEST(Meta, Combine)
+{
+    using CombinedAll = EC::Meta::Combine<ListComponentsAll, ListTagsAll>;
+
+    int listAllTemp = ListAll::size;
+    int combinedAllTemp = CombinedAll::size;
+    EXPECT_EQ(combinedAllTemp, listAllTemp);
+
+    listAllTemp = EC::Meta::IndexOf<C0, ListAll>::value;
+    combinedAllTemp = EC::Meta::IndexOf<C0, CombinedAll>::value;
+    EXPECT_EQ(combinedAllTemp, listAllTemp);
+
+    listAllTemp = EC::Meta::IndexOf<C1, ListAll>::value;
+    combinedAllTemp = EC::Meta::IndexOf<C1, CombinedAll>::value;
+    EXPECT_EQ(combinedAllTemp, listAllTemp);
+
+    listAllTemp = EC::Meta::IndexOf<C2, ListAll>::value;
+    combinedAllTemp = EC::Meta::IndexOf<C2, CombinedAll>::value;
+    EXPECT_EQ(combinedAllTemp, listAllTemp);
+
+    listAllTemp = EC::Meta::IndexOf<C3, ListAll>::value;
+    combinedAllTemp = EC::Meta::IndexOf<C3, CombinedAll>::value;
+    EXPECT_EQ(combinedAllTemp, listAllTemp);
+
+    listAllTemp = EC::Meta::IndexOf<T0, ListAll>::value;
+    combinedAllTemp = EC::Meta::IndexOf<T0, CombinedAll>::value;
+    EXPECT_EQ(combinedAllTemp, listAllTemp);
+
+    listAllTemp = EC::Meta::IndexOf<T1, ListAll>::value;
+    combinedAllTemp = EC::Meta::IndexOf<T1, CombinedAll>::value;
+    EXPECT_EQ(combinedAllTemp, listAllTemp);
+}
+