Просмотр исходного кода

meta: prepare for more perf improvements

skypjack 6 месяцев назад
Родитель
Сommit
695ac44673
1 измененных файлов с 13 добавлено и 12 удалено
  1. 13 12
      src/entt/meta/node.hpp

+ 13 - 12
src/entt/meta/node.hpp

@@ -240,19 +240,8 @@ template<typename Func>
     return func(instance);
 }
 
-[[nodiscard]] inline const meta_type_node *try_resolve(const meta_context &context, const type_info &info) noexcept {
-    const auto it = context.value.find(info.hash());
-    return it != context.value.end() ? &it->second : nullptr;
-}
-
 template<typename Type>
-[[nodiscard]] meta_type_node resolve(const meta_context &context) noexcept {
-    static_assert(std::is_same_v<Type, std::remove_const_t<std::remove_reference_t<Type>>>, "Invalid type");
-
-    if(auto *elem = try_resolve(context, type_id<Type>()); elem) {
-        return *elem;
-    }
-
+auto setup_node_for() noexcept {
     meta_type_node node{
         &type_id<Type>(),
         type_id<Type>().hash(),
@@ -311,6 +300,18 @@ template<typename Type>
     return node;
 }
 
+[[nodiscard]] inline const meta_type_node *try_resolve(const meta_context &context, const type_info &info) noexcept {
+    const auto it = context.value.find(info.hash());
+    return it != context.value.end() ? &it->second : nullptr;
+}
+
+template<typename Type>
+[[nodiscard]] meta_type_node resolve(const meta_context &context) noexcept {
+    static_assert(std::is_same_v<Type, std::remove_const_t<std::remove_reference_t<Type>>>, "Invalid type");
+    const auto *elem = try_resolve(context, type_id<Type>());
+    return (elem == nullptr) ? setup_node_for<Type>() : *elem;
+}
+
 } // namespace internal
 /*! @endcond */