Skip to content

Commit 62a1352

Browse files
committed
registry: try_get should not create storage
1 parent 4dcc0e8 commit 62a1352

File tree

2 files changed

+18
-2
lines changed

2 files changed

+18
-2
lines changed

src/entt/entity/registry.hpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -929,8 +929,7 @@ class basic_registry {
929929
template<typename... Type>
930930
[[nodiscard]] auto try_get([[maybe_unused]] const entity_type entt) {
931931
if constexpr(sizeof...(Type) == 1u) {
932-
auto &cpool = assure<std::remove_const_t<Type>...>();
933-
return (static_cast<Type *>(cpool.contains(entt) ? std::addressof(cpool.get(entt)) : nullptr), ...);
932+
return (const_cast<Type *>(std::as_const(*this).template try_get<Type>(entt)), ...);
934933
} else {
935934
return std::make_tuple(try_get<Type>(entt)...);
936935
}

test/entt/entity/registry.cpp

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1893,6 +1893,23 @@ TEST(Registry, GetOrEmplace) {
18931893
ASSERT_EQ(registry.get<int>(entity), 3);
18941894
}
18951895

1896+
TEST(Registry, TryGet) {
1897+
entt::registry registry;
1898+
const auto entity = registry.create();
1899+
1900+
ASSERT_EQ(registry.try_get<int>(entity), nullptr);
1901+
ASSERT_EQ(std::as_const(registry).try_get<int>(entity), nullptr);
1902+
1903+
ASSERT_EQ(std::as_const(registry).storage<int>(), nullptr);
1904+
1905+
const int &elem = registry.emplace<int>(entity);
1906+
1907+
ASSERT_NE(std::as_const(registry).storage<int>(), nullptr);
1908+
1909+
ASSERT_EQ(registry.try_get<int>(entity), &elem);
1910+
ASSERT_EQ(std::as_const(registry).try_get<int>(entity), &elem);
1911+
}
1912+
18961913
TEST(Registry, Constness) {
18971914
entt::registry registry;
18981915

0 commit comments

Comments
 (0)