Преглед на файлове

meta: skip unnecessary resolve calls (perf)

skypjack преди 7 месеца
родител
ревизия
f61fd4584a
променени са 1 файла, в които са добавени 2 реда и са изтрити 2 реда
  1. 2 2
      src/entt/meta/meta.hpp

+ 2 - 2
src/entt/meta/meta.hpp

@@ -290,7 +290,7 @@ public:
     meta_any(const meta_ctx &area, const meta_any &other)
     meta_any(const meta_ctx &area, const meta_any &other)
         : storage{other.storage},
         : storage{other.storage},
           ctx{&area},
           ctx{&area},
-          node{(other.node.resolve != nullptr) ? other.node.resolve(internal::meta_context::from(*ctx)) : other.node},
+          node{((ctx != other.ctx) && (other.node.resolve != nullptr)) ? other.node.resolve(internal::meta_context::from(*ctx)) : other.node},
           vtable{other.vtable} {}
           vtable{other.vtable} {}
 
 
     /**
     /**
@@ -301,7 +301,7 @@ public:
     meta_any(const meta_ctx &area, meta_any &&other)
     meta_any(const meta_ctx &area, meta_any &&other)
         : storage{std::move(other.storage)},
         : storage{std::move(other.storage)},
           ctx{&area},
           ctx{&area},
-          node{(other.node.resolve != nullptr) ? std::exchange(other.node, internal::meta_type_node{}).resolve(internal::meta_context::from(*ctx)) : std::exchange(other.node, internal::meta_type_node{})},
+          node{((ctx != other.ctx) && (other.node.resolve != nullptr)) ? std::exchange(other.node, internal::meta_type_node{}).resolve(internal::meta_context::from(*ctx)) : std::exchange(other.node, internal::meta_type_node{})},
           vtable{std::exchange(other.vtable, nullptr)} {}
           vtable{std::exchange(other.vtable, nullptr)} {}
 
 
     /**
     /**