meta: generic begin/end for meta containers

This commit is contained in:
Michele Caini
2021-08-24 09:48:59 +02:00
parent 74e11117be
commit 5466039c1a

View File

@@ -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) {