Go to the documentation of this file.
9 #ifndef EAGINE_ITERATOR_HPP
10 #define EAGINE_ITERATOR_HPP
22 template <
typename T,
typename Derived>
39 explicit constexpr
operator T() const noexcept {
65 Derived res(a.self());
92 Derived res(a.self());
101 return a._value - b._value;
105 constexpr
friend auto
107 return a._value == b._value;
111 constexpr
friend auto
113 return a._value != b._value;
117 constexpr
friend auto
119 return a._value < b._value;
123 constexpr
friend auto
125 return a._value <= b._value;
129 constexpr
friend auto
131 return a._value > b._value;
135 constexpr
friend auto
137 return a._value >= b._value;
143 constexpr
auto self() noexcept -> Derived& {
144 return *
static_cast<Derived*
>(
this);
153 template <
typename T,
typename Derived>
176 template <
typename T>
204 , _transf{std::move(transf)} {}
217 _tempval = _transf(**_base_iter());
225 mutable S _tempval{};
227 constexpr
auto _base_iter() const noexcept -> const _base& {
232 template <
typename Iterator,
typename T,
typename Transform,
typename Derived>
233 class basic_transforming_iterator<Iterator, T, T&, Transform, Derived>
234 :
public basic_selfref_iterator<Iterator, Derived> {
236 using _base = basic_selfref_iterator<Iterator, Derived>;
239 auto _base_iter() const noexcept -> const _base& {
244 constexpr basic_transforming_iterator() =
default;
246 constexpr basic_transforming_iterator(Iterator iter, Transform transf)
248 , _transf{std::move(transf)} {}
251 using reference =
const T&;
252 using pointer =
const T*;
255 return _transf(**_base_iter());
258 constexpr
auto operator*() const -> const T& {
259 return _transf(**_base_iter());
269 template <
typename Iterator,
typename T,
typename S,
typename Transform>
276 transforming_iterator<Iterator, T, S, Transform>> {
293 template <
typename Iterator,
typename T,
typename S,
typename Derived>
299 S (*)(typename std::iterator_traits<Iterator>::reference) noexcept,
305 S (*)(
typename std::iterator_traits<Iterator>::reference) noexcept,
310 :
_base{iter, &_cast} {}
313 static constexpr
auto
314 _cast(
typename std::iterator_traits<Iterator>::reference r) noexcept -> T {
315 return static_cast<T
>(r);
324 template <
typename Iterator,
typename T,
typename S>
330 noexcept_casting_iterator<Iterator, T, S>> {
340 #endif // EAGINE_ITERATOR_HPP
value_type
Value tree value element data type enumeration.
Definition: interface.hpp:27
constexpr friend auto operator-(basic_iterable_type a, difference_type d) noexcept
Difference operator.
Definition: iterator.hpp:91
Common code is placed in this namespace.
Definition: eagine.hpp:21
constexpr friend auto operator>=(basic_iterable_type a, basic_iterable_type b) noexcept
Greater-equal comparison.
Definition: iterator.hpp:136
constexpr auto operator-=(difference_type d) noexcept -> auto &
Subtraction operator.
Definition: iterator.hpp:77
constexpr auto operator++(int) noexcept -> Derived
Post-increment operator.
Definition: iterator.hpp:56
constexpr basic_iterable_type()=default
Default constructor.
constexpr friend auto operator>(basic_iterable_type a, basic_iterable_type b) noexcept
Greater-than comparison.
Definition: iterator.hpp:130
Iterator referencing the wrapped iterable type.
Definition: iterator.hpp:154
Iterator type-casting the referenced elements.
Definition: iterator.hpp:294
constexpr friend auto operator<=(basic_iterable_type a, basic_iterable_type b) noexcept
Less-equal comparison.
Definition: iterator.hpp:124
const Iterator & reference
Alias for reference type.
Definition: iterator.hpp:157
constexpr friend auto operator!=(basic_iterable_type a, basic_iterable_type b) noexcept
Non-equality comparison.
Definition: iterator.hpp:112
Default instantiation of basic_noexcept_casting_iterator.
Definition: iterator.hpp:325
constexpr auto operator*() const noexcept -> const T &
Dereference operator.
Definition: iterator.hpp:168
Default instantiation of basic_selfref_iterator.
Definition: iterator.hpp:177
constexpr basic_iterable_type(T value) noexcept
Initializing constructor.
Definition: iterator.hpp:35
decltype(std::declval< Iterator >() - std::declval< Iterator >()) difference_type
Alias for the difference type.
Definition: iterator.hpp:29
constexpr auto operator++() noexcept -> auto &
Pre-increment operator.
Definition: iterator.hpp:44
constexpr auto operator--() noexcept -> auto &
Pre-decrement operator.
Definition: iterator.hpp:71
const Iterator * pointer
Alias for pointer type.
Definition: iterator.hpp:160
constexpr friend auto operator-(basic_iterable_type a, basic_iterable_type b) noexcept -> difference_type
Subtraction operator.
Definition: iterator.hpp:99
static auto operator*(const MC1 &mc1, const MC2 &mc2) noexcept
Multiplication operator for matrix constructors.
Definition: matrix.hpp:588
std::random_access_iterator_tag iterator_category
Iterator caregoty.
Definition: iterator.hpp:163
constexpr friend auto operator<(basic_iterable_type a, basic_iterable_type b) noexcept
Less-than comparison.
Definition: iterator.hpp:118
constexpr friend auto operator+(basic_iterable_type a, difference_type d) noexcept
Addition operator.
Definition: iterator.hpp:64
constexpr auto operator--(int) noexcept -> Derived
Post-decrement operator.
Definition: iterator.hpp:83
Template used in implementation of some iterators.
Definition: iterator.hpp:23
constexpr auto operator+=(difference_type d) noexcept -> auto &
Addition operator.
Definition: iterator.hpp:50
constexpr friend auto operator==(basic_iterable_type a, basic_iterable_type b) noexcept
Equality comparison.
Definition: iterator.hpp:106
Iterator value_type
Alias for the value type.
Definition: iterator.hpp:26