/* * DNN - Data News Network * * by Stephane Chatty * * Copyright 1993-1995 * Centre d'Etudes de la Navigation Aerienne (CENA) * * Event triggers. * * $Id$ * $CurLog$ */ #ifndef DnnTrigger_H_ #define DnnTrigger_H_ #include "cplus_bugs.h" #include "ccu/List.h" #include "ccu/bool.h" class DnnEvent; class DnnBaseCriterion; class DnnTrigger { friend class DnnBaseReaction; public: enum REL_PRIORITY { isFirstPriority, isNormalPriority, isLastPriority }; private: DnnTrigger (const DnnTrigger&); DnnTrigger& operator = (const DnnTrigger&); protected: CcuListOf FirstSubscribers; CcuListOf Subscribers; CcuListOf LastSubscribers; CcuListOf Grabs; CcuListOf Criteria; void Subscribe (DnnBaseReaction&, REL_PRIORITY); void Unsubscribe (DnnBaseReaction&); void Grab (DnnBaseReaction&); void Release (DnnBaseReaction&); public: DnnTrigger (); ~DnnTrigger (); inline bool IsUnused () const { return bool (Subscribers.IsEmpty () && FirstSubscribers.IsEmpty () && LastSubscribers.IsEmpty ()); } void Dispatch (DnnEvent&); bool Check (DnnEvent&); inline void AddCriterion (DnnBaseCriterion& c) { Criteria.Append (&c); } inline void RemoveCriterion (DnnBaseCriterion& c) { Criteria.Remove (&c); } }; #endif /* DnnTrigger_H_ */