31#ifndef ETL_FORWARD_LIST_INCLUDED
32#define ETL_FORWARD_LIST_INCLUDED
46#include "static_assert.h"
70 forward_list_exception(string_type reason_, string_type file_name_, numeric_type line_number_)
71 :
exception(reason_, file_name_, line_number_)
84 forward_list_full(string_type file_name_, numeric_type line_number_)
98 forward_list_empty(string_type file_name_, numeric_type line_number_)
112 forward_list_iterator(string_type file_name_, numeric_type line_number_)
122 class forward_list_no_pool :
public forward_list_exception
126 forward_list_no_pool(string_type file_name_, numeric_type line_number_)
127 : forward_list_exception(ETL_ERROR_TEXT(
"list:no pool", ETL_FORWARD_LIST_FILE_ID
"D"), file_name_, line_number_)
193 while (p_node != ETL_NULLPTR)
196 p_node = p_node->next;
245 node_t* p_current = p_last->next;
246 node_t* p_next = p_current->next;
248 p_current->next = ETL_NULLPTR;
250 while (p_next != ETL_NULLPTR)
254 p_next = p_current->next;
256 p_current->next = p_last;
311 join(&node, position.next);
312 join(&position, &node);
359 template <
typename T>
364 typedef T value_type;
366 typedef const T* const_pointer;
367 typedef T& reference;
368 typedef const T& const_reference;
369 typedef size_t size_type;
372 typedef T&& rvalue_reference;
380 struct data_node_t :
public node_t
382 explicit data_node_t(
const T& value_)
399 friend class iforward_list;
400 friend class const_iterator;
403 : p_node(ETL_NULLPTR)
412 iterator(
const iterator& other)
413 : p_node(other.p_node)
417 iterator& operator++()
419 p_node = p_node->next;
423 iterator operator++(
int)
425 iterator temp(*
this);
426 p_node = p_node->next;
430 iterator operator=(
const iterator& other)
432 p_node = other.p_node;
436 reference operator*()
const
438 return iforward_list::data_cast(p_node)->value;
441 pointer operator&()
const
443 return &(iforward_list::data_cast(p_node)->value);
446 pointer operator->()
const
448 return &(iforward_list::data_cast(p_node)->value);
451 friend bool operator==(
const iterator& lhs,
const iterator& rhs)
453 return lhs.p_node == rhs.p_node;
456 friend bool operator!=(
const iterator& lhs,
const iterator& rhs)
458 return !(lhs == rhs);
469 class const_iterator :
public etl::iterator<ETL_OR_STD::forward_iterator_tag, const T>
473 friend class iforward_list;
476 : p_node(ETL_NULLPTR)
480 const_iterator(
node_t* node)
485 const_iterator(
const node_t* node)
491 : p_node(other.p_node)
495 const_iterator(
const const_iterator& other)
496 : p_node(other.p_node)
500 const_iterator& operator++()
502 p_node = p_node->next;
506 const_iterator operator++(
int)
508 const_iterator temp(*
this);
509 p_node = p_node->next;
513 const_iterator& operator=(
const const_iterator& other)
515 p_node = other.p_node;
519 const_reference operator*()
const
521 return iforward_list::data_cast(p_node)->value;
524 const_pointer operator&()
const
526 return &(iforward_list::data_cast(p_node)->value);
529 const_pointer operator->()
const
531 return &(iforward_list::data_cast(p_node)->value);
534 friend bool operator==(
const const_iterator& lhs,
const const_iterator& rhs)
536 return lhs.p_node == rhs.p_node;
539 friend bool operator!=(
const const_iterator& lhs,
const const_iterator& rhs)
541 return !(lhs == rhs);
549 typedef typename etl::iterator_traits<iterator>::difference_type difference_type;
602 const_iterator
end()
const
604 return const_iterator();
612 return const_iterator();
631 return data_cast(*
get_head()).value;
642 return data_cast(*
get_head()).value;
652 template <
typename TIterator>
653 void assign(TIterator first, TIterator last,
typename etl::enable_if<!etl::is_integral<TIterator>::value,
int>
::type = 0)
655#if ETL_IS_DEBUG_BUILD
656 difference_type d = etl::distance(first, last);
665 while (first != last)
671 join(p_last_node, &data_node);
672 data_node.next = ETL_NULLPTR;
673 p_last_node = &data_node;
692 join(p_last_node, &data_node);
693 data_node.next = ETL_NULLPTR;
694 p_last_node = &data_node;
722#if ETL_USING_CPP11 && ETL_NOT_USING_STLPORT && !defined(ETL_FORWARD_LIST_FORCE_CPP03_IMPLEMENTATION)
726 template <
typename... Args>
729 ETL_ASSERT_CHECK_PUSH_POP(!
full(), ETL_ERROR(forward_list_full));
732 ::new (&(p_data_node->value)) T(
etl::forward<Args>(args)...);
733 ETL_INCREMENT_DEBUG_COUNT;
746 ::new (&(p_data_node->value)) T();
747 ETL_INCREMENT_DEBUG_COUNT;
755 template <
typename T1>
761 ::new (&(p_data_node->value)) T(value1);
762 ETL_INCREMENT_DEBUG_COUNT;
770 template <
typename T1,
typename T2>
776 ::new (&(p_data_node->value)) T(value1, value2);
777 ETL_INCREMENT_DEBUG_COUNT;
785 template <
typename T1,
typename T2,
typename T3>
786 reference
emplace_front(
const T1& value1,
const T2& value2,
const T3& value3)
791 ::new (&(p_data_node->value)) T(value1, value2, value3);
792 ETL_INCREMENT_DEBUG_COUNT;
800 template <
typename T1,
typename T2,
typename T3,
typename T4>
801 reference
emplace_front(
const T1& value1,
const T2& value2,
const T3& value3,
const T4& value4)
806 ::new (&(p_data_node->value)) T(value1, value2, value3, value4);
807 ETL_INCREMENT_DEBUG_COUNT;
851 iterator i_node =
begin();
852 iterator i_last_node;
855 while ((i < n) && (i_node !=
end()))
858 i_last_node = i_node;
867 else if (i_node ==
end())
889 return iterator(&data_node);
892#if ETL_USING_CPP11 && ETL_NOT_USING_STLPORT && !defined(ETL_FORWARD_LIST_FORCE_CPP03_IMPLEMENTATION)
896 template <
typename... Args>
902 ::new (&(p_data_node->value)) T(
etl::forward<Args>(args)...);
903 ETL_INCREMENT_DEBUG_COUNT;
917 ::new (&(p_data_node->value)) T();
918 ETL_INCREMENT_DEBUG_COUNT;
921 return iterator(p_data_node);
927 template <
typename T1>
933 ::new (&(p_data_node->value)) T(value1);
934 ETL_INCREMENT_DEBUG_COUNT;
937 return iterator(p_data_node);
943 template <
typename T1,
typename T2>
944 iterator
emplace_after(const_iterator position,
const T1& value1,
const T2& value2)
949 ::new (&(p_data_node->value)) T(value1, value2);
950 ETL_INCREMENT_DEBUG_COUNT;
953 return iterator(p_data_node);
959 template <
typename T1,
typename T2,
typename T3>
960 iterator
emplace_after(const_iterator position,
const T1& value1,
const T2& value2,
const T3& value3)
965 ::new (&(p_data_node->value)) T(value1, value2, value3);
966 ETL_INCREMENT_DEBUG_COUNT;
969 return iterator(p_data_node);
975 template <
typename T1,
typename T2,
typename T3,
typename T4>
976 iterator
emplace_after(const_iterator position,
const T1& value1,
const T2& value2,
const T3& value3,
const T4& value4)
981 ::new (&(p_data_node->value)) T(value1, value2, value3, value4);
982 ETL_INCREMENT_DEBUG_COUNT;
985 return iterator(p_data_node);
993 iterator
insert_after(const_iterator position,
size_t n,
const T& value)
997 for (
size_t i = 0UL; !
full() && (i < n); ++i)
1009 return to_iterator(position);
1016 template <
typename TIterator>
1017 iterator
insert_after(const_iterator position, TIterator first, TIterator last,
1018 typename etl::enable_if<!etl::is_integral<TIterator>::value,
int>
::type = 0)
1020#if ETL_IS_DEBUG_BUILD
1021 difference_type d = etl::distance(first, last);
1025 while (first != last)
1034 return to_iterator(position);
1042 iterator next(position);
1049 remove_node_after(*position.p_node);
1061 iterator next(position);
1068 remove_node_after(*position.p_node);
1080 if (first !=
end() && (first != last))
1082 node_t* p_first = to_iterator(first).p_node;
1083 node_t* p_last = to_iterator(last).p_node;
1084 node_t* p_next = p_first->next;
1087 join(p_first, p_last);
1092 while (p_first != p_last)
1094 p_next = p_first->next;
1095 destroy_data_node(
static_cast<data_node_t&
>(*p_first));
1099 if (p_next == ETL_NULLPTR)
1105 return iterator(p_last);
1119 void move_after(const_iterator from_before, const_iterator to_before)
1121 if (from_before == to_before)
1126 node_t* p_from_before =
const_cast<node_t*
>(from_before.p_node);
1127 node_t* p_to_before =
const_cast<node_t*
>(to_before.p_node);
1129 node_t* p_from = p_from_before->next;
1132 join(p_from_before, p_from->next);
1135 join(p_from, p_to_before->next);
1136 join(p_to_before, p_from);
1144 void move_after(const_iterator first_before, const_iterator last, const_iterator to_before)
1146 if ((first_before == to_before) || (last == to_before))
1153 for (const_iterator item = first_before; item != last; ++item)
1159 node_t* p_first_before =
const_cast<node_t*
>(first_before.p_node);
1161 node_t* p_to_before =
const_cast<node_t*
>(to_before.p_node);
1162 node_t* p_first = p_first_before->next;
1163 node_t* p_final = p_first_before;
1166 while (p_final->next != p_last)
1168 p_final = p_final->next;
1172 join(p_first_before, p_final->next);
1175 join(p_final, p_to_before->next);
1176 join(p_to_before, p_first);
1192 template <
typename TIsEqual>
1201 node_t* current = last->next;
1203 while (current != ETL_NULLPTR)
1206 if (isEqual(data_cast(current)->value, data_cast(last)->value))
1208 remove_node_after(*last);
1216 current = last->next;
1254 template <
typename TCompare>
1263 int number_of_merges;
1278 number_of_merges = 0;
1280 while (p_left !=
end())
1287 for (
int i = 0; i < list_size; ++i)
1293 if (p_right ==
end())
1300 right_size = list_size;
1303 while (left_size > 0 || (right_size > 0 && p_right !=
end()))
1313 else if (right_size == 0 || p_right ==
end())
1320 else if (!
compare(*p_right, *p_left))
1339 join(p_head.p_node, p_node.p_node);
1345 join(p_tail.p_node, p_node.p_node);
1349 p_tail.p_node->next = ETL_NULLPTR;
1357 if (number_of_merges <= 1)
1370 void remove(
const T& value)
1375 while (i_item !=
end())
1377 if (*i_item == value)
1392 template <
typename TPredicate>
1395 iterator i_item =
begin();
1398 while (i_item !=
end())
1400 if (predicate(*i_item))
1431 move_container(etl::move(rhs));
1466 ETL_RESET_DEBUG_COUNT;
1474 while (p_first != ETL_NULLPTR)
1476 p_next = p_first->next;
1477 destroy_data_node(
static_cast<data_node_t&
>(*p_first));
1492 ::new (&(p_node->value)) T(value);
1493 ETL_INCREMENT_DEBUG_COUNT;
1505 ::new (&(p_node->value)) T(
etl::move(value));
1506 ETL_INCREMENT_DEBUG_COUNT;
1528 this->start_node.next = rhs.start_node.next;
1530 ETL_SET_DEBUG_COUNT(ETL_OBJECT_GET_DEBUG_COUNT(rhs));
1532 ETL_OBJECT_RESET_DEBUG_COUNT(rhs);
1533 rhs.start_node.next = ETL_NULLPTR;
1537 node_t* p_last_node = &this->start_node;
1543 while (first != last)
1549 join(p_last_node, &data_node);
1550 data_node.next = ETL_NULLPTR;
1551 p_last_node = &data_node;
1598 void remove_node_after(
node_t& node)
1601 node_t* p_node = node.next;
1603 if (p_node != ETL_NULLPTR)
1606 join(&node, p_node->next);
1609 destroy_data_node(
static_cast<data_node_t&
>(*p_node));
1629 ETL_DECREMENT_DEBUG_COUNT;
1638#if defined(ETL_POLYMORPHIC_FORWARD_LIST) || defined(ETL_POLYMORPHIC_CONTAINERS)
1657 return iterator(
const_cast<node_t*
>(itr.p_node));
1665 template <
typename T, const
size_t MAX_SIZE_>
1670 ETL_STATIC_ASSERT((MAX_SIZE_ > 0U),
"Zero capacity etl::forward_list is not valid");
1672 static ETL_CONSTANT
size_t MAX_SIZE = MAX_SIZE_;
1676 typedef T value_type;
1678 typedef const T* const_pointer;
1679 typedef T& reference;
1680 typedef const T& const_reference;
1681 typedef size_t size_type;
1698 this->
assign(initial_size, value);
1717 this->move_container(etl::move(other));
1724 template <
typename TIterator>
1725 forward_list(TIterator first, TIterator last,
typename etl::enable_if<!etl::is_integral<TIterator>::value,
int>
::type = 0)
1728 this->
assign(first, last);
1731#if ETL_HAS_INITIALIZER_LIST
1738 this->assign(init.begin(), init.end());
1769 this->move_container(etl::move(rhs));
1781 template <
typename T, const
size_t MAX_SIZE_>
1787#if ETL_USING_CPP17 && ETL_HAS_INITIALIZER_LIST
1788 template <
typename... T>
1789 forward_list(T...) -> forward_list<
typename etl::common_type_t<T...>,
sizeof...(T)>;
1795#if ETL_USING_CPP11 && ETL_HAS_INITIALIZER_LIST
1796 template <
typename... T>
1797 constexpr auto make_forward_list(T&&... t) -> etl::forward_list<
typename etl::common_type_t<T...>,
sizeof...(T)>
1799 return {etl::forward<T>(t)...};
1807 template <
typename T>
1812 typedef T value_type;
1814 typedef const T* const_pointer;
1815 typedef T& reference;
1816 typedef const T& const_reference;
1817 typedef size_t size_type;
1844 this->
assign(initial_size, T());
1853 this->
assign(initial_size, value);
1879 :
etl::
iforward_list<T>(*other.p_node_pool, other.p_node_pool->max_size(), true)
1881 this->move_container(etl::move(other));
1887 forward_list_ext(forward_list_ext&& other,
etl::ipool& node_pool)
1888 :
etl::iforward_list<T>(node_pool, node_pool.max_size(), true)
1890 this->move_container(etl::move(other));
1897 template <
typename TIterator>
1899 typename etl::enable_if<!etl::is_integral<TIterator>::value,
int>
::type = 0)
1902 this->
assign(first, last);
1905#if ETL_HAS_INITIALIZER_LIST
1912 this->assign(init.begin(), init.end());
1943 this->move_container(etl::move(rhs));
1978 template <
typename T>
1990 template <
typename T>
1993 return !(lhs == rhs);
2004 template <
typename T>
2007 return etl::lexicographical_compare(lhs.
begin(), lhs.
end(), rhs.
begin(), rhs.
end());
2018 template <
typename T>
2032 template <
typename T>
2035 return !(lhs > rhs);
2046 template <
typename T>
2049 return !(lhs < rhs);
Template deduction guides.
Definition forward_list.h:1809
void set_pool(etl::ipool &pool)
Set the pool instance.
Definition forward_list.h:1952
etl::ipool & get_pool() const
Get the pool instance.
Definition forward_list.h:1966
forward_list_ext()
Default constructor.
Definition forward_list.h:1824
forward_list_ext(etl::ipool &node_pool)
Default constructor.
Definition forward_list.h:1832
forward_list_ext(size_t initial_size, const T &value, etl::ipool &node_pool)
Construct from size and value.
Definition forward_list.h:1850
forward_list_ext(TIterator first, TIterator last, etl::ipool &node_pool, typename etl::enable_if<!etl::is_integral< TIterator >::value, int >::type=0)
Construct from range.
Definition forward_list.h:1898
forward_list_ext & operator=(const forward_list_ext &rhs)
Assignment operator.
Definition forward_list.h:1927
forward_list_ext(const forward_list_ext &other)
Copy constructor. Implicit pool.
Definition forward_list.h:1859
forward_list_ext(size_t initial_size, etl::ipool &node_pool)
Construct from size.
Definition forward_list.h:1841
forward_list_ext(const forward_list_ext &other, etl::ipool &node_pool)
Copy constructor. Explicit pool.
Definition forward_list.h:1868
~forward_list_ext()
Destructor.
Definition forward_list.h:1919
Definition forward_list.h:1667
~forward_list()
Destructor.
Definition forward_list.h:1745
forward_list(size_t initial_size, const T &value=T())
Construct from size and value.
Definition forward_list.h:1695
forward_list(const forward_list &other)
Copy constructor.
Definition forward_list.h:1704
forward_list & operator=(const forward_list &rhs)
Assignment operator.
Definition forward_list.h:1753
forward_list()
Default constructor.
Definition forward_list.h:1686
forward_list(TIterator first, TIterator last, typename etl::enable_if<!etl::is_integral< TIterator >::value, int >::type=0)
Construct from range.
Definition forward_list.h:1725
iterator.
Definition forward_list.h:396
ETL_CONSTEXPR14 TIterator remove(TIterator first, TIterator last, const T &value)
Definition algorithm.h:2344
ETL_CONSTEXPR14 bool operator!=(const etl::bitset< Active_Bits, TElement > &lhs, const etl::bitset< Active_Bits, TElement > &rhs) ETL_NOEXCEPT
Definition bitset_new.h:2529
#define ETL_ASSERT(b, e)
Definition error_handler.h:511
ETL_EXCEPTION_CONSTEXPR exception(string_type reason_, string_type, numeric_type)
Constructor.
Definition exception.h:81
Definition exception.h:59
iterator end()
Gets the end of the forward_list.
Definition forward_list.h:594
void resize(size_t n)
Resizes the forward_list.
Definition forward_list.h:826
reference emplace_front(const T1 &value1)
Emplaces a value to the front of the list..
Definition forward_list.h:756
size_type MAX_SIZE
The maximum size of the forward_list.
Definition forward_list.h:350
void unique(TIsEqual isEqual)
Definition forward_list.h:1193
void assign(TIterator first, TIterator last, typename etl::enable_if<!etl::is_integral< TIterator >::value, int >::type=0)
Definition forward_list.h:653
iforward_list & operator=(const iforward_list &rhs)
Assignment operator.
Definition forward_list.h:1415
iterator emplace_after(const_iterator position, const T1 &value1)
Emplaces a value to the forward_list after the specified position.
Definition forward_list.h:928
forward_list_base(bool pool_is_shared_)
The constructor that is called from derived classes.
Definition forward_list.h:267
reference emplace_front(const T1 &value1, const T2 &value2, const T3 &value3)
Emplaces a value to the front of the list..
Definition forward_list.h:786
const_iterator cbegin() const
Gets the beginning of the forward_list.
Definition forward_list.h:586
iterator before_begin()
Gets before the beginning of the forward_list.
Definition forward_list.h:570
iterator erase_after(iterator position)
Erases the value at the specified position.
Definition forward_list.h:1040
void insert_node_after(node_t &position, node_t &node)
Insert a node.
Definition forward_list.h:308
iterator erase_after(const_iterator position)
Erases the value at the specified position.
Definition forward_list.h:1059
iterator emplace_after(const_iterator position, const T1 &value1, const T2 &value2, const T3 &value3, const T4 &value4)
Emplaces a value to the forward_list after the specified position.
Definition forward_list.h:976
void unique()
Definition forward_list.h:1183
node_t start_node
The node that acts as the forward_list start.
Definition forward_list.h:348
iterator insert_after(const_iterator position, size_t n, const T &value)
Definition forward_list.h:993
size_type max_size() const
Gets the maximum possible size of the forward_list.
Definition forward_list.h:168
forward_list_base(etl::ipool &node_pool_, size_type max_size_, bool pool_is_shared_)
The constructor that is called from derived classes.
Definition forward_list.h:277
reference emplace_front(const T1 &value1, const T2 &value2, const T3 &value3, const T4 &value4)
Emplaces a value to the front of the list..
Definition forward_list.h:801
void resize(size_t n, T value)
Definition forward_list.h:836
iforward_list(etl::ipool &node_pool, size_t max_size_, bool pool_is_shared_)
Constructor.
Definition forward_list.h:1450
size_t available() const
Definition forward_list.h:228
ETL_DECLARE_DEBUG_COUNT
Internal debugging.
Definition forward_list.h:352
size_type capacity() const
Gets the maximum possible size of the forward_list.
Definition forward_list.h:176
void clear()
Clears the forward_list.
Definition forward_list.h:618
iterator emplace_after(const_iterator position)
Emplaces a value to the forward_list after the specified position.
Definition forward_list.h:912
iterator emplace_after(const_iterator position, const T1 &value1, const T2 &value2)
Emplaces a value to the forward_list after the specified position.
Definition forward_list.h:944
node_t * get_head()
Get the head node.
Definition forward_list.h:292
const_iterator before_begin() const
Gets before the beginning of the forward_list.
Definition forward_list.h:578
etl::ipool * get_node_pool()
Get the node pool instance.
Definition forward_list.h:343
void reverse()
Reverses the forward_list.
Definition forward_list.h:237
const_iterator cend() const
Gets the end of the forward_list.
Definition forward_list.h:610
const_iterator begin() const
Gets the beginning of the forward_list.
Definition forward_list.h:562
void join(node_t *left, node_t *right)
Join two nodes.
Definition forward_list.h:326
size_t size_type
The type used for determining the size of forward_list.
Definition forward_list.h:155
reference front()
Definition forward_list.h:628
void move_after(const_iterator first_before, const_iterator last, const_iterator to_before)
Definition forward_list.h:1144
bool pool_is_shared
If true then the pool is shared between lists.
Definition forward_list.h:351
void push_front(const T &value)
Pushes a value to the front of the forward_list.
Definition forward_list.h:701
iterator insert_after(const_iterator position, const T &value)
Inserts a value to the forward_list after the specified position.
Definition forward_list.h:882
reference emplace_front(const T1 &value1, const T2 &value2)
Emplaces a value to the front of the list..
Definition forward_list.h:771
iterator emplace_after(const_iterator position, const T1 &value1, const T2 &value2, const T3 &value3)
Emplaces a value to the forward_list after the specified position.
Definition forward_list.h:960
void sort()
Definition forward_list.h:1224
void sort(TCompare compare)
Definition forward_list.h:1255
void initialise()
Initialise the forward_list.
Definition forward_list.h:1458
etl::ipool * p_node_pool
The pool of data nodes used in the list.
Definition forward_list.h:349
const_reference front() const
Definition forward_list.h:639
void remove_if(TPredicate predicate)
Removes according to a predicate.
Definition forward_list.h:1393
bool has_shared_pool() const
true if the list has a shared pool.
Definition forward_list.h:160
bool full() const
Checks to see if the forward_list is full.
Definition forward_list.h:218
void pop_front()
Removes a value from the front of the forward_list.
Definition forward_list.h:816
iterator insert_after(const_iterator position, TIterator first, TIterator last, typename etl::enable_if<!etl::is_integral< TIterator >::value, int >::type=0)
Definition forward_list.h:1017
~forward_list_base()
Destructor.
Definition forward_list.h:287
iterator erase_after(const_iterator first, const_iterator last)
Erases a range of elements.
Definition forward_list.h:1078
bool empty() const
Checks to see if the forward_list is empty.
Definition forward_list.h:210
void assign(size_t n, const T &value)
Assigns 'n' copies of a value to the forward_list.
Definition forward_list.h:680
void set_node_pool(etl::ipool &node_pool_)
Set the node pool instance.
Definition forward_list.h:334
void move_after(const_iterator from_before, const_iterator to_before)
Definition forward_list.h:1119
~iforward_list()
Destructor.
Definition forward_list.h:1647
reference emplace_front()
Emplaces a value to the front of the list..
Definition forward_list.h:741
size_type size() const
Gets the size of the forward_list.
Definition forward_list.h:184
data_node_t & allocate_data_node(const_reference value)
Allocate a data_node_t.
Definition forward_list.h:1489
const_iterator end() const
Gets the end of the forward_list.
Definition forward_list.h:602
iterator begin()
Gets the beginning of the forward_list.
Definition forward_list.h:554
iforward_list(bool pool_is_shared_)
Constructor.
Definition forward_list.h:1442
const node_t * get_head() const
Get the head node.
Definition forward_list.h:300
bool is_trivial_list() const
Is the forward_list a trivial length?
Definition forward_list.h:318
Definition forward_list.h:137
Definition forward_list.h:95
Definition forward_list.h:67
Definition forward_list.h:81
Definition forward_list.h:109
Definition forward_list.h:361
Definition forward_list.h:123
T * allocate()
Definition ipool.h:333
bitset_ext
Definition absolute.h:40
ETL_CONSTEXPR14 bool operator==(const etl::array< T, SIZE > &lhs, const etl::array< T, SIZE > &rhs)
Definition array.h:1081
bool operator>(const etl::array< T, SIZE > &lhs, const etl::array< T, SIZE > &rhs)
Definition array.h:1133
bool operator>=(const etl::array< T, SIZE > &lhs, const etl::array< T, SIZE > &rhs)
Definition array.h:1147
ETL_CONSTEXPR14 bool operator!=(const etl::array< T, SIZE > &lhs, const etl::array< T, SIZE > &rhs)
Definition array.h:1093
bool operator<(const etl::array< T, SIZE > &lhs, const etl::array< T, SIZE > &rhs)
Definition array.h:1106
bool operator<=(const etl::array< T, SIZE > &lhs, const etl::array< T, SIZE > &rhs)
Definition array.h:1120
Definition functional.h:305
The node element in the forward_list.
Definition forward_list.h:144
The data node element in the forward_list.
Definition forward_list.h:381
iterator
Definition iterator.h:424
Definition functional.h:201