--- /dev/null
+
+#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
+
--- /dev/null
+
+#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
+
#include <gtest/gtest.h>
+#include <tuple>
#include <EC/Meta/Meta.hpp>
#include <EC/EC.hpp>
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);
+}
+