40 using ComponentTypes = std::tuple<
Comp...>;
42 static constexpr uint COMP_NUMBER =
43 std::tuple_size_v<std::tuple<std::vector<Comp>...>>;
45 std::tuple<std::vector<typename Comp::DataValueType>...> mVecTuple;
47 std::array<bool, COMP_NUMBER> mVecEnabled;
48 std::size_t mSize = 0;
56 static constexpr uint componentsNumber() {
return COMP_NUMBER; }
59 constexpr bool hasComponent()
const
65 constexpr std::vector<typename C::DataValueType>& vector()
68 return std::get<ind>(mVecTuple);
72 constexpr const std::vector<typename C::DataValueType>& vector()
const
75 return std::get<ind>(mVecTuple);
78 std::size_t size()
const {
return mSize; }
80 void resize(std::size_t size)
82 if constexpr (componentsNumber() > 0) {
83 vectorResize<componentsNumber() - 1>(size);
88 void reserve(std::size_t size)
90 if constexpr (componentsNumber() > 0) {
91 vectorReserve<componentsNumber() - 1>(size);
95 void compact(
const std::vector<uint>&
newIndices)
97 if constexpr (componentsNumber() > 0) {
98 vectorCompact<componentsNumber() - 1>(
newIndices);
105 ((
args.clear()), ...);
112 void enableAllOptionalComponents()
117 void disableAllOptionalComponents()
123 bool isComponentEnabled()
const
126 return mVecEnabled[
ind];
129 template<u
int COMP_ID>
130 bool isComponentEnabled()
const
137 void enableComponent()
140 mVecEnabled[
ind] =
true;
144 template<u
int COMP_ID>
145 void enableComponent()
152 void disableComponent()
155 mVecEnabled[
ind] =
false;
159 template<u
int COMP_ID>
160 void disableComponent()
168 static constexpr uint indexOfType()
173 template<std::
size_t N>
174 void vectorResize(std::size_t size)
176 if (mVecEnabled[N]) {
177 std::get<N>(mVecTuple).resize(size);
179 if constexpr (N != 0)
183 template<std::
size_t N>
184 void vectorReserve(std::size_t size)
186 if (mVecEnabled[N]) {
187 std::get<N>(mVecTuple).reserve(size);
189 if constexpr (N != 0)
193 template<std::
size_t N>
194 void vectorCompact(
const std::vector<uint>&
newIndices)
196 if (mVecEnabled[N]) {
197 compactVector(std::get<N>(mVecTuple),
newIndices);
199 if constexpr (N != 0)
203 template<
typename C,
bool E>
204 void setComponentEnabled()
214 template<
typename C,
bool E>
215 void setComponentEnabledIfOptional()