Ignore:
Timestamp:
Mar 18, 2013, 6:29:41 PM (13 years ago)
Author:
Frederik Heber <heber@…>
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)
Message:

Channels and Notifications pass on subjectKilled().

  • if we only sign on to a single notification channel, we miss on subjectKilled() completely. Hence, we have to chance of properly signing off again or, at least, to know that we must not anymore.
  • Hence, Observable's dstor now calls subjectKilled() on its Channels which passes the call on to all its Notifications that in turn use the subjectKilled() slot of their targets along with the passed-through Observable instance.
  • also added observerLog verbosity when signing on/off to channels.
  • explained this in header documentation of Observable, Channels, and Notification.
  • TESTFIX: ObserverUnitTest did not properly signOff() before deleting instances in relayNotificationTest().
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/CodePatterns/Observer/Channels.hpp

    rb9273a r1c291d  
    1818#include "CodePatterns/Observer/defs.hpp"
    1919
     20class Observable;
     21class Relay;
     22
    2023/** Channels aggregate all possible Notifications of an Observable.
    2124 *
     
    2326 * visible to the outside only.
    2427 *
     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.
    2531 */
    2632class Channels {
     
    3844
    3945private:
     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
     62private:
    4063  typedef std::map< size_t, Notification_ptr> NotificationTypetoRefMap;
    4164
Note: See TracChangeset for help on using the changeset viewer.