NAME

ACE_Double_Linked_List - A double-linked list implementation.

SYNOPSIS

#include <ace/Containers.h>

template<class T> class ACE_Double_Linked_List { public: friend class ACE_Double_Linked_List_Iterator<T>; typedef ACE_Double_Linked_List_Iterator<T> ITERATOR; ACE_Double_Linked_List (ACE_Allocator *alloc = 0); ACE_Double_Linked_List (ACE_Double_Linked_List<T> &); void operator= (ACE_Double_Linked_List<T> &); ~ACE_Double_Linked_List (void); int is_empty (void) const; int is_full (void) const; T *insert_tail (T *new_item); T *insert_head (T *new_item); T* delete_head (void); T *delete_tail (void); void reset (void); int get (T *&item, size_t index = 0); size_t size (void) const; void dump (void) const; int remove (T *n); ACE_ALLOC_HOOK_DECLARE; protected: void delete_nodes (void); void copy_nodes (ACE_Double_Linked_List<T> &); void init_head (void); int insert_element (T *new_item, int before = 0, T *old_item = 0); int remove_element (T *item); T *head_; size_t size_; ACE_Allocator *allocator_; };

DESCRIPTION

This implementation of an unbounded double-linked list uses a circular linked list with a dummy node. It is pretty much like the ACE_Unbounded_Queue except that it allows removing of a specific element from a specific location.

Initialization and termination methods.

ACE_Double_Linked_List (ACE_Allocator *alloc = 0);

ACE_Double_Linked_List (ACE_Double_Linked_List<T> &);

void operator= (ACE_Double_Linked_List<T> &);

~ACE_Double_Linked_List (void);

Check boundary conditions.

int is_empty (void) const;

int is_full (void) const;

Classic queue operations.

T *insert_tail (T *new_item);

T *insert_head (T *new_item);

T* delete_head (void);

T *delete_tail (void);

Additional utility methods.

void reset (void);

int get (T *&item, size_t index = 0);

size_t size (void) const;

void dump (void) const;

int remove (T *n);

ACE_ALLOC_HOOK_DECLARE;

AUTHOR

Doug Schmidt

LIBRARY

ace