Hyperiso 1.0.3
Modular flavour-physics calculations, Wilson coefficients and statistical inference
Loading...
Searching...
No Matches
Observer.cpp
Go to the documentation of this file.
1#include <iostream>
2#include <string>
3#include <list>
4
5//this will be used one day, I'm sure
6class IObserver {
7public:
8 virtual ~IObserver() {}
9 virtual void update(const std::string &messageFromSubject) = 0;
10};
11
12class ISubject {
13public:
14 virtual ~ISubject() {}
15 virtual void attach(IObserver *observer) = 0;
16 virtual void detach(IObserver *observer) = 0;
17 virtual void notify() = 0;
18};
19
20class ConcreteSubject : public ISubject {
21 std::list<IObserver *> observers;
22 std::string message;
23
24public:
25 virtual ~ConcreteSubject() {}
26
27 void attach(IObserver *observer) override {
28 observers.push_back(observer);
29 }
30
31 void detach(IObserver *observer) override {
32 observers.remove(observer);
33 }
34
35 void notify() override {
36 for (IObserver *observer : observers) {
37 observer->update(message);
38 }
39 }
40
41 void createMessage(std::string message = "Empty") {
42 this->message = message;
43 notify();
44 }
45};
46
48 std::string messageFromSubject;
49 ConcreteSubject &subject;
50 static int static_number;
51 int number;
52
53public:
54 ConcreteObserver(ConcreteSubject &subject) : subject(subject) {
55 this->subject.attach(this);
56 number = ++static_number;
57 }
58
60 subject.detach(this);
61 }
62
63 void update(const std::string &messageFromSubject) override {
64 this->messageFromSubject = messageFromSubject;
65 printInfo();
66 }
67
68 void printInfo() {
69 std::cout << "Observer " << number << ": a new message is available --> " << messageFromSubject << std::endl;
70 }
71};
void update(const std::string &messageFromSubject) override
Definition Observer.cpp:63
virtual ~ConcreteObserver()
Definition Observer.cpp:59
ConcreteObserver(ConcreteSubject &subject)
Definition Observer.cpp:54
void createMessage(std::string message="Empty")
Definition Observer.cpp:41
virtual ~ConcreteSubject()
Definition Observer.cpp:25
void notify() override
Definition Observer.cpp:35
void attach(IObserver *observer) override
Definition Observer.cpp:27
void detach(IObserver *observer) override
Definition Observer.cpp:31
virtual void update(const std::string &messageFromSubject)=0
virtual ~IObserver()
Definition Observer.cpp:8
virtual void notify()=0
virtual ~ISubject()
Definition Observer.cpp:14
virtual void detach(IObserver *observer)=0
virtual void attach(IObserver *observer)=0