1
0
Эх сурвалжийг харах

meta: reduce symbol size of meta assoc traits ::iter function

Michele Caini 2 жил өмнө
parent
commit
3047c73952

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

@@ -110,13 +110,13 @@ struct basic_meta_associative_container_traits {
         return true;
     }
 
-    [[nodiscard]] static iterator iter(const meta_ctx &ctx, any &container, const bool as_end) {
-        if(auto *const cont = any_cast<Type>(&container); cont) {
+    [[nodiscard]] static iterator iter(const meta_ctx &ctx, void *container, const void *as_const, const bool as_end) {
+        if(auto *const cont = static_cast<Type *>(container); cont) {
             return iterator{ctx, std::bool_constant<key_only>{}, as_end ? cont->end() : cont->begin()};
         }
 
-        const auto &as_const = any_cast<const Type &>(container);
-        return iterator{ctx, std::bool_constant<key_only>{}, as_end ? as_const.end() : as_const.begin()};
+        auto *const cont = static_cast<const Type *>(as_const);
+        return iterator{ctx, std::bool_constant<key_only>{}, as_end ? cont->end() : cont->begin()};
     }
 
     [[nodiscard]] static size_type insert_or_erase(any &container, meta_any &key, meta_any &value) {

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

@@ -143,7 +143,7 @@ private:
     internal::meta_type_node (*value_type_node)(const internal::meta_context &){};
     size_type (*size_fn)(const void *) noexcept {};
     bool (*clear_fn)(void *){};
-    iterator (*iter_fn)(const meta_ctx &, any &, const bool){};
+    iterator (*iter_fn)(const meta_ctx &, void *, const void *, const bool){};
     size_type (*insert_or_erase_fn)(any &, meta_any &, meta_any &){};
     iterator (*find_fn)(const meta_ctx &, void *, const void *, meta_any &){};
     any storage{};
@@ -1958,12 +1958,12 @@ inline bool meta_associative_container::clear() {
 
 /*! @copydoc meta_sequence_container::begin */
 [[nodiscard]] inline meta_associative_container::iterator meta_associative_container::begin() {
-    return iter_fn(*ctx, storage, false);
+    return iter_fn(*ctx, storage.data(), std::as_const(storage).data(), false);
 }
 
 /*! @copydoc meta_sequence_container::end */
 [[nodiscard]] inline meta_associative_container::iterator meta_associative_container::end() {
-    return iter_fn(*ctx, storage, true);
+    return iter_fn(*ctx, storage.data(), std::as_const(storage).data(), true);
 }
 
 /**