Ver código fonte

sparse_set: internal change (perf) - see #1311

skypjack 1 semana atrás
pai
commit
011054e515
1 arquivos alterados com 4 adições e 16 exclusões
  1. 4 16
      src/entt/entity/sparse_set.hpp

+ 4 - 16
src/entt/entity/sparse_set.hpp

@@ -294,23 +294,11 @@ protected:
 
     /*! @brief Erases all entities of a sparse set. */
     virtual void pop_all() {
-        switch(mode) {
-        case deletion_policy::in_place:
-            if(head != max_size) {
-                for(auto &&elem: packed) {
-                    if(elem != tombstone) {
-                        sparse_ref(elem) = null;
-                    }
-                }
-                break;
+        // suboptimal with few entities, but exploits cache way more with many
+        for (auto&& elem : sparse) {
+            for (size_type pos{}; pos < traits_type::page_size; ++pos) {
+                elem[pos] = null;
             }
-            [[fallthrough]];
-        case deletion_policy::swap_only:
-        case deletion_policy::swap_and_pop:
-            for(auto &&elem: packed) {
-                sparse_ref(elem) = null;
-            }
-            break;
         }
 
         head = policy_to_head();