Seperate dependent package include files for different architectures. Speed up build.
[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 #include <string>
11
12 /////////////////////////////////////////////////
13 /// \brief Füge einen Observer hinzu.
14 /// \param o Shared Pointer auf ein Observer Objekt.
15 /////////////////////////////////////////////////
16 void Subject::subscribeObserver(Observer* o)
17 {
18     if(o == nullptr)
19         throw std::string("Nullpointer given as Observer!");
20
21     mObservers.push_back(o);
22 }
23
24 /////////////////////////////////////////////////
25 /// \brief Entferne ein Observer Objekt.
26 /// \param o Shared Pointer auf zu entfernendes Observer
27 ///        Objekt.
28 /////////////////////////////////////////////////
29 void Subject::unsubscribeObserver(Observer* o)
30 {
31     if(o == nullptr)
32         throw std::string("Nullpointer given as Observer!");
33
34     if(!(std::find(mObservers.begin(), mObservers.end(), o) != mObservers.end()))
35         throw std::string("Given Observer has not subscribed!");
36
37     mObservers.remove(o);
38 }
39
40 /////////////////////////////////////////////////
41 /// \brief Benachrichtige alle Observer.
42 /////////////////////////////////////////////////
43 void Subject::notifyObservers()
44 {
45     for(auto o : mObservers)
46     {
47         o->updateObserver(this);
48     }
49 }