storage: reserved entities support

This commit is contained in:
Michele Caini
2025-03-06 09:56:45 +01:00
parent 0cb9f7c778
commit be0e896d25
2 changed files with 25 additions and 0 deletions

View File

@@ -1255,6 +1255,17 @@ public:
return const_reverse_iterable{it, it + offset};
}
/**
* @brief Sets the starting identifier for generation.
*
* The version is ignored, regardless of the value.
*
* @param hint A valid identifier.
*/
void start_from(const entity_type hint) {
placeholder = static_cast<size_type>(traits_type::to_entity(hint));
}
private:
size_type placeholder{};
};

View File

@@ -172,6 +172,20 @@ TEST(StorageEntity, Generate) {
ASSERT_EQ(entity[1u], entt::entity{8});
}
TEST(StorageEntity, GenerateFrom) {
using traits_type = entt::entt_traits<entt::entity>;
entt::storage<entt::entity> pool;
std::array entity{entt::entity{0}, entt::entity{1}, entt::entity{2}};
ASSERT_EQ(pool.generate(), entity[0u]);
pool.start_from(entity[2u]);
ASSERT_EQ(pool.generate(), entity[2u]);
ASSERT_FALSE(pool.contains(entity[1u]));
}
TEST(StorageEntity, GenerateInUse) {
entt::storage<entt::entity> pool;
std::array<entt::entity, 2u> entity{};