In android it is not that easily possible to set environment variables, so we hardcro...
[fltk_mvc_template.git] / _template / src / Observer.cxx
1 ///////////////////////////////////////////////////////////////////////////
2 // Workfile: Observer.cpp
3 // Author: Daniel Giritzer <daniel@giritzer.eu>
4 // Date: 25.03.2018
5 // Description: Interface für eine Observer Klasse.
6 // Remarks: -
7 ///////////////////////////////////////////////////////////////////////////
8
9 #include "Observer.h"
10 #include "Subject.h"
11 #include <algorithm>
12 #include <string>
13
14 /////////////////////////////////////////////////
15 /// \brief Füge ein zu überwachendes Objekt hinzu.
16 /// \param s Zu überwachendes Objekt.
17 /////////////////////////////////////////////////
18 void Observer::subscribeSubject(Subject* s)
19 {
20     if(s == nullptr)
21         throw std::string("Nullpointer given as Subject!");
22
23     mSubjects.push_back(s);
24     s->subscribeObserver(this);
25 }
26
27 /////////////////////////////////////////////////
28 /// \brief Entferne ein überwachtes Objekt.
29 /// \param s Bereits überwachetes Objekt.
30 /////////////////////////////////////////////////
31 void Observer::unsubscribeSubject(Subject* s)
32 {
33     if(s == nullptr)
34         throw std::string("Nullpointer given as Subject!");
35
36     if(!(std::find(mSubjects.begin(), mSubjects.end(), s) != mSubjects.end()))
37         throw std::string("Not subscribed to this subject!");
38
39
40     mSubjects.remove(s);
41     s->unsubscribeObserver(this);
42 }
43
44 /////////////////////////////////////////////////
45 /// \brief Von Subject Klassen verwendete funktion
46 ///        um Observer über änderungen zu
47 ///        benachrichtigen.
48 /// \param s Objekt mit änderungen.
49 /////////////////////////////////////////////////
50 void Observer::updateObserver(Subject* s)
51 {
52     bool found = false;
53     if(s == nullptr)
54         throw std::string("Nullpointer given as Subject!");
55
56     for(auto curSub : mSubjects)
57     {
58         if(curSub == s)
59         {
60             //Funktionsaufruf der Observer
61             //Implementierung
62             updatedBySubject(curSub);
63             found = true;
64         }
65     }
66
67     if(!found)
68         throw std::string("Update called by unknown Subject!");
69 }