/* * DNN - Data News Network * * by Stephane Chatty * * Copyright 1993-1994 * Centre d'Etudes de la Navigation Aerienne (CENA) * * Reactions. * * $Id$ * $CurLog$ */ #ifndef DnnReaction_H_ #define DnnReaction_H_ #ifdef __GNUG__ #pragma interface #endif #include "ccu/List.h" class DnnTrigger; class DnnEvent; class DnnBaseReaction { protected: DnnBaseReaction (); CcuListOf Triggers; CcuListOf Grabbed; public: virtual ~DnnBaseReaction (); void SubscribeTo (DnnTrigger&); void UnsubscribeTo (DnnTrigger&); void Grab (DnnTrigger&); void Release (DnnTrigger&); virtual void Manage (DnnEvent&); }; typedef void (*DnnHandlingFunction) (DnnEvent&); class DnnReaction : public DnnBaseReaction { protected: DnnHandlingFunction Handler; public: DnnReaction (DnnHandlingFunction); ~DnnReaction (); void Manage (DnnEvent&); }; #define SpecializedReaction(R,S) \ class R : public DnnBaseReaction { \ protected: \ S& Body; \ void (S::*React) (DnnEvent&); \ public: \ R (S& s, void (S::*sc) (DnnEvent&)) : DnnBaseReaction (), Body (s), React (sc) {} \ ~R () {} \ void Manage (DnnEvent& ev) { (Body.*React) (ev); } \ }; template class DnnReactionOf : public DnnBaseReaction { protected: T& Object; void (T::*Reaction) (DnnEvent&); public: DnnReactionOf (T& o, void (T::*r) (DnnEvent&)) : DnnBaseReaction (), Object (o), Reaction (r) {} ~DnnReactionOf () {} void Manage (DnnEvent& ev) { (Object.*Reaction) (ev); } }; #endif /* DnnReaction_H_ */