From 18ffbd002720dcde328fa51b64ebd9ce69415ae2 Mon Sep 17 00:00:00 2001 From: Michele Caini Date: Mon, 4 Jan 2021 08:34:56 +0100 Subject: [PATCH] registry: group -> group_if_exists (close #626) --- src/entt/entity/helper.hpp | 6 +++++- src/entt/entity/registry.hpp | 8 ++++---- test/entt/entity/group.cpp | 20 ++++++++++---------- 3 files changed, 19 insertions(+), 15 deletions(-) diff --git a/src/entt/entity/helper.hpp b/src/entt/entity/helper.hpp index c8ee530b6..f65c8c960 100644 --- a/src/entt/entity/helper.hpp +++ b/src/entt/entity/helper.hpp @@ -89,7 +89,11 @@ struct as_group { */ template operator basic_group() const { - return reg.template group(Get{}, Exclude{}); + if constexpr(std::is_const_v) { + return reg.template group_if_exists(Get{}, Exclude{}); + } else { + return reg.template group(Get{}, Exclude{}); + } } private: diff --git a/src/entt/entity/registry.hpp b/src/entt/entity/registry.hpp index 4a139027e..20bb0203c 100644 --- a/src/entt/entity/registry.hpp +++ b/src/entt/entity/registry.hpp @@ -1298,7 +1298,7 @@ public: * @return A newly created group. */ template - [[nodiscard]] basic_group, get_t, Owned...> group(get_t, exclude_t = {}) const { + [[nodiscard]] basic_group, get_t, Owned...> group_if_exists(get_t, exclude_t = {}) const { static_assert(std::conjunction_v..., std::is_const...>, "Invalid non-const type"); if(auto it = std::find_if(groups.cbegin(), groups.cend(), [](const auto &gdata) { @@ -1332,15 +1332,15 @@ public: /** * @brief Returns a group for the given components. * - * @sa group + * @sa group_if_exists * * @tparam Owned Types of components owned by the group. * @tparam Exclude Types of components used to filter the group. * @return A newly created group. */ template - [[nodiscard]] basic_group, get_t<>, Owned...> group(exclude_t = {}) const { - return group(get_t<>{}, exclude); + [[nodiscard]] basic_group, get_t<>, Owned...> group_if_exists(exclude_t = {}) const { + return group_if_exists(get_t<>{}, exclude); } /** diff --git a/test/entt/entity/group.cpp b/test/entt/entity/group.cpp index 0a3be2c6c..5b18d7f54 100644 --- a/test/entt/entity/group.cpp +++ b/test/entt/entity/group.cpp @@ -16,7 +16,7 @@ bool operator==(const boxed_int &lhs, const boxed_int &rhs) { TEST(NonOwningGroup, Functionalities) { entt::registry registry; auto group = registry.group(entt::get); - auto cgroup = std::as_const(registry).group(entt::get); + auto cgroup = std::as_const(registry).group_if_exists(entt::get); ASSERT_TRUE(group.empty()); @@ -79,7 +79,7 @@ TEST(NonOwningGroup, Functionalities) { TEST(NonOwningGroup, Invalid) { entt::registry registry{}; - auto group = std::as_const(registry).group(entt::get); + auto group = std::as_const(registry).group_if_exists(entt::get); const auto entity = registry.create(); registry.emplace(entity); @@ -115,7 +115,7 @@ TEST(NonOwningGroup, Invalid) { TEST(NonOwningGroup, ElementAccess) { entt::registry registry; auto group = registry.group(entt::get); - auto cgroup = std::as_const(registry).group(entt::get); + auto cgroup = std::as_const(registry).group_if_exists(entt::get); const auto e0 = registry.create(); registry.emplace(e0); @@ -177,7 +177,7 @@ TEST(NonOwningGroup, Each) { registry.emplace(e1, 1); registry.emplace(e1); - auto cgroup = std::as_const(registry).group(entt::get); + auto cgroup = std::as_const(registry).group_if_exists(entt::get); std::size_t cnt = 0; for(auto first = cgroup.each().rbegin(), last = cgroup.each().rend(); first != last; ++first) { @@ -487,7 +487,7 @@ TEST(NonOwningGroup, EmptyAndNonEmptyTypes) { TEST(NonOwningGroup, TrackEntitiesOnComponentDestruction) { entt::registry registry; const auto group = registry.group(entt::get, entt::exclude); - const auto cgroup = std::as_const(registry).group(entt::get, entt::exclude); + const auto cgroup = std::as_const(registry).group_if_exists(entt::get, entt::exclude); const auto entity = registry.create(); registry.emplace(entity); @@ -591,7 +591,7 @@ TEST(NonOwningGroup, ExtendedGet) { TEST(OwningGroup, Functionalities) { entt::registry registry; auto group = registry.group(entt::get); - auto cgroup = std::as_const(registry).group(entt::get); + auto cgroup = std::as_const(registry).group_if_exists(entt::get); ASSERT_TRUE(group.empty()); @@ -652,7 +652,7 @@ TEST(OwningGroup, Functionalities) { TEST(OwningGroup, Invalid) { entt::registry registry{}; - auto group = std::as_const(registry).group(entt::get); + auto group = std::as_const(registry).group_if_exists(entt::get); const auto entity = registry.create(); registry.emplace(entity); @@ -684,7 +684,7 @@ TEST(OwningGroup, Invalid) { TEST(OwningGroup, ElementAccess) { entt::registry registry; auto group = registry.group(entt::get); - auto cgroup = std::as_const(registry).group(entt::get); + auto cgroup = std::as_const(registry).group_if_exists(entt::get); const auto e0 = registry.create(); registry.emplace(e0); @@ -746,7 +746,7 @@ TEST(OwningGroup, Each) { registry.emplace(e1, 1); registry.emplace(e1); - auto cgroup = std::as_const(registry).group(entt::get); + auto cgroup = std::as_const(registry).group_if_exists(entt::get); std::size_t cnt = 0; for(auto first = cgroup.each().rbegin(), last = cgroup.each().rend(); first != last; ++first) { @@ -1160,7 +1160,7 @@ TEST(OwningGroup, EmptyAndNonEmptyTypes) { TEST(OwningGroup, TrackEntitiesOnComponentDestruction) { entt::registry registry; const auto group = registry.group(entt::exclude); - const auto cgroup = std::as_const(registry).group(entt::exclude); + const auto cgroup = std::as_const(registry).group_if_exists(entt::exclude); const auto entity = registry.create(); registry.emplace(entity);