ATTPCROOT  0.3.0-alpha
A ROOT-based framework for analyzing data from active target detectors
AtDataSubject.h
Go to the documentation of this file.
1 #ifndef ATDATASUBJECT_H
2 #define ATDATASUBJECT_H
3 
4 #include <set>
5 
14 namespace DataHandling {
15 class AtObserver;
16 
24 class AtSubject {
25 private:
26  std::set<AtObserver *> fObservers;
27 
28 protected:
29  AtSubject() = default;
30 
31 public:
32  virtual ~AtSubject() = default;
33 
35  void Attach(AtObserver *observer);
37  void Detach(AtObserver *observer) { fObservers.erase(observer); }
39  void Notify();
40 };
41 
50 template <typename T>
51 class AtSimpleType : public AtSubject {
52 protected:
53  T fData;
54 
55 public:
56  AtSimpleType(T data) { fData = data; } // Must use assigment operator for primitive types.
57  T Get() const { return fData; }
58  void Set(T data, bool notify = true)
59  {
60  if (fData == data)
61  return;
62  fData = data;
63  if (notify)
64  Notify();
65  }
66 };
67 
68 } // namespace DataHandling
69 #endif
DataHandling::AtObserver
Definition: AtDataObserver.h:12
DataHandling::AtSimpleType
Subject for any simple type.
Definition: AtDataSubject.h:51
DataHandling::AtSubject::Detach
void Detach(AtObserver *observer)
Detach an observer to stop getting notified when this subject changes.
Definition: AtDataSubject.h:37
DataHandling::AtSubject::Notify
void Notify()
Notify all attached subjects that something changed.
Definition: AtDataSubject.cxx:7
DataHandling::AtSubject::~AtSubject
virtual ~AtSubject()=default
DataHandling
Definition: AtDataObserver.h:4
DataHandling::AtSimpleType::AtSimpleType
AtSimpleType(T data)
Definition: AtDataSubject.h:56
DataHandling::AtSubject::AtSubject
AtSubject()=default
DataHandling::AtSimpleType::Get
T Get() const
Definition: AtDataSubject.h:57
DataHandling::AtSimpleType::fData
T fData
Definition: AtDataSubject.h:53
DataHandling::AtSubject::Attach
void Attach(AtObserver *observer)
Attach an observer to get notified when this subject changes.
Definition: AtDataSubject.cxx:12
DataHandling::AtSubject
Definition: AtDataSubject.h:24
DataHandling::AtSimpleType::Set
void Set(T data, bool notify=true)
Definition: AtDataSubject.h:58