A C++ template library for embedded applications
Designed and maintained by
Aster Consulting Ltd
Join the ETL community

array_view


This class implements a view in to a range of a C array, etl::array, std::array, etl::vector and std::vector. It will support
construction from any class that supports data() and size() member functions as well as plain C arrays. There are mutating
and non-mutating versions. The non-mutating version has the same API as the mutating version except for the non-const
member functions.

STL equivalent: None at the moment. Similar to the proposed addition to C++17 but restricts the range to a single
dimension.

etl::array_view<typename T>
etl::const_array_view<typename T>
____________________________________________________________________________________________________

Member types


value_type              T
size_type               std::size_t
difference_type         std::ptrdiff_t
reference               value_type&
const_reference         const value_type&
pointer                 value_type*
const_pointer           const value_type*
iterator                Random access iterator
const_iterator          Constant random access iterator
reverse_iterator        std::reverse_iterator<iterator>
const_reverse_iterator std::reverse_iterator<const_iterator>

____________________________________________________________________________________________________

Constructors


array_view()

Default constructor.
____________________________________________________________________________________________________

template <typename TArray>
explicit array_view(TArray& a)

Construct from array or vector like class.
____________________________________________________________________________________________________

template <typename TIterator>
array_view(TIterator begin_, TIterator end_)

Construct from an iterator or pointer range.
____________________________________________________________________________________________________

template <typename TIterator, typename TSize>
array_view(TIterator begin_, TSize size_)

Construct from a start and size
___________________________________________________________________________________________________

template<const size_t ARRAY_SIZE>
explicit array_view(T(&begin_)[ARRAY_SIZE])

Construct from a compile time sized C array.
____________________________________________________________________________________________________

array_view(const array_view& other)

Copy constructor.
____________________________________________________________________________________________________

Modifiers


template <typename TIterator>
void assign(TIterator begin_, TIterator end_)

Assign from an iterator range.
____________________________________________________________________________________________________

template <typename TIterator, typename TSize>
void assign(TIterator begin_, TSize size_)

Assign from a start iterator and length.
____________________________________________________________________________________________________

void remove_prefix(size_type n)

Shrinks the view from the front.
A value of n larger than the array will result in undefined behaviour.
____________________________________________________________________________________________________

void remove_suffix(size_type n)

Shrinks the view from the back.
A value of n larger than the array will result in undefined behaviour.

____________________________________________________________________________________________________

Element access


T& at(size_t i)
const T& at(size_t i) const

Returns a reference or const reference to the indexed element.
Emits an etl::array_view_uninitialised if the view is not initialised.
Emits an etl::array_view_bounds if the index is not in range.
If asserts or exceptions are not enabled then undefined behaviour occurs.
____________________________________________________________________________________________________

T& operator[](size_t i)
const T& operator[](size_t i) const

Returns a reference or const reference to the indexed element.
Index out of range results in undefined behaviour.
____________________________________________________________________________________________________

T& front()
const T& front() const

Returns a reference or const reference to the first element.
____________________________________________________________________________________________________

T& back()
const T& back() const
Returns a reference or const reference to the last element.

____________________________________________________________________________________________________

Iterators


iterator begin()
const_iterator begin() const
const_iterator cbegin() const

Returns an iterator to the beginning of the array view.
____________________________________________________________________________________________________

iterator end()
const_iterator end() const
const_iterator cend() const

Returns an iterator to the end of the array view.
____________________________________________________________________________________________________

iterator rbegin()
const_iterator rbegin() const
const_iterator crbegin() const

Returns a reverse iterator to the beginning of the array view.
____________________________________________________________________________________________________

iterator rend()
const_iterator rend() const
const_iterator crend() const

Returns a reverse iterator to the end of the array view.

____________________________________________________________________________________________________

Capacity


bool empty() const

Returns true if the size of the array view is zero, otherwise false.
____________________________________________________________________________________________________

size_t size() const

Returns the size of the view.
____________________________________________________________________________________________________

size_t max_size() const

Returns the maximum possible size of the view.

____________________________________________________________________________________________________

Non-member functions

Lexicographically comparisons


== true if the contents of the array views are equal, otherwise false.
!= true if the contents of the array views are not equal, otherwise false.
true if the contents of the lhs are lexicographically less than the contents of the rhs,  otherwise false.
<= true if the contents of the lhs are lexicographically less than or equal to the contents of the rhs, otherwise false.
true if the contents of the lhs are lexicographically greater than the contents of the rhs,  otherwise false.
>= true if the contents of the lhs are lexicographically greater than or equal to the contents of the rhs, otherwise false

Hash

There are specialisations for etl::hash for array_view and const_array_view.

____________________________________________________________________________________________________

Example


etl::array<int, 10> data = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

typedef etl::array_view<int> View;

View view(data.begin() + 2, data.end() - 2);

void Print(const View& view)
{
  for (size_t i = 0; i < view.size(); ++i)
  {
    std::cout << view[i] << " ";
  }
}

Print(view); // Prints "3 4 5 6 7 8"

size_t hashvalue = etl::hash<View>()(view);
array_view.h