31 #ifndef ETL_PVOIDVECTOR_INCLUDED
32 #define ETL_PVOIDVECTOR_INCLUDED
34 #define ETL_IN_PVOIDVECTOR
38 #include "../platform.h"
39 #include "../algorithm.h"
41 #include "../type_traits.h"
42 #include "../error_handler.h"
44 #include "../functional.h"
45 #include "../iterator.h"
47 #ifdef ETL_COMPILER_GCC
48 #pragma GCC diagnostic ignored "-Wunused-variable"
63 typedef void* value_type;
64 typedef value_type& reference;
65 typedef const value_type& const_reference;
66 typedef value_type* pointer;
67 typedef const value_type* const_pointer;
68 typedef value_type* iterator;
69 typedef const value_type* const_iterator;
70 typedef ETL_OR_STD::reverse_iterator<iterator> reverse_iterator;
71 typedef ETL_OR_STD::reverse_iterator<const_iterator> const_reverse_iterator;
72 typedef size_t size_type;
73 typedef etl::iterator_traits<iterator>::difference_type difference_type;
92 return const_iterator(p_buffer);
108 const_iterator
end()
const
110 return const_iterator(p_end);
119 return const_iterator(p_buffer);
128 return const_iterator(p_end);
137 return reverse_iterator(
end());
146 return const_reverse_iterator(
end());
155 return reverse_iterator(
begin());
162 const_reverse_iterator
rend()
const
164 return const_reverse_iterator(
begin());
173 return const_reverse_iterator(
cend());
180 const_reverse_iterator
crend()
const
182 return const_reverse_iterator(
cbegin());
195 p_end = p_buffer + new_size;
205 void resize(
size_t new_size, value_type value)
209 pointer p_new_end = p_buffer + new_size;
212 if (p_end < p_new_end)
214 etl::fill(p_end, p_new_end, value);
246 reference
at(
size_t i)
258 const_reference
at(
size_t i)
const
325 template <
typename TIterator>
329 #if defined(ETL_DEBUG)
330 difference_type d = etl::distance(first, last);
336 while (first != last)
338 *p_end++ = (
void*)(*first++);
349 template <
typename TIterator>
353 #if defined(ETL_DEBUG)
354 difference_type d = etl::distance(first, last);
360 void** p_first = (
void**)(first);
361 void** p_last = (
void**)(last);
363 p_end = etl::copy(p_first, p_last, p_buffer);;
378 p_end = etl::fill_n(p_buffer, n, value);
396 #if defined(ETL_CHECK_PUSH_POP)
409 #if defined(ETL_CHECK_PUSH_POP)
421 #if defined(ETL_CHECK_PUSH_POP)
433 iterator
insert(iterator position, value_type value)
437 if (position !=
end())
440 etl::copy_backward(position,
end() - 1,
end());
456 iterator
emplace(iterator position, value_type value)
460 if (position !=
end())
463 etl::copy_backward(position,
end() - 1,
end());
481 void insert(iterator position,
size_t n, value_type value)
485 etl::copy_backward(position, p_end, p_end + n);
486 etl::fill_n(position, n, value);
499 template <
typename TIterator>
500 void insert(iterator position, TIterator first, TIterator last)
502 size_t count = etl::distance(first, last);
506 etl::copy_backward(position, p_end, p_end + count);
507 etl::copy(first, last, position);
518 etl::copy(i_element + 1,
end(), i_element);
532 iterator
erase(iterator first, iterator last)
534 etl::copy(last,
end(), first);
535 size_t n_delete = etl::distance(first, last);
552 etl::copy_n(rhs.
data(), rhs.
size(), this->data());
558 #if ETL_CPP11_SUPPORTED
568 etl::copy_n(rhs.data(), rhs.size(), this->data());
582 return size_t(p_end - p_buffer);
591 return (p_end == p_buffer);
619 , p_buffer(p_buffer_)
637 uintptr_t length = p_end - p_buffer;
639 p_buffer = p_buffer_;
640 p_end = p_buffer_ + length;
673 return !(lhs == rhs);
685 return etl::lexicographical_compare(lhs.
begin(), lhs.
end(), rhs.
begin(), rhs.
end());
727 #undef ETL_IN_PVOIDVECTOR
#define ETL_ASSERT(b, e)
Definition: error_handler.h:290
enable_if
Definition: type_traits_generator.h:1228
bool full() const
Definition: pvoidvector.h:598
const_reference at(size_t i) const
Definition: pvoidvector.h:258
iterator insert(iterator position, value_type value)
Definition: pvoidvector.h:433
iterator begin()
Definition: pvoidvector.h:81
void emplace_back(value_type value)
Definition: pvoidvector.h:407
iterator erase(iterator i_element)
Definition: pvoidvector.h:516
pointer data()
Definition: pvoidvector.h:304
size_type max_size() const
Definition: vector_base.h:143
const_reverse_iterator rend() const
Definition: pvoidvector.h:162
reference operator[](size_t i)
Definition: pvoidvector.h:225
void initialise()
Initialise the vector.
Definition: pvoidvector.h:627
bool empty() const
Definition: pvoidvector.h:589
const_iterator end() const
Definition: pvoidvector.h:108
const size_type CAPACITY
The maximum number of elements in the vector.
Definition: vector_base.h:165
reverse_iterator rend()
Definition: pvoidvector.h:153
etl::enable_if< etl::is_pointer< TIterator >::value, void >::type assign(TIterator first, TIterator last)
Definition: pvoidvector.h:351
void clear()
Clears the vector.
Definition: pvoidvector.h:384
void assign(size_t n, value_type value)
Definition: pvoidvector.h:372
void resize(size_t new_size)
Definition: pvoidvector.h:191
void insert(iterator position, size_t n, value_type value)
Definition: pvoidvector.h:481
void pop_back()
Definition: pvoidvector.h:419
const_reverse_iterator crend() const
Definition: pvoidvector.h:180
const_reference front() const
Definition: pvoidvector.h:277
void repair_buffer(void **p_buffer_)
Fix the internal pointers after a low level memory copy.
Definition: pvoidvector.h:635
reference back()
Definition: pvoidvector.h:286
iterator end()
Definition: pvoidvector.h:99
void insert(iterator position, TIterator first, TIterator last)
Definition: pvoidvector.h:500
etl::enable_if<!etl::is_pointer< TIterator >::value, void >::type assign(TIterator first, TIterator last)
Definition: pvoidvector.h:327
const_pointer data() const
Definition: pvoidvector.h:313
reference front()
Definition: pvoidvector.h:268
iterator emplace(iterator position, value_type value)
Definition: pvoidvector.h:456
iterator erase(iterator first, iterator last)
Definition: pvoidvector.h:532
pvoidvector(void **p_buffer_, size_t MAX_SIZE)
Constructor.
Definition: pvoidvector.h:617
etl::pvoidvector & operator=(const etl::pvoidvector &rhs)
Assignment operator.
Definition: pvoidvector.h:546
void push_back(value_type value)
Definition: pvoidvector.h:394
const_reference back() const
Definition: pvoidvector.h:295
size_t available() const
Definition: pvoidvector.h:607
const_iterator cend() const
Definition: pvoidvector.h:126
const_iterator begin() const
Definition: pvoidvector.h:90
const_iterator cbegin() const
Definition: pvoidvector.h:117
size_type size() const
Definition: pvoidvector.h:580
const_reverse_iterator crbegin() const
Definition: pvoidvector.h:171
reverse_iterator rbegin()
Definition: pvoidvector.h:135
reference at(size_t i)
Definition: pvoidvector.h:246
void resize(size_t new_size, value_type value)
Definition: pvoidvector.h:205
const_reverse_iterator rbegin() const
Definition: pvoidvector.h:144
Definition: pvoidvector.h:60
Definition: vector_base.h:125
Definition: vector_base.h:83
Definition: vector_base.h:69
Definition: vector_base.h:97
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
bool operator==(const etl::array< T, SIZE > &lhs, const etl::array< T, SIZE > &rhs)
Definition: array.h:582
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