meta: turned an useless function into a constexpr value

This commit is contained in:
Michele Caini
2021-09-07 08:54:34 +02:00
parent 59589b6a71
commit fc6bda5cd8
2 changed files with 9 additions and 11 deletions

View File

@@ -125,9 +125,7 @@ struct basic_meta_associative_container_traits {
using iterator = meta_associative_container::iterator;
using size_type = std::size_t;
[[nodiscard]] static constexpr bool key_only() ENTT_NOEXCEPT {
return is_key_only_meta_associative_container<Type>::value;
}
static constexpr auto key_only = is_key_only_meta_associative_container<Type>::value;
[[nodiscard]] static size_type size(const any &container) ENTT_NOEXCEPT {
return any_cast<const Type &>(container).size();
@@ -144,18 +142,18 @@ struct basic_meta_associative_container_traits {
[[nodiscard]] static iterator begin(any &container) {
if(auto * const cont = any_cast<Type>(&container); cont) {
return iterator{std::integral_constant<bool, key_only()>{}, cont->begin()};
return iterator{std::integral_constant<bool, key_only>{}, cont->begin()};
}
return iterator{std::integral_constant<bool, key_only()>{}, std::begin(any_cast<const Type &>(container))};
return iterator{std::integral_constant<bool, key_only>{}, std::begin(any_cast<const Type &>(container))};
}
[[nodiscard]] static iterator end(any &container) {
if(auto * const cont = any_cast<Type>(&container); cont) {
return iterator{std::integral_constant<bool, key_only()>{}, cont->end()};
return iterator{std::integral_constant<bool, key_only>{}, cont->end()};
}
return iterator{std::integral_constant<bool, key_only()>{}, std::end(any_cast<const Type &>(container))};
return iterator{std::integral_constant<bool, key_only>{}, std::end(any_cast<const Type &>(container))};
}
[[nodiscard]] static bool insert(any &container, meta_any &key, [[maybe_unused]] meta_any &value) {
@@ -183,10 +181,10 @@ struct basic_meta_associative_container_traits {
[[nodiscard]] static iterator find(any &container, meta_any &key) {
if(key.allow_cast<const typename Type::key_type &>()) {
if(auto * const cont = any_cast<Type>(&container); cont) {
return iterator{std::integral_constant<bool, key_only()>{}, cont->find(key.cast<const typename Type::key_type &>())};
return iterator{std::integral_constant<bool, key_only>{}, cont->find(key.cast<const typename Type::key_type &>())};
}
return iterator{std::integral_constant<bool, key_only()>{}, any_cast<const Type &>(container).find(key.cast<const typename Type::key_type &>())};
return iterator{std::integral_constant<bool, key_only>{}, any_cast<const Type &>(container).find(key.cast<const typename Type::key_type &>())};
}
return {};

View File

@@ -104,7 +104,7 @@ public:
*/
template<typename Type>
meta_associative_container(std::in_place_type_t<Type>, any instance) ENTT_NOEXCEPT
: key_only_container{meta_associative_container_traits<Type>::key_only()},
: key_only_container{meta_associative_container_traits<Type>::key_only},
key_type_node{internal::meta_node<std::remove_const_t<std::remove_reference_t<typename Type::key_type>>>::resolve()},
mapped_type_node{nullptr},
value_type_node{internal::meta_node<std::remove_const_t<std::remove_reference_t<typename Type::value_type>>>::resolve()},
@@ -117,7 +117,7 @@ public:
find_fn{&meta_associative_container_traits<Type>::find},
storage{std::move(instance)}
{
if constexpr(!meta_associative_container_traits<Type>::key_only()) {
if constexpr(!meta_associative_container_traits<Type>::key_only) {
mapped_type_node = internal::meta_node<std::remove_const_t<std::remove_reference_t<typename Type::mapped_type>>>::resolve();
}
}