Browse Source

meta: make meta_data_node partially context aware

Michele Caini 3 years ago
parent
commit
c62099969e
3 changed files with 16 additions and 14 deletions
  1. 10 10
      src/entt/meta/factory.hpp
  2. 4 2
      src/entt/meta/meta.hpp
  3. 2 2
      src/entt/meta/node.hpp

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

@@ -104,8 +104,8 @@ class meta_factory {
                 /* this is never static */
                 (std::is_member_object_pointer_v<decltype(value_list_element_v<Index, Setter>)> && ... && std::is_const_v<std::remove_reference_t<data_type>>) ? internal::meta_traits::is_const : internal::meta_traits::is_none,
                 Setter::size,
-                &internal::resolve_TODO<std::remove_cv_t<std::remove_reference_t<data_type>>>,
-                &meta_arg_TODO<type_list<type_list_element_t<type_list_element_t<Index, args_type>::size != 1u, type_list_element_t<Index, args_type>>...>>,
+                &internal::resolve<std::remove_cv_t<std::remove_reference_t<data_type>>>,
+                &meta_arg<type_list<type_list_element_t<type_list_element_t<Index, args_type>::size != 1u, type_list_element_t<Index, args_type>>...>>,
                 +[](meta_handle instance, meta_any value) { return (meta_setter<Type, value_list_element_v<Index, Setter>>(*instance.operator->(), value.as_ref()) || ...); },
                 &meta_getter<Type, Getter, Policy>});
 
@@ -330,8 +330,8 @@ public:
                     /* this is never static */
                     std::is_const_v<data_type> ? internal::meta_traits::is_const : internal::meta_traits::is_none,
                     1u,
-                    &internal::resolve_TODO<std::remove_const_t<data_type>>,
-                    &meta_arg_TODO<type_list<std::remove_const_t<data_type>>>,
+                    &internal::resolve<std::remove_const_t<data_type>>,
+                    &meta_arg<type_list<std::remove_const_t<data_type>>>,
                     &meta_setter<Type, Data>,
                     &meta_getter<Type, Data, Policy>});
 
@@ -345,8 +345,8 @@ public:
                 internal::meta_data_node{
                     ((std::is_same_v<Type, std::remove_const_t<data_type>> || std::is_const_v<data_type>) ? internal::meta_traits::is_const : internal::meta_traits::is_none) | internal::meta_traits::is_static,
                     1u,
-                    &internal::resolve_TODO<std::remove_const_t<data_type>>,
-                    &meta_arg_TODO<type_list<std::remove_const_t<data_type>>>,
+                    &internal::resolve<std::remove_const_t<data_type>>,
+                    &meta_arg<type_list<std::remove_const_t<data_type>>>,
                     &meta_setter<Type, Data>,
                     &meta_getter<Type, Data, Policy>});
 
@@ -389,8 +389,8 @@ public:
                     /* this is never static */
                     internal::meta_traits::is_const,
                     0u,
-                    &internal::resolve_TODO<std::remove_cv_t<std::remove_reference_t<data_type>>>,
-                    &meta_arg_TODO<type_list<>>,
+                    &internal::resolve<std::remove_cv_t<std::remove_reference_t<data_type>>>,
+                    &meta_arg<type_list<>>,
                     &meta_setter<Type, Setter>,
                     &meta_getter<Type, Getter, Policy>});
 
@@ -405,8 +405,8 @@ public:
                     /* this is never static nor const */
                     internal::meta_traits::is_none,
                     1u,
-                    &internal::resolve_TODO<std::remove_cv_t<std::remove_reference_t<data_type>>>,
-                    &meta_arg_TODO<type_list<type_list_element_t<args_type::size != 1u, args_type>>>,
+                    &internal::resolve<std::remove_cv_t<std::remove_reference_t<data_type>>>,
+                    &meta_arg<type_list<type_list_element_t<args_type::size != 1u, args_type>>>,
                     &meta_setter<Type, Setter>,
                     &meta_getter<Type, Getter, Policy>});
 

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

@@ -1478,11 +1478,13 @@ inline bool meta_any::assign(meta_any &&other) {
 }
 
 [[nodiscard]] inline meta_type meta_data::type() const noexcept {
-    return node->type();
+    const auto &ctx_TODO = internal::meta_context::from(locator<meta_ctx>::value_or());
+    return node->type(ctx_TODO);
 }
 
 [[nodiscard]] inline meta_type meta_data::arg(const size_type index) const noexcept {
-    return index < arity() ? node->arg(index) : meta_type{};
+    const auto &ctx_TODO = locator<meta_ctx>::value_or();
+    return index < arity() ? node->arg(index, ctx_TODO) : meta_type{};
 }
 
 [[nodiscard]] inline meta_type meta_func::ret() const noexcept {

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

@@ -79,8 +79,8 @@ struct meta_data_node {
 
     meta_traits traits{meta_traits::is_none};
     size_type arity{0u};
-    meta_type_node (*type)() noexcept {};
-    meta_type (*arg)(const size_type) noexcept {};
+    meta_type_node (*type)(const meta_context &) noexcept {};
+    meta_type (*arg)(const size_type, const meta_ctx &) noexcept {};
     bool (*set)(meta_handle, meta_any){};
     meta_any (*get)(meta_handle){};
     dense_map<id_type, meta_prop_node, identity> prop{};