#ifndef LAZYLISTE_H_ #define LAZYLISTE_H_ #include #include "LazyAktion.h" using namespace std; template class LazyListe { public: // typedef für Iterator typedef typename list::iterator iterator; typedef typename list::const_iterator const_iterator; // Konstruktor / Destruktor LazyListe() { bChanged = false; } virtual ~LazyListe() { if (bChanged) { // ggf. noch anstehende Aktionen löschen do { delete *(p_ListeAktionen.begin()); p_ListeAktionen.pop_front(); } while (p_ListeAktionen.size() > 0); } } // Lesefunktionen const_iterator begin() const { return p_ListeObjekte.begin(); } const_iterator end() const { return p_ListeObjekte.end(); } iterator begin() { return p_ListeObjekte.begin(); } iterator end() { return p_ListeObjekte.end(); } bool empty() const { return p_ListeObjekte.empty(); } // Schreibfunktionen void push_back(const T einObjekt) { p_ListeAktionen.push_back(new LazyPushBack(einObjekt, &p_ListeObjekte)); bChanged = true; } void push_front(const T einObjekt) { p_ListeAktionen.push_back(new LazyPushFront(einObjekt, &p_ListeObjekte)); bChanged = true; } void erase(iterator itObjekt) { p_ListeAktionen.push_back(new LazyErase(itObjekt, &p_ListeObjekte)); bChanged = true; } // Änderungen auf Objektliste übertragen void vAktualisieren() { if (bChanged) { // ausstehende Aktionen durchfuehren typename list *>::const_iterator it; // TODO warum typename?! for (it = p_ListeAktionen.begin(); it != p_ListeAktionen.end(); it++) { // Aktion ausführen LazyAktion *pAktion = *it; pAktion->vAusfuehren(); // Zeiger auf Action-Element löschen delete *it; } // Liste der Aktionen leeren p_ListeAktionen.clear(); bChanged = false; } } private: list p_ListeObjekte; list *> p_ListeAktionen; bool bChanged; }; #endif /* LAZYLISTE_H_ */