29 #ifndef RTTR_ARRAY_RANGE_H_ 30 #define RTTR_ARRAY_RANGE_H_ 32 #include "rttr/detail/base/core_prerequisites.h" 47 struct default_predicate;
62 template<
typename T,
typename Predicate = detail::default_predicate<T>>
88 template<
typename DataType>
89 class array_iterator_base
92 using self_type = array_iterator_base<DataType>;
94 using reference = DataType&;
95 using pointer = DataType*;
96 using iterator_category = std::forward_iterator_tag;
97 using difference_type = std::ptrdiff_t;
102 array_iterator_base& operator=(
const self_type& other);
106 array_iterator_base();
116 template<
typename DataType>
117 class array_iterator :
public array_iterator_base<DataType>
120 using self_type = array_iterator<DataType>;
121 using reference =
typename array_iterator_base<DataType>::reference;
122 using pointer =
typename array_iterator_base<DataType>::pointer;
125 array_iterator(
const array_iterator<DataType>& other);
128 reference operator*()
const;
129 pointer operator->();
131 self_type& operator++();
132 self_type operator++(
int index);
135 array_iterator(
typename array_iterator_base<DataType>::pointer ptr,
143 template<
typename DataType>
144 class array_reverse_iterator :
public array_iterator_base<DataType>
147 using self_type = array_reverse_iterator<DataType>;
148 using reference =
typename array_iterator_base<DataType>::reference;
149 using pointer =
typename array_iterator_base<DataType>::pointer;
151 array_reverse_iterator();
152 array_reverse_iterator(
const array_reverse_iterator<DataType>& other);
154 reference operator*()
const;
155 pointer operator->();
157 self_type& operator++();
158 self_type operator++(
int index);
161 array_reverse_iterator(
typename array_iterator_base<DataType>::pointer ptr,
319 template<
typename DataType>
320 void next(array_iterator<DataType>& itr)
const;
322 template<
typename DataType>
323 void prev(array_reverse_iterator<DataType>& itr)
const;
329 const T*
const m_begin;
330 const T*
const m_end;
331 const Predicate m_pred;
338 #include "rttr/detail/impl/array_range_impl.h" 340 #endif // RTTR_ARRAY_RANGE_H_ Definition: access_levels.h:33
array_reverse_iterator< const T > const_reverse_iterator
A constant forward iterator that reverses the direction.
Definition: array_range.h:175
constexpr bool operator==(basic_string_view< CharT, Traits > lhs, basic_string_view< CharT, Traits > rhs) noexcept
Compares the two views lhs and rhs.
T value_type
Definition: array_range.h:66
The array_range class provides a view into an underlying data structure with lower and upper limits...
Definition: array_range.h:63
array_iterator< const T > const_iterator
A constant forward iterator.
Definition: array_range.h:170
constexpr bool operator!=(basic_string_view< CharT, Traits > lhs, basic_string_view< CharT, Traits > rhs) noexcept
Compares the two views lhs and rhs.
std::size_t size_type
Definition: array_range.h:68
array_reverse_iterator< T > reverse_iterator
A forward iterator that reverses the direction.
Definition: array_range.h:173
array_iterator< T > iterator
A forward iterator.
Definition: array_range.h:168
T * bounds_type
Definition: array_range.h:67