1 #ifndef ENTT_ENTITY_ITERATOR_HPP
2 #define ENTT_ENTITY_ITERATOR_HPP
10 #include "../config/config.h"
12 #include "sparse_set.hpp"
24 template<
typename Entity>
25 [[nodiscard]]
static constexpr
bool accept(
const Entity
entity) ENTT_NOEXCEPT {
41 template<
typename Entity>
42 [[nodiscard]]
static constexpr
bool accept(
const Entity) ENTT_NOEXCEPT {
52 template<
typename Policy,
typename It, std::
size_t AllOf, std::
size_t NoneOf>
56 [[nodiscard]]
bool valid()
const {
57 const auto entt = *it;
58 return Policy::accept(
entt)
59 && std::apply([
entt](
const auto *... curr) {
return (curr->contains(
entt) && ...); }, pools)
60 && std::apply([
entt](
const auto *... curr) {
return (!curr->contains(
entt) && ...); }, filter);
64 using difference_type =
typename std::iterator_traits<It>::difference_type;
65 using value_type =
typename std::iterator_traits<It>::value_type;
66 using pointer =
typename std::iterator_traits<It>::pointer;
67 using reference =
typename std::iterator_traits<It>::reference;
68 using iterator_category = std::bidirectional_iterator_tag;
78 view_iterator(It from, It to, It curr, std::array<const basic_common_type *, AllOf> all_of, std::array<const basic_common_type *, NoneOf> none_of) ENTT_NOEXCEPT
79 : first{std::move(from)},
85 if(it != last && !valid()) {
91 while(++it != last && !valid());
97 return ++(*this), orig;
101 while(--it != first && !valid());
107 return operator--(), orig;
110 [[nodiscard]]
bool operator==(
const view_iterator &other)
const ENTT_NOEXCEPT {
111 return other.it == it;
114 [[nodiscard]]
bool operator!=(
const view_iterator &other)
const ENTT_NOEXCEPT {
115 return !(*
this == other);
118 [[nodiscard]] pointer operator->()
const {
122 [[nodiscard]] reference operator*()
const {
123 return *operator->();
130 std::array<const basic_common_type *, AllOf> pools;
131 std::array<const basic_common_type *, NoneOf> filter;
135 template<
typename It>
Basic sparse set implementation.
entity
Default entity identifier.
constexpr tombstone_t tombstone
Compile-time constant for tombstone entities.
Packed storage policy, aimed at faster linear iteration.
Stable storage policy, aimed at pointer stability.