LeviLamina
Loading...
Searching...
No Matches
Subject.h
1#pragma once
2
3#include "mc/_HeaderOutputPredefine.h"
4#include "mc/deps/core/utility/SingleThreadedLock.h"
5
6namespace Core {
7
8template <class ObserverType, class LockType>
9class Subject {
10public:
11 LockType mLock;
12 std::vector<gsl::not_null<ObserverType*>> mObservers;
13
14 LockType& getLock() { return mLock; }
15 void removeObserver(ObserverType& observer) {
16 std::lock_guard<LockType> l{getLock()};
17 erase_if(mObservers, [&](auto& v) { return v.get() == std::addressof(observer); });
18 }
19
20public:
21 Subject() = default;
22 ~Subject();
23 Subject(Subject const&) = delete;
24 Subject& operator=(Subject const&) = delete;
25};
26
27} // namespace Core
Definition Subject.h:9