comparison Framework/Toolbox/ObserversRegistry.h @ 91:81f73efd81a1 wasm

cleaning up
author Sebastien Jodogne <s.jodogne@gmail.com>
date Mon, 29 May 2017 11:18:35 +0200
parents 64e60018943f
children 2eca030792aa
comparison
equal deleted inserted replaced
90:64e60018943f 91:81f73efd81a1
28 28
29 namespace OrthancStone 29 namespace OrthancStone
30 { 30 {
31 template < 31 template <
32 typename Source, 32 typename Source,
33 typename Observer = typename Source::IChangeObserver 33 typename Observer = typename Source::IObserver
34 > 34 >
35 class ObserversRegistry : public boost::noncopyable 35 class ObserversRegistry : public boost::noncopyable
36 { 36 {
37 private: 37 private:
38 struct ChangeFunctor : public boost::noncopyable
39 {
40 void operator() (Observer& observer,
41 const Source& source)
42 {
43 observer.NotifyChange(source);
44 }
45 };
46
47 typedef std::set<Observer*> Observers; 38 typedef std::set<Observer*> Observers;
48 39
49 Observers observers_; 40 Observers observers_;
50 41
51 public: 42 public:
52 template <typename Functor> 43 template <typename Functor>
53 void Notify(const Source* source, 44 void Notify(const Source& source,
54 Functor& functor) 45 Functor& functor)
55 { 46 {
56 if (source == NULL)
57 {
58 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange);
59 }
60
61 for (typename Observers::const_iterator observer = observers_.begin(); 47 for (typename Observers::const_iterator observer = observers_.begin();
62 observer != observers_.end(); ++observer) 48 observer != observers_.end(); ++observer)
63 { 49 {
64 functor(**observer, *source); 50 functor(**observer, source);
65 } 51 }
66 }
67
68 template <typename Functor>
69 void Notify(const Source* source)
70 {
71 // Use the default functor
72 Functor functor;
73 Notify(source, functor);
74 }
75
76 void NotifyChange(const Source* source)
77 {
78 Notify<ChangeFunctor>(source);
79 } 52 }
80 53
81 void Register(Observer& observer) 54 void Register(Observer& observer)
82 { 55 {
83 observers_.insert(&observer); 56 observers_.insert(&observer);