Selaa lähdekoodia

meta: added meta_dtor_node for consistency

Michele Caini 3 vuotta sitten
vanhempi
commit
b5a7812ab4

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

@@ -387,7 +387,7 @@ public:
     template<auto Func>
     template<auto Func>
     auto dtor() noexcept {
     auto dtor() noexcept {
         static_assert(std::is_invocable_v<decltype(Func), Type &>, "The function doesn't accept an object of the type provided");
         static_assert(std::is_invocable_v<decltype(Func), Type &>, "The function doesn't accept an object of the type provided");
-        owner->dtor = [](void *instance) { std::invoke(Func, *static_cast<Type *>(instance)); };
+        owner->dtor.dtor = [](void *instance) { std::invoke(Func, *static_cast<Type *>(instance)); };
         return meta_factory<Type>{};
         return meta_factory<Type>{};
     }
     }
 
 
@@ -620,7 +620,7 @@ inline void meta_reset(const id_type id) noexcept {
             node->base.clear();
             node->base.clear();
             node->conv.clear();
             node->conv.clear();
             node->templ.reset();
             node->templ.reset();
-            node->dtor = nullptr;
+            node->dtor.dtor = nullptr;
             *it = std::exchange(node->next, nullptr);
             *it = std::exchange(node->next, nullptr);
 
 
             break;
             break;

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

@@ -181,8 +181,8 @@ class meta_any {
     }
     }
 
 
     void release() {
     void release() {
-        if(node && node->dtor && owner()) {
-            node->dtor(storage.data());
+        if(node && node->dtor.dtor && owner()) {
+            node->dtor.dtor(storage.data());
         }
         }
     }
     }
 
 

+ 5 - 1
src/entt/meta/node.hpp

@@ -68,6 +68,10 @@ struct meta_ctor_node {
     meta_any (*const invoke)(meta_any *const);
     meta_any (*const invoke)(meta_any *const);
 };
 };
 
 
+struct meta_dtor_node {
+    void (*dtor)(void *){nullptr};
+};
+
 struct meta_data_node {
 struct meta_data_node {
     using size_type = std::size_t;
     using size_type = std::size_t;
 
 
@@ -122,7 +126,7 @@ struct meta_type_node {
     dense_map<id_type, meta_conv_node, identity> conv{};
     dense_map<id_type, meta_conv_node, identity> conv{};
     meta_data_node *data{nullptr};
     meta_data_node *data{nullptr};
     meta_func_node *func{nullptr};
     meta_func_node *func{nullptr};
-    void (*dtor)(void *){nullptr};
+    meta_dtor_node dtor{};
 };
 };
 
 
 template<typename... Args>
 template<typename... Args>

+ 1 - 1
test/entt/meta/meta_dtor.cpp

@@ -103,7 +103,7 @@ TEST_F(MetaDtor, ReRegistration) {
 
 
     auto *node = entt::internal::meta_node<clazz_t>::resolve();
     auto *node = entt::internal::meta_node<clazz_t>::resolve();
 
 
-    ASSERT_NE(node->dtor, nullptr);
+    ASSERT_NE(node->dtor.dtor, nullptr);
 
 
     entt::meta<clazz_t>().dtor<&clazz_t::destroy_incr>();
     entt::meta<clazz_t>().dtor<&clazz_t::destroy_incr>();
     entt::resolve<clazz_t>().construct().reset();
     entt::resolve<clazz_t>().construct().reset();