EnTT  3.5.2
range.hpp
1 #ifndef ENTT_META_RANGE_HPP
2 #define ENTT_META_RANGE_HPP
3 
4 
5 #include "internal.hpp"
6 
7 
8 namespace entt {
9 
10 
15 template<typename Type>
16 class meta_range {
17  struct range_iterator {
18  using difference_type = std::ptrdiff_t;
19  using value_type = Type;
20  using pointer = void;
21  using reference = value_type;
22  using iterator_category = std::input_iterator_tag;
23  using node_type = typename Type::node_type;
24 
25  range_iterator() ENTT_NOEXCEPT = default;
26 
27  range_iterator(node_type *head) ENTT_NOEXCEPT
28  : it{head}
29  {}
30 
31  range_iterator & operator++() ENTT_NOEXCEPT {
32  return ++it, *this;
33  }
34 
35  range_iterator operator++(int) ENTT_NOEXCEPT {
36  range_iterator orig = *this;
37  return ++(*this), orig;
38  }
39 
40  [[nodiscard]] reference operator*() const ENTT_NOEXCEPT {
41  return it.operator->();
42  }
43 
44  [[nodiscard]] bool operator==(const range_iterator &other) const ENTT_NOEXCEPT {
45  return other.it == it;
46  }
47 
48  [[nodiscard]] bool operator!=(const range_iterator &other) const ENTT_NOEXCEPT {
49  return !(*this == other);
50  }
51 
52  private:
53  typename internal::meta_range<node_type>::iterator it{};
54  };
55 
56 public:
58  using node_type = typename Type::node_type;
60  using iterator = range_iterator;
61 
63  meta_range() ENTT_NOEXCEPT = default;
64 
70  : node{head}
71  {}
72 
77  [[nodiscard]] iterator begin() const ENTT_NOEXCEPT {
78  return iterator{node};
79  }
80 
86  [[nodiscard]] iterator end() const ENTT_NOEXCEPT {
87  return iterator{};
88  }
89 
90 private:
91  node_type *node{nullptr};
92 };
93 
94 
95 }
96 
97 
98 #endif
entt::meta_range::begin
iterator begin() const noexcept
Returns an iterator to the beginning.
Definition: range.hpp:77
entt::meta_range::iterator
range_iterator iterator
Input iterator type.
Definition: range.hpp:60
entt::meta_range::node_type
typename Type::node_type node_type
Node type.
Definition: range.hpp:58
entt::meta_range
Iterable range to use to iterate all types of meta objects.
Definition: range.hpp:16
entt::meta_range::meta_range
meta_range() noexcept=default
Default constructor.
entt
EnTT default namespace.
Definition: algorithm.hpp:13
entt::meta_range::end
iterator end() const noexcept
Returns an iterator to the end.
Definition: range.hpp:86
entt::operator!=
constexpr bool operator!=(const basic_hashed_string< Char > &lhs, const basic_hashed_string< Char > &rhs) noexcept
Compares two hashed strings.
Definition: hashed_string.hpp:227
entt::operator==
constexpr bool operator==(const Entity entity, null_t other) noexcept
Compares a null object and an entity identifier of any type.
Definition: entity.hpp:158