Changeset 1c291d for src/CodePatterns/Observer
- Timestamp:
- Mar 18, 2013, 6:29:41 PM (13 years ago)
- Children:
- 3f30cc
- Parents:
- b9273a
- git-author:
- Frederik Heber <heber@…> (03/18/13 18:22:47)
- git-committer:
- Frederik Heber <heber@…> (03/18/13 18:29:41)
- Location:
- src/CodePatterns/Observer
- Files:
-
- 3 edited
-
Channels.hpp (modified) (3 diffs)
-
Notification.hpp (modified) (3 diffs)
-
Observable.hpp (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
src/CodePatterns/Observer/Channels.hpp
rb9273a r1c291d 18 18 #include "CodePatterns/Observer/defs.hpp" 19 19 20 class Observable; 21 class Relay; 22 20 23 /** Channels aggregate all possible Notifications of an Observable. 21 24 * … … 23 26 * visible to the outside only. 24 27 * 28 * \note Channels::subjectKilled() needs to be called by owning Observable. 29 * It is passed on to Notification such that Observer that have only signed 30 * on to single channel still know when their observable has died. 25 31 */ 26 32 class Channels { … … 38 44 39 45 private: 46 //! grant Observable access to notifyAll() and subjectKilled() 47 friend class Observable; 48 //!> grant Relay access to notifyAll() 49 friend class Relay; 50 51 /** Informs channel subscribers about imminent dstor call. 52 * 53 * This is meant to be called from Observable only. 54 * Channels and Notifications are strictly attached to an Observable. Hence, 55 * it makes no sense to inform them on their own. Especially, neither has 56 * any knowledge on the publisher. 57 * 58 * \param *publisher Observable about to be destroyed 59 */ 60 void subjectKilled(Observable * const publisher); 61 62 private: 40 63 typedef std::map< size_t, Notification_ptr> NotificationTypetoRefMap; 41 64 -
src/CodePatterns/Observer/Notification.hpp
rb9273a r1c291d 16 16 #include <set> 17 17 18 class Channels; 18 19 class Observable; 19 20 class Observer; … … 26 27 * with the usual OBSERVE() macro to generate both the specific and 27 28 * the global message of change. 29 * 30 * \note Notification::subjectKilled() needs to be called by owning Channels. 31 * We use the passed on Observable instance to let Observers that have only 32 * signed on to single channel know when their observable has died. 28 33 */ 29 34 class Notification { 30 //!> grant Observable access to notifyAll()31 friend class Observable;32 //!> grant Relay access to notifyAll()33 friend class Relay;34 35 public: 35 36 Notification(size_t _channelno); … … 43 44 void removeObserver(Observer *target); 44 45 46 private: 47 //!> grant Observable access to notifyAll() and subjectKilled() 48 friend class Observable; 49 //!> grant Channels access to notifyAll() and subjectKilled() 50 friend class Channels; 51 //!> grant Relay access to notifyAll() 52 friend class Relay; 53 45 54 void notifyAll(Observable * const publisher); 55 56 /** Informs channel subscribers about dstor call. 57 * 58 * This is meant to be called from Observable only. 59 * Channels and Notifications are strictly attached to an Observable. Hence, 60 * it makes no sense to inform them on their own. Especially, neither has 61 * any knowledge on the publisher. 62 * 63 * \param *publisher Observable about to be destroyed 64 */ 65 void subjectKilled(Observable * const publisher); 66 46 67 private: 47 std::set<Observer*> targets; 68 typedef std::set<Observer*> targets_t; 69 targets_t targets; 48 70 const size_t channelno; 49 71 }; -
src/CodePatterns/Observer/Observable.hpp
rb9273a r1c291d 30 30 * to avoid memory issues when many observable are around but only few 31 31 * are actually observed. 32 * 33 * \note We have to clean our Channels from static NotificationChannels and 34 * we call Channels::subjectKilled() to let Observers that have only signed 35 * on to single channel still know when their observable has died. 32 36 */ 33 37 class Observable : public Observer {
Note:
See TracChangeset
for help on using the changeset viewer.
