#pragma once #include #include #include #include class EntityManager; class Entity; using ComponentsContainer = std::tuple < container::HeapArray, container::HeapArray, container::HeapArray >; class EntityMemoryPool { private: friend class EntityManager; friend class Entity; ComponentsContainer m_components; container::HeapArray m_tags; container::HeapArray m_subTags; container::HeapArray m_aliveStates; container::HeapArray m_visibility; container::HeapArray m_ids; private: EntityMemoryPool(); EntityMemoryPool(const EntityMemoryPool&) = delete; template T& getComponent(index_t index) { return std::get>(m_components)[index]; } auto getAlive(index_t index) { return m_aliveStates[index]; } auto getVisiblity(index_t index) { return m_visibility[index]; } tag_t getTag(index_t) const; size_t getId(index_t) const; };