/* * Zombie.hpp * * Created on: Sep 5, 2013 * Author: heber */ #ifndef ZOMBIE_HPP_ #define ZOMBIE_HPP_ // include config.h #ifdef HAVE_CONFIG_H #include #endif #include "CodePatterns/Observer/Observable.hpp" #include class Graveyard; /** Zombie wraps an Observable and is allowed to set the graveyard. * */ class Zombie { //!> only Graveyard may create zombies friend class Graveyard; typedef boost::shared_ptr ptr; friend class boost::shared_ptr; private: /** Constructor of class Zombie. * * Is private to allow only Graveyard to instantiate them. * * \param _observable observable to wrap, ptr is NULL'd * \param _graveyard_informer callback when Observers are signOff()'ing */ Zombie( Observable *& _observable, Observable::graveyard_informer_t *_graveyard_informer) : m_observable(_observable) { m_observable->setGraveyardInformer(_graveyard_informer); _observable = NULL; } /** Returns the wrapped ptr. * * \param ptr to wrapped up Observable instance */ const Observable * getPtr() const { return m_observable; } public: /** Destructor of class Zombie. * * Is made public for convenience, to allow boost::shared_ptr access to it. * We could pass shared_ptr a befriended deleteFunction but this is overkill * as long as cstor is private. */ virtual ~Zombie() { delete m_observable; m_observable = NULL; } size_t getNumberOfObservers() const { return m_observable->getNumberOfObservers(); } private: Observable *m_observable; }; #endif /* ZOMBIE_HPP_ */