From 7ca77e53f693e5590e573af7d4f6d930fffead9b Mon Sep 17 00:00:00 2001 From: Michele Caini Date: Fri, 24 Mar 2023 17:08:01 +0100 Subject: [PATCH] snapshot: avoid unnecessary lookups --- src/entt/entity/snapshot.hpp | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/entt/entity/snapshot.hpp b/src/entt/entity/snapshot.hpp index b43d34146..bdeb8bb0a 100644 --- a/src/entt/entity/snapshot.hpp +++ b/src/entt/entity/snapshot.hpp @@ -385,6 +385,7 @@ class basic_continuous_loader { template void assign(Archive &archive, [[maybe_unused]] Member Other::*...member) { + auto &storage = reg->template storage(); typename traits_type::entity_type length{}; entity_type entt; @@ -394,7 +395,10 @@ class basic_continuous_loader { while(length--) { archive(entt); restore(entt); - reg->template emplace_or_replace(map(entt)); + + if(!storage.contains(entt)) { + storage.emplace(map(entt)); + } } } else { Component instance; @@ -403,7 +407,12 @@ class basic_continuous_loader { archive(entt, instance); (update(instance, member), ...); restore(entt); - reg->template emplace_or_replace(map(entt), std::move(instance)); + + if(storage.contains(entt)) { + storage.get(entt) = std::move(instance); + } else { + storage.emplace(map(entt), std::move(instance)); + } } } }