meta: updated resolve function(s)

This commit is contained in:
Michele Caini
2020-06-11 15:40:16 +02:00
parent 9eac3faf3d
commit 6b9e5db3bf

View File

@@ -2,8 +2,10 @@
#define ENTT_META_RESOLVE_HPP
#include <type_traits>
#include <algorithm>
#include "ctx.hpp"
#include "meta.hpp"
#include "range.hpp"
namespace entt {
@@ -20,15 +22,25 @@ template<typename Type>
}
/**
* @brief Returns a range to use to visit all meta types.
* @return An iterable range to use to visit all meta types.
*/
inline meta_range<meta_type> resolve() {
return *internal::meta_context::global();
}
/**
* @brief Iterates all the reflected types.
* @tparam Op Type of the function object to invoke.
* @param op A valid function object.
*/
template<typename Op>
[[deprecated("use resolve() and entt::meta_range<meta_type> instead")]]
void resolve(Op op) {
for(auto &&curr: internal::meta_range{*internal::meta_context::global()}) {
op(meta_type{&curr});
for(auto curr: resolve()) {
op(curr);
}
}
@@ -40,10 +52,10 @@ void resolve(Op op) {
* @return The first meta type satisfying the condition, if any.
*/
template<typename Func>
[[deprecated("use std::find_if and entt::meta_range<meta_type> instead")]]
[[nodiscard]] meta_type resolve_if(Func func) ENTT_NOEXCEPT {
internal::meta_range range{*internal::meta_context::global()};
const auto it = std::find_if(range.cbegin(), range.cend(), [&func](const auto &curr) { return func(meta_type{&curr}); });
return it == range.cend() ? nullptr : it.operator->();
return std::find_if(range.cbegin(), range.cend(), [&func](const auto &curr) { return func(meta_type{&curr}); }).operator->();
}
@@ -53,7 +65,8 @@ template<typename Func>
* @return The meta type associated with the given identifier, if any.
*/
[[nodiscard]] inline meta_type resolve_id(const id_type id) ENTT_NOEXCEPT {
return resolve_if([id](const auto type) { return type.id() == id; });
internal::meta_range range{*internal::meta_context::global()};
return std::find_if(range.cbegin(), range.cend(), [id](const auto &curr) { return curr.id == id; }).operator->();
}
@@ -63,7 +76,8 @@ template<typename Func>
* @return The meta type associated with the given type id, if any.
*/
[[nodiscard]] inline meta_type resolve_type(const id_type id) ENTT_NOEXCEPT {
return resolve_if([id](const auto type) { return type.type_id() == id; });
internal::meta_range range{*internal::meta_context::global()};
return std::find_if(range.cbegin(), range.cend(), [id](const auto &curr) { return curr.type_id == id; }).operator->();
}