From de6b660b125b0636f5b33326a851f7a9285cb131 Mon Sep 17 00:00:00 2001 From: Michele Caini Date: Thu, 26 Aug 2021 15:22:29 +0200 Subject: [PATCH] sparse_set/storage: * removed basic_sparse_set<...>::emplace_back * general cleanup --- src/entt/entity/sparse_set.hpp | 31 +++++++++++-------------------- src/entt/entity/storage.hpp | 10 +--------- test/entt/entity/sparse_set.cpp | 11 +++++------ 3 files changed, 17 insertions(+), 35 deletions(-) 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); }