Ignore:
Timestamp:
Sep 5, 2013, 2:14:06 PM (12 years ago)
Author:
Frederik Heber <heber@…>
Children:
44f368
Parents:
37d941
git-author:
Frederik Heber <heber@…> (09/05/13 14:09:44)
git-committer:
Frederik Heber <heber@…> (09/05/13 14:14:06)
Message:

Added Graveyard for to-be-destroyed Observables.

  • also added Zombie class that wraps an Observable.
  • Notification and Observable have new function getNumberOfObservers().
  • added unit test for Graveyard.
File:
1 edited

Legend:

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

    r37d941 rb324a3  
    1717#include <set>
    1818#include <string>
     19#include <boost/function.hpp>
    1920
    2021#include "CodePatterns/Range.hpp"
    2122#include "CodePatterns/Observer/defs.hpp"
    2223#include "CodePatterns/Observer/Observer.hpp"
     24
     25class Graveyard;
    2326
    2427/**
     
    3437 * we call Channels::subjectKilled() to let Observers that have only signed
    3538 * on to single channel still know when their observable has died.
     39 *
     40 * Note that one may allow an Observable to live some over-time by using
     41 * the Graveyard. This allows any Observer to still access the instance
     42 * in order to properly sign off. It is destroyed when no Observer is left.
    3643 */
    3744class Observable : public Observer {
     
    93100  Notification_ptr getChannel(size_t no) const;
    94101
     102  size_t getNumberOfObservers() const;
     103
    95104protected:
    96105  virtual void update(Observable *publisher);
     
    126135  static std::set<Observable*> busyObservables;
    127136
     137private:
     138  friend class Zombie;
     139  friend class Graveyard;
     140
     141  typedef boost::function<void (const Observable*)> graveyard_informer_t;
     142
     143  //!> bound function to call when Observer are signing off
     144  graveyard_informer_t &graveyard_informer;
     145
     146  //!> default informer that does nothing
     147  static graveyard_informer_t noop_informer;
     148
     149  /** Sets the bound function for over-time life-time management.
     150   *
     151   * \param _graveyard Graveyard to inform of leaving Observers
     152   */
     153  void setGraveyardInformer(graveyard_informer_t &_graveyard_informer)
     154  {
     155    graveyard_informer = _graveyard_informer;
     156  }
     157
    128158  //! @cond
    129159  // Structure for RAII-Style notification
Note: See TracChangeset for help on using the changeset viewer.