Changeset f3d16a


Ignore:
Timestamp:
Jul 14, 2014, 8:36:58 PM (11 years ago)
Author:
Frederik Heber <heber@…>
Children:
e93bfe
Parents:
44f368
git-author:
Frederik Heber <heber@…> (10/15/13 13:31:42)
git-committer:
Frederik Heber <heber@…> (07/14/14 20:36:58)
Message:

FIX: Fixes to Graveyard and Zombies.

Location:
src
Files:
5 edited

Legend:

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

    r44f368 rf3d16a  
    141141  typedef boost::function<void (const Observable*)> graveyard_informer_t;
    142142
    143   //!> bound function to call when Observer are signing off
    144   graveyard_informer_t &graveyard_informer;
     143  /** Bound function to call when Observer are signing off (needs to be a ptr
     144   * as we must be able to rebound it.
     145   *
     146   * \warning Do not delete this pointer, the instance is either a static one
     147   * or handled someplace else (e.g. in the Graveyard).
     148   */
     149  graveyard_informer_t * graveyard_informer;
    145150
    146151  //!> default informer that does nothing
     
    149154  /** Sets the bound function for over-time life-time management.
    150155   *
    151    * \param _graveyard Graveyard to inform of leaving Observers
     156   * \param _graveyard ptr Graveyard to inform of leaving Observers
    152157   */
    153   void setGraveyardInformer(graveyard_informer_t &_graveyard_informer)
     158  void setGraveyardInformer(graveyard_informer_t * _graveyard_informer)
    154159  {
    155160    graveyard_informer = _graveyard_informer;
  • src/CodePatterns/Observer/Zombie.hpp

    r44f368 rf3d16a  
    3434   *
    3535   * Is private to allow only Graveyard to instantiate them.
     36   *
     37   * \param _observable observable to wrap, ptr is NULL'd
     38   * \param _graveyard_informer callback when Observers are signOff()'ing
    3639   */
    3740  Zombie(
    3841      Observable *& _observable,
    39       Observable::graveyard_informer_t _graveyard_informer) :
     42      Observable::graveyard_informer_t *_graveyard_informer) :
    4043    m_observable(_observable)
    4144  {
  • src/Observer/Graveyard.cpp

    r44f368 rf3d16a  
    3636
    3737#include "CodePatterns/Observer/Graveyard.hpp"
     38#include "CodePatterns/Observer/ObserverLog.hpp"
    3839
    3940#include <boost/bind.hpp>
     
    5455{
    5556//  LOG(1, "Adding Observable "+toString(_observable)+".");
    56   Zombie::ptr newzombie(new Zombie(_observable, graveyard_informer));
     57#ifdef LOG_OBSERVER
     58  observerLog().addMessage(0) << "++ Turning " << observerLog().getName(_observable)
     59      << " into a Zombie.";
     60#endif
     61  Zombie::ptr newzombie(new Zombie(_observable, &graveyard_informer));
    5762  if (newzombie->getNumberOfObservers() != 0)
    5863    graveyard.insert( std::make_pair(newzombie->getPtr(), newzombie) );
     
    6368  graveyard_t::iterator iter = graveyard.find(_observable);
    6469  if (iter != graveyard.end()) {
     70#ifdef LOG_OBSERVER
     71  observerLog().addMessage(0) << "++ Zombie " << observerLog().getName(const_cast<Observable *>(_observable))
     72      << " has " << iter->second->getNumberOfObservers() << " Observers left.";
     73#endif
    6574    // remove zombie if no Observers are left
    6675    if (iter->second->getNumberOfObservers() == 0)
  • src/Observer/Notification.cpp

    r44f368 rf3d16a  
    2222#include "CodePatterns/Observer/Notification.hpp"
    2323#include "CodePatterns/Observer/Observer.hpp"
    24 
     24#include "CodePatterns/Observer/ObserverLog.hpp"
    2525
    2626Notification::Notification(size_t _channelno) :
     
    4444  for(std::set<Observer*>::iterator it=targets.begin();
    4545      it!=targets.end();++it){
     46#ifdef LOG_OBSERVER
     47    observerLog().addMessage() << "-> Sending update from " << observerLog().getName(publisher)
     48                               << " for channel " << channelno
     49                               << " to " << observerLog().getName(*it);
     50#endif
    4651    (*it)->recieveNotification(publisher,this);
    4752  }
  • src/Observer/Observable.cpp

    r44f368 rf3d16a  
    276276    callTable.erase(const_cast<Observable *>(this));
    277277  }
    278   graveyard_informer(this);
     278  (*graveyard_informer)(this);
    279279}
    280280
     
    299299#endif
    300300  notification->removeObserver(target);
    301   graveyard_informer(this);
     301  (*graveyard_informer)(this);
    302302}
    303303
     
    352352Observable::Observable(std::string name) :
    353353  Observer(Observer::BaseConstructor()),
    354   graveyard_informer(noop_informer)
     354  graveyard_informer(&noop_informer)
    355355{
    356356#ifdef LOG_OBSERVER
Note: See TracChangeset for help on using the changeset viewer.