sparse_set: added ::slot to return the next slot available for insertion
This commit is contained in:
@@ -362,6 +362,14 @@ public:
|
||||
return mode;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Returns the next slot available for insertion.
|
||||
* @return The next slot available for insertion.
|
||||
*/
|
||||
[[nodiscard]] std::size_t slot() const ENTT_NOEXCEPT {
|
||||
return free_list == null ? count : size_type{traits_type::to_entity(free_list)};
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Increases the capacity of a sparse set.
|
||||
*
|
||||
|
||||
@@ -272,6 +272,7 @@ 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.insert(std::begin(entities), std::end(entities));
|
||||
set.erase(entities, entities + 2u);
|
||||
@@ -281,12 +282,14 @@ TEST(SparseSet, StableErase) {
|
||||
ASSERT_EQ(*set.begin(), entities[2u]);
|
||||
ASSERT_TRUE(set.at(3u) == entt::tombstone);
|
||||
ASSERT_TRUE(set.at(4u) == entt::tombstone);
|
||||
ASSERT_EQ(set.slot(), 4u);
|
||||
|
||||
set.erase(entities[2u]);
|
||||
|
||||
ASSERT_DEATH(set.erase(entities[2u]), "");
|
||||
ASSERT_FALSE(set.empty());
|
||||
ASSERT_EQ(set.size(), 6u);
|
||||
ASSERT_EQ(set.slot(), 5u);
|
||||
|
||||
set.insert(std::begin(entities), std::end(entities));
|
||||
std::swap(entities[1u], entities[2u]);
|
||||
@@ -298,21 +301,25 @@ TEST(SparseSet, StableErase) {
|
||||
ASSERT_EQ(set.at(7u), entities[2u]);
|
||||
ASSERT_EQ(*++set.begin(), entities[2u]);
|
||||
ASSERT_TRUE(set.at(8u) == entt::tombstone);
|
||||
ASSERT_EQ(set.slot(), 8u);
|
||||
|
||||
set.compact();
|
||||
|
||||
ASSERT_FALSE(set.empty());
|
||||
ASSERT_EQ(set.size(), 1u);
|
||||
ASSERT_EQ(*set.begin(), entities[2u]);
|
||||
ASSERT_EQ(set.slot(), 1u);
|
||||
|
||||
set.clear();
|
||||
|
||||
ASSERT_EQ(set.size(), 0u);
|
||||
ASSERT_EQ(set.slot(), 0u);
|
||||
|
||||
set.insert(std::begin(entities), std::end(entities));
|
||||
set.erase(entities[2u]);
|
||||
|
||||
ASSERT_DEATH(set.erase(entities[2u]), "");
|
||||
ASSERT_EQ(set.slot(), 2u);
|
||||
|
||||
set.erase(entities[0u]);
|
||||
set.erase(entities[1u]);
|
||||
@@ -320,6 +327,7 @@ TEST(SparseSet, StableErase) {
|
||||
ASSERT_DEATH(set.erase(entities, entities + 2u), "");
|
||||
ASSERT_EQ(set.size(), 3u);
|
||||
ASSERT_TRUE(*set.begin() == entt::tombstone);
|
||||
ASSERT_EQ(set.slot(), 1u);
|
||||
|
||||
set.emplace(entities[0u]);
|
||||
|
||||
@@ -406,6 +414,7 @@ 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.insert(std::begin(entities), std::end(entities));
|
||||
|
||||
@@ -415,6 +424,7 @@ TEST(SparseSet, StableRemove) {
|
||||
ASSERT_EQ(*set.begin(), entt::entity{9});
|
||||
ASSERT_TRUE(set.at(3u) == entt::tombstone);
|
||||
ASSERT_TRUE(set.at(4u) == entt::tombstone);
|
||||
ASSERT_EQ(set.slot(), 4u);
|
||||
|
||||
ASSERT_EQ(set.remove(entities[2u]), 1u);
|
||||
ASSERT_EQ(set.remove(entities[2u]), 0u);
|
||||
@@ -423,6 +433,7 @@ TEST(SparseSet, StableRemove) {
|
||||
ASSERT_FALSE(set.empty());
|
||||
ASSERT_EQ(set.size(), 6u);
|
||||
ASSERT_TRUE(*set.begin() == entt::tombstone);
|
||||
ASSERT_EQ(set.slot(), 5u);
|
||||
|
||||
set.insert(entities, entities + 2u);
|
||||
|
||||
@@ -431,6 +442,7 @@ TEST(SparseSet, StableRemove) {
|
||||
ASSERT_EQ(set.size(), 8u);
|
||||
ASSERT_TRUE(set.at(6u) == entt::tombstone);
|
||||
ASSERT_TRUE(set.at(7u) == entt::tombstone);
|
||||
ASSERT_EQ(set.slot(), 7u);
|
||||
|
||||
set.insert(std::begin(entities), std::end(entities));
|
||||
std::swap(entities[1u], entities[2u]);
|
||||
@@ -442,16 +454,19 @@ TEST(SparseSet, StableRemove) {
|
||||
ASSERT_EQ(set.at(9u), entities[2u]);
|
||||
ASSERT_EQ(*++set.begin(), entities[2u]);
|
||||
ASSERT_TRUE(set.at(10u) == entt::tombstone);
|
||||
ASSERT_EQ(set.slot(), 10u);
|
||||
|
||||
set.compact();
|
||||
|
||||
ASSERT_FALSE(set.empty());
|
||||
ASSERT_EQ(set.size(), 1u);
|
||||
ASSERT_EQ(*set.begin(), entities[2u]);
|
||||
ASSERT_EQ(set.slot(), 1u);
|
||||
|
||||
set.clear();
|
||||
|
||||
ASSERT_EQ(set.size(), 0u);
|
||||
ASSERT_EQ(set.slot(), 0u);
|
||||
|
||||
set.insert(std::begin(entities), std::end(entities));
|
||||
|
||||
@@ -464,6 +479,7 @@ TEST(SparseSet, StableRemove) {
|
||||
|
||||
ASSERT_EQ(set.size(), 3u);
|
||||
ASSERT_TRUE(*set.begin() == entt::tombstone);
|
||||
ASSERT_EQ(set.slot(), 1u);
|
||||
|
||||
set.emplace(entities[0u]);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user