Explorar el Código

dense_set: avoid dispatching based on iterator category if possible

Michele Caini hace 4 años
padre
commit
281f40bd56
Se han modificado 1 ficheros con 4 adiciones y 7 borrados
  1. 4 7
      src/entt/container/dense_set.hpp

+ 4 - 7
src/entt/container/dense_set.hpp

@@ -536,9 +536,8 @@ public:
      * @return An iterator following the removed element.
      */
     iterator erase(const_iterator pos) {
-        const auto dist = std::distance(cbegin(), pos);
         erase(*pos);
-        return begin() + dist;
+        return begin() + (pos - cbegin());
     }
 
     /**
@@ -548,13 +547,11 @@ public:
      * @return An iterator following the last removed element.
      */
     iterator erase(const_iterator first, const_iterator last) {
-        const auto dist = std::distance(cbegin(), first);
-
-        for(auto rfirst = std::make_reverse_iterator(last), rlast = std::make_reverse_iterator(first); rfirst != rlast; ++rfirst) {
-            erase(*rfirst);
+        for(; last != first; --last) {
+            erase(last - 1u);
         }
 
-        return dist > static_cast<decltype(dist)>(size()) ? end() : (begin() + dist);
+        return (begin() + (last - cbegin()));
     }
 
     /**