From 011054e5151bc31d51d91ba36a1fa99d2a4865ca Mon Sep 17 00:00:00 2001 From: skypjack Date: Fri, 20 Feb 2026 09:38:56 +0100 Subject: [PATCH] sparse_set: internal change (perf) - see #1311 --- src/entt/entity/sparse_set.hpp | 20 ++++---------------- 1 file changed, 4 insertions(+), 16 deletions(-) diff --git a/src/entt/entity/sparse_set.hpp b/src/entt/entity/sparse_set.hpp index bf09d05eb..9f3ec0b10 100644 --- a/src/entt/entity/sparse_set.hpp +++ b/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();