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