Sfoglia il codice sorgente

sparse_set: better, faster range remove

Michele Caini 3 anni fa
parent
commit
254da2c3c6
1 ha cambiato i file con 19 aggiunte e 2 eliminazioni
  1. 19 2
      src/entt/entity/sparse_set.hpp

+ 19 - 2
src/entt/entity/sparse_set.hpp

@@ -789,8 +789,25 @@ public:
     size_type remove(It first, It last) {
     size_type remove(It first, It last) {
         size_type count{};
         size_type count{};
 
 
-        for(; first != last; ++first) {
-            count += remove(*first);
+        if constexpr(std::is_same_v<It, basic_iterator>) {
+            while(first != last) {
+                while(first != last && !contains(*first)) {
+                    ++first;
+                }
+
+                const auto it = first;
+
+                while(first != last && contains(*first)) {
+                    ++first;
+                }
+
+                count += std::distance(it, first);
+                erase(it, first);
+            }
+        } else {
+            for(; first != last; ++first) {
+                count += remove(*first);
+            }
         }
         }
 
 
         return count;
         return count;