view: stop using scoped iterators
This commit is contained in:
@@ -288,7 +288,12 @@ public:
|
||||
* @return An iterator to the first entity of the view.
|
||||
*/
|
||||
[[nodiscard]] iterator begin() const noexcept {
|
||||
return (index != Get) ? iterator{pools[index]->begin(0), pools, filter, index} : iterator{};
|
||||
if(index != Get) {
|
||||
const auto it = (pools[index]->policy() == deletion_policy::swap_only) ? (pools[index]->end() - pools[index]->free_list()) : pools[index]->begin();
|
||||
return iterator{it, pools, filter, index};
|
||||
}
|
||||
|
||||
return iterator{};
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -316,10 +321,10 @@ public:
|
||||
*/
|
||||
[[nodiscard]] entity_type back() const noexcept {
|
||||
if(index != Get) {
|
||||
auto it = pools[index]->rbegin();
|
||||
const auto last = pools[index]->rend(0);
|
||||
for(; it != last && !contains(*it); ++it) {}
|
||||
return it == last ? null : *it;
|
||||
size_type pos{};
|
||||
const size_type last = (pools[index]->policy() == deletion_policy::swap_only) ? pools[index]->free_list() : pools[index]->size();
|
||||
for(; pos != last && !contains((*pools[index])[pos]); ++pos) {}
|
||||
return pos == last ? null : (*pools[index])[pos];
|
||||
}
|
||||
|
||||
return null;
|
||||
@@ -351,7 +356,7 @@ public:
|
||||
[[nodiscard]] bool contains(const entity_type entt) const noexcept {
|
||||
return (index != Get)
|
||||
&& internal::all_of(pools.begin(), pools.end(), entt)
|
||||
&& !(pools[index]->index(entt) > static_cast<size_type>(pools[index]->begin(0).index()))
|
||||
&& ((pools[index]->policy() != deletion_policy::swap_only) || (pools[index]->index(entt) < pools[index]->free_list()))
|
||||
&& internal::none_of(filter.begin(), filter.end(), entt);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user