Browse Source

meta: generic begin/end for meta containers

Michele Caini 4 years ago
parent
commit
5466039c1a
1 changed files with 7 additions and 7 deletions
  1. 7 7
      src/entt/meta/container.hpp

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

@@ -29,7 +29,7 @@ template<typename, typename = void>
 struct is_dynamic_sequence_container: std::false_type {};
 
 template<typename Type>
-struct is_dynamic_sequence_container<Type, std::void_t<decltype(&Type::clear)>>: std::true_type {};
+struct is_dynamic_sequence_container<Type, std::void_t<decltype(&Type::reserve)>>: std::true_type {};
 
 
 template<typename, typename = void>
@@ -72,18 +72,18 @@ struct basic_meta_sequence_container_traits {
 
     [[nodiscard]] static iterator begin(any &container) {
         if(auto * const cont = any_cast<Type>(&container); cont) {
-            return iterator{cont->begin()};
+            return iterator{std::begin(*cont)};
         }
 
-        return iterator{any_cast<const Type &>(container).begin()};
+        return iterator{std::begin(any_cast<const Type &>(container))};
     }
 
     [[nodiscard]] static iterator end(any &container) {
         if(auto * const cont = any_cast<Type>(&container); cont) {
-            return iterator{cont->end()};
+            return iterator{std::end(*cont)};
         }
 
-        return iterator{any_cast<const Type &>(container).end()};
+        return iterator{std::end(any_cast<const Type &>(container))};
     }
 
     [[nodiscard]] static iterator insert(any &container, iterator it, meta_any &value) {
@@ -147,7 +147,7 @@ struct basic_meta_associative_container_traits {
             return iterator{std::integral_constant<bool, key_only()>{}, cont->begin()};
         }
 
-        return iterator{std::integral_constant<bool, key_only()>{}, any_cast<const Type &>(container).begin()};
+        return iterator{std::integral_constant<bool, key_only()>{}, std::begin(any_cast<const Type &>(container))};
     }
 
     [[nodiscard]] static iterator end(any &container) {
@@ -155,7 +155,7 @@ struct basic_meta_associative_container_traits {
             return iterator{std::integral_constant<bool, key_only()>{}, cont->end()};
         }
 
-        return iterator{std::integral_constant<bool, key_only()>{}, any_cast<const Type &>(container).end()};
+        return iterator{std::integral_constant<bool, key_only()>{}, std::end(any_cast<const Type &>(container))};
     }
 
     [[nodiscard]] static bool insert(any &container, meta_any &key, meta_any &value) {