Просмотр исходного кода

view: return the best size for entity storage from size_hint

Michele Caini 1 год назад
Родитель
Сommit
68adf8615c
3 измененных файлов с 5 добавлено и 5 удалено
  1. 1 1
      src/entt/entity/view.hpp
  2. 1 1
      test/entt/entity/registry.cpp
  3. 3 3
      test/entt/entity/view.cpp

+ 1 - 1
src/entt/entity/view.hpp

@@ -330,7 +330,7 @@ public:
      * @return Estimated number of entities iterated by the view.
      */
     [[nodiscard]] size_type size_hint() const noexcept {
-        return (index != Get) ? pools[index]->size() : size_type{};
+        return (index != Get) ? offset() : size_type{};
     }
 
     /**

+ 1 - 1
test/entt/entity/registry.cpp

@@ -1873,7 +1873,7 @@ TEST(Registry, ExcludeOnlyView) {
 
     registry.destroy(entity[3u]);
 
-    ASSERT_EQ(view.size_hint(), 4u);
+    ASSERT_EQ(view.size_hint(), 3u);
     ASSERT_NE(view.begin(), view.end());
 
     ASSERT_EQ(std::distance(view.begin(), view.end()), 1);

+ 3 - 3
test/entt/entity/view.cpp

@@ -1441,7 +1441,7 @@ TEST(MultiStorageView, StorageEntity) {
     ASSERT_EQ(view.front(), entity[1u]);
     ASSERT_EQ(view.back(), entity[1u]);
 
-    ASSERT_EQ(view.size_hint(), 2u);
+    ASSERT_EQ(view.size_hint(), 1u);
     ASSERT_NE(view.begin(), view.end());
 
     ASSERT_EQ(std::distance(view.begin(), view.end()), 1);
@@ -1478,7 +1478,7 @@ TEST(MultiStorageView, StorageEntityWithExclude) {
     ASSERT_EQ(view.front(), entity[1u]);
     ASSERT_EQ(view.back(), entity[1u]);
 
-    ASSERT_EQ(view.size_hint(), 3u);
+    ASSERT_EQ(view.size_hint(), 2u);
     ASSERT_NE(view.begin(), view.end());
 
     ASSERT_EQ(std::distance(view.begin(), view.end()), 1);
@@ -1510,7 +1510,7 @@ TEST(MultiStorageView, StorageEntityExcludeOnly) {
     ASSERT_EQ(view.front(), entity[1u]);
     ASSERT_EQ(view.back(), entity[1u]);
 
-    ASSERT_EQ(view.size_hint(), 3u);
+    ASSERT_EQ(view.size_hint(), 2u);
     ASSERT_NE(view.begin(), view.end());
 
     ASSERT_EQ(std::distance(view.begin(), view.end()), 1);