Loading...
Searching...
No Matches
pvoidvector.h
Go to the documentation of this file.
/******************************************************************************
The MIT License(MIT)
Embedded Template Library.
https://github.com/ETLCPP/etl
https://www.etlcpp.com
Copyright(c) 2016 John Wellbelove
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files(the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions :
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
******************************************************************************/
#ifndef ETL_PVOIDVECTOR_INCLUDED
#define ETL_PVOIDVECTOR_INCLUDED
#define ETL_IN_PVOIDVECTOR
#include "../platform.h"
#include "../algorithm.h"
#include "../error_handler.h"
#include "../functional.h"
#include "../iterator.h"
#include "../type_traits.h"
#include "vector_base.h"
#include <stddef.h>
#include "minmax_push.h"
namespace etl
{
//***************************************************************************
//***************************************************************************
class pvoidvector : public vector_base
{
public:
typedef void* value_type;
typedef value_type& reference;
typedef const value_type& const_reference;
typedef value_type* pointer;
typedef const value_type* const_pointer;
typedef value_type* iterator;
typedef const value_type* const_iterator;
typedef ETL_OR_STD::reverse_iterator<iterator> reverse_iterator;
typedef ETL_OR_STD::reverse_iterator<const_iterator> const_reverse_iterator;
typedef size_t size_type;
typedef etl::iterator_traits<iterator>::difference_type difference_type;
public:
//*********************************************************************
//*********************************************************************
iterator begin()
{
return p_buffer;
}
//*********************************************************************
//*********************************************************************
const_iterator begin() const
{
return const_iterator(p_buffer);
}
//*********************************************************************
//*********************************************************************
iterator end()
{
return p_end;
}
//*********************************************************************
//*********************************************************************
const_iterator end() const
{
return const_iterator(p_end);
}
//*********************************************************************
//*********************************************************************
const_iterator cbegin() const
{
return const_iterator(p_buffer);
}
//*********************************************************************
//*********************************************************************
const_iterator cend() const
{
return const_iterator(p_end);
}
//*********************************************************************
//*********************************************************************
reverse_iterator rbegin()
{
return reverse_iterator(end());
}
//*********************************************************************
//*********************************************************************
const_reverse_iterator rbegin() const
{
return const_reverse_iterator(end());
}
//*********************************************************************
//*********************************************************************
reverse_iterator rend()
{
return reverse_iterator(begin());
}
//*********************************************************************
//*********************************************************************
const_reverse_iterator rend() const
{
return const_reverse_iterator(begin());
}
//*********************************************************************
//*********************************************************************
const_reverse_iterator crbegin() const
{
return const_reverse_iterator(cend());
}
//*********************************************************************
//*********************************************************************
const_reverse_iterator crend() const
{
return const_reverse_iterator(cbegin());
}
//*********************************************************************
//*********************************************************************
void resize(size_t new_size)
{
ETL_ASSERT_OR_RETURN(new_size <= CAPACITY, ETL_ERROR(vector_full));
p_end = p_buffer + new_size;
}
//*********************************************************************
//*********************************************************************
void resize(size_t new_size, value_type value)
{
ETL_ASSERT_OR_RETURN(new_size <= CAPACITY, ETL_ERROR(vector_full));
pointer p_new_end = p_buffer + new_size;
// Size up if necessary.
if (p_end < p_new_end)
{
etl::fill(p_end, p_new_end, value);
}
p_end = p_new_end;
}
//*********************************************************************
//*********************************************************************
void uninitialized_resize(size_t new_size)
{
ETL_ASSERT_OR_RETURN(new_size <= CAPACITY, ETL_ERROR(vector_full));
p_end = p_buffer + new_size;
}
//*********************************************************************
//*********************************************************************
reference operator[](size_t i)
{
ETL_ASSERT_CHECK_INDEX_OPERATOR(i < size(), ETL_ERROR(vector_out_of_bounds));
return p_buffer[i];
}
//*********************************************************************
//*********************************************************************
const_reference operator[](size_t i) const
{
ETL_ASSERT_CHECK_INDEX_OPERATOR(i < size(), ETL_ERROR(vector_out_of_bounds));
return p_buffer[i];
}
//*********************************************************************
//*********************************************************************
reference at(size_t i)
{
ETL_ASSERT(i < size(), ETL_ERROR(vector_out_of_bounds));
return p_buffer[i];
}
//*********************************************************************
//*********************************************************************
const_reference at(size_t i) const
{
ETL_ASSERT(i < size(), ETL_ERROR(vector_out_of_bounds));
return p_buffer[i];
}
//*********************************************************************
//*********************************************************************
reference front()
{
ETL_ASSERT_CHECK_EXTRA(size() > 0, ETL_ERROR(vector_out_of_bounds));
return p_buffer[0];
}
//*********************************************************************
//*********************************************************************
const_reference front() const
{
ETL_ASSERT_CHECK_EXTRA(size() > 0, ETL_ERROR(vector_out_of_bounds));
return p_buffer[0];
}
//*********************************************************************
//*********************************************************************
reference back()
{
ETL_ASSERT_CHECK_EXTRA(size() > 0, ETL_ERROR(vector_out_of_bounds));
return *(p_end - 1);
}
//*********************************************************************
//*********************************************************************
const_reference back() const
{
ETL_ASSERT_CHECK_EXTRA(size() > 0, ETL_ERROR(vector_out_of_bounds));
return *(p_end - 1);
}
//*********************************************************************
//*********************************************************************
pointer data()
{
return p_buffer;
}
//*********************************************************************
//*********************************************************************
const_pointer data() const
{
return p_buffer;
}
//*********************************************************************
//*********************************************************************
template <typename TIterator>
typename etl::enable_if<!etl::is_pointer<TIterator>::value, void>::type assign(TIterator first, TIterator last)
{
#if ETL_IS_DEBUG_BUILD
difference_type d = etl::distance(first, last);
ETL_ASSERT_OR_RETURN(static_cast<size_t>(d) <= CAPACITY, ETL_ERROR(vector_full));
#endif
initialise();
while (first != last)
{
*p_end++ = (void*)(*first);
++first;
}
}
//*********************************************************************
//*********************************************************************
template <typename TIterator>
typename etl::enable_if<etl::is_pointer<TIterator>::value, void>::type assign(TIterator first, TIterator last)
{
#if ETL_IS_DEBUG_BUILD
difference_type d = etl::distance(first, last);
ETL_ASSERT_OR_RETURN(static_cast<size_t>(d) <= CAPACITY, ETL_ERROR(vector_full));
#endif
initialise();
void** p_first = (void**)(first);
void** p_last = (void**)(last);
p_end = etl::mem_move(p_first, p_last, p_buffer) + (p_last - p_first);
}
//*********************************************************************
//*********************************************************************
void assign(size_t n, value_type value)
{
ETL_ASSERT_OR_RETURN(n <= CAPACITY, ETL_ERROR(vector_full));
initialise();
p_end = etl::fill_n(p_buffer, n, value);
}
//*************************************************************************
//*************************************************************************
void clear()
{
initialise();
}
//*********************************************************************
//*********************************************************************
void push_back(value_type value)
{
ETL_ASSERT_CHECK_PUSH_POP_OR_RETURN(size() != CAPACITY, ETL_ERROR(vector_full));
*p_end++ = value;
}
//*********************************************************************
//*********************************************************************
void emplace_back(value_type value)
{
ETL_ASSERT_CHECK_PUSH_POP_OR_RETURN(size() != CAPACITY, ETL_ERROR(vector_full));
*p_end++ = value;
}
//*************************************************************************
//*************************************************************************
void pop_back()
{
ETL_ASSERT_CHECK_PUSH_POP_OR_RETURN(size() > 0, ETL_ERROR(vector_empty));
--p_end;
}
//*********************************************************************
//*********************************************************************
#if defined(ETL_COMPILER_GCC) && defined(ETL_IN_UNIT_TEST)
#include "diagnostic_array_bounds_push.h"
#endif
iterator insert(const_iterator position, value_type value)
{
ETL_ASSERT(size() != CAPACITY, ETL_ERROR(vector_full));
ETL_ASSERT_CHECK_EXTRA(cbegin() <= position && position <= cend(), ETL_ERROR(vector_out_of_bounds));
iterator position_ = to_iterator(position);
if (size() != CAPACITY)
{
if (position_ != end())
{
++p_end;
etl::mem_move(position_, end() - 1, position_ + 1);
*position_ = value;
}
else
{
*p_end++ = value;
}
}
return position_;
}
#if defined(ETL_COMPILER_GCC) && defined(ETL_IN_UNIT_TEST)
#include "diagnostic_pop.h"
#endif
//*************************************************************************
//*************************************************************************
#if defined(ETL_COMPILER_GCC) && defined(ETL_IN_UNIT_TEST)
#include "diagnostic_array_bounds_push.h"
#endif
iterator emplace(const_iterator position)
{
ETL_ASSERT(size() != CAPACITY, ETL_ERROR(vector_full));
ETL_ASSERT_CHECK_EXTRA(cbegin() <= position && position <= cend(), ETL_ERROR(vector_out_of_bounds));
iterator position_ = to_iterator(position);
if (position_ != end())
{
++p_end;
etl::mem_move(position_, end() - 1, position_ + 1);
*position_ = ETL_NULLPTR;
}
else
{
*p_end++ = ETL_NULLPTR;
}
return position_;
}
#if defined(ETL_COMPILER_GCC) && defined(ETL_IN_UNIT_TEST)
#include "diagnostic_pop.h"
#endif
//*************************************************************************
//*************************************************************************
#if defined(ETL_COMPILER_GCC) && defined(ETL_IN_UNIT_TEST)
#include "diagnostic_array_bounds_push.h"
#endif
iterator emplace(const_iterator position, value_type value)
{
ETL_ASSERT(size() != CAPACITY, ETL_ERROR(vector_full));
ETL_ASSERT_CHECK_EXTRA(cbegin() <= position && position <= cend(), ETL_ERROR(vector_out_of_bounds));
iterator position_ = to_iterator(position);
if (position_ != end())
{
++p_end;
etl::mem_move(position_, end() - 1, position_ + 1);
*position_ = value;
}
else
{
*p_end++ = value;
}
return position_;
}
#if defined(ETL_COMPILER_GCC) && defined(ETL_IN_UNIT_TEST)
#include "diagnostic_pop.h"
#endif
//*********************************************************************
//*********************************************************************
#if defined(ETL_COMPILER_GCC) && defined(ETL_IN_UNIT_TEST)
#include "diagnostic_array_bounds_push.h"
#endif
void insert(const_iterator position, size_t n, value_type value)
{
ETL_ASSERT_OR_RETURN((size() + n) <= CAPACITY, ETL_ERROR(vector_full));
ETL_ASSERT_CHECK_EXTRA(cbegin() <= position && position <= cend(), ETL_ERROR(vector_out_of_bounds));
iterator position_ = to_iterator(position);
etl::mem_move(position_, p_end, position_ + n);
etl::fill_n(position_, n, value);
p_end += n;
}
#if defined(ETL_COMPILER_GCC) && defined(ETL_IN_UNIT_TEST)
#include "diagnostic_pop.h"
#endif
//*********************************************************************
//*********************************************************************
template <typename TIterator>
typename etl::enable_if<!etl::is_pointer<TIterator>::value, void>::type insert(const_iterator position, TIterator first, TIterator last)
{
size_t count = static_cast<size_t>(etl::distance(first, last));
iterator position_ = to_iterator(position);
ETL_ASSERT_OR_RETURN((size() + count) <= CAPACITY, ETL_ERROR(vector_full));
ETL_ASSERT_CHECK_EXTRA(cbegin() <= position && position <= cend(), ETL_ERROR(vector_out_of_bounds));
etl::mem_move(position_, p_end, position_ + count);
etl::copy(first, last, position_);
p_end += count;
}
//*********************************************************************
//*********************************************************************
template <typename TIterator>
typename etl::enable_if<etl::is_pointer<TIterator>::value, void>::type insert(const_iterator position, TIterator first, TIterator last)
{
size_t count = static_cast<size_t>(etl::distance(first, last));
iterator position_ = to_iterator(position);
ETL_ASSERT_OR_RETURN((size() + count) <= CAPACITY, ETL_ERROR(vector_full));
ETL_ASSERT_CHECK_EXTRA(cbegin() <= position && position <= cend(), ETL_ERROR(vector_out_of_bounds));
etl::mem_move(position_, p_end, position_ + count);
etl::mem_move((void**)first, (void**)last, position_);
p_end += count;
}
//*********************************************************************
//*********************************************************************
iterator erase(iterator i_element)
{
ETL_ASSERT_CHECK_EXTRA(cbegin() <= i_element && i_element < cend(), ETL_ERROR(vector_out_of_bounds));
etl::mem_move(i_element + 1, end(), i_element);
--p_end;
return i_element;
}
//*********************************************************************
//*********************************************************************
iterator erase(const_iterator i_element)
{
ETL_ASSERT_CHECK_EXTRA(cbegin() <= i_element && i_element < cend(), ETL_ERROR(vector_out_of_bounds));
iterator i_element_ = to_iterator(i_element);
etl::mem_move(i_element_ + 1, end(), i_element_);
--p_end;
return i_element_;
}
//*********************************************************************
//*********************************************************************
iterator erase(const_iterator first, const_iterator last)
{
ETL_ASSERT_CHECK_EXTRA(cbegin() <= first && first <= last && last <= cend(), ETL_ERROR(vector_out_of_bounds));
iterator first_ = to_iterator(first);
iterator last_ = to_iterator(last);
etl::mem_move(last_, end(), first_);
size_t n_delete = static_cast<size_t>(etl::distance(first, last));
// Just adjust the count.
p_end -= n_delete;
return first_;
}
//*************************************************************************
//*************************************************************************
etl::pvoidvector& operator=(const etl::pvoidvector& rhs)
{
if (&rhs != this)
{
this->initialise();
this->resize(rhs.size());
etl::mem_copy(rhs.data(), rhs.size(), this->data());
}
return *this;
}
#if ETL_USING_CPP11
//*************************************************************************
//*************************************************************************
etl::pvoidvector& operator=(etl::pvoidvector&& rhs)
{
if (&rhs != this)
{
this->initialise();
this->resize(rhs.size());
etl::mem_copy(rhs.data(), rhs.size(), this->data());
rhs.initialise();
}
return *this;
}
#endif
//*************************************************************************
//*************************************************************************
size_type size() const
{
return size_t(p_end - p_buffer);
}
//*************************************************************************
//*************************************************************************
bool empty() const
{
return (p_end == p_buffer);
}
//*************************************************************************
//*************************************************************************
bool full() const
{
return size() == CAPACITY;
}
//*************************************************************************
//*************************************************************************
size_t available() const
{
return max_size() - size();
}
protected:
//*********************************************************************
//*********************************************************************
pvoidvector(void** p_buffer_, size_t MAX_SIZE)
: vector_base(MAX_SIZE)
, p_buffer(p_buffer_)
, p_end(p_buffer_)
{
}
//*********************************************************************
//*********************************************************************
void initialise()
{
p_end = p_buffer;
}
//*************************************************************************
//*************************************************************************
void repair_buffer(void** p_buffer_)
{
uintptr_t length = static_cast<uintptr_t>(p_end - p_buffer);
p_buffer = p_buffer_;
p_end = p_buffer_ + length;
}
void** p_buffer;
void** p_end;
private:
//*************************************************************************
//*************************************************************************
iterator to_iterator(const_iterator itr) const
{
return const_cast<iterator>(itr);
}
// Disable copy construction.
pvoidvector(const pvoidvector&);
};
//***************************************************************************
//***************************************************************************
inline bool operator==(const etl::pvoidvector& lhs, const etl::pvoidvector& rhs)
{
return (lhs.size() == rhs.size()) && etl::equal(lhs.begin(), lhs.end(), rhs.begin());
}
//***************************************************************************
//***************************************************************************
inline bool operator!=(const etl::pvoidvector& lhs, const etl::pvoidvector& rhs)
{
return !(lhs == rhs);
}
//***************************************************************************
//***************************************************************************
inline bool operator<(const etl::pvoidvector& lhs, const etl::pvoidvector& rhs)
{
return etl::lexicographical_compare(lhs.begin(), lhs.end(), rhs.begin(), rhs.end());
}
//***************************************************************************
//***************************************************************************
inline bool operator>(const etl::pvoidvector& lhs, const etl::pvoidvector& rhs)
{
return (rhs < lhs);
}
//***************************************************************************
//***************************************************************************
inline bool operator<=(const etl::pvoidvector& lhs, const etl::pvoidvector& rhs)
{
return !(lhs > rhs);
}
//***************************************************************************
//***************************************************************************
inline bool operator>=(const etl::pvoidvector& lhs, const etl::pvoidvector& rhs)
{
return !(lhs < rhs);
}
} // namespace etl
#include "minmax_pop.h"
#undef ETL_IN_PVOIDVECTOR
#endif
algorithm.h
diagnostic_array_bounds_push.h
diagnostic_pop.h
error_handler.h
functional.h
etl::const_iterator
ETL_ASSERT
#define ETL_ASSERT(b, e)
Definition error_handler.h:511
etl::pvoidvector::full
bool full() const
Definition pvoidvector.h:731
etl::pvoidvector::erase
iterator erase(const_iterator first, const_iterator last)
Definition pvoidvector.h:660
etl::pvoidvector::assign
etl::enable_if<!etl::is_pointer< TIterator >::value, void >::type assign(TIterator first, TIterator last)
Definition pvoidvector.h:342
etl::pvoidvector::at
const_reference at(size_t i) const
Definition pvoidvector.h:269
etl::pvoidvector::begin
iterator begin()
Definition pvoidvector.h:76
etl::pvoidvector::emplace_back
void emplace_back(value_type value)
Definition pvoidvector.h:425
etl::pvoidvector::erase
iterator erase(iterator i_element)
Definition pvoidvector.h:623
etl::pvoidvector::data
pointer data()
Definition pvoidvector.h:319
etl::vector_base::max_size
size_type max_size() const
Definition vector_base.h:140
etl::pvoidvector::rend
const_reverse_iterator rend() const
Definition pvoidvector.h:157
etl::pvoidvector::operator[]
reference operator[](size_t i)
Definition pvoidvector.h:232
etl::pvoidvector::initialise
void initialise()
Initialise the vector.
Definition pvoidvector.h:760
etl::pvoidvector::empty
bool empty() const
Definition pvoidvector.h:722
etl::pvoidvector::insert
etl::enable_if<!etl::is_pointer< TIterator >::value, void >::type insert(const_iterator position, TIterator first, TIterator last)
Definition pvoidvector.h:580
etl::pvoidvector::end
const_iterator end() const
Definition pvoidvector.h:103
etl::vector_base::vector_base
vector_base(size_t max_size_)
Constructor.
Definition vector_base.h:150
etl::vector_base::CAPACITY
const size_type CAPACITY
The maximum number of elements in the vector.
Definition vector_base.h:170
etl::pvoidvector::emplace
iterator emplace(const_iterator position)
Definition pvoidvector.h:488
etl::pvoidvector::operator=
etl::pvoidvector & operator=(const etl::pvoidvector &rhs)
Assignment operator.
Definition pvoidvector.h:679
etl::pvoidvector::insert
void insert(const_iterator position, size_t n, value_type value)
Definition pvoidvector.h:555
etl::pvoidvector::rend
reverse_iterator rend()
Definition pvoidvector.h:148
etl::pvoidvector::insert
iterator insert(const_iterator position, value_type value)
Definition pvoidvector.h:453
etl::pvoidvector::clear
void clear()
Clears the vector.
Definition pvoidvector.h:401
etl::pvoidvector::assign
void assign(size_t n, value_type value)
Definition pvoidvector.h:389
etl::pvoidvector::emplace
iterator emplace(const_iterator position, value_type value)
Definition pvoidvector.h:520
etl::pvoidvector::resize
void resize(size_t new_size)
Definition pvoidvector.h:186
etl::pvoidvector::insert
etl::enable_if< etl::is_pointer< TIterator >::value, void >::type insert(const_iterator position, TIterator first, TIterator last)
Definition pvoidvector.h:603
etl::pvoidvector::pop_back
void pop_back()
Definition pvoidvector.h:436
etl::pvoidvector::crend
const_reverse_iterator crend() const
Definition pvoidvector.h:175
etl::pvoidvector::front
const_reference front() const
Definition pvoidvector.h:289
etl::pvoidvector::repair_buffer
void repair_buffer(void **p_buffer_)
Fix the internal pointers after a low level memory copy.
Definition pvoidvector.h:768
etl::pvoidvector::back
reference back()
Definition pvoidvector.h:299
etl::pvoidvector::end
iterator end()
Definition pvoidvector.h:94
etl::pvoidvector::uninitialized_resize
void uninitialized_resize(size_t new_size)
Definition pvoidvector.h:220
etl::pvoidvector::data
const_pointer data() const
Definition pvoidvector.h:328
etl::pvoidvector::front
reference front()
Definition pvoidvector.h:279
etl::pvoidvector::pvoidvector
pvoidvector(void **p_buffer_, size_t MAX_SIZE)
Constructor.
Definition pvoidvector.h:750
etl::pvoidvector::operator[]
const_reference operator[](size_t i) const
Definition pvoidvector.h:243
etl::pvoidvector::push_back
void push_back(value_type value)
Definition pvoidvector.h:412
etl::pvoidvector::back
const_reference back() const
Definition pvoidvector.h:309
etl::pvoidvector::available
size_t available() const
Definition pvoidvector.h:740
etl::pvoidvector::cend
const_iterator cend() const
Definition pvoidvector.h:121
etl::pvoidvector::begin
const_iterator begin() const
Definition pvoidvector.h:85
etl::pvoidvector::cbegin
const_iterator cbegin() const
Definition pvoidvector.h:112
etl::pvoidvector::size
size_type size() const
Definition pvoidvector.h:713
etl::pvoidvector::erase
iterator erase(const_iterator i_element)
Definition pvoidvector.h:639
etl::pvoidvector::crbegin
const_reverse_iterator crbegin() const
Definition pvoidvector.h:166
etl::pvoidvector::rbegin
reverse_iterator rbegin()
Definition pvoidvector.h:130
etl::pvoidvector::assign
etl::enable_if< etl::is_pointer< TIterator >::value, void >::type assign(TIterator first, TIterator last)
Definition pvoidvector.h:367
etl::pvoidvector::at
reference at(size_t i)
Definition pvoidvector.h:256
etl::pvoidvector::resize
void resize(size_t new_size, value_type value)
Definition pvoidvector.h:201
etl::pvoidvector::rbegin
const_reverse_iterator rbegin() const
Definition pvoidvector.h:139
etl::pvoidvector
Definition pvoidvector.h:55
etl::vector_empty
Definition vector_base.h:80
etl::vector_full
Definition vector_base.h:66
etl::vector_out_of_bounds
Definition vector_base.h:94
iterator.h
minmax_pop.h
minmax_push.h
etl
Definition absolute.h:40
etl::operator==
ETL_CONSTEXPR14 bool operator==(const etl::array< T, SIZE > &lhs, const etl::array< T, SIZE > &rhs)
Definition array.h:1078
etl::mem_move
T * mem_move(const T *sb, const T *se, T *db) ETL_NOEXCEPT
Definition memory.h:3302
etl::operator>
bool operator>(const etl::array< T, SIZE > &lhs, const etl::array< T, SIZE > &rhs)
Definition array.h:1130
etl::operator>=
bool operator>=(const etl::array< T, SIZE > &lhs, const etl::array< T, SIZE > &rhs)
Definition array.h:1144
etl::operator!=
ETL_CONSTEXPR14 bool operator!=(const etl::array< T, SIZE > &lhs, const etl::array< T, SIZE > &rhs)
Definition array.h:1090
etl::mem_copy
T * mem_copy(const T *sb, const T *se, T *db) ETL_NOEXCEPT
Definition memory.h:3260
etl::operator<
bool operator<(const etl::array< T, SIZE > &lhs, const etl::array< T, SIZE > &rhs)
Definition array.h:1103
etl::operator<=
bool operator<=(const etl::array< T, SIZE > &lhs, const etl::array< T, SIZE > &rhs)
Definition array.h:1117
platform.h
etl::iterator
iterator
Definition iterator.h:482
etl::type
type_traits.h
vector_base.h