Ver código fonte

registry: cleanup

Michele Caini 6 anos atrás
pai
commit
652e569afc
1 arquivos alterados com 3 adições e 8 exclusões
  1. 3 8
      src/entt/entity/registry.hpp

+ 3 - 8
src/entt/entity/registry.hpp

@@ -1407,16 +1407,11 @@ public:
                     handler->current.construct(entity);
                 }
             } else {
-                const auto &cpool = std::min({
-                    static_cast<sparse_set<Entity> &>(std::get<pool_handler<std::decay_t<Owned>> &>(cpools))...,
-                    static_cast<sparse_set<Entity> &>(std::get<pool_handler<std::decay_t<Get>> &>(cpools))...
-                }, [](const auto &lhs, const auto &rhs) {
-                    return lhs.size() < rhs.size();
-                });
+                const auto curr = view<Owned..., Get...>(exclude<Exclude...>);
 
                 // we cannot iterate backwards because we want to leave behind valid entities in case of owned types
-                std::for_each(std::make_reverse_iterator(cpool.end()), std::make_reverse_iterator(cpool.begin()), [cpools, handler, curr = view<Owned..., Get...>(entt::exclude<Exclude...>)](const auto entity) {
-                    if(const auto pos = handler->current; curr.contains(entity) && !(std::get<0>(cpools).index(entity) < ++handler->current)) {
+                std::for_each(std::make_reverse_iterator(curr.end()), std::make_reverse_iterator(curr.begin()), [cpools, handler](const auto entity) {
+                    if(const auto pos = handler->current; !(std::get<0>(cpools).index(entity) < ++handler->current)) {
                         (std::get<pool_handler<std::decay_t<Owned>> &>(cpools).swap(std::get<pool_handler<std::decay_t<Owned>> &>(cpools).data()[pos], entity), ...);
                     }
                 });