31#ifndef ETL_ITERATOR_INCLUDED
32#define ETL_ITERATOR_INCLUDED
39#if ETL_USING_STL || defined(ETL_IN_UNIT_TEST)
64 typedef typename TIterator::iterator_category iterator_category;
65 typedef typename TIterator::value_type value_type;
66 typedef typename TIterator::difference_type difference_type;
67 typedef typename TIterator::pointer pointer;
68 typedef typename TIterator::reference reference;
75 typedef ETL_OR_STD::random_access_iterator_tag iterator_category;
78 typedef typename etl::remove_cv<T>::type* pointer;
86 typedef ETL_OR_STD::random_access_iterator_tag iterator_category;
89 typedef const typename etl::remove_cv<T>::type* pointer;
90 typedef const T& reference;
95 template <
typename TIterator,
typename TDistance>
96 ETL_CONSTEXPR14
void advance_helper(
TIterator& itr,
TDistance n, ETL_OR_STD::output_iterator_tag)
104 template <
typename TIterator,
typename TDistance>
105 ETL_CONSTEXPR14
void advance_helper(
TIterator& itr,
TDistance n, ETL_OR_STD::forward_iterator_tag)
113 template <
typename TIterator,
typename TDistance>
114 ETL_CONSTEXPR14
void advance_helper(
TIterator& itr,
TDistance n, ETL_OR_STD::bidirectional_iterator_tag)
132 template <
typename TIterator,
typename TDistance>
133 ETL_CONSTEXPR14
void advance_helper(
TIterator& itr,
TDistance n, ETL_OR_STD::random_access_iterator_tag)
138 template <
typename TIterator,
typename TDistance>
141 typedef typename etl::iterator_traits<TIterator>::iterator_category
tag;
143 advance_helper(itr,
n,
tag());
148 template<
typename TIterator>
149 ETL_CONSTEXPR14
typename etl::iterator_traits<TIterator>::difference_type distance_helper(
TIterator first,
TIterator last, ETL_OR_STD::input_iterator_tag)
151 typename etl::iterator_traits<TIterator>::difference_type d = 0;
153 while (first != last)
162 template<
typename TIterator>
163 ETL_CONSTEXPR14
typename etl::iterator_traits<TIterator>::difference_type distance_helper(
TIterator first,
TIterator last, ETL_OR_STD::forward_iterator_tag)
165 typename etl::iterator_traits<TIterator>::difference_type d = 0;
167 while (first != last)
176 template<
typename TIterator>
177 ETL_CONSTEXPR14
typename etl::iterator_traits<TIterator>::difference_type distance_helper(
TIterator first,
TIterator last, ETL_OR_STD::bidirectional_iterator_tag)
179 typename etl::iterator_traits<TIterator>::difference_type d = 0;
181 while (first != last)
190 template<
typename TIterator>
191 ETL_CONSTEXPR14
typename etl::iterator_traits<TIterator>::difference_type distance_helper(
TIterator first,
TIterator last, ETL_OR_STD::random_access_iterator_tag)
196 template<
typename TIterator>
197 ETL_CONSTEXPR14
typename etl::iterator_traits<TIterator>::difference_type distance(
TIterator first,
TIterator last)
199 typedef typename etl::iterator_traits<TIterator>::iterator_category
tag;
201 return distance_helper(first, last,
tag());
206 template<
typename TIterator>
207 ETL_CONSTEXPR14
TIterator prev(
TIterator itr,
typename etl::iterator_traits<TIterator>::difference_type
n = 1)
209 etl::advance(itr, -
n);
216 template<
typename TIterator>
217 ETL_CONSTEXPR14
TIterator next(
TIterator itr,
typename etl::iterator_traits<TIterator>::difference_type
n = 1)
219 etl::advance(itr,
n);
226 template <
typename TIterator>
231 typedef typename iterator_traits<TIterator>::iterator_category iterator_category;
232 typedef typename iterator_traits<TIterator>::value_type value_type;
233 typedef typename iterator_traits<TIterator>::difference_type difference_type;
234 typedef typename iterator_traits<TIterator>::pointer pointer;
235 typedef typename iterator_traits<TIterator>::reference reference;
249 template <
typename TOther>
251 : current(
other.base())
255 template<
class TOther>
258 current =
other.base();
268 ETL_NODISCARD ETL_CONSTEXPR14 reference operator*()
const
275 ETL_NODISCARD ETL_CONSTEXPR14 pointer operator->()
const
326 ETL_NODISCARD ETL_CONSTEXPR14
reverse_iterator operator+(
const difference_type offset)
const
331 ETL_NODISCARD ETL_CONSTEXPR14
reverse_iterator operator-(
const difference_type offset)
const
336 ETL_NODISCARD ETL_CONSTEXPR14 reference operator[](
const difference_type offset)
const
338 return (*(*
this + offset));
346 template <
typename TIterator>
349 return lhs.base() ==
rhs.base();
352 template <
typename TIterator>
358 template <
typename TIterator>
361 return rhs.base() <
lhs.base();
364 template <
typename TIterator>
370 template <
typename TIterator>
376 template <
typename TIterator>
382 template <
typename TIterator>
385 return rhs.base() -
lhs.base();
388 template <
typename TIterator,
class TDifference>
391 return itr.operator +(
n);
397 template <
typename TCategory,
typename T,
typename TDistance = ptrdiff_t,
typename TPo
inter = T* ,
typename TReference = T& >
400 typedef T value_type;
410 template <
typename TIterator>
415 typedef typename iterator_traits<TIterator>::iterator_category iterator_category;
416 typedef typename iterator_traits<TIterator>::value_type value_type;
417 typedef typename iterator_traits<TIterator>::difference_type difference_type;
420 typedef value_type&& reference;
431 template <
typename U>
433 : current(itr.base())
437 template <
typename U>
440 current = itr.current;
444 iterator_type base()
const
449 pointer operator ->()
const
456 return etl::move(*current);
507 reference operator [](difference_type
n)
const
509 return etl::move(current[
n]);
517 template <
typename TIterator>
521 return lhs.base() ==
rhs.base();
524 template <
typename TIterator>
531 template <
typename TIterator>
535 return lhs.base() <
rhs.base();
538 template <
typename TIterator>
545 template <
typename TIterator>
552 template <
typename TIterator>
559 template <
typename TIterator>
566 template <
typename TIterator1,
typename TIterator2 >
570 return lhs.base() -
rhs.base();
573 template <
typename TIterator>
588 template <
typename TContainer>
608 container->push_back(value);
619 container->push_back(etl::move(value));
657 template <
typename TContainer>
672 template <
typename TContainer>
692 container->push_front(value);
702 container->push_front(etl::move(value));
739 template <
typename TContainer>
754 template <
typename TContainer>
774 container->push(value);
785 container->push(etl::move(value));
823 template <
typename TContainer>
834 template <
typename T>
840 template <
typename T>
843 template <
typename T>
849 template <
typename T>
852 template <
typename T>
858 template <
typename T>
861 template <
typename T>
867 template <
typename T>
871 template <
typename T>
877 template <
typename T>
880 template <
typename T>
886 template <
typename T>
889 template <
typename T>
898 template <
typename T>
901 template <
typename T>
910 template <
typename T>
913 template <
typename T>
921 template <
typename T>
924 template <
typename T>
931 template <
typename T>
935 template <
typename T>
942 template <
typename T>
946 template <
typename T>
953 template <
typename T>
956#if ETL_NOT_USING_STL || ETL_CPP11_NOT_SUPPORTED
961 template<
typename TContainer>
964 return container.begin();
971 template<
typename TContainer>
974 return container.begin();
981 template<
typename TContainer>
984 return container.cbegin();
991 template<
typename TContainer>
994 return container.end();
1001 template<
typename TContainer>
1002 ETL_CONSTEXPR
typename TContainer::const_iterator
end(
const TContainer& container)
1004 return container.end();
1011 template<
typename TContainer>
1014 return container.cend();
1021 template<
typename TValue,
size_t Array_Size>
1031 template<
typename TValue,
size_t Array_Size>
1041 template<
typename TValue,
size_t Array_Size>
1051 template<
typename TValue,
size_t Array_Size>
1054 return &data[Array_Size];
1061 template<
typename TValue,
size_t Array_Size>
1064 return &data[Array_Size];
1071 template<
typename TValue,
size_t Array_Size>
1074 return &data[Array_Size];
1078#if ETL_NOT_USING_STL || ETL_CPP14_NOT_SUPPORTED
1083 template<
typename TContainer>
1086 return container.rbegin();
1093 template<
typename TContainer>
1096 return container.rbegin();
1103 template<
typename TContainer>
1106 return container.crbegin();
1113 template<
typename TContainer>
1116 return container.rend();
1123 template<
typename TContainer>
1124 ETL_CONSTEXPR
typename TContainer::const_reverse_iterator
rend(
const TContainer& container)
1126 return container.rend();
1133 template<
typename TContainer>
1134 ETL_CONSTEXPR
typename TContainer::const_reverse_iterator
crend(
const TContainer& container)
1136 return container.crend();
1143 template<
typename TValue,
size_t Array_Size>
1146 return ETL_OR_STD::reverse_iterator<TValue*>(&data[Array_Size]);
1153 template<
typename TValue,
size_t Array_Size>
1154 ETL_CONSTEXPR ETL_OR_STD::reverse_iterator<const TValue*>
crbegin(
const TValue(&data)[Array_Size])
1156 return ETL_OR_STD::reverse_iterator<const TValue*>(&data[Array_Size]);
1163 template<
typename TValue,
size_t Array_Size>
1164 ETL_CONSTEXPR ETL_OR_STD::reverse_iterator<TValue*>
rend(
TValue(&data)[Array_Size])
1166 return ETL_OR_STD::reverse_iterator<TValue*>(&data[0]);
1173 template<
typename TValue,
size_t Array_Size>
1174 ETL_CONSTEXPR ETL_OR_STD::reverse_iterator<const TValue*>
crend(
const TValue(&data)[Array_Size])
1176 return ETL_OR_STD::reverse_iterator<const TValue*>(&data[0]);
1180#if ETL_NOT_USING_STL || ETL_CPP17_NOT_SUPPORTED
1186 template<
typename TContainer>
1189 return container.size();
1196 template<
typename TValue,
size_t Array_Size>
1197 ETL_CONSTEXPR
size_t size(
TValue(&)[Array_Size])
1210 template <
typename T,
size_t Array_Size>
1213#define ETL_ARRAY_SIZE(a) sizeof(etl::array_size(a))
Turns assignment into push_back.
Definition iterator.h:590
ETL_CONSTEXPR14 back_insert_iterator & operator++()
Pre-increment operator.
Definition iterator.h:636
ETL_CONSTEXPR14 back_insert_iterator(TContainer &c)
Constructor.
Definition iterator.h:598
ETL_CONSTEXPR14 back_insert_iterator & operator=(const typename TContainer::value_type &value)
Assignment operator.
Definition iterator.h:606
ETL_NODISCARD ETL_CONSTEXPR14 back_insert_iterator & operator*()
Dereference operator.
Definition iterator.h:628
Turns assignment into a push_front.
Definition iterator.h:674
ETL_CONSTEXPR14 front_insert_iterator(TContainer &c)
Constructor.
Definition iterator.h:682
ETL_CONSTEXPR14 front_insert_iterator & operator++()
Pre-increment operator.
Definition iterator.h:718
ETL_NODISCARD ETL_CONSTEXPR14 front_insert_iterator & operator*()
Dereference operator.
Definition iterator.h:710
ETL_CONSTEXPR14 front_insert_iterator & operator=(const typename TContainer::value_type &value)
Assignment operator.
Definition iterator.h:690
Turns assignment into a push.
Definition iterator.h:756
ETL_NODISCARD ETL_CONSTEXPR14 push_insert_iterator & operator*()
Dereference operator.
Definition iterator.h:794
ETL_CONSTEXPR14 push_insert_iterator & operator=(const typename TContainer::value_type &value)
Assignment operator.
Definition iterator.h:772
ETL_CONSTEXPR14 push_insert_iterator & operator++()
Pre-increment operator.
Definition iterator.h:802
ETL_CONSTEXPR14 push_insert_iterator(TContainer &c)
Constructor.
Definition iterator.h:764
Definition iterator.h:228
ETL_CONSTEXPR17 etl::enable_if<!etl::is_same< T, etl::nullptr_t >::value, T >::type * addressof(T &t)
Definition addressof.h:52
is_same
Definition type_traits_generator.h:1080
bitset_ext
Definition absolute.h:38
ETL_CONSTEXPR TContainer::reverse_iterator rend(TContainer &container)
Definition iterator.h:1114
ETL_CONSTEXPR TContainer::const_reverse_iterator crbegin(const TContainer &container)
Definition iterator.h:1104
ETL_CONSTEXPR14 etl::circular_iterator< TIterator > operator-(etl::circular_iterator< TIterator > &lhs, typename etl::iterator_traits< TIterator >::difference_type offset)
Definition circular_iterator.h:672
bool operator>(const etl::array< T, SIZE > &lhs, const etl::array< T, SIZE > &rhs)
Definition array.h:1148
ETL_NODISCARD ETL_CONSTEXPR14 etl::push_insert_iterator< TContainer > push_inserter(TContainer &container)
Creates a push_insert_iterator from a container.
Definition iterator.h:826
ETL_NODISCARD ETL_CONSTEXPR14 etl::front_insert_iterator< TContainer > front_inserter(TContainer &container)
Creates a front_insert_iterator from a container.
Definition iterator.h:742
char(& array_size(T(&array)[Array_Size]))[Array_Size]
ETL_CONSTEXPR TContainer::reverse_iterator rbegin(TContainer &container)
Definition iterator.h:1084
bool operator>=(const etl::array< T, SIZE > &lhs, const etl::array< T, SIZE > &rhs)
Definition array.h:1160
ETL_CONSTEXPR TContainer::const_iterator cbegin(const TContainer &container)
Definition iterator.h:982
bool operator!=(const etl::array< T, SIZE > &lhs, const etl::array< T, SIZE > &rhs)
Definition array.h:1109
ETL_NODISCARD ETL_CONSTEXPR14 etl::back_insert_iterator< TContainer > back_inserter(TContainer &container)
Creates a back_insert_iterator from a container.
Definition iterator.h:660
ETL_CONSTEXPR TContainer::size_type size(const TContainer &container)
Definition iterator.h:1187
bool operator==(const etl::array< T, SIZE > &lhs, const etl::array< T, SIZE > &rhs)
Definition array.h:1097
ETL_CONSTEXPR TContainer::iterator begin(TContainer &container)
Definition iterator.h:962
ETL_CONSTEXPR14 enable_if<!etl::is_specialization< TRep2, etl::chrono::duration >::value, etl::chrono::duration< typenameetl::common_type< TRep1, TRep2 >::type, TPeriod1 > >::type operator*(const etl::chrono::duration< TRep1, TPeriod1 > &lhs, const TRep2 &rhs) ETL_NOEXCEPT
Operator *.
Definition duration.h:545
ETL_CONSTEXPR14 etl::circular_iterator< TIterator > operator+(etl::circular_iterator< TIterator > &lhs, typename etl::iterator_traits< TIterator >::difference_type offset)
Definition circular_iterator.h:659
ETL_NODISCARD ETL_CONSTEXPR14 T round_half_even_unscaled(T value) ETL_NOEXCEPT
Definition scaled_rounding.h:314
ETL_CONSTEXPR TContainer::const_reverse_iterator crend(const TContainer &container)
Definition iterator.h:1134
ETL_CONSTEXPR TContainer::const_iterator cend(const TContainer &container)
Definition iterator.h:1012
bool operator<(const etl::array< T, SIZE > &lhs, const etl::array< T, SIZE > &rhs)
Definition array.h:1121
bool operator<=(const etl::array< T, SIZE > &lhs, const etl::array< T, SIZE > &rhs)
Definition array.h:1136
ETL_CONSTEXPR TContainer::iterator end(TContainer &container)
Definition iterator.h:992
Definition iterator.h:926
Definition iterator.h:863
Definition iterator.h:915
Definition iterator.h:854
Definition iterator.h:903
Definition iterator.h:845
Definition iterator.h:948
Definition iterator.h:882
Definition iterator.h:937
Definition iterator.h:873
iterator
Definition iterator.h:399