Initial Commit
[fltk_mvc_template.git] / _template / src / Subject.cxx
1 ///////////////////////////////////////////////////////////////////////////
2 // Workfile: Subject.cxx
3 // Author: Daniel Giritzer <daniel@giritzer.eu>
4 // Date: 25.03.2018
5 // Description: Interface für von Observer zu überwachende Objekte.
6 // Remarks: -
7 ///////////////////////////////////////////////////////////////////////////
8 #include "Subject.h"
9 #include <algorithm>
10
11 /////////////////////////////////////////////////
12 /// \brief Füge einen Observer hinzu.
13 /// \param o Shared Pointer auf ein Observer Objekt.
14 /////////////////////////////////////////////////
15 void Subject::subscribeObserver(Observer* o)
16 {
17     if(o == nullptr)
18         throw std::string("Nullpointer given as Observer!");
19
20     mObservers.push_back(o);
21 }
22
23 /////////////////////////////////////////////////
24 /// \brief Entferne ein Observer Objekt.
25 /// \param o Shared Pointer auf zu entfernendes Observer
26 ///        Objekt.
27 /////////////////////////////////////////////////
28 void Subject::unsubscribeObserver(Observer* o)
29 {
30     if(o == nullptr)
31         throw std::string("Nullpointer given as Observer!");
32
33     if(!(std::find(mObservers.begin(), mObservers.end(), o) != mObservers.end()))
34         throw std::string("Given Observer has not subscribed!");
35
36     mObservers.remove(o);
37 }
38
39 /////////////////////////////////////////////////
40 /// \brief Benachrichtige alle Observer.
41 /////////////////////////////////////////////////
42 void Subject::notifyObservers()
43 {
44     for(auto o : mObservers)
45     {
46         o->updateObserver(this);
47     }
48 }