source: src/Observer/Notification.cpp@ 44f368

Last change on this file since 44f368 was 1c291d, checked in by Frederik Heber <heber@…>, 13 years ago

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().
  • Property mode set to 100644
File size: 1.2 KB
Line 
1/*
2 * Project: MoleCuilder
3 * Description: creates and alters molecular systems
4 * Copyright (C) 2010 University of Bonn. All rights reserved.
5 * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
6 */
7
8/*
9 * Notification.cpp
10 *
11 * Created on: Dec 1, 2011
12 * Author: heber
13 */
14
15// include config.h
16#ifdef HAVE_CONFIG_H
17#include <config.h>
18#endif
19
20#include "CodePatterns/MemDebug.hpp"
21
22#include "CodePatterns/Observer/Notification.hpp"
23#include "CodePatterns/Observer/Observer.hpp"
24
25
26Notification::Notification(size_t _channelno) :
27 channelno(_channelno)
28{}
29
30Notification::~Notification(){}
31
32void Notification::addObserver(Observer *target)
33{
34 targets.insert(target);
35}
36
37void Notification::removeObserver(Observer *target)
38{
39 targets.erase(target);
40}
41
42void Notification::notifyAll(Observable * const publisher)
43{
44 for(std::set<Observer*>::iterator it=targets.begin();
45 it!=targets.end();++it){
46 (*it)->recieveNotification(publisher,this);
47 }
48}
49
50void Notification::subjectKilled(Observable * const publisher)
51{
52 for(std::set<Observer*>::iterator it=targets.begin();
53 it!=targets.end();++it){
54 (*it)->subjectKilled(publisher);
55 }
56}
Note: See TracBrowser for help on using the repository browser.