28 template<
typename... Args>
63 if (node && node !=
mHead) {
72 pos->prev->next = node;
206 for (fl::size i = 0; i < count; ++i) {
213 for (
const auto&
value : other) {
238 if (
this != &other) {
240 for (
const auto&
value : other) {
248 if (
this != &other) {
257 return mHead->next->data;
261 return mHead->next->data;
265 return mHead->prev->data;
269 return mHead->prev->data;
365 while (first != last) {
366 first =
erase(first);
387 template<
typename... Args>
395 template<
typename... Args>
420 while (
mSize > count) {
423 while (
mSize < count) {
429 if (
this != &other) {
431 fl::size temp_size =
mSize;
438 other.
mHead = temp_head;
439 other.
mSize = temp_size;
447 while (it !=
end()) {
456 template<
typename Predicate>
459 while (it !=
end()) {
477 current->
prev = temp;
478 current = current->
prev;
479 }
while (current !=
mHead);
488 while (it !=
end()) {
491 if (next !=
end() && *it == *next) {
512 while (insert_pos != sorted_end->
next && insert_pos->
data < current->
data) {
513 insert_pos = insert_pos->
next;
517 if (insert_pos == current) {
518 sorted_end = current;
528 template<
typename Compare>
542 while (insert_pos != sorted_end->
next && comp(insert_pos->
data, current->
data)) {
543 insert_pos = insert_pos->
next;
547 if (insert_pos == current) {
548 sorted_end = current;
578 for (
iterator it = first; it != last; ++it) {
585 Node* before_first = first_node->
prev;
586 Node* after_last = last_node;
587 Node* last_in_range = last_node->
prev;
590 before_first->
next = after_last;
591 after_last->
prev = before_first;
597 before_pos->
next = first_node;
598 first_node->
prev = before_pos;
599 last_in_range->
next = pos_node;
600 pos_node->
prev = last_in_range;
604 other.
mSize -= count;
636 if (!(*it1 == *it2)) {
644 return !(*
this == other);
649 it1 !=
end() && it2 != other.
end(); ++it1, ++it2) {
661 return *
this < other || *
this == other;
665 return other < *
this;
669 return *
this > other || *
this == other;
const_iterator operator++(int)
const_iterator & operator--()
const_iterator(const iterator &it)
const T * operator->() const
const_iterator & operator++()
const_iterator(const Node *node)
fl::ptrdiff_t difference_type
const T & operator*() const
bool operator==(const const_iterator &other) const
fl::bidirectional_iterator_tag iterator_category
bool operator!=(const const_iterator &other) const
const_iterator operator--(int)
fl::ptrdiff_t difference_type
fl::bidirectional_iterator_tag iterator_category
bool operator!=(const iterator &other) const
bool operator==(const iterator &other) const
void push_front(T &&value)
memory_resource * mResource
bool operator!=(const list &other) const
const_reverse_iterator rend() const
list(fl::initializer_list< T > init)
list(fl::size count, const T &value=T())
void splice(iterator pos, list &other, iterator first, iterator last)
const_iterator begin() const
iterator insert(iterator pos, const T &value)
iterator erase(iterator pos)
bool operator>=(const list &other) const
const_iterator end() const
iterator find(const T &value)
void link_before(Node *pos, Node *node)
void remove(const T &value)
bool operator>(const list &other) const
void splice(iterator pos, list &other, iterator it)
void emplace_front(Args &&... args)
const_iterator find(const T &value) const
const_iterator cend() const
fl::reverse_iterator< iterator > reverse_iterator
void splice(iterator pos, list &other)
fl::reverse_iterator< const_iterator > const_reverse_iterator
Node * create_node(const T &value)
bool has(const T &value) const
void push_front(const T &value)
iterator insert(iterator pos, T &&value)
void push_back(T &&value)
void remove_if(Predicate pred)
list(memory_resource *resource)
reverse_iterator rbegin()
const_iterator cbegin() const
void resize(fl::size count)
void destroy_node(Node *node)
const_reverse_iterator rbegin() const
list(const list &other) FL_NOEXCEPT
list(list &&other) FL_NOEXCEPT
memory_resource * get_memory_resource() const
Node * create_node(T &&value)
list & operator=(const list &other) FL_NOEXCEPT
iterator erase(iterator first, iterator last)
void push_back(const T &value)
void resize(fl::size count, const T &value)
list & operator=(list &&other) FL_NOEXCEPT
bool operator<=(const list &other) const
void emplace_back(Args &&... args)
bool operator<(const list &other) const
bool operator==(const list &other) const
A doubly-linked list container.
Polymorphic memory resource base class (PMR-style).
Reverse iterator adapter - reverses the direction of a bidirectional iterator.
PMR-style polymorphic memory resource for type-erased allocation.
constexpr T && forward(typename remove_reference< T >::type &t) FL_NOEXCEPT
constexpr remove_reference< T >::type && move(T &&t) FL_NOEXCEPT
constexpr int type_rank< T >::value
void init(Context &ctx, int w, int h)
memory_resource * default_memory_resource() FL_NOEXCEPT
Get the default memory resource (wraps fl::Malloc / fl::Free / fl::realloc).
void swap(array< T, N > &lhs, array< T, N > &rhs) FL_NOEXCEPT
constexpr T && forward(typename remove_reference< T >::type &t) FL_NOEXCEPT
Base definition for an LED controller.