Thunderbots Project
Loading...
Searching...
No Matches
subject.hpp
1#pragma once
2
3#include <vector>
4
5#include "software/multithreading/observer.hpp"
6
16template <typename T>
18{
19 public:
27 void registerObserver(std::shared_ptr<Observer<T>> observer);
28
29 virtual ~Subject() = default;
30
31 protected:
37 virtual void sendValueToObservers(T val) final;
38
39 private:
40 // The observers that this class provides updates to
41 std::vector<std::shared_ptr<Observer<T>>> observers;
42};
43
44template <typename T>
45void Subject<T>::registerObserver(std::shared_ptr<Observer<T>> observer)
46{
47 observers.emplace_back(observer);
48}
49
50template <typename T>
52{
53 for (std::shared_ptr<Observer<T>>& observer : observers)
54 {
55 observer->receiveValue(val);
56 }
57}
Definition observer.hpp:15
Definition subject.hpp:18
virtual void sendValueToObservers(T val) final
Definition subject.hpp:51
void registerObserver(std::shared_ptr< Observer< T > > observer)
Definition subject.hpp:45