14 virtual std::unique_ptr<SparseSetBase>
clone()
const = 0;
21template <
typename Component>
34 std::unique_ptr<SparseSetBase>
clone()
const override {
35 if constexpr (std::is_copy_constructible_v<Component>) {
36 return std::make_unique<SparseSet<Component>>(*this);
139 template <
bool IsConst>
143 using reference = std::pair<Entity, std::conditional_t<IsConst, const Component&, Component&>>;
147 typename std::conditional_t<
IsConst,
const std::vector<Component>*, std::vector<Component>*>
components,
174 typename std::conditional_t<IsConst, const std::vector<Entity>*, std::vector<Entity>*>
_entities;
175 typename std::conditional_t<IsConst, const std::vector<Component>*, std::vector<Component>*>
_components;
#define SHKYERA_ASSERT(predicate,...)
Definition Assert.hpp:7
Manages a pool of unused entity identifiers and provides mechanisms for requesting and removing them.
Definition SparseSet.hpp:140
std::forward_iterator_tag iterator_category
Definition SparseSet.hpp:142
std::conditional_t< IsConst, const std::vector< Entity > *, std::vector< Entity > * > _entities
Definition SparseSet.hpp:174
std::conditional_t< IsConst, const std::vector< Component > *, std::vector< Component > * > _components
Definition SparseSet.hpp:175
std::pair< Entity, std::conditional_t< IsConst, const Component &, Component & > > reference
Definition SparseSet.hpp:143
bool operator!=(const Iterator &other) const
Definition SparseSet.hpp:171
Iterator operator++(int)
Definition SparseSet.hpp:161
Iterator(typename std::conditional_t< IsConst, const std::vector< Entity > *, std::vector< Entity > * > entities, typename std::conditional_t< IsConst, const std::vector< Component > *, std::vector< Component > * > components, size_t index)
Definition SparseSet.hpp:146
reference operator*() const
Definition SparseSet.hpp:152
size_t _index
Definition SparseSet.hpp:176
Iterator & operator++()
Definition SparseSet.hpp:155
bool operator==(const Iterator &other) const
Definition SparseSet.hpp:168
Definition SparseSet.hpp:10
virtual bool remove(Entity entity)=0
virtual std::unique_ptr< SparseSetBase > clone() const =0
virtual ~SparseSetBase()=default
Definition SparseSet.hpp:22
const std::vector< Component > & getComponents() const
Definition SparseSet.hpp:128
iterator begin()
Definition SparseSet.hpp:182
bool empty() const
Definition SparseSet.hpp:135
Iterator< false > iterator
Definition SparseSet.hpp:179
bool remove(Entity entity) override
Definition SparseSet.hpp:66
void clear()
Definition SparseSet.hpp:86
std::vector< Component > _components
Definition SparseSet.hpp:193
const_iterator begin() const
Definition SparseSet.hpp:186
const Component & get(Entity entity) const
Definition SparseSet.hpp:114
const_iterator end() const
Definition SparseSet.hpp:188
Iterator< true > const_iterator
Definition SparseSet.hpp:180
std::vector< Entity > _entities
Definition SparseSet.hpp:191
std::unordered_map< Entity, size_t > _entityToComponent
Definition SparseSet.hpp:192
size_t size() const
Definition SparseSet.hpp:137
bool contains(Entity entity) const
Definition SparseSet.hpp:98
Component & get(Entity entity)
Definition SparseSet.hpp:106
iterator end()
Definition SparseSet.hpp:184
std::unique_ptr< SparseSetBase > clone() const override
Definition SparseSet.hpp:34
std::vector< Component > & getComponents()
Definition SparseSet.hpp:121
bool add(Entity entity, Component component)
Definition SparseSet.hpp:49
uint32_t Entity
Definition Entity.hpp:7