meta: updated resolve function(s)
This commit is contained in:
@@ -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->();
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user