34 lines
664 B
C++
34 lines
664 B
C++
#include <psemek/ecs/detail/entity_list.hpp>
|
|
|
|
namespace psemek::ecs::detail
|
|
{
|
|
|
|
entity_id entity_list::create(table * table, std::uint32_t row)
|
|
{
|
|
if (free_ids_.empty())
|
|
allocate_ids();
|
|
|
|
auto id = free_ids_.back();
|
|
free_ids_.pop_back();
|
|
|
|
entities_[id].table = table;
|
|
entities_[id].row = row;
|
|
|
|
return id;
|
|
}
|
|
|
|
void entity_list::destroy(entity_id id)
|
|
{
|
|
entities_[id].epoch += 1;
|
|
free_ids_.push_back(id);
|
|
}
|
|
|
|
void entity_list::allocate_ids()
|
|
{
|
|
auto old_size = entities_.size();
|
|
entities_.resize(std::max<std::size_t>(1024, entities_.size() * 2));
|
|
for (std::size_t id = entities_.size(); id --> old_size;)
|
|
free_ids_.push_back(id);
|
|
}
|
|
|
|
}
|