File tree Expand file tree Collapse file tree 2 files changed +18
-5
lines changed Expand file tree Collapse file tree 2 files changed +18
-5
lines changed Original file line number Diff line number Diff line change @@ -127,11 +127,11 @@ typename basic_storage<Args...>::entity_type to_entity(const basic_storage<Args.
127127 using traits_type = component_traits<typename basic_storage<Args...>::value_type, typename basic_storage<Args...>::entity_type>;
128128 static_assert (traits_type::page_size != 0u , " Unexpected page size" );
129129 const typename basic_storage<Args...>::base_type &base = storage;
130- const auto *addr = std::addressof (instance );
130+ const auto *page = storage. raw ( );
131131
132- for (auto it = base. rbegin (), last = base. rend (); it < last; it += traits_type::page_size) {
133- if (const auto dist = (addr - std::addressof (storage. get (*it)) ); dist >= 0 && dist < static_cast <decltype (dist)>(traits_type::page_size)) {
134- return *(it + dist);
132+ for (std:: size_t pos{}, count = storage. size (); pos < count; pos += traits_type::page_size, ++page ) {
133+ if (const auto dist = (std::addressof (instance) - *page ); dist >= 0 && dist < static_cast <decltype (dist)>(traits_type::page_size)) {
134+ return *(base. rbegin () + static_cast < decltype (dist)>(pos) + dist);
135135 }
136136 }
137137
Original file line number Diff line number Diff line change @@ -96,7 +96,8 @@ TYPED_TEST(ToEntity, Functionalities) {
9696 ASSERT_EQ (*storage.entt ::sparse_set::rbegin (), entity);
9797 ASSERT_EQ (&*(storage.rbegin () + traits_type::page_size - (1u + traits_type::in_place_delete)), &storage.get (other));
9898
99- registry.destroy (other);
99+ // erase in the middle
100+ storage.erase (other);
100101
101102 ASSERT_EQ (entt::to_entity (storage, storage.get (entity)), entity);
102103 ASSERT_EQ (entt::to_entity (storage, storage.get (next)), next);
@@ -105,6 +106,18 @@ TYPED_TEST(ToEntity, Functionalities) {
105106 ASSERT_EQ (&*(storage.rbegin () + traits_type::page_size - 1u ), &storage.get (next));
106107
107108 ASSERT_EQ (entt::to_entity (storage, value), null);
109+
110+ storage.clear ();
111+
112+ storage.emplace (entity);
113+ storage.emplace (other);
114+ storage.emplace (next);
115+
116+ // erase first
117+ storage.erase (entity);
118+
119+ ASSERT_EQ (entt::to_entity (storage, value), null);
120+ ASSERT_EQ (entt::to_entity (storage, storage.get (other)), other);
108121}
109122
110123TEST (SighHelper, Functionalities) {
You can’t perform that action at this time.
0 commit comments