storage: removed the requirement to expose try_get
This commit is contained in:
@@ -180,7 +180,7 @@ class basic_observer {
|
||||
template<std::size_t Index>
|
||||
static void maybe_valid_if(basic_observer &obs, basic_registry<Entity> ®, const Entity entt) {
|
||||
if(reg.template has<Require...>(entt) && !reg.template any<Reject...>(entt)) {
|
||||
if(auto *comp = obs.view.try_get(entt); !comp) {
|
||||
if(!obs.view.contains(entt)) {
|
||||
obs.view.emplace(entt);
|
||||
}
|
||||
|
||||
@@ -190,7 +190,7 @@ class basic_observer {
|
||||
|
||||
template<std::size_t Index>
|
||||
static void discard_if(basic_observer &obs, basic_registry<Entity> &, const Entity entt) {
|
||||
if(auto *value = obs.view.try_get(entt); value && !(*value &= (~(1 << Index)))) {
|
||||
if(obs.view.contains(entt) && !(obs.view.get(entt) &= (~(1 << Index)))) {
|
||||
obs.view.remove(entt);
|
||||
}
|
||||
}
|
||||
@@ -223,7 +223,7 @@ class basic_observer {
|
||||
}
|
||||
}())
|
||||
{
|
||||
if(auto *comp = obs.view.try_get(entt); !comp) {
|
||||
if(!obs.view.contains(entt)) {
|
||||
obs.view.emplace(entt);
|
||||
}
|
||||
|
||||
@@ -233,7 +233,7 @@ class basic_observer {
|
||||
|
||||
template<std::size_t Index>
|
||||
static void discard_if(basic_observer &obs, basic_registry<Entity> &, const Entity entt) {
|
||||
if(auto *value = obs.view.try_get(entt); value && !(*value &= (~(1 << Index)))) {
|
||||
if(obs.view.contains(entt) && !(obs.view.get(entt) &= (~(1 << Index)))) {
|
||||
obs.view.remove(entt);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -876,7 +876,8 @@ public:
|
||||
ENTT_ASSERT(valid(entity));
|
||||
|
||||
if constexpr(sizeof...(Component) == 1) {
|
||||
return (assure<Component>().try_get(entity), ...);
|
||||
auto &cpool = assure<Component...>();
|
||||
return cpool.contains(entity) ? &cpool.get(entity) : nullptr;
|
||||
} else {
|
||||
return std::make_tuple(try_get<Component>(entity)...);
|
||||
}
|
||||
@@ -888,7 +889,8 @@ public:
|
||||
ENTT_ASSERT(valid(entity));
|
||||
|
||||
if constexpr(sizeof...(Component) == 1) {
|
||||
return (assure<Component>().try_get(entity), ...);
|
||||
auto &cpool = assure<Component...>();
|
||||
return cpool.contains(entity) ? &cpool.get(entity) : nullptr;
|
||||
} else {
|
||||
return std::make_tuple(try_get<Component>(entity)...);
|
||||
}
|
||||
|
||||
@@ -339,20 +339,6 @@ public:
|
||||
return const_cast<value_type &>(std::as_const(*this).get(entt));
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Returns a pointer to the object associated with an entity, if any.
|
||||
* @param entt A valid entity identifier.
|
||||
* @return The object associated with the entity, if any.
|
||||
*/
|
||||
[[nodiscard]] const value_type * try_get(const entity_type entt) const {
|
||||
return underlying_type::contains(entt) ? (instances.data() + underlying_type::index(entt)) : nullptr;
|
||||
}
|
||||
|
||||
/*! @copydoc try_get */
|
||||
[[nodiscard]] value_type * try_get(const entity_type entt) {
|
||||
return const_cast<value_type *>(std::as_const(*this).try_get(entt));
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Assigns an entity to a storage and constructs its object.
|
||||
*
|
||||
|
||||
@@ -46,8 +46,6 @@ TEST(Storage, Functionalities) {
|
||||
ASSERT_FALSE(pool.contains(entt::entity{0}));
|
||||
ASSERT_TRUE(pool.contains(entt::entity{41}));
|
||||
ASSERT_EQ(pool.get(entt::entity{41}), 3);
|
||||
ASSERT_EQ(*pool.try_get(entt::entity{41}), 3);
|
||||
ASSERT_EQ(pool.try_get(entt::entity{99}), nullptr);
|
||||
|
||||
pool.remove(entt::entity{41});
|
||||
|
||||
@@ -61,8 +59,6 @@ TEST(Storage, Functionalities) {
|
||||
pool.emplace(entt::entity{41}, 12);
|
||||
|
||||
ASSERT_EQ(pool.get(entt::entity{41}), 12);
|
||||
ASSERT_EQ(*pool.try_get(entt::entity{41}), 12);
|
||||
ASSERT_EQ(pool.try_get(entt::entity{99}), nullptr);
|
||||
|
||||
pool.clear();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user