Browse Source

meta: review meta_handle

Michele Caini 5 years ago
parent
commit
ed168015bf
2 changed files with 13 additions and 11 deletions
  1. 6 6
      src/entt/meta/factory.hpp
  2. 7 5
      src/entt/meta/meta.hpp

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

@@ -83,7 +83,7 @@ template<typename Type, auto Data>
         using helper_type = meta_function_helper_t<decltype(Data)>;
         using data_type = std::tuple_element_t<!std::is_member_function_pointer_v<decltype(Data)>, typename helper_type::args_type>;
 
-        if(auto * const clazz = instance.ref().try_cast<Type>(); clazz) {
+        if(auto * const clazz = instance->try_cast<Type>(); clazz) {
             if(auto * const direct = value.try_cast<data_type>(); direct || value.convert<data_type>()) {
                 std::invoke(Data, *clazz, direct ? *direct : value.cast<data_type>());
                 accepted = true;
@@ -93,7 +93,7 @@ template<typename Type, auto Data>
         using data_type = std::remove_cv_t<std::remove_reference_t<decltype(std::declval<Type>().*Data)>>;
 
         if constexpr(!std::is_array_v<data_type>) {
-            if(auto * const clazz = instance.ref().try_cast<Type>(); clazz) {
+            if(auto * const clazz = instance->try_cast<Type>(); clazz) {
                 if(auto * const direct = value.try_cast<data_type>(); direct || value.convert<data_type>()) {
                     std::invoke(Data, clazz) = (direct ? *direct : value.cast<data_type>());
                     accepted = true;
@@ -129,13 +129,13 @@ template<typename Type, auto Data, typename Policy>
     };
 
     if constexpr(std::is_function_v<std::remove_reference_t<std::remove_pointer_t<decltype(Data)>>> || std::is_member_function_pointer_v<decltype(Data)>) {
-        auto * const clazz = instance.ref().try_cast<Type>();
+        auto * const clazz = instance->try_cast<Type>();
         return clazz ? dispatch(std::invoke(Data, *clazz)) : meta_any{};
     } else if constexpr(std::is_member_object_pointer_v<decltype(Data)>) {
         if constexpr(std::is_array_v<std::remove_cv_t<std::remove_reference_t<decltype(std::declval<Type>().*Data)>>>) {
             return meta_any{};
         } else {
-            auto * const clazz = instance.ref().try_cast<Type>();
+            auto * const clazz = instance->try_cast<Type>();
             return clazz ? dispatch(std::invoke(Data, clazz)) : meta_any{};
         }
     } else if constexpr(std::is_pointer_v<std::decay_t<decltype(Data)>>) {
@@ -179,7 +179,7 @@ template<typename Type, auto Candidate, typename Policy, std::size_t... Indexes>
     if constexpr(std::is_function_v<std::remove_reference_t<std::remove_pointer_t<decltype(Candidate)>>>) {
         return (std::get<Indexes>(direct) && ...) ? dispatch(std::get<Indexes>(direct)...) : meta_any{};
     } else {
-        auto * const clazz = instance.ref().try_cast<Type>();
+        auto * const clazz = instance->try_cast<Type>();
         return (clazz && (std::get<Indexes>(direct) && ...)) ? dispatch(clazz, std::get<Indexes>(direct)...) : meta_any{};
     }
 }
@@ -679,7 +679,7 @@ public:
             &internal::meta_info<std::conditional_t<std::is_same_v<Policy, as_void_t>, void, typename helper_type::return_type>>::resolve,
             &helper_type::arg,
             [](meta_handle instance, meta_any *args) {
-                return internal::invoke<Type, Candidate, Policy>(std::move(instance), args, std::make_index_sequence<std::tuple_size_v<typename helper_type::args_type>>{});
+                return internal::invoke<Type, Candidate, Policy>(*instance, args, std::make_index_sequence<std::tuple_size_v<typename helper_type::args_type>>{});
             }
         };
 

+ 7 - 5
src/entt/meta/meta.hpp

@@ -712,14 +712,16 @@ struct meta_handle {
     }
 
     /*! @copydoc meta_any::operator* */
-    [[nodiscard]] meta_any ref() const {
+    [[nodiscard]] meta_any operator*() const {
         return any;
     }
 
-    /*! @copydoc meta_any::operator* */
-    [[deprecated("use ::ref instead")]]
-    [[nodiscard]] meta_any operator*() const {
-        return any;
+    /**
+     * @brief Arrow operator for accessing the contained opaque object.
+     * @return A meta any that shares a reference to an unmanaged object.
+     */
+    [[nodiscard]] meta_any * operator->() {
+        return &any;
     }
 
 private: