31#ifndef ETL_PVOIDVECTOR_INCLUDED
32#define ETL_PVOIDVECTOR_INCLUDED
34#define ETL_IN_PVOIDVECTOR
36#include "../platform.h"
37#include "../algorithm.h"
39#include "../type_traits.h"
40#include "../error_handler.h"
41#include "../functional.h"
42#include "../iterator.h"
58 typedef void* value_type;
59 typedef value_type& reference;
60 typedef const value_type& const_reference;
61 typedef value_type* pointer;
62 typedef const value_type* const_pointer;
63 typedef value_type* iterator;
64 typedef const value_type* const_iterator;
65 typedef ETL_OR_STD::reverse_iterator<iterator> reverse_iterator;
66 typedef ETL_OR_STD::reverse_iterator<const_iterator> const_reverse_iterator;
67 typedef size_t size_type;
68 typedef etl::iterator_traits<iterator>::difference_type difference_type;
87 return const_iterator(p_buffer);
103 const_iterator
end()
const
105 return const_iterator(p_end);
114 return const_iterator(p_buffer);
123 return const_iterator(p_end);
132 return reverse_iterator(
end());
141 return const_reverse_iterator(
end());
150 return reverse_iterator(
begin());
157 const_reverse_iterator
rend()
const
159 return const_reverse_iterator(
begin());
168 return const_reverse_iterator(
cend());
175 const_reverse_iterator
crend()
const
177 return const_reverse_iterator(
cbegin());
190 p_end = p_buffer + new_size;
200 void resize(
size_t new_size, value_type value)
204 pointer p_new_end = p_buffer + new_size;
207 if (p_end < p_new_end)
209 etl::fill(p_end, p_new_end, value);
223 p_end = p_buffer + new_size;
252 reference
at(
size_t i)
264 const_reference
at(
size_t i)
const
331 template <
typename TIterator>
335#if ETL_IS_DEBUG_BUILD
336 difference_type d = etl::distance(first, last);
342 while (first != last)
344 *p_end++ = (
void*)(*first);
356 template <
typename TIterator>
360#if ETL_IS_DEBUG_BUILD
361 difference_type d = etl::distance(first, last);
367 void** p_first = (
void**)(first);
368 void** p_last = (
void**)(last);
370 p_end = etl::copy(p_first, p_last, p_buffer);
385 p_end = etl::fill_n(p_buffer, n, value);
403#if defined(ETL_CHECK_PUSH_POP)
416#if defined(ETL_CHECK_PUSH_POP)
428#if defined(ETL_CHECK_PUSH_POP)
440 iterator
insert(const_iterator position, value_type value)
444 iterator position_ = to_iterator(position);
450 if (position_ !=
end())
453 etl::copy_backward(position_,
end() - 1,
end());
470 iterator
emplace(const_iterator position, value_type value)
474 iterator position_ = to_iterator(position);
476 if (position_ !=
end())
479 etl::copy_backward(position_,
end() - 1,
end());
497 void insert(const_iterator position,
size_t n, value_type value)
501 iterator position_ = to_iterator(position);
503 etl::copy_backward(position_, p_end, p_end + n);
504 etl::fill_n(position_, n, value);
517 template <
typename TIterator>
518 void insert(const_iterator position, TIterator first, TIterator last)
520 size_t count = etl::distance(first, last);
522 iterator position_ = to_iterator(position);
526 etl::copy_backward(position_, p_end, p_end + count);
527 etl::copy(first, last, position_);
538 etl::copy(i_element + 1,
end(), i_element);
549 iterator
erase(const_iterator i_element)
551 iterator i_element_ = to_iterator(i_element);
553 etl::copy(i_element_ + 1,
end(), i_element_);
567 iterator
erase(const_iterator first, const_iterator last)
569 iterator first_ = to_iterator(first);
570 iterator last_ = to_iterator(last);
572 etl::copy(last_,
end(), first_);
573 size_t n_delete = etl::distance(first, last);
590 etl::copy_n(rhs.
data(), rhs.
size(), this->data());
606 etl::copy_n(rhs.data(), rhs.size(), this->data());
620 return size_t(p_end - p_buffer);
629 return (p_end == p_buffer);
657 , p_buffer(p_buffer_)
675 uintptr_t length = p_end - p_buffer;
677 p_buffer = p_buffer_;
678 p_end = p_buffer_ + length;
689 iterator to_iterator(const_iterator itr)
const
719 return !(lhs == rhs);
731 return etl::lexicographical_compare(lhs.
begin(), lhs.
end(), rhs.
begin(), rhs.
end());
773#undef ETL_IN_PVOIDVECTOR
#define ETL_ASSERT(b, e)
Definition: error_handler.h:316
enable_if
Definition: type_traits_generator.h:1191
bool full() const
Definition: pvoidvector.h:636
iterator erase(const_iterator first, const_iterator last)
Definition: pvoidvector.h:567
etl::enable_if<!etl::is_pointer< TIterator >::value, void >::type assign(TIterator first, TIterator last)
Definition: pvoidvector.h:333
const_reference at(size_t i) const
Definition: pvoidvector.h:264
iterator begin()
Definition: pvoidvector.h:76
void emplace_back(value_type value)
Definition: pvoidvector.h:414
iterator erase(iterator i_element)
Definition: pvoidvector.h:536
pointer data()
Definition: pvoidvector.h:310
size_type max_size() const
Definition: vector_base.h:140
const_reverse_iterator rend() const
Definition: pvoidvector.h:157
reference operator[](size_t i)
Definition: pvoidvector.h:231
void initialise()
Initialise the vector.
Definition: pvoidvector.h:665
bool empty() const
Definition: pvoidvector.h:627
const_iterator end() const
Definition: pvoidvector.h:103
const size_type CAPACITY
The maximum number of elements in the vector.
Definition: vector_base.h:170
etl::pvoidvector & operator=(const etl::pvoidvector &rhs)
Assignment operator.
Definition: pvoidvector.h:584
void insert(const_iterator position, size_t n, value_type value)
Definition: pvoidvector.h:497
reverse_iterator rend()
Definition: pvoidvector.h:148
iterator insert(const_iterator position, value_type value)
Definition: pvoidvector.h:440
void clear()
Clears the vector.
Definition: pvoidvector.h:391
void assign(size_t n, value_type value)
Definition: pvoidvector.h:379
iterator emplace(const_iterator position, value_type value)
Definition: pvoidvector.h:470
void resize(size_t new_size)
Definition: pvoidvector.h:186
void pop_back()
Definition: pvoidvector.h:426
const_reverse_iterator crend() const
Definition: pvoidvector.h:175
const_reference front() const
Definition: pvoidvector.h:283
void repair_buffer(void **p_buffer_)
Fix the internal pointers after a low level memory copy.
Definition: pvoidvector.h:673
reference back()
Definition: pvoidvector.h:292
iterator end()
Definition: pvoidvector.h:94
void uninitialized_resize(size_t new_size)
Definition: pvoidvector.h:219
const_pointer data() const
Definition: pvoidvector.h:319
reference front()
Definition: pvoidvector.h:274
pvoidvector(void **p_buffer_, size_t MAX_SIZE)
Constructor.
Definition: pvoidvector.h:655
void push_back(value_type value)
Definition: pvoidvector.h:401
const_reference back() const
Definition: pvoidvector.h:301
size_t available() const
Definition: pvoidvector.h:645
const_iterator cend() const
Definition: pvoidvector.h:121
void insert(const_iterator position, TIterator first, TIterator last)
Definition: pvoidvector.h:518
const_iterator begin() const
Definition: pvoidvector.h:85
const_iterator cbegin() const
Definition: pvoidvector.h:112
size_type size() const
Definition: pvoidvector.h:618
iterator erase(const_iterator i_element)
Definition: pvoidvector.h:549
const_reverse_iterator crbegin() const
Definition: pvoidvector.h:166
reverse_iterator rbegin()
Definition: pvoidvector.h:130
etl::enable_if< etl::is_pointer< TIterator >::value, void >::type assign(TIterator first, TIterator last)
Definition: pvoidvector.h:358
reference at(size_t i)
Definition: pvoidvector.h:252
void resize(size_t new_size, value_type value)
Definition: pvoidvector.h:200
const_reverse_iterator rbegin() const
Definition: pvoidvector.h:139
Definition: pvoidvector.h:55
Definition: vector_base.h:122
Definition: vector_base.h:80
Definition: vector_base.h:66
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:684
bool operator>=(const etl::array< T, SIZE > &lhs, const etl::array< T, SIZE > &rhs)
Definition: array.h:696
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:633
bool operator<(const etl::array< T, SIZE > &lhs, const etl::array< T, SIZE > &rhs)
Definition: array.h:657
bool operator<=(const etl::array< T, SIZE > &lhs, const etl::array< T, SIZE > &rhs)
Definition: array.h:672
iterator
Definition: iterator.h:399