dlist.hh
Go to the documentation of this file.00001 #ifndef DUNE_DLIST_HH 00002 #define DUNE_DLIST_HH 00003 00004 #include <dune/common/exceptions.hh> 00005 00006 namespace Dune { 00007 00018 00019 class DoubleLinkedListError : public RangeError {}; 00020 00022 template <class T> 00023 class DoubleLinkedList { 00024 private: 00025 struct Element; // Vorwaertsdeklaration fuer das Listenelement 00026 public: 00027 00030 class Iterator { 00031 private: 00033 Element* p; 00034 public: 00035 00037 Iterator(); 00038 00040 bool operator!= (Iterator x) const; 00041 00043 bool operator== (Iterator x) const; 00044 00046 Iterator& operator++ (); 00047 00049 Iterator operator++ (int); 00050 00052 Iterator& operator-- (); 00053 00055 Iterator operator-- (int); 00056 00058 T& operator* () const; 00059 00061 T* operator-> () const; 00062 00063 friend class DoubleLinkedList<T>; 00064 } ; 00065 00067 Iterator begin () const; 00068 00070 Iterator end () const; 00071 00073 Iterator rbegin () const; 00074 00076 Iterator rend () const; 00077 00078 00080 DoubleLinkedList(); 00081 00083 DoubleLinkedList (const DoubleLinkedList<T>&); 00084 00086 ~DoubleLinkedList(); 00087 00089 DoubleLinkedList<T>& operator= (const DoubleLinkedList<T>&); 00090 00092 int size () const; 00093 00097 Iterator insert_after (Iterator i, T& t); 00098 00102 Iterator insert_before (Iterator i, T& t); 00103 00105 void erase (Iterator i); 00106 00107 private: 00108 struct Element { // Typ fuer das Listenelement 00109 Element* next; // Nachfolger 00110 Element* prev; // Vorgaenger 00111 T item; // Datum 00112 Element (T &t); // setze next=prev=0 00113 }; 00114 00115 Iterator head; // erstes Element der Liste 00116 Iterator tail; // letztes Element der Liste 00117 int numelements; // Anzahl Elemente in der Liste 00118 } ; 00119 00120 } 00121 00123 00124 #include"dlist.cc" 00125 00126 #endif