31#ifndef ETL_VECTOR_INCLUDED
32#define ETL_VECTOR_INCLUDED
34#define ETL_IN_VECTOR_H
48#include "static_assert.h"
76 typedef const T& const_reference;
81 typedef const T* const_pointer;
83 typedef const T* const_iterator;
84 typedef ETL_OR_STD::reverse_iterator<iterator> reverse_iterator;
85 typedef ETL_OR_STD::reverse_iterator<const_iterator> const_reverse_iterator;
86 typedef size_t size_type;
87 typedef typename etl::iterator_traits<iterator>::difference_type difference_type;
126 const_iterator
end()
const
155 return reverse_iterator(
end());
164 return const_reverse_iterator(
end());
173 return reverse_iterator(
begin());
180 const_reverse_iterator
rend()
const
182 return const_reverse_iterator(
begin());
191 return const_reverse_iterator(
cend());
198 const_reverse_iterator
crend()
const
200 return const_reverse_iterator(
cbegin());
225 const size_t current_size =
size();
231 ETL_ADD_DEBUG_COUNT(delta);
236 ETL_SUBTRACT_DEBUG_COUNT(delta);
250#if defined(ETL_DEBUG_COUNT)
303 reference
at(
size_t i)
315 const_reference
at(
size_t i)
const
374 ETL_CONSTEXPR const_pointer
data()
const
386 template <
typename TIterator>
390 ETL_STATIC_ASSERT((
etl::is_same<
typename etl::remove_cv<T>::type,
typename etl::remove_cv<
typename etl::iterator_traits<TIterator>::value_type>::type>::value),
"Iterator type does not match container type");
392#if ETL_IS_DEBUG_BUILD
393 difference_type d = etl::distance(first, last);
400 ETL_ADD_DEBUG_COUNT(
uint32_t(etl::distance(first, last)));
457 create_back(etl::move(value));
461#if ETL_USING_CPP11 && ETL_NOT_USING_STLPORT && !defined(ETL_VECTOR_FORCE_CPP03_IMPLEMENTATION)
467 template <
typename ...
Args>
470 ETL_ASSERT_CHECK_PUSH_POP(
size() !=
CAPACITY, ETL_ERROR(vector_full));
474 ETL_INCREMENT_DEBUG_COUNT;
489 ETL_INCREMENT_DEBUG_COUNT;
498 template <
typename T1>
505 ETL_INCREMENT_DEBUG_COUNT;
514 template <
typename T1,
typename T2>
521 ETL_INCREMENT_DEBUG_COUNT;
530 template <
typename T1,
typename T2,
typename T3>
537 ETL_INCREMENT_DEBUG_COUNT;
546 template <
typename T1,
typename T2,
typename T3,
typename T4>
553 ETL_INCREMENT_DEBUG_COUNT;
576 iterator
insert(const_iterator position, const_reference value)
581 iterator
position_ = to_iterator(position);
613 create_back(etl::move(value));
617 create_back(etl::move(
back()));
629#if ETL_USING_CPP11 && ETL_NOT_USING_STLPORT
630 template <
typename ...
Args>
634 ETL_ASSERT_CHECK_EXTRA(
cbegin() <= position && position <=
cend(), ETL_ERROR(vector_out_of_bounds));
636 iterator
position_ = to_iterator(position);
643 ETL_INCREMENT_DEBUG_COUNT;
658 template <
typename T1>
659 iterator
emplace(const_iterator position,
const T1& value1)
664 iterator
position_ = to_iterator(position);
671 ETL_INCREMENT_DEBUG_COUNT;
686 template <
typename T1,
typename T2>
699 ETL_INCREMENT_DEBUG_COUNT;
709 ::new (p)
T(value1, value2);
714 template <
typename T1,
typename T2,
typename T3>
715 iterator
emplace(const_iterator position,
const T1& value1,
const T2& value2,
const T3& value3)
718 ETL_ASSERT_CHECK_EXTRA(
cbegin() <= position && position <=
cend(), ETL_ERROR(vector_out_of_bounds));
720 iterator
position_ = to_iterator(position);
727 ETL_INCREMENT_DEBUG_COUNT;
737 ::new (p)
T(value1, value2, value3);
742 template <
typename T1,
typename T2,
typename T3,
typename T4>
743 iterator
emplace(const_iterator position,
const T1& value1,
const T2& value2,
const T3& value3,
const T4& value4)
746 ETL_ASSERT_CHECK_EXTRA(
cbegin() <= position && position <=
cend(), ETL_ERROR(vector_out_of_bounds));
748 iterator
position_ = to_iterator(position);
755 ETL_INCREMENT_DEBUG_COUNT;
765 ::new (p)
T(value1, value2, value3, value4);
783 iterator
position_ = to_iterator(position);
835 template <
class TIterator>
838 size_t count = etl::distance(first, last);
925 iterator
erase(const_iterator first, const_iterator last)
929 iterator
first_ = to_iterator(first);
930 iterator
last_ = to_iterator(last);
932 if (first ==
begin() && last ==
end())
973 while (itr !=
rhs.end())
1022#ifdef ETL_IVECTOR_REPAIR_ENABLE
1026 virtual void repair() = 0;
1048 ETL_RESET_DEBUG_COUNT;
1079 etl::create_value_at(
p_end);
1080 ETL_INCREMENT_DEBUG_COUNT;
1088 void create_back(const_reference value)
1090 etl::create_copy_at(
p_end, value);
1091 ETL_INCREMENT_DEBUG_COUNT;
1102 etl::create_copy_at(
p_end, etl::move(value));
1103 ETL_INCREMENT_DEBUG_COUNT;
1117 ETL_DECREMENT_DEBUG_COUNT;
1121 ivector(
const ivector&) ETL_DELETE;
1128 ETL_CONSTEXPR iterator to_iterator(const_iterator itr)
const
1130 return const_cast<iterator
>(itr);
1141 template <
typename T>
1144 return (
lhs.size() ==
rhs.size()) && etl::equal(
lhs.begin(),
lhs.end(),
rhs.begin());
1154 template <
typename T>
1167 template <
typename T>
1170 return etl::lexicographical_compare(
lhs.begin(),
lhs.end(),
rhs.begin(),
rhs.end());
1180 template <
typename T>
1193 template <
typename T>
1206 template <
typename T>
1223 template <
typename T, const
size_t MAX_SIZE_>
1228 ETL_STATIC_ASSERT((
MAX_SIZE_ > 0
U),
"Zero capacity etl::vector is not valid");
1230 static const size_t MAX_SIZE =
MAX_SIZE_;
1249 this->
resize(initial_size);
1261 this->
resize(initial_size, value);
1270 template <
typename TIterator>
1274 this->
assign(first, last);
1277#if ETL_HAS_INITIALIZER_LIST
1281 vector(std::initializer_list<T>
init)
1291 vector(
const vector&
other)
1300 vector& operator = (
const vector&
rhs)
1314 vector(vector&&
other)
1321 typename etl::ivector<T>::iterator itr =
other.begin();
1322 while (itr !=
other.end())
1335 vector& operator = (vector&&
rhs)
1340 typename etl::ivector<T>::iterator itr =
rhs.
begin();
1341 while (itr !=
rhs.end())
1357#ifdef ETL_IVECTOR_REPAIR_ENABLE
1368#ifdef ETL_IVECTOR_REPAIR_ENABLE
1369 virtual void repair() ETL_OVERRIDE
1387#if ETL_USING_CPP17 && ETL_HAS_INITIALIZER_LIST
1388 template <
typename...
T>
1395#if ETL_USING_CPP11 && ETL_HAS_INITIALIZER_LIST
1396 template <
typename...
T>
1409 template <
typename T>
1417 vector_ext(
void* buffer,
size_t max_size)
1431 this->
resize(initial_size);
1443 this->
resize(initial_size, value);
1452 template <
typename TIterator>
1456 this->
assign(first, last);
1459#if ETL_HAS_INITIALIZER_LIST
1463 vector_ext(std::initializer_list<T>
init,
void* buffer,
size_t max_size)
1473 vector_ext(
const vector_ext&
other,
void* buffer,
size_t max_size)
1482 vector_ext& operator = (
const vector_ext&
rhs)
1496 vector_ext(vector_ext&&
other,
void* buffer,
size_t max_size)
1503 typename etl::ivector<T>::iterator itr =
other.
begin();
1504 while (itr !=
other.end())
1517 vector_ext& operator = (vector_ext&&
rhs)
1523 typename etl::ivector<T>::iterator itr =
rhs.
begin();
1524 while (itr !=
rhs.end())
1548#ifdef ETL_IVECTOR_REPAIR_ENABLE
1549 virtual void repair() ETL_OVERRIDE
1563 template <
typename T, const
size_t MAX_SIZE_>
1568 ETL_STATIC_ASSERT((
MAX_SIZE_ > 0
U),
"Zero capacity etl::vector is not valid");
1570 static const size_t MAX_SIZE =
MAX_SIZE_;
1610 template <
typename TIterator>
1614 this->assign(first, last);
1617#if ETL_HAS_INITIALIZER_LIST
1621 vector(std::initializer_list<T*>
init)
1624 this->assign(
init.begin(),
init.end());
1631 vector(
const vector&
other)
1640 vector& operator = (
const vector&
rhs)
1651 vector(vector&&
other)
1660 vector& operator = (vector&&
rhs)
1671#ifdef ETL_IVECTOR_REPAIR_ENABLE
1672 virtual void repair() ETL_OVERRIDE
1688#if ETL_USING_CPP17 && ETL_HAS_INITIALIZER_LIST
1689 template <
typename...
T>
1693#if ETL_USING_CPP11 && ETL_HAS_INITIALIZER_LIST
1694 template <
typename...
T>
1707 template <
typename T>
1715 vector_ext(
void* buffer,
size_t max_size)
1750 template <
typename TIterator>
1754 this->assign(first, last);
1757#if ETL_HAS_INITIALIZER_LIST
1761 vector_ext(std::initializer_list<T*>
init,
void* buffer,
size_t max_size)
1764 this->assign(
init.begin(),
init.end());
1771 vector_ext(
const vector_ext&
other,
void* buffer,
size_t max_size)
1780 vector_ext(
const vector_ext&
other) ETL_DELETE;
1785 vector_ext& operator = (
const vector_ext&
rhs)
1796 vector_ext(vector_ext&&
other,
void* buffer,
size_t max_size)
1805 vector_ext(vector_ext&&
other) ETL_DELETE;
1810 vector_ext& operator = (vector_ext&&
rhs)
1829#ifdef ETL_IVECTOR_REPAIR_ENABLE
1830 virtual void repair() ETL_OVERRIDE
1842 template <
typename T,
typename U>
1843 typename etl::ivector<T>::difference_type
1846 typename etl::ivector<T>::iterator itr =
etl::remove(
v.begin(),
v.end(), value);
1847 typename etl::ivector<T>::difference_type d = etl::distance(itr,
v.end());
1848 v.erase(itr,
v.end());
1856 template <
typename T,
typename TPredicate>
1857 typename etl::ivector<T>::difference_type
1861 typename etl::ivector<T>::difference_type d = etl::distance(itr,
v.end());
1862 v.erase(itr,
v.end());
ETL_CONSTEXPR14 TIterator remove(TIterator first, TIterator last, const T &value)
Definition algorithm.h:2300
ETL_CONSTEXPR14 TIterator remove_if(TIterator first, TIterator last, TUnaryPredicate predicate)
Definition algorithm.h:2326
Definition alignment.h:246
#define ETL_ASSERT(b, e)
Definition error_handler.h:356
ETL_CONSTEXPR17 etl::enable_if<!etl::is_same< T, etl::nullptr_t >::value, T >::type * addressof(T &t)
Definition addressof.h:52
etl::enable_if< etl::is_trivially_destructible< T >::value, void >::type destroy_at(T *)
Definition memory.h:1027
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:1190
TOutputIterator uninitialized_move(TInputIterator i_begin, TInputIterator i_end, TOutputIterator o_begin)
Definition memory.h:480
TOutputIterator uninitialized_copy(TInputIterator i_begin, TInputIterator i_end, TOutputIterator o_begin)
Definition memory.h:237
TOutputIterator uninitialized_fill_n(TOutputIterator o_begin, TSize n, const T &value)
Definition memory.h:210
add_rvalue_reference
Definition type_traits_generator.h:1413
enable_if
Definition type_traits_generator.h:1254
is_integral
Definition type_traits_generator.h:1064
is_same
Definition type_traits_generator.h:1104
remove_cv
Definition type_traits_generator.h:1031
iterator erase(const_iterator i_element)
Definition vector.h:905
void initialise()
Initialise the vector.
Definition vector.h:1044
iterator begin()
Definition vector.h:99
const_reference at(size_t i) const
Definition vector.h:315
size_type max_size() const
Definition vector_base.h:140
reference emplace_back(const T1 &value1, const T2 &value2, const T3 &value3, const T4 &value4)
Definition vector.h:547
const_iterator begin() const
Definition vector.h:108
void push_back(const_reference value)
Definition vector.h:440
const_reverse_iterator crbegin() const
Definition vector.h:189
reverse_iterator rend()
Definition vector.h:171
const_iterator cend() const
Definition vector.h:144
void clear()
Clears the vector.
Definition vector.h:422
etl::enable_if<!etl::is_integral< TIterator >::value, void >::type assign(TIterator first, TIterator last)
Definition vector.h:388
iterator erase(const_iterator first, const_iterator last)
Definition vector.h:925
const size_type CAPACITY
The maximum number of elements in the vector.
Definition vector_base.h:170
void insert(const_iterator position, TIterator first, TIterator last, typename etl::enable_if<!etl::is_integral< TIterator >::value, int >::type=0)
Definition vector.h:836
reference emplace_back(const T1 &value1, const T2 &value2)
Definition vector.h:515
pointer p_buffer
Pointer to the start of the buffer.
Definition vector.h:1069
reference front()
Definition vector.h:325
iterator end()
Definition vector.h:117
pointer data()
Definition vector.h:365
const_reverse_iterator crend() const
Definition vector.h:198
reference operator[](size_t i)
Definition vector.h:280
const_iterator cbegin() const
Definition vector.h:135
ivector(T *p_buffer_, size_t MAX_SIZE)
Constructor.
Definition vector.h:1034
const_iterator end() const
Definition vector.h:126
const_reverse_iterator rend() const
Definition vector.h:180
void pop_back()
Definition vector.h:563
void resize(size_t new_size, const_reference value)
Definition vector.h:221
void assign(size_t n, parameter_t value)
Definition vector.h:409
reference at(size_t i)
Definition vector.h:303
ivector & operator=(const ivector &rhs)
Assignment operator.
Definition vector.h:953
const_reference back() const
Definition vector.h:355
reference emplace_back(const T1 &value1)
Definition vector.h:499
void repair_buffer(T *p_buffer_)
Fix the internal pointers after a low level memory copy.
Definition vector.h:1062
void fill(const T &value)
Fills the vector.
Definition vector.h:430
bool full() const
Definition vector.h:1008
reference emplace_back()
Definition vector.h:483
pointer p_end
Pointer to one past the last element in the buffer.
Definition vector.h:1070
size_type size() const
Definition vector.h:990
iterator erase(iterator i_element)
Definition vector.h:890
void insert(const_iterator position, size_t n, parameter_t value)
Definition vector.h:778
bool empty() const
Definition vector.h:999
const_reverse_iterator rbegin() const
Definition vector.h:162
void resize(size_t new_size)
Definition vector.h:209
ETL_CONSTEXPR const_pointer data() const
Definition vector.h:374
reference back()
Definition vector.h:345
void uninitialized_resize(size_t new_size)
Definition vector.h:246
size_t available() const
Definition vector.h:1017
iterator emplace(const_iterator position, const T1 &value1)
Emplaces a value to the vector at the specified position.
Definition vector.h:659
void reserve(size_t n)
Definition vector.h:269
reverse_iterator rbegin()
Definition vector.h:153
const_reference front() const
Definition vector.h:335
iterator insert(const_iterator position, const_reference value)
Definition vector.h:576
reference emplace_back(const T1 &value1, const T2 &value2, const T3 &value3)
Definition vector.h:531
Definition vector_base.h:122
Definition vector_base.h:80
Definition vector_base.h:66
Definition vector_base.h:108
Definition vector_base.h:94
bitset_ext
Definition absolute.h:39
bool operator>(const etl::array< T, SIZE > &lhs, const etl::array< T, SIZE > &rhs)
Definition array.h:1190
size_t max_size() const
Returns the maximum number of items in the variant_pool.
Definition variant_pool_generator.h:395
bool operator>=(const etl::array< T, SIZE > &lhs, const etl::array< T, SIZE > &rhs)
Definition array.h:1202
bool operator!=(const etl::array< T, SIZE > &lhs, const etl::array< T, SIZE > &rhs)
Definition array.h:1151
bool operator==(const etl::array< T, SIZE > &lhs, const etl::array< T, SIZE > &rhs)
Definition array.h:1139
void destroy(const T *const p)
Destroys the object.
Definition variant_pool_generator.h:370
ETL_NODISCARD ETL_CONSTEXPR14 T round_half_even_unscaled(T value) ETL_NOEXCEPT
Definition scaled_rounding.h:315
bool operator<(const etl::array< T, SIZE > &lhs, const etl::array< T, SIZE > &rhs)
Definition array.h:1163
bool operator<=(const etl::array< T, SIZE > &lhs, const etl::array< T, SIZE > &rhs)
Definition array.h:1178
Definition type_traits_generator.h:2251
Definition type_traits_generator.h:2237
iterator
Definition iterator.h:399