view: added use<T> to set explicitly the type that should drive all iterations in a multi type view
This commit is contained in:
5
TODO
5
TODO
@@ -17,11 +17,10 @@
|
||||
- ...
|
||||
|
||||
WIP:
|
||||
* remove extended registry::remove, rename it to (basic) erase and document the handle way for extended operations
|
||||
* make view pack work also with groups
|
||||
* document the handle way for extended operations
|
||||
* make view pack work also with groups, add multi-type iterator (not only input iterators)
|
||||
* add exclude-only views to combine with packs
|
||||
* deprecate non-owning groups in favor of owning views and view packs, introduce lazy owning views
|
||||
* split basic_view and view_t like sfinae-friendly class
|
||||
* HP: write documentation for custom storages and views!!
|
||||
* view pack: plain function as an alias for operator|, reverse iterators, rbegin and rend
|
||||
* pagination doesn't work nicely across boundaries probably, give it a look. RO operations are fine, adding components maybe not.
|
||||
|
||||
@@ -318,6 +318,15 @@ public:
|
||||
/*! @brief Reverse iterator type. */
|
||||
using reverse_iterator = view_iterator<typename basic_sparse_set<entity_type>::reverse_iterator>;
|
||||
|
||||
/**
|
||||
* @brief Forces the type to use to drive iterations.
|
||||
* @tparam Comp Type of component to use to drive the iteration.
|
||||
*/
|
||||
template<typename Comp>
|
||||
void use() const ENTT_NOEXCEPT {
|
||||
view = std::get<pool_type<Comp> *>(pools);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Estimates the number of entities iterated by the view.
|
||||
* @return Estimated number of entities iterated by the view.
|
||||
@@ -493,13 +502,13 @@ public:
|
||||
*
|
||||
* @sa each
|
||||
*
|
||||
* @tparam Comp Type of component to use to enforce the iteration order.
|
||||
* @tparam Comp Type of component to use to drive the iteration.
|
||||
* @tparam Func Type of the function object to invoke.
|
||||
* @param func A valid function object.
|
||||
*/
|
||||
template<typename Comp, typename Func>
|
||||
void each(Func func) const {
|
||||
view = std::get<pool_type<Comp> *>(pools);
|
||||
use<Comp>();
|
||||
traverse<Comp>(std::move(func), return_type{});
|
||||
}
|
||||
|
||||
@@ -531,12 +540,12 @@ public:
|
||||
*
|
||||
* @sa each
|
||||
*
|
||||
* @tparam Comp Type of component to use to enforce the iteration order.
|
||||
* @tparam Comp Type of component to use to drive the iteration.
|
||||
* @return An iterable object to use to _visit_ the view.
|
||||
*/
|
||||
template<typename Comp>
|
||||
[[nodiscard]] iterable_view each() const ENTT_NOEXCEPT {
|
||||
view = std::get<pool_type<Comp> *>(pools);
|
||||
use<Comp>();
|
||||
return iterable_view{*this};
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user