1 #ifndef ENTT_META_RANGE_HPP
2 #define ENTT_META_RANGE_HPP
5 #include "internal.hpp"
15 template<
typename Type>
17 struct range_iterator {
18 using difference_type = std::ptrdiff_t;
19 using value_type = Type;
21 using reference = value_type;
22 using iterator_category = std::input_iterator_tag;
23 using node_type =
typename Type::node_type;
25 range_iterator() ENTT_NOEXCEPT =
default;
27 range_iterator(
node_type *head) ENTT_NOEXCEPT
31 range_iterator & operator++() ENTT_NOEXCEPT {
35 range_iterator operator++(
int) ENTT_NOEXCEPT {
36 range_iterator orig = *
this;
37 return ++(*this), orig;
40 [[nodiscard]] reference operator*()
const ENTT_NOEXCEPT {
41 return it.operator->();
44 [[nodiscard]]
bool operator==(
const range_iterator &other)
const ENTT_NOEXCEPT {
45 return other.it == it;
48 [[nodiscard]]
bool operator!=(
const range_iterator &other)
const ENTT_NOEXCEPT {
49 return !(*
this == other);
53 typename internal::meta_range<node_type>::iterator it{};