diff --git a/src/entt/entity/sparse_set.hpp b/src/entt/entity/sparse_set.hpp index a99ef7b26..f5a649751 100644 --- a/src/entt/entity/sparse_set.hpp +++ b/src/entt/entity/sparse_set.hpp @@ -243,11 +243,7 @@ class basic_sparse_set { } std::size_t append(const Entity entt) { - if(const auto len = reserved.second(); count == len) { - const size_type sz = static_cast(len * growth_factor_v); - resize_packed_array(sz + !(sz > len)); - } - + ENTT_ASSERT(count != reserved.second(), "Not enough space left"); ENTT_ASSERT(current(entt) == entity_traits::to_version(tombstone), "Slot not available"); assure_page(page(entt))[offset(entt)] = entity_traits::combine(static_cast(count), entity_traits::to_integral(entt)); packed_array[count] = entt; @@ -647,20 +643,6 @@ public: return packed_array[pos]; } - /** - * @brief Appends an entity to a sparse set. - * - * @warning - * Attempting to assign an entity that already belongs to the sparse set - * results in undefined behavior. - * - * @param entt A valid identifier. - * @return The slot used for insertion. - */ - size_type emplace_back(const entity_type entt) { - return append(entt); - } - /** * @brief Assigns an entity to a sparse set. * @@ -672,7 +654,16 @@ public: * @return The slot used for insertion. */ size_type emplace(const entity_type entt) { - return (free_list == null) ? append(entt) : recycle(entt); + if(free_list == null) { + if(const auto len = reserved.second(); count == len) { + const size_type sz = static_cast(len * growth_factor_v); + resize_packed_array(sz + !(sz > len)); + } + + return append(entt); + } else { + return recycle(entt); + } } /** diff --git a/src/entt/entity/storage.hpp b/src/entt/entity/storage.hpp index b5d6c4971..0cae6824d 100644 --- a/src/entt/entity/storage.hpp +++ b/src/entt/entity/storage.hpp @@ -283,15 +283,7 @@ class basic_storage: public basic_sparse_set(entt::null)); - ASSERT_EQ(set.at(2u), entities[0u]); - ASSERT_EQ(set.index(entities[0u]), 2u); + ASSERT_EQ(set.at(1u), entities[0u]); + ASSERT_EQ(set.index(entities[0u]), 1u); ASSERT_EQ(set.index(entities[1u]), 0u); }