Sfoglia il codice sorgente

any: reduce vtable size, simplify ref/cref creation

Michele Caini 5 anni fa
parent
commit
0ce9122449
1 ha cambiato i file con 2 aggiunte e 4 eliminazioni
  1. 2 4
      src/entt/core/any.hpp

+ 2 - 4
src/entt/core/any.hpp

@@ -70,11 +70,9 @@ class basic_any {
                 case operation::CADDR:
                     return instance;
                 case operation::REF:
-                    static_cast<basic_any *>(to)->instance = instance;
                     static_cast<basic_any *>(to)->vtable = basic_vtable<Type &>;
                     break;
                 case operation::CREF:
-                    static_cast<basic_any *>(to)->instance = instance;
                     static_cast<basic_any *>(to)->vtable = basic_vtable<const Type &>;
                     break;
                 case operation::TYPE:
@@ -107,11 +105,9 @@ class basic_any {
                 case operation::CADDR:
                     return instance;
                 case operation::REF:
-                    static_cast<basic_any *>(to)->instance = instance;
                     static_cast<basic_any *>(to)->vtable = basic_vtable<Type &>;
                     break;
                 case operation::CREF:
-                    static_cast<basic_any *>(to)->instance = instance;
                     static_cast<basic_any *>(to)->vtable = basic_vtable<const std::remove_reference_t<Type> &>;
                     break;
                 case operation::TYPE:
@@ -337,6 +333,7 @@ public:
      */
     [[nodiscard]] basic_any as_ref() ENTT_NOEXCEPT {
         basic_any ref{};
+        ref.instance = vtable(operation::CADDR, *this, nullptr);
         vtable(operation::REF, *this, &ref);
         return ref;
     }
@@ -344,6 +341,7 @@ public:
     /*! @copydoc as_ref */
     [[nodiscard]] basic_any as_ref() const ENTT_NOEXCEPT {
         basic_any ref{};
+        ref.instance = vtable(operation::CADDR, *this, nullptr);
         vtable(operation::CREF, *this, &ref);
         return ref;
     }