Mercurial > hg > orthanc-stone
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); |