LLVM: llvm::simple_ilist< T, Options > Class Template Reference (original) (raw)

A simple intrusive list implementation. More...

#include "[llvm/ADT/simple_ilist.h](simple%5F%5Filist%5F8h%5Fsource.html)"

Public Types
using value_type = typename OptionsT::value_type
using pointer = typename OptionsT::pointer
using reference = typename OptionsT::reference
using const_pointer = typename OptionsT::const_pointer
using const_reference = typename OptionsT::const_reference
using iterator = ilist_select_iterator_type<OptionsT, false, false>
using const_iterator = ilist_select_iterator_type<OptionsT, false, true>
using reverse_iterator = ilist_select_iterator_type<OptionsT, true, false>
using const_reverse_iterator
using size_type = size_t
using difference_type = ptrdiff_t
Public Member Functions
simple_ilist ()=default
~simple_ilist ()=default
simple_ilist (const simple_ilist &)=delete
simple_ilist & operator= (const simple_ilist &)=delete
simple_ilist (simple_ilist &&X)
simple_ilist & operator= (simple_ilist &&X)
iterator begin ()
const_iterator begin () const
iterator end ()
const_iterator end () const
reverse_iterator rbegin ()
const_reverse_iterator rbegin () const
reverse_iterator rend ()
const_reverse_iterator rend () const
bool empty () const
Check if the list is empty in constant time.
size_type size () const
Calculate the size of the list in linear time.
reference front ()
const_reference front () const
reference back ()
const_reference back () const
void push_front (reference Node)
Insert a node at the front; never copies.
void push_back (reference Node)
Insert a node at the back; never copies.
void pop_front ()
Remove the node at the front; never deletes.
void pop_back ()
Remove the node at the back; never deletes.
void swap (simple_ilist &X)
Swap with another list in place using std::swap.
iterator insert (iterator I, reference Node)
Insert a node by reference; never copies.
template
void insert (iterator I, Iterator First, Iterator Last)
Insert a range of nodes; never copies.
template<class Cloner, class Disposer>
void cloneFrom (const simple_ilist &L2, Cloner clone, Disposer dispose)
Clone another list.
void remove (reference N)
Remove a node by reference; never deletes.
template
void removeAndDispose (reference N, Disposer dispose)
Remove a node by reference and dispose of it.
iterator erase (iterator I)
Remove a node by iterator; never deletes.
iterator erase (iterator First, iterator Last)
Remove a range of nodes; never deletes.
template
iterator eraseAndDispose (iterator I, Disposer dispose)
Remove a node by iterator and dispose of it.
template
iterator eraseAndDispose (iterator First, iterator Last, Disposer dispose)
Remove a range of nodes and dispose of them.
void clear ()
Clear the list; never deletes.
template
void clearAndDispose (Disposer dispose)
Clear the list and dispose of the nodes.
void splice (iterator I, simple_ilist &L2)
Splice in another list.
void splice (iterator I, simple_ilist &L2, iterator Node)
Splice in a node from another list.
void splice (iterator I, simple_ilist &, iterator First, iterator Last)
Splice in a range of nodes from another list.
void merge (simple_ilist &RHS)
Merge in another list.
template
void merge (simple_ilist &RHS, Compare comp)
void sort ()
Sort the list.
template
void sort (Compare comp)

template<typename T, class... Options>
class llvm::simple_ilist< T, Options >

A simple intrusive list implementation.

This is a simple intrusive list for a T that inherits from [ilist_node<T>](classllvm%5F1%5F1ilist%5F%5Fnode.html). The list never takes ownership of anything inserted in it.

Unlike iplist and ilist, simple_ilist never deletes values, and has no callback traits.

The API for adding nodes include push_front(), push_back(), and insert(). These all take values by reference (not by pointer), except for the range version of insert().

There are three sets of API for discarding nodes from the list: remove(), which takes a reference to the node to remove, erase(), which takes an iterator or iterator range and returns the next one, and clear(), which empties out the container. All three are constant time operations. None of these deletes any nodes; in particular, if there is a single node in the list, then these have identical semantics:

As a convenience for callers, there are parallel APIs that take a Disposer (such as std::default_delete<T>): removeAndDispose(), eraseAndDispose(), and clearAndDispose(). These have different names because the extra semantic is otherwise non-obvious. They are equivalent to calling std::for_each() on the range to be discarded.

The currently available Options customize the nodes in the list. The same options must be specified in the ilist_node instantiation for compatibility (although the order is irrelevant).

Here are examples of Options usage:

See is_valid_option for steps on adding a new option.

Definition at line 78 of file simple_ilist.h.

const_iterator

template<typename T, class... Options>

const_pointer

template<typename T, class... Options>

const_reference

template<typename T, class... Options>

const_reverse_iterator

template<typename T, class... Options>

Initial value:

std::conditional_t< OptionsT::has_iterator_bits, ilist_iterator_w_bits< OptionsT, IsReverse, IsConst >, ilist_iterator< OptionsT, IsReverse, IsConst > > ilist_select_iterator_type

Definition at line 98 of file simple_ilist.h.

difference_type

template<typename T, class... Options>

iterator

template<typename T, class... Options>

pointer

template<typename T, class... Options>

template<typename T, class... Options>

reverse_iterator

template<typename T, class... Options>

size_type

template<typename T, class... Options>

value_type

template<typename T, class... Options>

simple_ilist() [1/3]

template<typename T, class... Options>

~simple_ilist()

template<typename T, class... Options>

simple_ilist() [2/3]

template<typename T, class... Options>

simple_ilist() [3/3]

template<typename T, class... Options>

back() [1/2]

template<typename T, class... Options>

back() [2/2]

template<typename T, class... Options>

begin() [1/2]

template<typename T, class... Options>

begin() [2/2]

template<typename T, class... Options>

clear()

template<typename T, class... Options>

clearAndDispose()

template<typename T, class... Options>

template

cloneFrom()

template<typename T, class... Options>

template<class Cloner, class Disposer>

empty()

template<typename T, class... Options>

end() [1/2]

template<typename T, class... Options>

Definition at line 120 of file simple_ilist.h.

Referenced by llvm::simple_ilist< Node >::clearAndDispose(), llvm::simple_ilist< Node >::erase(), llvm::MemorySSA::getWritableBlockDefs(), merge(), llvm::simple_ilist< Node >::operator=(), llvm::simple_ilist< Node >::pop_back(), llvm::simple_ilist< Node >::push_back(), llvm::simple_ilist< Node >::simple_ilist(), llvm::simple_ilist< Node >::size(), sort(), and llvm::simple_ilist< Node >::splice().

end() [2/2]

template<typename T, class... Options>

erase() [1/2]

template<typename T, class... Options>

erase() [2/2]

template<typename T, class... Options>

eraseAndDispose() [1/2]

template<typename T, class... Options>

template

Remove a range of nodes and dispose of them.

Definition at line 220 of file simple_ilist.h.

eraseAndDispose() [2/2]

template<typename T, class... Options>

template

front() [1/2]

template<typename T, class... Options>

front() [2/2]

template<typename T, class... Options>

insert() [1/2]

template<typename T, class... Options>

template

Insert a range of nodes; never copies.

Definition at line 165 of file simple_ilist.h.

insert() [2/2]

template<typename T, class... Options>

merge() [1/2]

template<typename T, class... Options>

merge() [2/2]

template<class T, class... Options>

template

operator=() [1/2]

template<typename T, class... Options>

operator=() [2/2]

template<typename T, class... Options>

pop_back()

template<typename T, class... Options>

Remove the node at the back; never deletes.

Definition at line 152 of file simple_ilist.h.

pop_front()

template<typename T, class... Options>

Remove the node at the front; never deletes.

Definition at line 149 of file simple_ilist.h.

push_back()

template<typename T, class... Options>

push_front()

template<typename T, class... Options>

Insert a node at the front; never copies.

Definition at line 143 of file simple_ilist.h.

rbegin() [1/2]

template<typename T, class... Options>

rbegin() [2/2]

template<typename T, class... Options>

remove()

template<typename T, class... Options>

removeAndDispose()

template<typename T, class... Options>

template

Remove a node by reference and dispose of it.

Definition at line 186 of file simple_ilist.h.

rend() [1/2]

template<typename T, class... Options>

rend() [2/2]

template<typename T, class... Options>

size()

template<typename T, class... Options>

Calculate the size of the list in linear time.

Definition at line 135 of file simple_ilist.h.

sort() [1/2]

template<typename T, class... Options>

sort() [2/2]

splice() [1/3]

template<typename T, class... Options>

Splice in a range of nodes from another list.

Definition at line 247 of file simple_ilist.h.

splice() [2/3]

template<typename T, class... Options>

splice() [3/3]

template<typename T, class... Options>

swap()

template<typename T, class... Options>


The documentation for this class was generated from the following file: