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

meta: avoid unnecessary allocations

skypjack 1 месяц назад
Родитель
Сommit
6ac13b140f
1 измененных файлов с 5 добавлено и 3 удалено
  1. 5 3
      src/entt/meta/factory.hpp

+ 5 - 3
src/entt/meta/factory.hpp

@@ -122,10 +122,12 @@ protected:
 public:
     basic_meta_factory(meta_ctx &area, meta_type_node node)
         : ctx{&area},
-          bucket{node.info->hash()},
-          parent{meta_context::from(*ctx).bucket.try_emplace(node.info->hash(), std::make_unique<meta_type_node>(std::move(node))).first->second.get()} {
-        if(parent->details == nullptr) {
+          bucket{node.info->hash()} {
+        if(const auto it = meta_context::from(*ctx).bucket.find(bucket); it == meta_context::from(*ctx).bucket.cend()) {
+            parent = meta_context::from(*ctx).bucket.emplace(node.info->hash(), std::make_unique<meta_type_node>(std::move(node))).first->second.get();
             parent->details = std::make_unique<meta_type_descriptor>();
+        } else {
+            parent = it->second.get();
         }
     }