bug fixing (find on views)
This commit is contained in:
@@ -208,7 +208,8 @@ public:
|
||||
* iterator otherwise.
|
||||
*/
|
||||
iterator_type find(const entity_type entity) const ENTT_NOEXCEPT {
|
||||
return handler->find(entity);
|
||||
const auto it = handler->find(entity);
|
||||
return it != end() && *it == entity ? it : end();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -217,7 +218,7 @@ public:
|
||||
* @return The identifier that occupies the given position.
|
||||
*/
|
||||
entity_type operator[](const size_type pos) const ENTT_NOEXCEPT {
|
||||
return handler->sparse_set<Entity>::begin()[pos];
|
||||
return begin()[pos];
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -226,7 +227,7 @@ public:
|
||||
* @return True if the view contains the given entity, false otherwise.
|
||||
*/
|
||||
bool contains(const entity_type entity) const ENTT_NOEXCEPT {
|
||||
return handler->has(entity) && (handler->data()[handler->sparse_set<Entity>::get(entity)] == entity);
|
||||
return find(entity) != end();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -595,9 +596,7 @@ public:
|
||||
* @return True if the view contains the given entity, false otherwise.
|
||||
*/
|
||||
bool contains(const entity_type entity) const ENTT_NOEXCEPT {
|
||||
const auto sz = size_type(entity & traits_type::entity_mask);
|
||||
const auto extent = std::min({ std::get<pool_type<Component> *>(pools)->extent()... });
|
||||
return ((sz < extent) && ... && (std::get<pool_type<Component> *>(pools)->has(entity) && (std::get<pool_type<Component> *>(pools)->data()[std::get<pool_type<Component> *>(pools)->sparse_set<Entity>::get(entity)] == entity)));
|
||||
return find(entity) != end();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -823,7 +822,8 @@ public:
|
||||
* iterator otherwise.
|
||||
*/
|
||||
iterator_type find(const entity_type entity) const ENTT_NOEXCEPT {
|
||||
return pool->find(entity);
|
||||
const auto it = pool->find(entity);
|
||||
return it != end() && *it == entity ? it : end();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -832,7 +832,7 @@ public:
|
||||
* @return The identifier that occupies the given position.
|
||||
*/
|
||||
entity_type operator[](const size_type pos) const ENTT_NOEXCEPT {
|
||||
return pool->sparse_set<Entity>::begin()[pos];
|
||||
return begin()[pos];
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -841,7 +841,7 @@ public:
|
||||
* @return True if the view contains the given entity, false otherwise.
|
||||
*/
|
||||
bool contains(const entity_type entity) const ENTT_NOEXCEPT {
|
||||
return pool->has(entity) && (pool->data()[pool->sparse_set<Entity>::get(entity)] == entity);
|
||||
return find(entity) != end();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -252,6 +252,15 @@ TEST(PersistentView, Find) {
|
||||
ASSERT_EQ(*(++it), e0);
|
||||
ASSERT_EQ(++it, view.end());
|
||||
ASSERT_EQ(++view.find(e0), view.end());
|
||||
|
||||
const auto e4 = registry.create();
|
||||
registry.destroy(e4);
|
||||
const auto e5 = registry.create();
|
||||
registry.assign<int>(e5);
|
||||
registry.assign<char>(e5);
|
||||
|
||||
ASSERT_NE(view.find(e5), view.end());
|
||||
ASSERT_EQ(view.find(e4), view.end());
|
||||
}
|
||||
|
||||
TEST(PersistentView, SingleComponent) {
|
||||
@@ -518,6 +527,14 @@ TEST(SingleComponentView, Find) {
|
||||
ASSERT_EQ(*(++it), e0);
|
||||
ASSERT_EQ(++it, view.end());
|
||||
ASSERT_EQ(++view.find(e0), view.end());
|
||||
|
||||
const auto e4 = registry.create();
|
||||
registry.destroy(e4);
|
||||
const auto e5 = registry.create();
|
||||
registry.assign<int>(e5);
|
||||
|
||||
ASSERT_NE(view.find(e5), view.end());
|
||||
ASSERT_EQ(view.find(e4), view.end());
|
||||
}
|
||||
|
||||
TEST(MultipleComponentView, Functionalities) {
|
||||
@@ -722,6 +739,15 @@ TEST(MultipleComponentView, Find) {
|
||||
ASSERT_EQ(*(++it), e0);
|
||||
ASSERT_EQ(++it, view.end());
|
||||
ASSERT_EQ(++view.find(e0), view.end());
|
||||
|
||||
const auto e4 = registry.create();
|
||||
registry.destroy(e4);
|
||||
const auto e5 = registry.create();
|
||||
registry.assign<int>(e5);
|
||||
registry.assign<char>(e5);
|
||||
|
||||
ASSERT_NE(view.find(e5), view.end());
|
||||
ASSERT_EQ(view.find(e4), view.end());
|
||||
}
|
||||
|
||||
TEST(RuntimeView, Functionalities) {
|
||||
|
||||
Reference in New Issue
Block a user