|
| | hxlist (deleter_t_ deleter_=deleter_t_()) |
| | ~hxlist (void) |
| bool | operator== (const hxlist &x_) const |
| bool | operator< (const hxlist &x_) const |
| template<hxrange_concept_ range_t_, hxenable_if_t<!hxis_lvalue_reference< range_t_ >(), int > = 0> |
| void | add_range (range_t_ &&range_) noexcept |
| const T & | back (void) const |
| T & | back (void) |
| const_iterator | begin (void) const |
| iterator | begin (void) |
| const_iterator | cbegin (void) const |
| const_iterator | cend (void) const |
| template<typename deleter_u_> |
| void | clear (deleter_u_ &&deleter_) noexcept |
| void | clear (void) |
| bool | empty (void) const |
| const_iterator | end (void) const |
| iterator | end (void) |
| template<typename deleter_u_> |
| void | erase (const_iterator it_, deleter_u_ &&deleter_) noexcept |
| void | erase (const_iterator it_) noexcept |
| hxptr< T, deleter_t_ > | extract (const_iterator it_) |
| template<typename callable_t_> |
| const_iterator | find_if (callable_t_ &&callable_) const |
| template<typename callable_t_> |
| iterator | find_if (callable_t_ &&callable_) |
| template<typename callable_t_> |
| void | for_each (callable_t_ &&callable_) const |
| template<typename callable_t_> |
| void | for_each (callable_t_ &&callable_) |
| const deleter_t_ & | deleter (void) const |
| deleter_t_ & | deleter (void) |
| const T & | front (void) const |
| T & | front (void) |
| template<typename deleter_u_> |
| iterator | insert_after (const_iterator it_, hxptr< T, deleter_u_ > &&ptr_) |
| iterator | insert_after (const_iterator it_, T *ptr_) |
| template<typename deleter_u_> |
| iterator | insert (const_iterator it_, hxptr< T, deleter_u_ > &&ptr_) |
| iterator | insert (const_iterator it_, T *ptr_) |
| hxptr< T, deleter_t_ > | pop_back (void) |
| hxptr< T, deleter_t_ > | pop_front (void) |
| template<typename deleter_u_> |
| iterator | push_back (hxptr< T, deleter_u_ > &&ptr_) |
| iterator | push_back (T *ptr_) |
| template<typename deleter_u_> |
| iterator | push_front (hxptr< T, deleter_u_ > &&ptr_) |
| iterator | push_front (T *ptr_) |
| void | release_all (void) |
| template<typename callable_t_, typename deleter_u_> |
| hxsize_t | remove_if (callable_t_ &&callable_, deleter_u_ &&deleter_) noexcept |
| template<typename callable_t_> |
| hxsize_t | remove_if (callable_t_ &&callable_) noexcept |
| void | reverse (void) |
| hxsize_t | size (void) const |
| void | splice (const_iterator it_, hxlist &x_) |
template<hxlist_concept_ T, typename deleter_t_ = hxdefault_delete>
class hxlist< T, deleter_t_ >
hxlist - An intrusive doubly linked list that takes ownership of nodes via a deleter_t callable, defaulting to hxdefault_delete.
This is the same as hxconstexpr_list except that it does not work with constexpr as it uses pointer arithmetic to save one pointer per-node. T must derive from hxlist_node. The destructor calls clear() which invokes the deleter on all remaining nodes. Subclasses of T may be inserted heterogeneously. Use hxdo_not_delete to avoid freeing nodes. Note: It is possible to iterate backwards from --list.end() to --list.begin() however reverse iterators are not provided.
For example:
example_t(int x) : value(x) { }
int value;
};
for(example_t& n : list) {
::printf("%d\n", n.value);
}
hxlist_node - Intrusive doubly linked list node base.
Definition hxlist.hpp:43
iterator push_back(hxptr< T, deleter_u_ > &&ptr_)
push_back - Inserts the node owned by ptr at the back of the list.
hxlist(deleter_t_ deleter_=deleter_t_())
Constructs an empty list with an optional deleter instance.
T * hxnew(Args_ &&... args_) noexcept
hxnew<T, allocator, align>(...) - Allocates and constructs an object of type T using an optional memo...
Definition hxmemory_manager.h:245
- T : The node type. Must derive from hxlist_node.
- deleter_t : A class type invoked as deleter(T*) to free the owned pointer. See also hxdo_not_delete.
template<hxlist_concept_ T, typename deleter_t_ = hxdefault_delete>
| void hxlist< T, deleter_t_ >::add_range |
( |
range_t_ && | range_ | ) |
|
|
noexcept |
Links each T from a temporary range into this list by address, exactly as push_back(T*) would.
The range's nodes are threaded into the list in place and are not copied or allocated, so range must own storage it is relinquishing to the list.
- range : The range of nodes to link into the list.
template<hxlist_concept_ T, typename deleter_t_ = hxdefault_delete>
template<typename deleter_u_>
| void hxlist< T, deleter_t_ >::clear |
( |
deleter_u_ && | deleter_ | ) |
|
|
noexcept |
Removes all nodes, invoking deleter on each.
If deleter evaluates to false nodes are unlinked but not freed.
- deleter : Callable with signature bool deleter(T*).
template<hxlist_concept_ T, typename deleter_t_ = hxdefault_delete>
template<typename callable_t_>
Removes all nodes for which predicate returns true, invoking the stored deleter on each removed node.
Returns the number of nodes removed.
- callable : A callable taking a T reference, returning bool.
template<hxlist_concept_ T, typename deleter_t_ = hxdefault_delete>
template<typename callable_t_, typename deleter_u_>
| hxsize_t hxlist< T, deleter_t_ >::remove_if |
( |
callable_t_ && | callable_, |
|
|
deleter_u_ && | deleter_ ) |
|
noexcept |
Removes all nodes for which predicate returns true, invoking deleter on each removed node.
If deleter evaluates to false nodes are unlinked but not freed. Returns the number of nodes removed.
- callable : A callable taking a T reference, returning bool.
- deleter : Callable with signature bool deleter(T*).