snapshot: avoid unnecessary lookups

This commit is contained in:
Michele Caini
2023-03-24 17:08:01 +01:00
parent 69397f3658
commit 7ca77e53f6

View File

@@ -385,6 +385,7 @@ class basic_continuous_loader {
template<typename Component, typename Archive, typename... Other, typename... Member>
void assign(Archive &archive, [[maybe_unused]] Member Other::*...member) {
auto &storage = reg->template storage<Component>();
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<Component>(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<Component>(map(entt), std::move(instance));
if(storage.contains(entt)) {
storage.get(entt) = std::move(instance);
} else {
storage.emplace(map(entt), std::move(instance));
}
}
}
}