00001 00006 #include "Liste.h" 00007 00014 ListenObjekt::ListenObjekt(){ 00015 listenDaten_ = NULL; 00016 } 00017 00018 00027 ListenObjekt::ListenObjekt(ListenDaten *listenDaten){ 00028 listenDaten_ = listenDaten; 00029 } 00030 00031 00040 ListenObjekt *ListenObjekt::gibNext(){ 00041 return next_; 00042 } 00043 00044 00053 ListenObjekt *ListenObjekt::gibBefore(){ 00054 return before_; 00055 } 00056 00057 00064 void ListenObjekt::setzeNext(ListenObjekt *next){ 00065 next_ = next; 00066 } 00067 00068 00075 void ListenObjekt::setzeBefore(ListenObjekt *before){ 00076 before_ = before; 00077 } 00078 00079 00088 ListenDaten *ListenObjekt::gibDaten(){ 00089 return listenDaten_; 00090 } 00091 00092 00099 void ListenObjekt::setzeDaten(ListenDaten *listenDaten){ 00100 listenDaten_ = listenDaten; 00101 } 00102 00103 00112 void ListenObjekt::takt(double zeitintervall){ 00113 listenDaten_->takt(zeitintervall); 00114 } 00115 00125 void ListenObjekt::exportieren( string dateiname ){ 00126 try{ 00127 listenDaten_->exportieren( dateiname ); 00128 } 00129 catch( Fehler *fehler ){ 00130 throw( fehler ); 00131 } 00132 } 00133 00134 00145 ostream &operator<< ( ostream &os, ListenObjekt *listenObjekt ){ 00146 os << listenObjekt->gibDaten(); 00147 return os; 00148 } 00149 00150 00151 00152 00153 00160 Liste::Liste( ){ 00161 // Das Dummyelement erzeugen 00162 listenAnfang_ = new ListenObjekt( NULL ); 00163 listenAnfang_->setzeNext(listenAnfang_); 00164 listenAnfang_->setzeBefore(listenAnfang_); 00165 aktuelleMaxId_ = 0; 00166 aktuellesObjekt_ = listenAnfang_; 00167 } 00168 00178 void Liste::takt(double zeitintervall){ 00179 ListenObjekt *tmpObjekt = listenAnfang_; 00180 ListenDaten *listenDaten(0); 00181 00182 try{ 00183 while( tmpObjekt->gibNext()->gibDaten() != NULL ){ 00184 tmpObjekt = tmpObjekt->gibNext(); 00185 listenDaten = tmpObjekt->gibDaten(); 00186 if(listenDaten->sollEntferntWerden()){ 00187 // tmpObjekt = tmpObjekt->gibBefore(); 00188 listenDaten->aufraeumen(); 00189 // datenEntfernen(listenDaten->gibId()); 00190 // delete listenDaten; 00191 // belasse die Daten und takte sie nicht mehr an 00192 } 00193 else{ 00194 tmpObjekt->takt(zeitintervall); 00195 } 00196 } 00197 } 00198 catch( Fehler *fehler ){ 00199 throw( fehler ); 00200 } 00201 } 00202 00212 void Liste::exportieren( string dateiname ){ 00213 ListenObjekt *tmpObjekt = listenAnfang_; 00214 ListenDaten *listenDaten(0); 00215 00216 while( tmpObjekt->gibNext()->gibDaten() != NULL ){ 00217 tmpObjekt = tmpObjekt->gibNext(); 00218 listenDaten = tmpObjekt->gibDaten(); 00219 try{ 00220 tmpObjekt->exportieren( dateiname ); 00221 } 00222 catch( Fehler *fehler ){ 00223 throw( fehler ); 00224 } 00225 } 00226 } 00227 00236 void Liste::datenHinzufuegen(ListenDaten *listenDaten){ 00237 aktuelleMaxId_++; 00238 listenDaten->setzeId( aktuelleMaxId_ ); 00239 // Ein neues Objekt anlegen 00240 ListenObjekt *neuesObjekt = new ListenObjekt(listenDaten); 00241 // Das angelegte Objekt in die Liste einflaechten 00242 neuesObjekt->setzeNext(listenAnfang_); 00243 00244 neuesObjekt->setzeBefore(listenAnfang_->gibBefore()); 00245 listenAnfang_->setzeBefore(neuesObjekt); 00246 neuesObjekt->gibBefore()->setzeNext(neuesObjekt); 00247 } 00248 00249 00258 void Liste::datenEntfernen(long int id){ 00259 ListenObjekt *tmpObjekt = listenAnfang_; 00260 while( tmpObjekt->gibNext()->gibDaten() != NULL ){ 00261 tmpObjekt = tmpObjekt->gibNext(); 00262 // wenn das aktuelle Objekt das gesuchte ist 00263 if( tmpObjekt->gibDaten()->gibId() == id ){ 00264 // Die Zeiger des Vorgaengers und Nachfolgers verbiegen und danach das aktuelle Objekt loeschen 00265 tmpObjekt->gibBefore()->setzeNext(tmpObjekt->gibNext()); 00266 tmpObjekt->gibNext()->setzeBefore(tmpObjekt->gibBefore()); 00267 delete tmpObjekt; 00268 return; 00269 } 00270 } 00271 } 00272 00279 void Liste::geheZuErsten(){ 00280 aktuellesObjekt_ = listenAnfang_; 00281 } 00282 00289 void Liste::geheZuNaechsten(){ 00290 aktuellesObjekt_ = aktuellesObjekt_->gibNext(); 00291 } 00292 00301 bool Liste::istEnde(){ 00302 if( aktuellesObjekt_->gibNext()->gibDaten() == 0 ) 00303 return 1; 00304 else 00305 return 0; 00306 } 00307 00316 ListenDaten *Liste::gibDaten(){ 00317 return aktuellesObjekt_->gibDaten(); 00318 } 00319 00320 00330 ostream &operator<< ( ostream &os, Liste *liste ){ 00331 ListenObjekt *tmpObjekt = liste->listenAnfang_; 00332 os << "----------------Liste-----------------" << endl; 00333 while( tmpObjekt->gibNext()->gibDaten() != NULL ){ 00334 tmpObjekt = tmpObjekt->gibNext(); 00335 os << tmpObjekt; 00336 } 00337 return os; 00338 }