31#ifndef ETL_ARRAY_VIEW_INCLUDED
32#define ETL_ARRAY_VIEW_INCLUDED
45#if ETL_USING_STL && ETL_USING_CPP11
107 typedef const T* const_pointer;
109 typedef ETL_OR_STD::reverse_iterator<const_iterator> const_reverse_iterator;
111#if defined(ETL_ARRAY_VIEW_IS_MUTABLE)
115 typedef ETL_OR_STD::reverse_iterator<iterator> reverse_iterator;
120 typedef const_reverse_iterator reverse_iterator;
127 : mbegin(ETL_NULLPTR),
136 template <
typename U,
size_t N,
typename =
typename etl::enable_if<etl::is_same<etl::remove_cv_t<T>, etl::remove_cv_t<U>>::value,
void>::type>
139 , mend(a.data() + a.size())
146 template <
typename U,
size_t N,
typename =
typename etl::enable_if<etl::is_same<etl::remove_cv_t<T>, etl::remove_cv_t<U>>::value,
void>::type>
149 , mend(a.data() + a.size())
156 template <
typename U,
size_t N>
166 template <
typename U,
size_t N>
174#if ETL_USING_STL && ETL_USING_CPP11
178 template <
typename U,
size_t N,
typename =
typename etl::enable_if<etl::is_same<etl::remove_cv_t<T>, etl::remove_cv_t<U>>::value,
void>::type>
179 ETL_CONSTEXPR
array_view(std::array<U, N>& a) ETL_NOEXCEPT
181 , mend(a.data() + a.size())
188 template <
typename U,
size_t N,
typename =
typename etl::enable_if<etl::is_same<etl::remove_cv_t<T>, etl::remove_cv_t<U>>::value,
void>::type>
189 ETL_CONSTEXPR
array_view(
const std::array<U, N>& a) ETL_NOEXCEPT
191 , mend(a.data() + a.size())
201 template <
typename TContainer,
typename =
typename etl::enable_if<!etl::is_po
inter<etl::remove_reference_t<TContainer>>::value &&
202 !etl::is_array<etl::remove_reference_t<TContainer>>::value &&
203 etl::is_same<etl::remove_cv_t<T>, etl::remove_cv_t<
typename etl::remove_reference_t<TContainer>::value_type>>::value,
void>::type>
204 ETL_CONSTEXPR
array_view(TContainer&& a) ETL_NOEXCEPT
206 , mend(a.data() + a.size())
214 template <
typename TContainer>
227 template <
typename TContainer>
240 template <
typename TIterator>
261 template<
size_t Array_Size>
272 : mbegin(
other.mbegin),
368 const_iterator cend()
const
376 reverse_iterator rbegin()
378 return reverse_iterator(mend);
386 return const_reverse_iterator(mend);
394 return const_reverse_iterator(mend);
402 return reverse_iterator(mbegin);
408 const_reverse_iterator
rend()
const
410 return const_reverse_iterator(mbegin);
416 const_reverse_iterator
crend()
const
418 return const_reverse_iterator(mbegin);
426 return (mbegin == mend);
432 ETL_CONSTEXPR
size_t size()
const
434 return static_cast<size_t>(mend - mbegin);
450 mbegin =
other.mbegin;
458 template <
typename TIterator>
476#if defined(ETL_ARRAY_VIEW_IS_MUTABLE)
494#if defined(ETL_ARRAY_VIEW_IS_MUTABLE)
498 reference
at(
const size_t i)
521 using ETL_OR_STD::swap;
562 return (
lhs.size() ==
rhs.size()) &&
563 etl::equal(
lhs.begin(),
lhs.end(),
rhs.begin());
579 return etl::lexicographical_compare(
lhs.begin(),
lhs.end(),
rhs.begin(),
rhs.end());
616 template <
typename TArray>
617 array_view(TArray& a)
618 -> array_view<typename TArray::value_type>;
620 template <
typename TIterator>
621 array_view(
const TIterator begin_,
const TIterator end_)
622 -> array_view<etl::remove_pointer_t<TIterator>>;
624 template <
typename TIterator,
626 array_view(
const TIterator begin_,
const TSize size_)
627 -> array_view<etl::remove_pointer_t<TIterator>>;
633#if ETL_USING_8BIT_TYPES
634 template <
typename T>
635 struct hash<
etl::array_view<T> >
639 return etl::private_hash::generic_hash<size_t>(
reinterpret_cast<const uint8_t*
>(view.data()),
640 reinterpret_cast<const uint8_t*
>(view.data() + view.size()));
The base class for array_view exceptions.
Definition array_view.h:59
Array view.
Definition array_view.h:101
iterator begin()
Returns an iterator to the beginning of the array.
Definition array_view.h:328
const_reverse_iterator crbegin() const
Returns a const reverse iterator to the reverse beginning of the array.
Definition array_view.h:392
friend bool operator!=(const array_view< T > &lhs, const array_view< T > &rhs)
Inequality for array views.
Definition array_view.h:569
array_view & operator=(const array_view &other)
Assign from a view.
Definition array_view.h:448
reference front()
Returns a reference to the first element.
Definition array_view.h:280
const_reference back() const
Returns a const reference to the last element.
Definition array_view.h:304
ETL_CONSTEXPR size_t size() const
Returns the size of the array.
Definition array_view.h:432
ETL_CONSTEXPR array_view(const TIterator begin_, const TIterator end_)
Construct from iterators.
Definition array_view.h:241
ETL_CONSTEXPR array_view(const array_view &other)
Copy constructor.
Definition array_view.h:271
friend bool operator<=(const array_view< T > &lhs, const array_view< T > &rhs)
Less-than-equal for array views.
Definition array_view.h:593
pointer data()
Returns a pointer to the first element of the internal storage.
Definition array_view.h:312
iterator end()
Returns an iterator to the end of the array.
Definition array_view.h:352
const_reverse_iterator rbegin() const
Returns a const reverse iterator to the reverse beginning of the array.
Definition array_view.h:384
ETL_CONSTEXPR array_view(const etl::array< U, N > &a, typename etl::enable_if< etl::is_same< typename etl::remove_cv< T >::type, typename etl::remove_cv< U >::type >::value, void >::type *=0) ETL_NOEXCEPT
Construct from etl::array.
Definition array_view.h:167
ETL_CONSTEXPR size_t max_size() const
Returns the maximum possible size of the array.
Definition array_view.h:440
ETL_CONSTEXPR array_view(const TContainer &a, typename etl::enable_if<!etl::is_pointer< typename etl::remove_reference< TContainer >::type >::value &&!etl::is_array< TContainer >::value &&etl::is_same< typename etl::remove_cv< T >::type, typename etl::remove_cv< typename etl::remove_reference< TContainer >::type::value_type >::type >::value, void >::type *=0) ETL_NOEXCEPT
Definition array_view.h:228
ETL_CONSTEXPR bool empty() const
Returns true if the array size is zero.
Definition array_view.h:424
void remove_prefix(const size_type n)
Shrinks the view by moving its start forward.
Definition array_view.h:530
void swap(array_view &other)
Swaps with another array_view.
Definition array_view.h:519
const_reference front() const
Returns a const reference to the first element.
Definition array_view.h:288
const_reverse_iterator rend() const
Returns a const reverse iterator to the end of the array.
Definition array_view.h:408
const_reference at(const size_t i) const
Returns a const reference to the indexed value.
Definition array_view.h:509
const_iterator cbegin() const
Returns a const iterator to the beginning of the array.
Definition array_view.h:344
ETL_CONSTEXPR array_view(etl::array< U, N > &a, typename etl::enable_if< etl::is_same< typename etl::remove_cv< T >::type, typename etl::remove_cv< U >::type >::value, void >::type *=0) ETL_NOEXCEPT
Construct from etl::array.
Definition array_view.h:157
ETL_CONSTEXPR array_view()
Default constructor.
Definition array_view.h:126
void fill(const T &value)
Fills the array.
Definition array_view.h:552
const_pointer data() const
Returns a const pointer to the first element of the internal storage.
Definition array_view.h:320
void remove_suffix(const size_type n)
Shrinks the view by moving its end backward.
Definition array_view.h:541
friend bool operator>(const array_view< T > &lhs, const array_view< T > &rhs)
Greater-than for array views.
Definition array_view.h:585
friend bool operator==(const array_view< T > &lhs, const array_view< T > &rhs)
Equality for array views.
Definition array_view.h:560
const_reverse_iterator crend() const
Returns a const reverse iterator to the end of the array.
Definition array_view.h:416
const_reference operator[](const size_t i) const
Returns a const reference to the indexed value.
Definition array_view.h:489
friend bool operator>=(const array_view< T > &lhs, const array_view< T > &rhs)
Greater-than-equal for array views.
Definition array_view.h:601
reverse_iterator rend()
Returns a reverse iterator to the end of the array.
Definition array_view.h:400
const_iterator end() const
Returns a const iterator to the end of the array.
Definition array_view.h:360
ETL_CONSTEXPR array_view(TContainer &a, typename etl::enable_if<!etl::is_pointer< typename etl::remove_reference< TContainer >::type >::value &&!etl::is_array< TContainer >::value &&etl::is_same< typename etl::remove_cv< T >::type, typename etl::remove_cv< typename etl::remove_reference< TContainer >::type::value_type >::type >::value, void >::type *=0) ETL_NOEXCEPT
Definition array_view.h:215
void assign(const TIterator begin_, const TIterator end_)
Assign from iterators.
Definition array_view.h:459
void assign(const TIterator begin_, const TSize size_)
Assign from iterator and size.
Definition array_view.h:470
const_iterator begin() const
Returns a const iterator to the beginning of the array.
Definition array_view.h:336
friend bool operator<(const array_view< T > &lhs, const array_view< T > &rhs)
Less-than for array views.
Definition array_view.h:577
ETL_CONSTEXPR array_view(const TIterator begin_, const TSize size_)
Construct from C array.
Definition array_view.h:252
ETL_CONSTEXPR array_view(T(&begin_)[Array_Size])
Construct from C array.
Definition array_view.h:262
reference back()
Returns a reference to the last element.
Definition array_view.h:296
#define ETL_ASSERT(b, e)
Definition error_handler.h:316
Definition exception.h:47
ETL_CONSTEXPR17 etl::enable_if<!etl::is_same< T, etl::nullptr_t >::value, T >::type * addressof(T &t)
Definition addressof.h:52
Definition array_view.h:73
Definition array_view.h:87
enable_if
Definition type_traits_generator.h:1191
is_array
Definition type_traits_generator.h:1091
is_pointer
Definition type_traits_generator.h:1101
is_same
Definition type_traits_generator.h:1041
remove_cv
Definition type_traits_generator.h:968
remove_reference
Definition type_traits_generator.h:878
bitset_ext
Definition absolute.h:38
pair holds two objects of arbitrary type
Definition utility.h:164