sparse_set: remove the cursed ::slot function (finally)

This commit is contained in:
Michele Caini
2022-01-27 08:32:25 +01:00
parent 533bc1ce94
commit 2f03b225f7
3 changed files with 4 additions and 30 deletions

View File

@@ -407,14 +407,6 @@ public:
return mode;
}
/**
* @brief Returns the next slot available for insertion.
* @return The next slot available for insertion.
*/
[[nodiscard]] size_type slot() const ENTT_NOEXCEPT {
return free_list == null ? packed.size() : static_cast<size_type>(entity_traits::to_entity(free_list));
}
/**
* @brief Increases the capacity of a sparse set.
*

View File

@@ -285,15 +285,13 @@ class basic_storage: public basic_sparse_set<Entity, typename std::allocator_tra
}
void shrink_to_size(const std::size_t sz) {
if(const auto length = base_type::size(); base_type::slot() == length) {
for(auto pos = sz; pos < length; ++pos) {
std::destroy_at(std::addressof(element_at(pos)));
}
} else {
for(auto pos = sz; pos < length; ++pos) {
for(auto pos = sz, length = base_type::size(); pos < length; ++pos) {
if constexpr(comp_traits::in_place_delete) {
if(base_type::at(pos) != tombstone) {
std::destroy_at(std::addressof(element_at(pos)));
}
} else {
std::destroy_at(std::addressof(element_at(pos)));
}
}

View File

@@ -423,7 +423,6 @@ TEST(SparseSet, StableErase) {
ASSERT_TRUE(set.at(0u) == entt::tombstone);
ASSERT_TRUE(set.at(1u) == entt::tombstone);
ASSERT_TRUE(set.at(2u) == entt::tombstone);
ASSERT_EQ(set.slot(), 0u);
set.emplace(entities[0u]);
set.emplace(entities[1u]);
@@ -439,7 +438,6 @@ TEST(SparseSet, StableErase) {
ASSERT_EQ(*set.begin(), entities[2u]);
ASSERT_TRUE(set.at(0u) == entt::tombstone);
ASSERT_TRUE(set.at(1u) == entt::tombstone);
ASSERT_EQ(set.slot(), 1u);
set.erase(entities[2u]);
@@ -447,7 +445,6 @@ TEST(SparseSet, StableErase) {
ASSERT_FALSE(set.empty());
ASSERT_EQ(set.size(), 3u);
ASSERT_EQ(set.current(entities[2u]), traits_type::to_version(entt::tombstone));
ASSERT_EQ(set.slot(), 2u);
set.emplace(entities[0u]);
set.emplace(entities[1u]);
@@ -463,7 +460,6 @@ TEST(SparseSet, StableErase) {
ASSERT_EQ(set.at(1u), entities[2u]);
ASSERT_TRUE(set.at(2u) == entt::tombstone);
ASSERT_EQ(*++set.begin(), entities[2u]);
ASSERT_EQ(set.slot(), 0u);
set.compact();
@@ -474,14 +470,12 @@ TEST(SparseSet, StableErase) {
ASSERT_EQ(set.current(entities[2u]), traits_type::to_version(entities[2u]));
ASSERT_TRUE(set.at(0u) == entities[2u]);
ASSERT_EQ(*set.begin(), entities[2u]);
ASSERT_EQ(set.slot(), 1u);
set.clear();
ASSERT_EQ(set.size(), 1u);
ASSERT_EQ(set.current(entities[2u]), traits_type::to_version(entt::tombstone));
ASSERT_TRUE(set.at(0u) == entt::tombstone);
ASSERT_EQ(set.slot(), 0u);
set.compact();
@@ -497,7 +491,6 @@ TEST(SparseSet, StableErase) {
ASSERT_NE(set.current(entities[0u]), traits_type::to_version(entt::tombstone));
ASSERT_NE(set.current(entities[1u]), traits_type::to_version(entt::tombstone));
ASSERT_EQ(set.current(entities[2u]), traits_type::to_version(entt::tombstone));
ASSERT_EQ(set.slot(), 2u);
set.erase(entities[0u]);
set.erase(entities[1u]);
@@ -508,7 +501,6 @@ TEST(SparseSet, StableErase) {
ASSERT_EQ(set.current(entities[1u]), traits_type::to_version(entt::tombstone));
ASSERT_EQ(set.current(entities[2u]), traits_type::to_version(entt::tombstone));
ASSERT_TRUE(*set.begin() == entt::tombstone);
ASSERT_EQ(set.slot(), 1u);
set.emplace(entities[0u]);
@@ -620,7 +612,6 @@ TEST(SparseSet, StableRemove) {
ASSERT_TRUE(set.at(0u) == entt::tombstone);
ASSERT_TRUE(set.at(1u) == entt::tombstone);
ASSERT_TRUE(set.at(2u) == entt::tombstone);
ASSERT_EQ(set.slot(), 0u);
set.emplace(entities[0u]);
set.emplace(entities[1u]);
@@ -637,7 +628,6 @@ TEST(SparseSet, StableRemove) {
ASSERT_EQ(*set.begin(), entities[2u]);
ASSERT_TRUE(set.at(0u) == entt::tombstone);
ASSERT_TRUE(set.at(1u) == entt::tombstone);
ASSERT_EQ(set.slot(), 1u);
ASSERT_EQ(set.remove(entities[2u]), 1u);
ASSERT_EQ(set.remove(entities[2u]), 0u);
@@ -645,7 +635,6 @@ TEST(SparseSet, StableRemove) {
ASSERT_FALSE(set.empty());
ASSERT_EQ(set.size(), 3u);
ASSERT_EQ(set.current(entities[2u]), traits_type::to_version(entt::tombstone));
ASSERT_EQ(set.slot(), 2u);
set.emplace(entities[0u]);
set.emplace(entities[1u]);
@@ -663,7 +652,6 @@ TEST(SparseSet, StableRemove) {
ASSERT_EQ(set.at(1u), entities[2u]);
ASSERT_TRUE(set.at(2u) == entt::tombstone);
ASSERT_EQ(*++set.begin(), entities[2u]);
ASSERT_EQ(set.slot(), 0u);
set.compact();
@@ -674,14 +662,12 @@ TEST(SparseSet, StableRemove) {
ASSERT_EQ(set.current(entities[2u]), traits_type::to_version(entities[2u]));
ASSERT_TRUE(set.at(0u) == entities[2u]);
ASSERT_EQ(*set.begin(), entities[2u]);
ASSERT_EQ(set.slot(), 1u);
set.clear();
ASSERT_EQ(set.size(), 1u);
ASSERT_EQ(set.current(entities[2u]), traits_type::to_version(entt::tombstone));
ASSERT_TRUE(set.at(0u) == entt::tombstone);
ASSERT_EQ(set.slot(), 0u);
set.compact();
@@ -697,7 +683,6 @@ TEST(SparseSet, StableRemove) {
ASSERT_NE(set.current(entities[0u]), traits_type::to_version(entt::tombstone));
ASSERT_NE(set.current(entities[1u]), traits_type::to_version(entt::tombstone));
ASSERT_EQ(set.current(entities[2u]), traits_type::to_version(entt::tombstone));
ASSERT_EQ(set.slot(), 2u);
ASSERT_EQ(set.remove(entities[0u]), 1u);
ASSERT_EQ(set.remove(entities[1u]), 1u);
@@ -708,7 +693,6 @@ TEST(SparseSet, StableRemove) {
ASSERT_EQ(set.current(entities[1u]), traits_type::to_version(entt::tombstone));
ASSERT_EQ(set.current(entities[2u]), traits_type::to_version(entt::tombstone));
ASSERT_TRUE(*set.begin() == entt::tombstone);
ASSERT_EQ(set.slot(), 1u);
set.emplace(entities[0u]);