The Pedigree Project 0.1
Classes | Public Types | Public Member Functions | Private Types | Private Member Functions | Private Attributes | List of all members
IntrusiveList< T, Member > Class Template Reference

#include <IntrusiveList.h>

+ Collaboration diagram for IntrusiveList< T, Member >:

Classes

class  IteratorType
 

Public Types

using Iterator = IteratorType< T, &node_t::next, &node_t::previous >
 
using ConstIterator = IteratorType< const T, &node_t::next, &node_t::previous >
 
using ReverseIterator = IteratorType< T, &node_t::previous, &node_t::next >
 
using ConstReverseIterator = IteratorType< const T, &node_t::previous, &node_t::next >
 

Public Member Functions

 IntrusiveList (const IntrusiveList &)=delete
 
IntrusiveList & operator= (const IntrusiveList &)=delete
 
size_t size () const
 
size_t count () const
 
bool empty () const
 
bool contains (const T &value) const
 
void pushBack (T &value)
 
void pushFront (T &value)
 
T * popBack ()
 
T * popFront ()
 
bool unlink (T &value)
 
Iterator erase (Iterator &iterator)
 
ReverseIterator erase (ReverseIterator &iterator)
 
Iterator begin ()
 
ConstIterator begin () const
 
Iterator end ()
 
ConstIterator end () const
 
ReverseIterator rbegin ()
 
ConstReverseIterator rbegin () const
 
ReverseIterator rend ()
 
ConstReverseIterator rend () const
 
void clear ()
 

Private Types

using node_t = IntrusiveListNode< T >
 

Private Member Functions

void insertBefore (node_t &position, T &value)
 
T * remove (node_t &node)
 

Private Attributes

size_t m_Count
 
node_t m_Empty
 

Detailed Description

template<typename T, IntrusiveListNode< T > T::* Member>
class IntrusiveList< T, Member >

Allocation-free doubly-linked list.

Elements remain owned by the caller, must stay at a stable address, and must outlive their membership in the list. The selected node member belongs exclusively to one list while linked. A type can participate in multiple lists by providing a distinct node member for each list.

Definition at line 54 of file IntrusiveList.h.

Member Typedef Documentation

◆ ConstIterator

template<typename T , IntrusiveListNode< T > T::* Member>
using IntrusiveList< T, Member >::ConstIterator = IteratorType<const T, &node_t::next, &node_t::previous>

Definition at line 118 of file IntrusiveList.h.

◆ ConstReverseIterator

template<typename T , IntrusiveListNode< T > T::* Member>
using IntrusiveList< T, Member >::ConstReverseIterator = IteratorType<const T, &node_t::previous, &node_t::next>

Definition at line 120 of file IntrusiveList.h.

◆ Iterator

template<typename T , IntrusiveListNode< T > T::* Member>
using IntrusiveList< T, Member >::Iterator = IteratorType<T, &node_t::next, &node_t::previous>

Definition at line 117 of file IntrusiveList.h.

◆ node_t

template<typename T , IntrusiveListNode< T > T::* Member>
using IntrusiveList< T, Member >::node_t = IntrusiveListNode<T>
private

Definition at line 57 of file IntrusiveList.h.

◆ ReverseIterator

template<typename T , IntrusiveListNode< T > T::* Member>
using IntrusiveList< T, Member >::ReverseIterator = IteratorType<T, &node_t::previous, &node_t::next>

Definition at line 119 of file IntrusiveList.h.

Constructor & Destructor Documentation

◆ IntrusiveList()

template<typename T , IntrusiveListNode< T > T::* Member>
IntrusiveList< T, Member >::IntrusiveList ( )
inline

Definition at line 122 of file IntrusiveList.h.

◆ ~IntrusiveList()

template<typename T , IntrusiveListNode< T > T::* Member>
IntrusiveList< T, Member >::~IntrusiveList ( )
inline

Definition at line 130 of file IntrusiveList.h.

Member Function Documentation

◆ begin() [1/2]

template<typename T , IntrusiveListNode< T > T::* Member>
Iterator IntrusiveList< T, Member >::begin ( )
inline

Definition at line 203 of file IntrusiveList.h.

◆ begin() [2/2]

template<typename T , IntrusiveListNode< T > T::* Member>
ConstIterator IntrusiveList< T, Member >::begin ( ) const
inline

Definition at line 207 of file IntrusiveList.h.

◆ clear()

template<typename T , IntrusiveListNode< T > T::* Member>
void IntrusiveList< T, Member >::clear ( )
inline

Definition at line 235 of file IntrusiveList.h.

◆ contains()

template<typename T , IntrusiveListNode< T > T::* Member>
bool IntrusiveList< T, Member >::contains ( const T &  value) const
inline

Returns true when value is linked into this list.

Definition at line 147 of file IntrusiveList.h.

◆ count()

template<typename T , IntrusiveListNode< T > T::* Member>
size_t IntrusiveList< T, Member >::count ( ) const
inline

Definition at line 138 of file IntrusiveList.h.

◆ empty()

template<typename T , IntrusiveListNode< T > T::* Member>
bool IntrusiveList< T, Member >::empty ( ) const
inline

Definition at line 142 of file IntrusiveList.h.

◆ end() [1/2]

template<typename T , IntrusiveListNode< T > T::* Member>
Iterator IntrusiveList< T, Member >::end ( )
inline

Definition at line 211 of file IntrusiveList.h.

◆ end() [2/2]

template<typename T , IntrusiveListNode< T > T::* Member>
ConstIterator IntrusiveList< T, Member >::end ( ) const
inline

Definition at line 215 of file IntrusiveList.h.

◆ erase() [1/2]

template<typename T , IntrusiveListNode< T > T::* Member>
Iterator IntrusiveList< T, Member >::erase ( Iterator &  iterator)
inline

Definition at line 183 of file IntrusiveList.h.

◆ erase() [2/2]

template<typename T , IntrusiveListNode< T > T::* Member>
ReverseIterator IntrusiveList< T, Member >::erase ( ReverseIterator &  iterator)
inline

Definition at line 193 of file IntrusiveList.h.

◆ insertBefore()

template<typename T , IntrusiveListNode< T > T::* Member>
void IntrusiveList< T, Member >::insertBefore ( node_t &  position,
T &  value 
)
inlineprivate

Definition at line 241 of file IntrusiveList.h.

◆ popBack()

template<typename T , IntrusiveListNode< T > T::* Member>
T * IntrusiveList< T, Member >::popBack ( )
inline

Definition at line 160 of file IntrusiveList.h.

◆ popFront()

template<typename T , IntrusiveListNode< T > T::* Member>
T * IntrusiveList< T, Member >::popFront ( )
inline

Definition at line 167 of file IntrusiveList.h.

◆ pushBack()

template<typename T , IntrusiveListNode< T > T::* Member>
void IntrusiveList< T, Member >::pushBack ( T &  value)
inline

Definition at line 152 of file IntrusiveList.h.

◆ pushFront()

template<typename T , IntrusiveListNode< T > T::* Member>
void IntrusiveList< T, Member >::pushFront ( T &  value)
inline

Definition at line 156 of file IntrusiveList.h.

◆ rbegin() [1/2]

template<typename T , IntrusiveListNode< T > T::* Member>
ReverseIterator IntrusiveList< T, Member >::rbegin ( )
inline

Definition at line 219 of file IntrusiveList.h.

◆ rbegin() [2/2]

template<typename T , IntrusiveListNode< T > T::* Member>
ConstReverseIterator IntrusiveList< T, Member >::rbegin ( ) const
inline

Definition at line 223 of file IntrusiveList.h.

◆ remove()

template<typename T , IntrusiveListNode< T > T::* Member>
T * IntrusiveList< T, Member >::remove ( node_t &  node)
inlineprivate

Definition at line 254 of file IntrusiveList.h.

◆ rend() [1/2]

template<typename T , IntrusiveListNode< T > T::* Member>
ReverseIterator IntrusiveList< T, Member >::rend ( )
inline

Definition at line 227 of file IntrusiveList.h.

◆ rend() [2/2]

template<typename T , IntrusiveListNode< T > T::* Member>
ConstReverseIterator IntrusiveList< T, Member >::rend ( ) const
inline

Definition at line 231 of file IntrusiveList.h.

◆ size()

template<typename T , IntrusiveListNode< T > T::* Member>
size_t IntrusiveList< T, Member >::size ( ) const
inline

Definition at line 134 of file IntrusiveList.h.

◆ unlink()

template<typename T , IntrusiveListNode< T > T::* Member>
bool IntrusiveList< T, Member >::unlink ( T &  value)
inline

Removes value from this list in constant time.

Definition at line 175 of file IntrusiveList.h.

Member Data Documentation

◆ m_Count

template<typename T , IntrusiveListNode< T > T::* Member>
size_t IntrusiveList< T, Member >::m_Count
private

Definition at line 271 of file IntrusiveList.h.

◆ m_Empty

template<typename T , IntrusiveListNode< T > T::* Member>
node_t IntrusiveList< T, Member >::m_Empty
private

Definition at line 272 of file IntrusiveList.h.


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