12#ifndef ROC_CORE_LIST_H_
13#define ROC_CORE_LIST_H_
38 template <
class TT>
class OwnershipPolicy = RefCountedOwnership,
39 class Node = ListNode<> >
65 return impl_.
size() == 0;
79 return from_node_data_(data);
87 return from_node_data_(data);
158 T*
elem = from_node_data_(data);
173 T*
elem = from_node_data_(data);
229 return static_cast<const Node&
>(
elem).list_data();
232 static T* from_node_data_(ListData* data) {
233 return static_cast<T*
>(
static_cast<Node*
>(Node::list_node(data)));
ListData * nextof(ListData *node) const
Get list node next to given one.
ListData * pop_back()
Remove last node and return.
ListData * head()
Get list head (non-node node).
ListData * back() const
Get last list node.
void remove(ListData *node)
Remove node from list.
ListData * front() const
Get first list node.
void insert(ListData *node, ListData *before)
Insert node into list.
bool contains(const ListData *node) const
Check if node belongs to list.
ListData * prevof(ListData *node) const
Get list node previous to given one.
ListData * pop_front()
Remove first node and return.
size_t size() const
Get number of nodes in list.
Intrusive doubly-linked list.
List()
Initialize empty list.
Pointer prevof(T &elem) const
Get list element previous to given one.
Pointer nextof(T &elem) const
Get list element next to given one.
void remove(T &elem)
Remove element from list.
Pointer front() const
Get first list element.
~List()
Release ownership of containing objects.
size_t size() const
Get number of elements in list.
Pointer back() const
Get last list element.
OwnershipPolicy< T >::Pointer Pointer
Pointer type.
void pop_back()
Pop last element from list.
void push_front(T &elem)
Prepend element to list.
void insert_after(T &elem, T &after)
Insert element into list.
void insert_before(T &elem, T &before)
Insert element into list.
bool contains(const T &elem)
Check if element belongs to list.
void push_back(T &elem)
Append element to list.
void pop_front()
Pop first element from list.
bool is_empty() const
Check if size is zero.
Base class for non-copyable objects.
Shared ownership intrusive pointer.
Intrusive doubly-linked list implementation.
Commonly used types and functions.
ListData * next
Next list element.