31#ifndef ETL_VECTOR_INCLUDED
32#define ETL_VECTOR_INCLUDED
34#define ETL_IN_VECTOR_H
47#include "static_assert.h"
64 template <
typename T,
typename Enable =
void>
81 typedef const T& const_reference;
83 typedef T&& rvalue_reference;
86 typedef const T* const_pointer;
88 typedef const T* const_iterator;
89 typedef ETL_OR_STD::reverse_iterator<iterator> reverse_iterator;
90 typedef ETL_OR_STD::reverse_iterator<const_iterator> const_reverse_iterator;
91 typedef size_t size_type;
92 typedef typename etl::iterator_traits<iterator>::difference_type difference_type;
127 const_iterator
end()
const
156 return reverse_iterator(
end());
165 return const_reverse_iterator(
end());
174 return reverse_iterator(
begin());
181 const_reverse_iterator
rend()
const
183 return const_reverse_iterator(
begin());
192 return const_reverse_iterator(
cend());
199 const_reverse_iterator
crend()
const
201 return const_reverse_iterator(
cbegin());
223 void resize(
size_t new_size, const_reference value)
227 const size_t current_size =
size();
228 size_t delta = (current_size < new_size) ? new_size - current_size : current_size - new_size;
230 if (current_size < new_size)
233 ETL_ADD_DEBUG_COUNT(delta);
238 ETL_SUBTRACT_DEBUG_COUNT(delta);
252#if defined(ETL_DEBUG_COUNT)
253 if (
size() < new_size)
255 ETL_ADD_DEBUG_COUNT(new_size -
size());
259 ETL_SUBTRACT_DEBUG_COUNT(
size() - new_size);
307 reference
at(
size_t i)
320 const_reference
at(
size_t i)
const
379 ETL_CONSTEXPR const_pointer
data()
const
392 template <
typename TIterator>
393 typename etl::enable_if<!etl::is_integral<TIterator>::value
394 && etl::is_convertible<typename etl::iterator_traits<TIterator>::value_type, T>::value,
395 typename etl::enable_if<!etl::is_integral<TIterator>::value,
void>
::type>
::type
396 assign(TIterator first, TIterator last) ETL_NOEXCEPT_IF((etl::is_nothrow_copy_constructible<T>::value && ETL_NOT_USING_EXCEPTIONS))
399 ETL_STATIC_ASSERT((etl::is_same<
typename etl::remove_cv<T>::type,
401 "Iterator type does not match container type");
404#if ETL_IS_DEBUG_BUILD
405 difference_type d = etl::distance(first, last);
412 ETL_ADD_DEBUG_COUNT(uint32_t(etl::distance(first, last)));
422 void assign(
size_t n, const_reference value)
429 ETL_ADD_DEBUG_COUNT(uint32_t(n));
468 void push_back(rvalue_reference value)
470 ETL_ASSERT_CHECK_PUSH_POP_OR_RETURN(
size() != CAPACITY, ETL_ERROR(
vector_full));
472 create_back(etl::move(value));
476#if ETL_USING_CPP11 && ETL_NOT_USING_STLPORT && !defined(ETL_VECTOR_FORCE_CPP03_IMPLEMENTATION)
483 template <
typename... Args>
484 reference emplace_back(Args&&... args)
486 ETL_ASSERT_CHECK_PUSH_POP(
size() != CAPACITY, ETL_ERROR(vector_full));
489 ::new (p_end) T(etl::forward<Args>(args)...);
492 ETL_INCREMENT_DEBUG_COUNT;
508 ETL_INCREMENT_DEBUG_COUNT;
518 template <
typename T1>
523 ::new (
p_end) T(value1);
525 ETL_INCREMENT_DEBUG_COUNT;
535 template <
typename T1,
typename T2>
540 ::new (
p_end) T(value1, value2);
542 ETL_INCREMENT_DEBUG_COUNT;
552 template <
typename T1,
typename T2,
typename T3>
553 reference
emplace_back(
const T1& value1,
const T2& value2,
const T3& value3)
557 ::new (
p_end) T(value1, value2, value3);
559 ETL_INCREMENT_DEBUG_COUNT;
569 template <
typename T1,
typename T2,
typename T3,
typename T4>
570 reference
emplace_back(
const T1& value1,
const T2& value2,
const T3& value3,
const T4& value4)
574 ::new (
p_end) T(value1, value2, value3, value4);
576 ETL_INCREMENT_DEBUG_COUNT;
601 iterator
insert(const_iterator position, const_reference value)
606 iterator position_ = to_iterator(position);
608 if (position_ ==
end())
615 etl::move_backward(position_,
p_end - 2,
p_end - 1);
635 iterator position_ = to_iterator(position);
637 if (position_ ==
end())
639 create_back(etl::move(value));
643 create_back(etl::move(back()));
644 etl::move_backward(position_, p_end - 2, p_end - 1);
645 *position_ = etl::move(value);
655#if ETL_USING_CPP11 && ETL_NOT_USING_STLPORT
656 template <
typename... Args>
657 iterator emplace(const_iterator position, Args&&... args)
660 ETL_ASSERT_CHECK_EXTRA(
cbegin() <= position && position <=
cend(), ETL_ERROR(vector_out_of_bounds));
662 iterator position_ = to_iterator(position);
666 if (position_ ==
end())
669 ETL_INCREMENT_DEBUG_COUNT;
675 etl::move_backward(position_, p_end - 2, p_end - 1);
680 ::new (p) T(etl::forward<Args>(args)...);
686 template <
typename T1>
687 iterator
emplace(const_iterator position,
const T1& value1)
692 iterator position_ = to_iterator(position);
696 if (position_ ==
end())
699 ETL_INCREMENT_DEBUG_COUNT;
705 etl::move_backward(position_,
p_end - 2,
p_end - 1);
714 template <
typename T1,
typename T2>
720 iterator position_ = to_iterator(position);
724 if (position_ ==
end())
727 ETL_INCREMENT_DEBUG_COUNT;
733 etl::move_backward(position_, p_end - 2, p_end - 1);
737 ::new (p) T(value1, value2);
742 template <
typename T1,
typename T2,
typename T3>
743 iterator emplace(const_iterator position,
const T1& value1,
const T2& value2,
const T3& value3)
746 ETL_ASSERT_CHECK_EXTRA(
cbegin() <= position && position <=
cend(), ETL_ERROR(vector_out_of_bounds));
748 iterator position_ = to_iterator(position);
752 if (position_ ==
end())
755 ETL_INCREMENT_DEBUG_COUNT;
761 etl::move_backward(position_, p_end - 2, p_end - 1);
765 ::new (p) T(value1, value2, value3);
770 template <
typename T1,
typename T2,
typename T3,
typename T4>
771 iterator emplace(const_iterator position,
const T1& value1,
const T2& value2,
const T3& value3,
const T4& value4)
774 ETL_ASSERT_CHECK_EXTRA(
cbegin() <= position && position <=
cend(), ETL_ERROR(vector_out_of_bounds));
776 iterator position_ = to_iterator(position);
780 if (position_ ==
end())
783 ETL_INCREMENT_DEBUG_COUNT;
789 etl::move_backward(position_, p_end - 2, p_end - 1);
793 ::new (p) T(value1, value2, value3, value4);
807 void insert(const_iterator position,
size_t n, const_reference value)
812 iterator position_ = to_iterator(position);
815 size_t insert_begin =
static_cast<size_t>(etl::distance(
begin(), position_));
816 size_t insert_end = insert_begin + insert_n;
820 size_t construct_old_n;
821 iterator p_construct_old;
823 if (insert_end >
size())
826 construct_old_n =
size() - insert_begin;
827 p_construct_old =
p_buffer + insert_end;
831 copy_old_n =
size() - insert_begin - insert_n;
832 construct_old_n = insert_n;
833 p_construct_old =
p_end;
836 size_t copy_new_n = construct_old_n;
837 size_t construct_new_n = insert_n - copy_new_n;
841 ETL_ADD_DEBUG_COUNT(construct_old_n);
844 etl::move_backward(
p_buffer + insert_begin,
p_buffer + insert_begin + copy_old_n,
p_buffer + insert_end + copy_old_n);
848 ETL_ADD_DEBUG_COUNT(construct_new_n);
851 etl::fill_n(
p_buffer + insert_begin, copy_new_n, value);
864 template <
class TIterator>
865 typename etl::enable_if<
866 !etl::is_integral<TIterator>::value && etl::is_convertible<typename etl::iterator_traits<TIterator>::value_type, T>::value,
void>
::type
867 insert(const_iterator position, TIterator first, TIterator last,
typename etl::enable_if<!etl::is_integral<TIterator>::value,
int>
::type = 0)
869 size_t count =
static_cast<size_t>(etl::distance(first, last));
874 size_t insert_n = count;
875 size_t insert_begin =
static_cast<size_t>(etl::distance(
cbegin(), position));
876 size_t insert_end = insert_begin + insert_n;
880 size_t construct_old_n;
881 iterator p_construct_old;
883 if (insert_end >
size())
886 construct_old_n =
size() - insert_begin;
887 p_construct_old =
p_buffer + insert_end;
891 copy_old_n =
size() - insert_begin - insert_n;
892 construct_old_n = insert_n;
893 p_construct_old =
p_end;
896 size_t copy_new_n = construct_old_n;
897 size_t construct_new_n = insert_n - copy_new_n;
901 ETL_ADD_DEBUG_COUNT(construct_old_n);
904 etl::move_backward(
p_buffer + insert_begin,
p_buffer + insert_begin + copy_old_n,
p_buffer + insert_end + copy_old_n);
907 etl::uninitialized_copy(first +
static_cast<ptrdiff_t
>(copy_new_n), first +
static_cast<ptrdiff_t
>(copy_new_n + construct_new_n),
p_end);
908 ETL_ADD_DEBUG_COUNT(construct_new_n);
911 etl::copy(first, first +
static_cast<ptrdiff_t
>(copy_new_n),
p_buffer + insert_begin);
926 etl::move(i_element + 1,
end(), i_element);
938 iterator
erase(const_iterator i_element)
942 iterator i_element_ = to_iterator(i_element);
944 etl::move(i_element_ + 1,
end(), i_element_);
959 iterator
erase(const_iterator first, const_iterator last)
963 iterator first_ = to_iterator(first);
964 iterator last_ = to_iterator(last);
966 if (first ==
begin() && last ==
end())
972 etl::move(last_,
end(), first_);
973 size_t n_delete =
static_cast<size_t>(etl::distance(first_, last_));
977 ETL_SUBTRACT_DEBUG_COUNT(n_delete);
996 ETL_ASSERT_OR_RETURN(this->
max_size() >= other.size() && other.max_size() >= this->size(), ETL_ERROR(
vector_full));
998 ivector<T>& smaller = other.size() > this->
size() ? *this : other;
1001 etl::swap_ranges(smaller.begin(), smaller.end(), larger.begin());
1008 larger.erase(larger_itr, larger.end());
1018 assign(rhs.cbegin(), rhs.cend());
1028 ivector& operator=(
ivector&& rhs) ETL_NOEXCEPT_IF((etl::is_nothrow_move_constructible<T>::value))
1034 while (itr != rhs.end())
1036 push_back(etl::move(*itr));
1083#ifdef ETL_IVECTOR_REPAIR_ENABLE
1087 virtual void repair() = 0;
1095 ivector(T* p_buffer_,
size_t MAX_SIZE) ETL_NOEXCEPT
1107 if ETL_IF_CONSTEXPR (etl::is_trivially_destructible<T>::value)
1109 ETL_RESET_DEBUG_COUNT;
1114 ETL_SUBTRACT_DEBUG_COUNT(int32_t(etl::distance(
p_buffer,
p_end)));
1125 uintptr_t length =
static_cast<uintptr_t
>(
p_end -
p_buffer);
1127 p_end = p_buffer_ + length;
1138 void create_back(const_reference value)
1141 ETL_INCREMENT_DEBUG_COUNT;
1150 void create_back(rvalue_reference value)
1153 ETL_INCREMENT_DEBUG_COUNT;
1167 ETL_DECREMENT_DEBUG_COUNT;
1171 ivector(
const ivector&) ETL_DELETE;
1178 ETL_CONSTEXPR iterator to_iterator(const_iterator itr)
const
1180 return const_cast<iterator
>(itr);
1191 template <
typename T>
1196 typedef T value_type;
1197 typedef T& reference;
1198 typedef const T& const_reference;
1200 typedef T&& rvalue_reference;
1203 typedef const T* const_pointer;
1204 typedef T* iterator;
1205 typedef const T* const_iterator;
1206 typedef ETL_OR_STD::reverse_iterator<iterator> reverse_iterator;
1207 typedef ETL_OR_STD::reverse_iterator<const_iterator> const_reverse_iterator;
1208 typedef size_t size_type;
1209 typedef typename etl::iterator_traits<iterator>::difference_type difference_type;
1217 template <
typename TIterator>
1218 struct is_compatible_iterator
1219 :
etl::bool_constant<etl::is_pointer<typename etl::iterator_traits<TIterator>::value_type>::value
1220 && etl::is_convertible<typename etl::iterator_traits<TIterator>::value_type, value_type>::value>
1295 return const_reverse_iterator(const_iterator(
base_t::end()));
1311 const_reverse_iterator
rend()
const
1313 return const_reverse_iterator(const_iterator(
base_t::begin()));
1322 return const_reverse_iterator(const_iterator(
base_t::cend()));
1353 void resize(
size_t new_size, value_type value)
1374 return reference(base_t::operator[](i));
1384 return const_reference(base_t::operator[](i));
1406 const_reference
at(
size_t i)
const
1473 template <
typename TIterator>
1474 typename etl::enable_if<is_compatible_iterator<TIterator>::value,
void>
::type assign(TIterator first, TIterator last)
1552 iterator
insert(const_iterator position, const_reference value)
1554 return iterator(
base_t::insert(base_t::iterator(position), to_void_ptr(value)));
1562 return iterator(
base_t::emplace(base_t::iterator(position), ETL_NULLPTR));
1568 iterator
emplace(const_iterator position, const_reference value)
1570 return iterator(
base_t::emplace(base_t::iterator(position), to_void_ptr(value)));
1581 void insert(const_iterator position,
size_t n, const_reference value)
1583 base_t::insert(base_t::const_iterator(position), n, to_void_ptr(value));
1594 template <
typename TIterator>
1595 typename etl::enable_if< is_compatible_iterator<TIterator>::value,
void>
::type insert(const_iterator position, TIterator first, TIterator last)
1608 return iterator(
base_t::erase(base_t::iterator(i_element)));
1617 iterator
erase(const_iterator i_element)
1619 return iterator(
base_t::erase(base_t::const_iterator(i_element)));
1631 iterator
erase(const_iterator first, const_iterator last)
1633 return iterator(
base_t::erase(base_t::const_iterator(first), base_t::const_iterator(last)));
1648 ETL_ASSERT_OR_RETURN(this->max_size() >= other.size() && other.max_size() >= this->size(), ETL_ERROR(
vector_full));
1650 ivector<T>& smaller = other.size() > this->
size() ? *this : other;
1651 ivector<T>& larger = other.size() > this->
size() ? other : *
this;
1653 etl::swap_ranges(smaller.begin(), smaller.end(), larger.begin());
1655 typename ivector<T>::iterator larger_itr = etl::next(larger.begin(),
static_cast<ptrdiff_t
>(smaller.size()));
1659 larger.erase(larger_itr, larger.end());
1678 (void)base_t::operator=(etl::move(rhs));
1684#ifdef ETL_IVECTOR_REPAIR_ENABLE
1688 virtual void repair() = 0;
1696 ivector(pointer p_buffer_,
size_t MAX_SIZE) ETL_NOEXCEPT
1723 static ETL_CONSTEXPR14
void* to_void_ptr(const_reference value) ETL_NOEXCEPT
1725 return const_cast<void*
>(
static_cast<const void*
>(value));
1729 static ETL_CONSTEXPR14
void** to_void_pptr(pointer p_buffer) ETL_NOEXCEPT
1731 return reinterpret_cast<void**
>(
const_cast<element_type*
>(p_buffer));
1742 template <
typename T>
1745 return (lhs.size() == rhs.size()) && etl::equal(lhs.begin(), lhs.end(), rhs.begin());
1755 template <
typename T>
1758 return !(lhs == rhs);
1768 template <
typename T>
1771 return etl::lexicographical_compare(lhs.begin(), lhs.end(), rhs.begin(), rhs.end());
1781 template <
typename T>
1795 template <
typename T>
1798 return !(lhs > rhs);
1809 template <
typename T>
1812 return !(lhs < rhs);
1819 template <
typename T, const
size_t MAX_SIZE_>
1828 template <
typename T, const
size_t MAX_SIZE_>
1833 ETL_STATIC_ASSERT((MAX_SIZE_ > 0U),
"Zero capacity etl::vector is not valid");
1835 static const size_t MAX_SIZE = MAX_SIZE_;
1841 :
etl::
ivector<T>(reinterpret_cast<T*>(&buffer), MAX_SIZE)
1851 :
etl::
ivector<T>(reinterpret_cast<T*>(&buffer), MAX_SIZE)
1854 this->resize(initial_size);
1863 :
etl::
ivector<T>(reinterpret_cast<T*>(&buffer), MAX_SIZE)
1866 this->resize(initial_size, value);
1875 template <
typename TIterator>
1876 vector(TIterator first, TIterator last,
typename etl::enable_if<!etl::is_integral<TIterator>::value,
int>
::type = 0)
1877 :
etl::
ivector<T>(reinterpret_cast<T*>(&buffer), MAX_SIZE)
1879 this->assign(first, last);
1882#if ETL_HAS_INITIALIZER_LIST
1886 vector(std::initializer_list<T> init)
1887 :
etl::
ivector<T>(reinterpret_cast<T*>(&buffer), MAX_SIZE)
1889 this->assign(init.begin(), init.end());
1897 :
etl::
ivector<T>(reinterpret_cast<T*>(&buffer), MAX_SIZE)
1899 this->assign(other.begin(), other.end());
1909 this->assign(rhs.cbegin(), rhs.cend());
1919 vector(
vector&& other) ETL_NOEXCEPT_IF((etl::is_nothrow_move_constructible<T>::value))
1920 :
etl::
ivector<T>(reinterpret_cast<T*>(&buffer), MAX_SIZE)
1927 while (itr != other.end())
1929 this->push_back(etl::move(*itr));
1945 typename etl::ivector<T>::iterator itr = rhs.begin();
1946 while (itr != rhs.end())
1948 this->push_back(etl::move(*itr));
1962#ifdef ETL_IVECTOR_REPAIR_ENABLE
1973#ifdef ETL_IVECTOR_REPAIR_ENABLE
1974 virtual void repair() ETL_OVERRIDE
1992#if ETL_USING_CPP17 && ETL_HAS_INITIALIZER_LIST
1993 template <
typename... T>
1994 vector(T...) -> vector<
typename etl::common_type_t<T...>,
sizeof...(T)>;
2000#if ETL_USING_CPP11 && ETL_HAS_INITIALIZER_LIST
2001 template <
typename... T>
2002 constexpr auto make_vector(T&&... t) ->
etl::vector<
typename etl::common_type_t<T...>,
sizeof...(T)>
2004 return {etl::forward<T>(t)...};
2014 template <
typename T>
2032 explicit vector_ext(
size_t initial_size,
void* buffer,
size_t max_size)
2033 :
etl::
ivector<T>(reinterpret_cast<T*>(buffer), max_size)
2036 this->resize(initial_size);
2045 :
etl::
ivector<T>(reinterpret_cast<T*>(buffer), max_size)
2048 this->resize(initial_size, value);
2057 template <
typename TIterator>
2058 vector_ext(TIterator first, TIterator last,
void* buffer,
size_t max_size,
2059 typename etl::enable_if<!etl::is_integral<TIterator>::value,
int>
::type = 0)
2060 :
etl::
ivector<T>(reinterpret_cast<T*>(buffer), max_size)
2062 this->assign(first, last);
2065#if ETL_HAS_INITIALIZER_LIST
2069 vector_ext(std::initializer_list<T> init,
void* buffer,
size_t max_size)
2070 :
etl::
ivector<T>(reinterpret_cast<T*>(buffer), max_size)
2072 this->assign(init.begin(), init.end());
2080 ETL_NOEXCEPT_IF((etl::is_nothrow_copy_constructible<T>::value && ETL_NOT_USING_EXCEPTIONS))
2081 :
etl::
ivector<T>(reinterpret_cast<T*>(buffer), max_size)
2085 this->assign(other.begin(), other.end());
2096 this->assign(rhs.cbegin(), rhs.cend());
2107 ETL_NOEXCEPT_IF((etl::is_nothrow_move_constructible<T>::value && ETL_NOT_USING_EXCEPTIONS))
2108 :
etl::
ivector<T>(reinterpret_cast<T*>(buffer), max_size)
2112 this->assign(etl::make_move_iterator(other.begin()), etl::make_move_iterator(other.end()));
2125 this->assign(etl::make_move_iterator(rhs.begin()), etl::make_move_iterator(rhs.end()));
2145#ifdef ETL_IVECTOR_REPAIR_ENABLE
2146 virtual void repair() ETL_OVERRIDE
2157 template <
typename T,
typename U>
2162 v.erase(itr, v.end());
2170 template <
typename T,
typename TPredicate>
2175 v.erase(itr, v.end());
2185 template <
typename T>
ETL_CONSTEXPR14 TIterator remove(TIterator first, TIterator last, const T &value)
Definition algorithm.h:2381
ETL_CONSTEXPR14 TIterator remove_if(TIterator first, TIterator last, TUnaryPredicate predicate)
Definition algorithm.h:2406
Definition alignment.h:251
#define ETL_ASSERT(b, e)
Definition error_handler.h:511
ETL_CONSTEXPR17 etl::enable_if<!etl::is_same< T, etl::nullptr_t >::value, T >::type * addressof(T &t)
Definition addressof.h:52
void create_copy_at(T *p, const T &value)
Definition memory.h:2786
etl::enable_if< etl::is_trivially_destructible< typenameetl::iterator_traits< TIterator >::value_type >::value, void >::type destroy(TIterator, TIterator)
Definition memory.h:1893
etl::enable_if< etl::is_trivially_destructible< T >::value, void >::type destroy_at(T *)
Definition memory.h:1819
etl::enable_if< etl::is_trivially_destructible< typenameetl::iterator_traits< TIterator >::value_type >::value, TIterator >::type destroy_n(TIterator i_begin, TSize n)
Definition memory.h:1979
TOutputIterator uninitialized_move(TInputIterator i_begin, TInputIterator i_end, TOutputIterator o_begin)
Definition memory.h:985
TOutputIterator uninitialized_copy(TInputIterator i_begin, TInputIterator i_end, TOutputIterator o_begin)
Definition memory.h:555
TOutputIterator uninitialized_fill_n(TOutputIterator o_begin, TSize n, const T &value)
Definition memory.h:528
const_reverse_iterator crend() const
Definition vector.h:1329
reference operator[](size_t i)
Definition vector.h:1372
pointer data()
Definition vector.h:370
const_reverse_iterator rbegin() const
Definition vector.h:163
reference emplace_back()
Definition vector.h:502
etl::enable_if<!etl::is_pointer< TIterator >::value, void >::type assign(TIterator first, TIterator last)
Definition pvoidvector.h:342
const_reverse_iterator rbegin() const
Definition vector.h:1293
ivector(T *p_buffer_, size_t MAX_SIZE) ETL_NOEXCEPT
Constructor.
Definition vector.h:1095
void resize(size_t new_size, const_reference value)
Definition vector.h:223
const_reference operator[](size_t i) const
Definition vector.h:294
void uninitialized_resize(size_t new_size)
Definition vector.h:248
iterator erase(const_iterator i_element)
Definition vector.h:1617
iterator emplace(const_iterator position, const_reference value)
Emplaces a value to the vector at the specified position.
Definition vector.h:1568
iterator begin()
Definition pvoidvector.h:76
void resize(size_t new_size, value_type value)
Definition vector.h:1353
void emplace_back(value_type value)
Definition pvoidvector.h:425
void assign(size_t n, const_reference value)
Definition vector.h:422
const_iterator cbegin() const
Definition vector.h:1266
const_iterator begin() const
Definition vector.h:109
iterator erase(iterator i_element)
Definition pvoidvector.h:623
pointer data()
Definition pvoidvector.h:319
size_type max_size() const
Definition vector_base.h:140
ivector & operator=(const ivector &rhs)
Assignment operator.
Definition vector.h:1665
void push_back(const_reference value)
Definition vector.h:1505
etl::enable_if<!etl::is_integral< TIterator >::value &&etl::is_convertible< typenameetl::iterator_traits< TIterator >::value_type, T >::value, typenameetl::enable_if<!etl::is_integral< TIterator >::value, void >::type >::type assign(TIterator first, TIterator last) ETL_NOEXCEPT_IF((etl
Definition vector.h:396
void resize(size_t new_size)
Definition vector.h:1340
reference emplace_back(const T1 &value1, const T2 &value2, const T3 &value3, const T4 &value4)
Definition vector.h:570
reference emplace_back(const T1 &value1)
Definition vector.h:519
const_iterator begin() const
Definition vector.h:1239
pointer data()
Definition vector.h:1451
ivector & operator=(const ivector &rhs)
Assignment operator.
Definition vector.h:1014
void repair_buffer(T *p_buffer_)
Fix the internal pointers after a low level memory copy.
Definition vector.h:1123
vector_ext(TIterator first, TIterator last, void *buffer, size_t max_size, typename etl::enable_if<!etl::is_integral< TIterator >::value, int >::type=0)
Definition vector.h:2058
const_iterator end() const
Definition vector.h:1257
iterator insert(const_iterator position, const_reference value)
Definition vector.h:1552
vector(size_t initial_size)
Definition vector.h:1850
void swap(ivector< T > &other)
Definition vector.h:989
const_pointer data() const
Definition vector.h:1460
iterator emplace(const_iterator position, const T1 &value1)
Emplaces a value to the vector at the specified position.
Definition vector.h:687
void initialise()
Initialise the vector.
Definition pvoidvector.h:760
void swap(ivector< T > &other)
Definition vector.h:1641
void repair()
Fix the internal pointers after a low level memory copy.
Definition vector.h:1976
vector(const vector &other)
Copy constructor.
Definition vector.h:1896
vector_ext(size_t initial_size, void *buffer, size_t max_size)
Definition vector.h:2032
reverse_iterator rbegin()
Definition vector.h:154
const_iterator cbegin() const
Definition vector.h:136
size_t available() const
Definition vector.h:1078
const_reference back() const
Definition vector.h:1442
void resize(size_t new_size)
Definition vector.h:210
vector_base(size_t max_size_)
Constructor.
Definition vector_base.h:150
const size_type CAPACITY
The maximum number of elements in the vector.
Definition vector_base.h:170
reverse_iterator rbegin()
Definition vector.h:1284
reference back()
Definition vector.h:350
iterator erase(const_iterator first, const_iterator last)
Definition vector.h:1631
iterator emplace(const_iterator position)
Emplaces a value to the vector at the specified position.
Definition vector.h:1560
iterator emplace(const_iterator position)
Definition pvoidvector.h:488
etl::pvoidvector & operator=(const etl::pvoidvector &rhs)
Assignment operator.
Definition pvoidvector.h:679
reverse_iterator rend()
Definition vector.h:1302
vector_ext(void *buffer, size_t max_size) ETL_NOEXCEPT
Constructor.
Definition vector.h:2022
const_reference at(size_t i) const
Definition vector.h:1406
const_reverse_iterator crend() const
Definition vector.h:199
ivector(pointer p_buffer_, size_t MAX_SIZE) ETL_NOEXCEPT
Constructor.
Definition vector.h:1696
void clear()
Clears the vector.
Definition vector.h:435
void insert(const_iterator position, size_t n, const_reference value)
Definition vector.h:1581
const_reference operator[](size_t i) const
Definition vector.h:1382
vector_ext & operator=(const vector_ext &rhs) ETL_NOEXCEPT_IF((etl
Assignment operator.
Definition vector.h:2092
vector_ext(size_t initial_size, typename etl::ivector< T >::const_reference value, void *buffer, size_t max_size)
Definition vector.h:2044
reference back()
Definition vector.h:1433
reverse_iterator rend()
Definition vector.h:172
iterator insert(const_iterator position, value_type value)
Definition pvoidvector.h:453
void clear()
Clears the vector.
Definition pvoidvector.h:401
void assign(size_t n, const_reference value)
Definition vector.h:1486
iterator begin()
Definition vector.h:100
void initialise()
Initialise the vector.
Definition vector.h:1105
reference at(size_t i)
Definition vector.h:307
iterator erase(const_iterator first, const_iterator last)
Definition vector.h:959
void initialise()
Initialise the vector.
Definition vector.h:1704
size_type size() const
Definition vector.h:1051
bool empty() const
Definition vector.h:1060
iterator end()
Definition vector.h:118
etl::enable_if< is_compatible_iterator< TIterator >::value, void >::type assign(TIterator first, TIterator last)
Definition vector.h:1474
void resize(size_t new_size)
Definition pvoidvector.h:186
const_reverse_iterator crbegin() const
Definition vector.h:190
bool full() const
Definition vector.h:1069
iterator erase(iterator i_element)
Definition vector.h:922
void clear()
Clears the vector.
Definition vector.h:1494
pointer p_end
Pointer to one past the last element in the buffer.
Definition vector.h:1131
iterator erase(iterator i_element)
Definition vector.h:1606
etl::enable_if<!etl::is_integral< TIterator >::value &&etl::is_convertible< typenameetl::iterator_traits< TIterator >::value_type, T >::value, void >::type insert(const_iterator position, TIterator first, TIterator last, typename etl::enable_if<!etl::is_integral< TIterator >::value, int >::type=0)
Definition vector.h:867
vector() ETL_NOEXCEPT
Constructor.
Definition vector.h:1840
vector(TIterator first, TIterator last, typename etl::enable_if<!etl::is_integral< TIterator >::value, int >::type=0)
Definition vector.h:1876
void reserve(size_t n)
Definition vector.h:272
reference at(size_t i)
Definition vector.h:1394
void pop_back()
Definition pvoidvector.h:436
const_reference front() const
Definition vector.h:340
const_reverse_iterator rend() const
Definition vector.h:181
void repair_buffer(void **p_buffer_)
Fix the internal pointers after a low level memory copy.
Definition pvoidvector.h:768
const_reference front() const
Definition vector.h:1424
void uninitialized_resize(size_t new_size)
Definition vector.h:1362
reference back()
Definition pvoidvector.h:299
iterator erase(const_iterator i_element)
Definition vector.h:938
iterator end()
Definition pvoidvector.h:94
void fill(const T &value)
Fills the vector.
Definition vector.h:443
void repair()
Fix the internal pointers after a low level memory copy.
Definition vector.h:2148
const_reverse_iterator crbegin() const
Definition vector.h:1320
void insert(const_iterator position, size_t n, const_reference value)
Definition vector.h:807
void uninitialized_resize(size_t new_size)
Definition pvoidvector.h:220
etl::enable_if< is_compatible_iterator< TIterator >::value, void >::type insert(const_iterator position, TIterator first, TIterator last)
Definition vector.h:1595
ETL_CONSTEXPR const_pointer data() const
Definition vector.h:379
void repair_buffer(pointer p_buffer_)
Fix the internal pointers after a low level memory copy.
Definition vector.h:1712
vector(size_t initial_size, typename etl::ivector< T >::const_reference value)
Definition vector.h:1862
reference front()
Definition pvoidvector.h:279
~vector() ETL_NOEXCEPT
Destructor.
Definition vector.h:1965
pvoidvector(void **p_buffer_, size_t MAX_SIZE)
Constructor.
Definition pvoidvector.h:750
void push_back(const_reference value)
Definition vector.h:454
void push_back(value_type value)
Definition pvoidvector.h:412
const_iterator cend() const
Definition pvoidvector.h:121
void pop_back()
Definition vector.h:587
vector_ext(const vector_ext &other, void *buffer, size_t max_size)
Copy constructor.
Definition vector.h:2079
~vector_ext() ETL_NOEXCEPT
Destructor.
Definition vector.h:2137
const_iterator cend() const
Definition vector.h:145
const_iterator cbegin() const
Definition pvoidvector.h:112
reference front()
Definition vector.h:330
const_iterator cend() const
Definition vector.h:1275
const_iterator end() const
Definition vector.h:127
reference emplace_back(const T1 &value1, const T2 &value2, const T3 &value3)
Definition vector.h:553
pointer p_buffer
Pointer to the start of the buffer.
Definition vector.h:1130
const_reference at(size_t i) const
Definition vector.h:320
iterator insert(const_iterator position, const_reference value)
Definition vector.h:601
void pop_back()
Definition vector.h:1540
reference emplace_back(const_reference value)
Definition vector.h:1529
reference operator[](size_t i)
Definition vector.h:283
reference emplace_back(const T1 &value1, const T2 &value2)
Definition vector.h:536
vector & operator=(const vector &rhs)
Assignment operator.
Definition vector.h:1905
reference emplace_back()
Definition vector.h:1516
iterator begin()
Definition vector.h:1230
reference front()
Definition vector.h:1415
const_reverse_iterator rend() const
Definition vector.h:1311
reference at(size_t i)
Definition pvoidvector.h:256
iterator end()
Definition vector.h:1248
const_reference back() const
Definition vector.h:360
Definition pvoidvector.h:55
Definition vector_base.h:122
Definition vector_base.h:80
Template deduction guides.
Definition vector.h:2016
Definition vector_base.h:66
Definition vector_base.h:108
Definition vector_base.h:94
ETL_CONSTEXPR14 void swap(etl::typed_storage_ext< T > &lhs, etl::typed_storage_ext< T > &rhs) ETL_NOEXCEPT
Swap two etl::typed_storage_ext.
Definition alignment.h:856
ETL_CONSTEXPR14 bool operator==(const etl::array< T, SIZE > &lhs, const etl::array< T, SIZE > &rhs)
Definition array.h:1078
bool operator>(const etl::array< T, SIZE > &lhs, const etl::array< T, SIZE > &rhs)
Definition array.h:1130
TContainer::const_iterator cbegin(const TContainer &container)
Definition iterator.h:1156
bool operator>=(const etl::array< T, SIZE > &lhs, const etl::array< T, SIZE > &rhs)
Definition array.h:1144
etl::ivector< T >::difference_type erase(etl::ivector< T > &v, const U &value)
erase
Definition vector.h:2158
ETL_CONSTEXPR14 bool operator!=(const etl::array< T, SIZE > &lhs, const etl::array< T, SIZE > &rhs)
Definition array.h:1090
ETL_NODISCARD ETL_CONSTEXPR14 etl::back_insert_iterator< TContainer > back_inserter(TContainer &container)
Creates a back_insert_iterator from a container.
Definition iterator.h:734
ETL_CONSTEXPR TContainer::size_type size(const TContainer &container)
Definition iterator.h:1434
TContainer::iterator end(TContainer &container)
Definition iterator.h:1166
TContainer::const_iterator cend(const TContainer &container)
Definition iterator.h:1186
TContainer::iterator begin(TContainer &container)
Definition iterator.h:1136
etl::ivector< T >::difference_type erase_if(etl::ivector< T > &v, TPredicate predicate)
erase_if
Definition vector.h:2171
bool operator<(const etl::array< T, SIZE > &lhs, const etl::array< T, SIZE > &rhs)
Definition array.h:1103
bool operator<=(const etl::array< T, SIZE > &lhs, const etl::array< T, SIZE > &rhs)
Definition array.h:1117
Definition type_traits.h:97
Definition iterator.h:130
iterator
Definition iterator.h:482
remove_const
Definition type_traits.h:233
remove_cv
Definition type_traits.h:325
remove_reference
Definition type_traits.h:122