/* * DNN - Data News Network * * by Stephane Chatty * * Copyright 1993-1996 * Centre d'Etudes de la Navigation Aerienne (CENA) * * Event sources. * * $Id$ * $CurLog$ */ #ifndef IvlSource_H_ #define IvlSource_H_ #include "cplus_bugs.h" template class IvlArrayOf; template class IvlHashTableOf; class IvlTrigger; class IvlEvent; class IvlBaseReaction; class IvlEventSource { protected: IvlEventSource (); virtual ~IvlEventSource (); void Emit (IvlEvent*); virtual void DispatchEvent (IvlEvent*) = 0; }; class IvlEventSelector { public: IvlEventSelector (); virtual ~IvlEventSelector (); virtual IvlTrigger* FindTrigger (IvlEvent*) = 0; }; typedef int (*IvlIntExtractor) (IvlEvent*); class IvlEventIntSelector : public IvlEventSelector { protected: IvlIntExtractor IdExtractor; int MaxSize; IvlArrayOf *Triggers; public: IvlEventIntSelector (IvlIntExtractor, int); ~IvlEventIntSelector (); IvlTrigger* UseTrigger (int); void UnuseTrigger (int, IvlBaseReaction*); IvlTrigger* FindTrigger (IvlEvent*); }; typedef void* (*IvlPtrExtractor) (IvlEvent*); class IvlEventPtrSelector : public IvlEventSelector { protected: IvlPtrExtractor PtrExtractor; int TblSize; IvlHashTableOf *Triggers; public: IvlEventPtrSelector (IvlPtrExtractor, int); ~IvlEventPtrSelector (); IvlTrigger* UseTrigger (void*); void UnuseTrigger (void*, IvlBaseReaction*); IvlTrigger* FindTrigger (IvlEvent*); }; #endif /* IvlSource_H_ */