#include 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); } }