]> git.seodisparate.com - EntityComponentMetaSystem/commitdiff
Added EC/Meta/Morph.hpp
authorStephen Seo <seo.disparate@gmail.com>
Fri, 4 Mar 2016 13:59:43 +0000 (22:59 +0900)
committerStephen Seo <seo.disparate@gmail.com>
Fri, 4 Mar 2016 13:59:43 +0000 (22:59 +0900)
Started work on EC/Manager.hpp

src/CMakeLists.txt
src/EC/Manager.hpp [new file with mode: 0644]
src/EC/Meta/Meta.hpp
src/EC/Meta/Morph.hpp [new file with mode: 0644]
src/test/MetaTest.cpp

index 9b36e232458f19d0e980afc546c551bb05bcb9c1..ba94a0bd638428c4fea47a5607094c9979c582ab 100644 (file)
@@ -7,6 +7,7 @@ set(EntityComponentSystem_HEADERS
     EC/Meta/Contains.hpp
     EC/Meta/ContainsAll.hpp
     EC/Meta/IndexOf.hpp
+    EC/Meta/Morph.hpp
     EC/Meta/Meta.hpp
     EC/Bitset.hpp
     EC/EC.hpp)
diff --git a/src/EC/Manager.hpp b/src/EC/Manager.hpp
new file mode 100644 (file)
index 0000000..ed8c412
--- /dev/null
@@ -0,0 +1,20 @@
+
+#ifndef EC_MANAGER_HPP
+#define EC_MANAGER_HPP
+
+namespace EC
+{
+    template <typename ComponentsList, typename TagsList, typename Signatures>
+    struct Manager
+    {
+    public:
+        using Combined = EC::Meta::Combine<ComponentsList, TagsList>;
+
+    private:
+        using BitsetType = EC::Bitset<ComponentsList, TagsList>;
+
+    };
+}
+
+#endif
+
index 1bb976da4d99e34737c2eef8e5e6ad8fae658da9..0ac0ebdb4ab006e7fbe00cbd0f035370780ef5e8 100644 (file)
@@ -4,4 +4,5 @@
 #include "Contains.hpp"
 #include "ContainsAll.hpp"
 #include "IndexOf.hpp"
+#include "Morph.hpp"
 
diff --git a/src/EC/Meta/Morph.hpp b/src/EC/Meta/Morph.hpp
new file mode 100644 (file)
index 0000000..b08655e
--- /dev/null
@@ -0,0 +1,28 @@
+
+#ifndef EC_META_MORPH_HPP
+#define EC_META_MORPH_HPP
+
+#include "TypeList.hpp"
+
+namespace EC
+{
+    namespace Meta
+    {
+        template <typename TypeA, typename TypeB>
+        struct MorphHelper
+        {
+        };
+
+        template <template <typename...> class TypeA, template <typename...> class TypeB, typename... TypesA, typename... TypesB>
+        struct MorphHelper<TypeA<TypesA...>, TypeB<TypesB...> >
+        {
+            using type = TypeB<TypesA...>;
+        };
+
+        template <typename TypeA, typename TypeB>
+        using Morph = typename MorphHelper<TypeA, TypeB>::type;
+    }
+}
+
+#endif
+
index 84771c11f3edf7763fb32f41cf6f8610cc439aaf..40ef63ceaac97cece9c758a829bed5283ed2eae8 100644 (file)
@@ -1,6 +1,7 @@
 
 #include <gtest/gtest.h>
 
+#include <tuple>
 #include <EC/Meta/Meta.hpp>
 #include <EC/EC.hpp>
 
@@ -125,3 +126,33 @@ TEST(Meta, Combine)
     EXPECT_EQ(combinedAllTemp, listAllTemp);
 }
 
+TEST(Meta, Morph)
+{
+    using TupleAll = std::tuple<C0, C1, C2, C3>;
+    using MorphedTuple = EC::Meta::Morph<TupleAll, EC::Meta::TypeList<> >;
+
+    int morphedTupleTemp = MorphedTuple::size;
+    int componentsTemp = ListComponentsAll::size;
+    EXPECT_EQ(morphedTupleTemp, componentsTemp);
+
+    morphedTupleTemp = EC::Meta::IndexOf<C0, MorphedTuple>::value;
+    componentsTemp = EC::Meta::IndexOf<C0, ListComponentsAll>::value;
+    EXPECT_EQ(morphedTupleTemp, componentsTemp);
+
+    morphedTupleTemp = EC::Meta::IndexOf<C1, MorphedTuple>::value;
+    componentsTemp = EC::Meta::IndexOf<C1, ListComponentsAll>::value;
+    EXPECT_EQ(morphedTupleTemp, componentsTemp);
+
+    morphedTupleTemp = EC::Meta::IndexOf<C2, MorphedTuple>::value;
+    componentsTemp = EC::Meta::IndexOf<C2, ListComponentsAll>::value;
+    EXPECT_EQ(morphedTupleTemp, componentsTemp);
+
+    morphedTupleTemp = EC::Meta::IndexOf<C3, MorphedTuple>::value;
+    componentsTemp = EC::Meta::IndexOf<C3, ListComponentsAll>::value;
+    EXPECT_EQ(morphedTupleTemp, componentsTemp);
+
+    using MorphedComponents = EC::Meta::Morph<ListComponentsAll, std::tuple<> >;
+    bool isSame = std::is_same<MorphedComponents, TupleAll>::value;
+    EXPECT_TRUE(isSame);
+}
+