31#ifndef ETL_ARRAY_VIEW_INCLUDED
32#define ETL_ARRAY_VIEW_INCLUDED
45#if ETL_USING_STL && ETL_USING_CPP11
63 :
exception(reason_, file_name_, line_number_)
77 :
array_view_exception(ETL_ERROR_TEXT(
"array_view:bounds", ETL_ARRAY_VIEW_FILE_ID
"A"), file_name_, line_number_)
91 :
array_view_exception(ETL_ERROR_TEXT(
"array_view:uninitialised", ETL_ARRAY_VIEW_FILE_ID
"B"), file_name_, line_number_)
104 typedef T value_type;
105 typedef size_t size_type;
106 typedef const T& const_reference;
107 typedef const T* const_pointer;
108 typedef const T* const_iterator;
109 typedef ETL_OR_STD::reverse_iterator<const_iterator> const_reverse_iterator;
111#if defined(ETL_ARRAY_VIEW_IS_MUTABLE)
113 typedef T& reference;
115 typedef ETL_OR_STD::reverse_iterator<iterator> reverse_iterator;
117 typedef const_pointer pointer;
118 typedef const_reference reference;
119 typedef const_pointer 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>
241 ETL_CONSTEXPR
array_view(
const TIterator begin_,
const TIterator end_)
250 template <
typename TIterator,
252 ETL_CONSTEXPR
array_view(
const TIterator begin_,
const TSize size_)
261 template<
size_t Array_Size>
264 mend(begin_ + Array_Size)
272 : mbegin(other.mbegin),
360 const_iterator
end()
const
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);
434 return (mend - mbegin);
450 mbegin = other.mbegin;
458 template <
typename TIterator>
459 void assign(
const TIterator begin_,
const TIterator end_)
468 template <
typename TIterator,
470 void assign(
const TIterator begin_,
const TSize size_)
476#if defined(ETL_ARRAY_VIEW_IS_MUTABLE)
494#if defined(ETL_ARRAY_VIEW_IS_MUTABLE)
498 reference
at(
const size_t i)
509 const_reference
at(
const size_t i)
const
523 swap(mbegin, other.mbegin);
524 swap(mend, other.mend);
562 return (lhs.
size() == rhs.
size()) &&
571 return !(lhs == rhs);
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()));
void swap(etl::array_view< T > &lhs, etl::array_view< T > &rhs)
Swaps the values.
Definition: array_view.h:650
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
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
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()
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
size_t size() const
Returns the size of the array.
Definition: array_view.h:432
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
bool empty() const
Returns true if the array size is zero.
Definition: array_view.h:424
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
size_t max_size() const
Returns the maximum possible size of the array.
Definition: array_view.h:440
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
reference back()
Returns a reference to the last element.
Definition: array_view.h:296
#define ETL_ASSERT(b, e)
Definition: error_handler.h:316
ETL_CONSTEXPR exception(string_type reason_, string_type, numeric_type line_)
Constructor.
Definition: exception.h:69
Definition: exception.h:47
ETL_CONSTEXPR17 T * addressof(T &t)
Definition: addressof.h:51
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