psemek/libs/ecs/source/detail/entity_list.cpp
2023-08-22 14:53:03 +03:00

36 lines
695 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()
{
static constexpr std::size_t batch_size = 1024;
auto old_size = entities_.size();
entities_.resize(entities_.size() + batch_size);
for (std::size_t id = entities_.size(); id --> old_size;)
free_ids_.push_back(id);
}
}