Explorar o código

fixed view multi component

Michele Caini %!s(int64=9) %!d(string=hai) anos
pai
achega
70f5ad250b
Modificáronse 2 ficheiros con 34 adicións e 1 borrados
  1. 1 1
      src/registry.hpp
  2. 33 0
      test/registry.cpp

+ 1 - 1
src/registry.hpp

@@ -43,7 +43,7 @@ class View<Pool<Components...>, Type, Types...> final {
         ViewIterator(pool_type &pool, const entity_type *entities, typename pool_type::size_type pos) noexcept
             : pool{pool}, entities{entities}, pos{pos}
         {
-            if(pos) { while(!valid() && --pos); }
+            if(this->pos) { while(!valid() && --this->pos); }
         }
 
         ViewIterator & operator++() noexcept {

+ 33 - 0
test/registry.cpp

@@ -129,3 +129,36 @@ TEST(DefaultRegistry, ViewMultipleComponent) {
     ASSERT_NO_THROW((registry.view<int, char>().begin()++));
     ASSERT_NO_THROW((++registry.view<int, char>().begin()));
 }
+
+TEST(DefaultRegistry, EmptyViewSingleComponent) {
+    using registry_type = entt::DefaultRegistry<char, int, double>;
+
+    registry_type registry;
+
+    registry.create<char, double>();
+    registry.create<char>();
+
+    auto view = registry.view<int>();
+
+    ASSERT_EQ(view.size(), registry_type::size_type{0});
+
+    registry.reset();
+}
+
+TEST(DefaultRegistry, EmptyViewMultipleComponent) {
+    using registry_type = entt::DefaultRegistry<char, int, float, double>;
+
+    registry_type registry;
+
+    registry.create<double, int, float>();
+    registry.create<char, float>();
+
+    auto view = registry.view<char, int, float>();
+
+    for(auto entity: view) {
+        (void)entity;
+        FAIL();
+    }
+
+    registry.reset();
+}