VL
Observable.h
Go to the documentation of this file.
1#pragma once
2#include <vector>
3#include <unordered_map>
4#include "Observer.h"
5#include "vl_fwd.h"
6
7namespace vl
8{
9 class Observer;
10
12 {
13 friend class Observer;
14
15 public:
16 Observable();
17 bool Attach(Observer* o, const std::string& title = "");
18 bool Detach(Observer* o);
19 virtual ~Observable();
20 virtual void Notify(vl::VarPtr info = nullptr);
21 inline bool HasSubscribers() {
22 if (auto subs = GetObservers())
23 return !subs->empty(); // TODO get rid of this check
24 return false;
25 }
26 const std::vector<Observer*>* GetObservers() const;
27
28 protected:
29 std::vector<Observer*>* GetObservers();
30 void Unsubscribe(Observer* o);
31
32 private:
33 class ObserversStorage
34 {
35 public:
36 //~ObserversStorage();
37
38 inline std::unordered_map<Observable*, std::vector<Observer*>>& GetObservers() {
39 return mObservers;
40 }
41 private:
42 std::unordered_map<Observable*, std::vector<Observer*>> mObservers;
43 };
44
45 static ObserversStorage* mObserversStorage;
46 };
47}
Definition: Observable.h:12
Observable()
Definition: Observable.cpp:24
virtual ~Observable()
Definition: Observable.cpp:65
bool Detach(Observer *o)
Definition: Observable.cpp:48
virtual void Notify(vl::VarPtr info=nullptr)
Definition: Observable.cpp:77
bool Attach(Observer *o, const std::string &title="")
Definition: Observable.cpp:29
bool HasSubscribers()
Definition: Observable.h:21
void Unsubscribe(Observer *o)
Definition: Observable.cpp:14
const std::vector< Observer * > * GetObservers() const
Definition: Observable.cpp:87
Definition: Observer.h:17
Definition: JSONConverter.h:9
std::shared_ptr< Var > VarPtr
Definition: vl_fwd.h:41