EnTT  3.10.0
iterator.hpp
1 #ifndef ENTT_CORE_ITERATOR_HPP
2 #define ENTT_CORE_ITERATOR_HPP
3 
4 #include <iterator>
5 #include <memory>
6 #include <utility>
7 #include "../config/config.h"
8 
9 namespace entt {
10 
15 template<typename Type>
16 struct input_iterator_pointer final {
18  using pointer = Type *;
19 
22 
25 
31  : value{std::move(val)} {}
32 
38 
44 
49  [[nodiscard]] pointer operator->() ENTT_NOEXCEPT {
50  return std::addressof(value);
51  }
52 
53 private:
54  Type value;
55 };
56 
62 template<typename It, typename Sentinel = It>
63 struct iterable_adaptor final {
65  using value_type = typename std::iterator_traits<It>::value_type;
67  using iterator = It;
69  using sentinel = Sentinel;
70 
72  iterable_adaptor() = default;
73 
80  : first{from},
81  last{to} {}
82 
87  [[nodiscard]] iterator begin() const ENTT_NOEXCEPT {
88  return first;
89  }
90 
96  [[nodiscard]] sentinel end() const ENTT_NOEXCEPT {
97  return last;
98  }
99 
101  [[nodiscard]] iterator cbegin() const ENTT_NOEXCEPT {
102  return begin();
103  }
104 
106  [[nodiscard]] sentinel cend() const ENTT_NOEXCEPT {
107  return end();
108  }
109 
110 private:
111  It first;
112  Sentinel last;
113 };
114 
115 } // namespace entt
116 
117 #endif
EnTT default namespace.
Definition: dense_map.hpp:22
Helper type to use as pointer with input iterators.
Definition: iterator.hpp:16
input_iterator_pointer & operator=(input_iterator_pointer &&)=default
Default move assignment operator.
input_iterator_pointer(input_iterator_pointer &&)=default
Default move constructor.
input_iterator_pointer(const input_iterator_pointer &)=delete
Default copy constructor, deleted on purpose.
pointer operator->()
Access operator for accessing wrapped values.
Definition: iterator.hpp:49
input_iterator_pointer & operator=(const input_iterator_pointer &)=delete
Default copy assignment operator, deleted on purpose.
Type * pointer
Pointer type.
Definition: iterator.hpp:18
input_iterator_pointer(Type &&val)
Constructs a proxy object by move.
Definition: iterator.hpp:30
Utility class to create an iterable object from a pair of iterators.
Definition: iterator.hpp:63
iterator begin() const
Returns an iterator to the beginning.
Definition: iterator.hpp:87
It iterator
Iterator type.
Definition: iterator.hpp:67
iterable_adaptor()=default
Default constructor.
Sentinel sentinel
Sentinel type.
Definition: iterator.hpp:69
sentinel end() const
Returns an iterator to the end.
Definition: iterator.hpp:96
iterator cbegin() const
Returns an iterator to the beginning.
Definition: iterator.hpp:101
sentinel cend() const
Returns an iterator to the end.
Definition: iterator.hpp:106
iterable_adaptor(iterator from, sentinel to)
Creates an iterable object from a pair of iterators.
Definition: iterator.hpp:79
typename std::iterator_traits< It >::value_type value_type
Value type.
Definition: iterator.hpp:65