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)
301 reference
at(
size_t i)
313 const_reference
at(
size_t i)
const
368 ETL_CONSTEXPR const_pointer
data()
const
380 template <
typename TIterator>
384 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");
386#if ETL_IS_DEBUG_BUILD
387 difference_type d = etl::distance(first, last);
394 ETL_ADD_DEBUG_COUNT(
uint32_t(etl::distance(first, last)));
436#if defined(ETL_CHECK_PUSH_POP)
450#if defined(ETL_CHECK_PUSH_POP)
453 create_back(etl::move(value));
457#if ETL_USING_CPP11 && ETL_NOT_USING_STLPORT && !defined(ETL_VECTOR_FORCE_CPP03_IMPLEMENTATION)
463 template <
typename ...
Args>
466#if defined(ETL_CHECK_PUSH_POP)
471 ETL_INCREMENT_DEBUG_COUNT;
482#if defined(ETL_CHECK_PUSH_POP)
487 ETL_INCREMENT_DEBUG_COUNT;
496 template <
typename T1>
499#if defined(ETL_CHECK_PUSH_POP)
504 ETL_INCREMENT_DEBUG_COUNT;
513 template <
typename T1,
typename T2>
516#if defined(ETL_CHECK_PUSH_POP)
521 ETL_INCREMENT_DEBUG_COUNT;
530 template <
typename T1,
typename T2,
typename T3>
533#if defined(ETL_CHECK_PUSH_POP)
538 ETL_INCREMENT_DEBUG_COUNT;
547 template <
typename T1,
typename T2,
typename T3,
typename T4>
550#if defined(ETL_CHECK_PUSH_POP)
555 ETL_INCREMENT_DEBUG_COUNT;
566#if defined(ETL_CHECK_PUSH_POP)
578 iterator
insert(const_iterator position, const_reference value)
582 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>
635 iterator
position_ = to_iterator(position);
642 ETL_INCREMENT_DEBUG_COUNT;
657 template <
typename T1>
658 iterator
emplace(const_iterator position,
const T1& value1)
662 iterator
position_ = to_iterator(position);
669 ETL_INCREMENT_DEBUG_COUNT;
684 template <
typename T1,
typename T2>
696 ETL_INCREMENT_DEBUG_COUNT;
706 ::new (p)
T(value1, value2);
711 template <
typename T1,
typename T2,
typename T3>
712 iterator
emplace(const_iterator position,
const T1& value1,
const T2& value2,
const T3& value3)
716 iterator
position_ = to_iterator(position);
723 ETL_INCREMENT_DEBUG_COUNT;
733 ::new (p)
T(value1, value2, value3);
738 template <
typename T1,
typename T2,
typename T3,
typename T4>
739 iterator
emplace(const_iterator position,
const T1& value1,
const T2& value2,
const T3& value3,
const T4& value4)
743 iterator
position_ = to_iterator(position);
750 ETL_INCREMENT_DEBUG_COUNT;
760 ::new (p)
T(value1, value2, value3, value4);
777 iterator
position_ = to_iterator(position);
829 template <
class TIterator>
832 size_t count = etl::distance(first, last);
914 iterator
erase(const_iterator first, const_iterator last)
916 iterator
first_ = to_iterator(first);
917 iterator
last_ = to_iterator(last);
919 if (first ==
begin() && last ==
end())
960 while (itr !=
rhs.end())
1009#ifdef ETL_IVECTOR_REPAIR_ENABLE
1013 virtual void repair() = 0;
1035 ETL_RESET_DEBUG_COUNT;
1066 etl::create_value_at(
p_end);
1067 ETL_INCREMENT_DEBUG_COUNT;
1075 void create_back(const_reference value)
1077 etl::create_copy_at(
p_end, value);
1078 ETL_INCREMENT_DEBUG_COUNT;
1089 etl::create_copy_at(
p_end, etl::move(value));
1090 ETL_INCREMENT_DEBUG_COUNT;
1104 ETL_DECREMENT_DEBUG_COUNT;
1108 ivector(
const ivector&) ETL_DELETE;
1115 ETL_CONSTEXPR iterator to_iterator(const_iterator itr)
const
1117 return const_cast<iterator
>(itr);
1128 template <
typename T>
1131 return (
lhs.size() ==
rhs.size()) && etl::equal(
lhs.begin(),
lhs.end(),
rhs.begin());
1141 template <
typename T>
1154 template <
typename T>
1157 return etl::lexicographical_compare(
lhs.begin(),
lhs.end(),
rhs.begin(),
rhs.end());
1167 template <
typename T>
1180 template <
typename T>
1193 template <
typename T>
1210 template <
typename T, const
size_t MAX_SIZE_>
1215 ETL_STATIC_ASSERT((
MAX_SIZE_ > 0
U),
"Zero capacity etl::vector is not valid");
1217 static const size_t MAX_SIZE =
MAX_SIZE_;
1236 this->
resize(initial_size);
1248 this->
resize(initial_size, value);
1257 template <
typename TIterator>
1261 this->
assign(first, last);
1264#if ETL_HAS_INITIALIZER_LIST
1268 vector(std::initializer_list<T>
init)
1278 vector(
const vector&
other)
1287 vector& operator = (
const vector&
rhs)
1301 vector(vector&&
other)
1308 typename etl::ivector<T>::iterator itr =
other.begin();
1309 while (itr !=
other.end())
1322 vector& operator = (vector&&
rhs)
1327 typename etl::ivector<T>::iterator itr =
rhs.
begin();
1328 while (itr !=
rhs.end())
1344#ifdef ETL_IVECTOR_REPAIR_ENABLE
1355#ifdef ETL_IVECTOR_REPAIR_ENABLE
1356 virtual void repair() ETL_OVERRIDE
1374#if ETL_USING_CPP17 && ETL_HAS_INITIALIZER_LIST
1375 template <
typename...
T>
1382#if ETL_USING_CPP11 && ETL_HAS_INITIALIZER_LIST
1383 template <
typename...
T>
1396 template <
typename T>
1404 vector_ext(
void* buffer,
size_t max_size)
1418 this->
resize(initial_size);
1430 this->
resize(initial_size, value);
1439 template <
typename TIterator>
1443 this->
assign(first, last);
1446#if ETL_HAS_INITIALIZER_LIST
1450 vector_ext(std::initializer_list<T>
init,
void* buffer,
size_t max_size)
1460 vector_ext(
const vector_ext&
other,
void* buffer,
size_t max_size)
1469 vector_ext& operator = (
const vector_ext&
rhs)
1483 vector_ext(vector_ext&&
other,
void* buffer,
size_t max_size)
1490 typename etl::ivector<T>::iterator itr =
other.
begin();
1491 while (itr !=
other.end())
1504 vector_ext& operator = (vector_ext&&
rhs)
1510 typename etl::ivector<T>::iterator itr =
rhs.
begin();
1511 while (itr !=
rhs.end())
1535#ifdef ETL_IVECTOR_REPAIR_ENABLE
1536 virtual void repair() ETL_OVERRIDE
1550 template <
typename T, const
size_t MAX_SIZE_>
1555 ETL_STATIC_ASSERT((
MAX_SIZE_ > 0
U),
"Zero capacity etl::vector is not valid");
1557 static const size_t MAX_SIZE =
MAX_SIZE_;
1597 template <
typename TIterator>
1601 this->assign(first, last);
1604#if ETL_HAS_INITIALIZER_LIST
1608 vector(std::initializer_list<T*>
init)
1611 this->assign(
init.begin(),
init.end());
1618 vector(
const vector&
other)
1627 vector& operator = (
const vector&
rhs)
1638 vector(vector&&
other)
1647 vector& operator = (vector&&
rhs)
1658#ifdef ETL_IVECTOR_REPAIR_ENABLE
1659 virtual void repair() ETL_OVERRIDE
1675#if ETL_USING_CPP17 && ETL_HAS_INITIALIZER_LIST
1676 template <
typename...
T>
1680#if ETL_USING_CPP11 && ETL_HAS_INITIALIZER_LIST
1681 template <
typename...
T>
1694 template <
typename T>
1702 vector_ext(
void* buffer,
size_t max_size)
1737 template <
typename TIterator>
1741 this->assign(first, last);
1744#if ETL_HAS_INITIALIZER_LIST
1748 vector_ext(std::initializer_list<T*>
init,
void* buffer,
size_t max_size)
1751 this->assign(
init.begin(),
init.end());
1758 vector_ext(
const vector_ext&
other,
void* buffer,
size_t max_size)
1767 vector_ext(
const vector_ext&
other) ETL_DELETE;
1772 vector_ext& operator = (
const vector_ext&
rhs)
1783 vector_ext(vector_ext&&
other,
void* buffer,
size_t max_size)
1792 vector_ext(vector_ext&&
other) ETL_DELETE;
1797 vector_ext& operator = (vector_ext&&
rhs)
1816#ifdef ETL_IVECTOR_REPAIR_ENABLE
1817 virtual void repair() ETL_OVERRIDE
1829 template <
typename T,
typename U>
1830 typename etl::ivector<T>::difference_type
1833 typename etl::ivector<T>::iterator itr =
etl::remove(
v.begin(),
v.end(), value);
1834 typename etl::ivector<T>::difference_type d = etl::distance(itr,
v.end());
1835 v.erase(itr,
v.end());
1843 template <
typename T,
typename TPredicate>
1844 typename etl::ivector<T>::difference_type
1848 typename etl::ivector<T>::difference_type d = etl::distance(itr,
v.end());
1849 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:245
#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:1366
enable_if
Definition type_traits_generator.h:1230
is_integral
Definition type_traits_generator.h:1040
is_same
Definition type_traits_generator.h:1080
remove_cv
Definition type_traits_generator.h:1007
iterator erase(const_iterator i_element)
Definition vector.h:896
void initialise()
Initialise the vector.
Definition vector.h:1031
iterator begin()
Definition vector.h:99
const_reference at(size_t i) const
Definition vector.h:313
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:548
const_iterator begin() const
Definition vector.h:108
void push_back(const_reference value)
Definition vector.h:434
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:416
etl::enable_if<!etl::is_integral< TIterator >::value, void >::type assign(TIterator first, TIterator last)
Definition vector.h:382
iterator erase(const_iterator first, const_iterator last)
Definition vector.h:914
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:830
reference emplace_back(const T1 &value1, const T2 &value2)
Definition vector.h:514
pointer p_buffer
Pointer to the start of the buffer.
Definition vector.h:1056
reference front()
Definition vector.h:323
iterator end()
Definition vector.h:117
pointer data()
Definition vector.h:359
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:1021
const_iterator end() const
Definition vector.h:126
const_reverse_iterator rend() const
Definition vector.h:180
void pop_back()
Definition vector.h:564
void resize(size_t new_size, const_reference value)
Definition vector.h:221
void assign(size_t n, parameter_t value)
Definition vector.h:403
reference at(size_t i)
Definition vector.h:301
ivector & operator=(const ivector &rhs)
Assignment operator.
Definition vector.h:940
const_reference back() const
Definition vector.h:350
reference emplace_back(const T1 &value1)
Definition vector.h:497
void repair_buffer(T *p_buffer_)
Fix the internal pointers after a low level memory copy.
Definition vector.h:1049
void fill(const T &value)
Fills the vector.
Definition vector.h:424
bool full() const
Definition vector.h:995
reference emplace_back()
Definition vector.h:480
pointer p_end
Pointer to one past the last element in the buffer.
Definition vector.h:1057
size_type size() const
Definition vector.h:977
iterator erase(iterator i_element)
Definition vector.h:883
void insert(const_iterator position, size_t n, parameter_t value)
Definition vector.h:773
bool empty() const
Definition vector.h:986
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:368
reference back()
Definition vector.h:341
void uninitialized_resize(size_t new_size)
Definition vector.h:246
size_t available() const
Definition vector.h:1004
iterator emplace(const_iterator position, const T1 &value1)
Emplaces a value to the vector at the specified position.
Definition vector.h:658
void reserve(size_t n)
Definition vector.h:269
reverse_iterator rbegin()
Definition vector.h:153
const_reference front() const
Definition vector.h:332
iterator insert(const_iterator position, const_reference value)
Definition vector.h:578
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:38
bool operator>(const etl::array< T, SIZE > &lhs, const etl::array< T, SIZE > &rhs)
Definition array.h:1148
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:1160
bool operator!=(const etl::array< T, SIZE > &lhs, const etl::array< T, SIZE > &rhs)
Definition array.h:1109
bool operator==(const etl::array< T, SIZE > &lhs, const etl::array< T, SIZE > &rhs)
Definition array.h:1097
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:314
bool operator<(const etl::array< T, SIZE > &lhs, const etl::array< T, SIZE > &rhs)
Definition array.h:1121
bool operator<=(const etl::array< T, SIZE > &lhs, const etl::array< T, SIZE > &rhs)
Definition array.h:1136
Definition type_traits_generator.h:2204
Definition type_traits_generator.h:2190
iterator
Definition iterator.h:399