ACE  6.0.6
Public Member Functions | Private Attributes
ACE_Intrusive_List Class Reference

Implement an intrusive double linked list. More...

#include <Intrusive_List.h>

List of all members.

Public Member Functions

 ACE_Intrusive_List (void)
 ~ACE_Intrusive_List (void)
 Destructor.
bool is_empty (void) const
 Returns true if the container is empty, otherwise returns false.
void push_front (T *node)
 Insert an element at the beginning of the list.
void push_back (T *node)
 Insert an element at the end of the list.
T * pop_front (void)
 Remove the element at the beginning of the list.
T * pop_back (void)
 Remove the element at the end of the list.
T * head (void) const
 Get the element at the head of the queue.
T * tail (void) const
 Get the element at the tail of the queue.
void remove (T *node)
 Remove a element from the list.
void swap (ACE_Intrusive_List< T > &rhs)
 Swap two lists.
void unsafe_remove (T *node)
 Remove a element from the list without checking.

Private Member Functions

Disallow copying
 ACE_Intrusive_List (const ACE_Intrusive_List< T > &)
ACE_Intrusive_List< T > & operator= (const ACE_Intrusive_List< T > &)

Private Attributes

T * head_
 Head of the list.
T * tail_
 Tail of the list.

Detailed Description

Implement an intrusive double linked list.

Intrusive lists assume that the elements they contain the pointers required to build the list. They are useful as light-weight containers and free-lists.

The template argument T must implement the following methods:

A simple way to satisfy the Intrusive_List requirements would be to implement a helper class:

class My_Object : public ACE_Intrusive_List_Node<My_Object> {
....
};

typedef ACE_Intrusive_List<My_Object> My_Object_List;

However, ACE is supported on platforms that would surely get confused using such templates.

Todo:
The ACE_Message_Queue is an example of an intrusive list (or queue) but it is not implemented in terms of this class.

Constructor & Destructor Documentation

ACE_Intrusive_List::ACE_Intrusive_List ( void  )

Constructor. Use user specified allocation strategy if specified.

ACE_Intrusive_List::~ACE_Intrusive_List ( void  )

Destructor.

ACE_Intrusive_List::ACE_Intrusive_List ( const ACE_Intrusive_List< T > &  ) [private]

Member Function Documentation

T * ACE_Intrusive_List::head ( void  ) const [inline]

Get the element at the head of the queue.

bool ACE_Intrusive_List::is_empty ( void  ) const [inline]

Returns true if the container is empty, otherwise returns false.

ACE_Intrusive_List<T>& ACE_Intrusive_List::operator= ( const ACE_Intrusive_List< T > &  ) [private]
T * ACE_Intrusive_List::pop_back ( void  )

Remove the element at the end of the list.

T * ACE_Intrusive_List::pop_front ( void  )

Remove the element at the beginning of the list.

void ACE_Intrusive_List::push_back ( T *  node)

Insert an element at the end of the list.

void ACE_Intrusive_List::push_front ( T *  node)

Insert an element at the beginning of the list.

void ACE_Intrusive_List::remove ( T *  node)

Remove a element from the list.

Verify that the element is still in the list before removing it.

void ACE_Intrusive_List::swap ( ACE_Intrusive_List< T > &  rhs) [inline]

Swap two lists.

T * ACE_Intrusive_List::tail ( void  ) const [inline]

Get the element at the tail of the queue.

void ACE_Intrusive_List::unsafe_remove ( T *  node)

Remove a element from the list without checking.

No attempts are performed to check if T* really belongs to the list. The effects of removing an invalid element are unspecified


Member Data Documentation

Head of the list.

Tail of the list.


The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines