31 #ifndef ETL_ARRAY_INCLUDED
32 #define ETL_ARRAY_INCLUDED
44 #include "static_assert.h"
61 array_exception(string_type reason_, string_type file_name_, numeric_type line_number_)
62 :
exception(reason_, file_name_, line_number_)
85 template <
typename T, const
size_t SIZE_>
100 typedef size_t size_type;
101 typedef ptrdiff_t difference_type;
102 typedef T& reference;
103 typedef const T& const_reference;
105 typedef const T* const_pointer;
107 typedef const T* const_iterator;
108 typedef ETL_OR_STD::reverse_iterator<iterator> reverse_iterator;
109 typedef ETL_OR_STD::reverse_iterator<const_iterator> const_reverse_iterator;
119 reference
at(
size_t i)
130 const_reference
at(
size_t i)
const
244 const_iterator
end()
const
252 const_iterator cend()
const
260 reverse_iterator rbegin()
262 return reverse_iterator(
end());
270 return const_reverse_iterator(
end());
278 return const_reverse_iterator(
end());
286 return reverse_iterator(
begin());
292 const_reverse_iterator
rend()
const
294 return const_reverse_iterator(
begin());
300 const_reverse_iterator
crend()
const
302 return const_reverse_iterator(
begin());
354 for (
size_t i = 0; i < SIZE; ++i)
366 template <
typename TIterator>
367 void assign(TIterator first,
const TIterator last)
378 template <
typename TIterator>
379 void assign(TIterator first,
const TIterator last, parameter_t value)
382 iterator p = etl::copy(first, last,
begin());
385 etl::fill(p,
end(), value);
393 inline iterator
insert_at(
size_t position, parameter_t value)
403 iterator
insert(const_iterator position, parameter_t value)
405 iterator p =
const_cast<iterator
>(position);
407 etl::move_backward(p,
end() - 1,
end());
419 template <
typename TIterator>
420 inline iterator
insert_at(
size_t position, TIterator first,
const TIterator last)
431 template <
typename TIterator>
432 iterator
insert(const_iterator position, TIterator first,
const TIterator last)
434 iterator p =
const_cast<iterator
>(position);
437 size_t source_size = etl::distance(first, last);
438 size_t destination_space = etl::distance(position, cend());
441 if (source_size < destination_space)
443 size_t length = SIZE - (etl::distance(
begin(), p) + source_size);
444 etl::move_backward(p, p + length,
end());
468 iterator
erase(const_iterator position)
470 iterator p =
const_cast<iterator
>(position);
471 etl::move(p + 1,
end(), p);
493 iterator
erase(const_iterator first, const_iterator last)
495 iterator p =
const_cast<iterator
>(first);
496 etl::move(last, cend(), p);
505 inline iterator
erase_at(
size_t position, parameter_t value)
515 iterator
erase(const_iterator position, parameter_t value)
517 iterator p =
const_cast<iterator
>(position);
519 etl::move(p + 1,
end(), p);
531 iterator
erase_range(
size_t first,
size_t last, parameter_t value)
541 iterator
erase(const_iterator first, const_iterator last, parameter_t value)
543 iterator p =
const_cast<iterator
>(first);
545 p = etl::move(last, cend(), p);
546 etl::fill(p,
end(), value);
548 return const_cast<iterator
>(first);
558 #if ETL_CPP17_SUPPORTED
559 template <
typename T,
typename... Ts>
561 ->
array<etl::enable_if_t<(etl::is_same_v<T, Ts> && ...), T>, 1U +
sizeof...(Ts)>;
569 template <
typename T, const
size_t SIZE>
581 template <
typename T,
size_t SIZE>
584 return etl::equal(lhs.
cbegin(), lhs.cend(), rhs.
cbegin());
593 template <
typename T,
size_t SIZE>
596 return !(lhs == rhs);
605 template <
typename T,
size_t SIZE>
608 return etl::lexicographical_compare(lhs.
cbegin(),
620 template <
typename T,
size_t SIZE>
631 template <
typename T,
size_t SIZE>
644 template <
typename T,
size_t SIZE>
658 template <
size_t I,
typename T,
size_t MAXN>
661 ETL_STATIC_ASSERT(I < MAXN,
"Index out of bounds");
673 template <
size_t I,
typename T,
size_t MAXN>
676 ETL_STATIC_ASSERT(I < MAXN,
"Index out of bounds");
etl::enable_if< etl::is_random_iterator< TInputIterator >::value &&etl::is_random_iterator< TOutputIterator >::value, TOutputIterator >::type copy_s(TInputIterator i_begin, TInputIterator i_end, TOutputIterator o_begin, TOutputIterator o_end)
Definition: algorithm.h:2580
const_iterator cbegin() const
Returns a const iterator to the beginning of the array.
Definition: array.h:228
iterator erase(const_iterator first, const_iterator last)
Definition: array.h:493
void assign(TIterator first, const TIterator last)
Definition: array.h:367
const_reference front() const
Returns a const reference to the first element.
Definition: array.h:168
const_reverse_iterator rend() const
Returns a const reverse iterator to the end of the array.
Definition: array.h:292
const_reference operator[](size_t i) const
Definition: array.h:152
pointer data()
Returns a pointer to the first element of the internal buffer.
Definition: array.h:192
iterator begin()
Returns an iterator to the beginning of the array.
Definition: array.h:212
T _buffer[SIZE]
The array data.
Definition: array.h:552
reference at(size_t i)
Definition: array.h:119
void fill(parameter_t value)
Definition: array.h:341
const_reference back() const
Returns a const reference to the last element.
Definition: array.h:184
iterator erase_range(size_t first, size_t last)
Definition: array.h:482
bool empty() const
Returns true if the array size is zero.
Definition: array.h:312
const_pointer data() const
Returns a const pointer to the first element of the internal buffer.
Definition: array.h:200
const_reverse_iterator rbegin() const
Returns a const reverse iterator to the reverse beginning of the array.
Definition: array.h:268
const_iterator end() const
Returns a const iterator to the end of the array.
Definition: array.h:244
iterator insert_at(size_t position, parameter_t value)
Definition: array.h:393
iterator erase_range(size_t first, size_t last, parameter_t value)
Definition: array.h:531
size_t size() const
Returns the size of the array.
Definition: array.h:320
void assign(TIterator first, const TIterator last, parameter_t value)
Definition: array.h:379
const_reference at(size_t i) const
Definition: array.h:130
reference front()
Returns a reference to the first element.
Definition: array.h:160
iterator erase_at(size_t position)
Definition: array.h:458
iterator erase(const_iterator first, const_iterator last, parameter_t value)
Definition: array.h:541
iterator erase(const_iterator position, parameter_t value)
Definition: array.h:515
iterator end()
Returns an iterator to the end of the array.
Definition: array.h:236
const_reverse_iterator crbegin() const
Returns a const reverse iterator to the reverse beginning of the array.
Definition: array.h:276
iterator insert(const_iterator position, parameter_t value)
Definition: array.h:403
size_t max_size() const
Returns the maximum possible size of the array.
Definition: array.h:328
const_reverse_iterator crend() const
Returns a const reverse iterator to the end of the array.
Definition: array.h:300
reverse_iterator rend()
Returns a reverse iterator to the end of the array.
Definition: array.h:284
iterator insert(const_iterator position, TIterator first, const TIterator last)
Definition: array.h:432
iterator erase(const_iterator position)
Definition: array.h:468
const_iterator begin() const
Returns a const iterator to the beginning of the array.
Definition: array.h:220
iterator erase_at(size_t position, parameter_t value)
Definition: array.h:505
iterator insert_at(size_t position, TIterator first, const TIterator last)
Definition: array.h:420
reference operator[](size_t i)
Definition: array.h:142
void swap(array &other)
Definition: array.h:350
reference back()
Returns a reference to the last element.
Definition: array.h:176
#define ETL_ASSERT(b, e)
Definition: error_handler.h:290
exception(string_type reason_, string_type file_, numeric_type line_)
Constructor.
Definition: exception.h:67
Definition: exception.h:47
Definition: absolute.h:37
bool operator>(const etl::array< T, SIZE > &lhs, const etl::array< T, SIZE > &rhs)
Definition: array.h:633
bool operator>=(const etl::array< T, SIZE > &lhs, const etl::array< T, SIZE > &rhs)
Definition: array.h:645
bool operator!=(const etl::array< T, SIZE > &lhs, const etl::array< T, SIZE > &rhs)
Definition: array.h:594
void swap(etl::array< T, SIZE > &lhs, etl::array< T, SIZE > &rhs)
Template deduction guides.
Definition: array.h:570
bool operator==(const etl::array< T, SIZE > &lhs, const etl::array< T, SIZE > &rhs)
Definition: array.h:582
T & get(array< T, MAXN > &a)
Definition: array.h:659
bool operator<(const etl::array< T, SIZE > &lhs, const etl::array< T, SIZE > &rhs)
Definition: array.h:606
bool operator<=(const etl::array< T, SIZE > &lhs, const etl::array< T, SIZE > &rhs)
Definition: array.h:621
etl::conditional< etl::is_fundamental< T >::value||etl::is_pointer< T >::value, T, const T & >::type type
By default fundamental and pointer types are passed by value.
Definition: parameter_type.h:48