/* * DNN - Data News Network * * by Stephane Chatty * * Copyright 1993-1996 * Centre d'Etudes de la Navigation Aerienne (CENA) * * Event sources. * * $Id$ * $CurLog$ */ #ifndef DnnSource_H_ #define DnnSource_H_ #include "cplus_bugs.h" template class CcuArrayOf; template class CcuHashTableOf; class DnnTrigger; class DnnEvent; class DnnBaseReaction; class DnnEventSource { protected: DnnEventSource (); virtual ~DnnEventSource (); void Emit (DnnEvent*); virtual void DispatchEvent (DnnEvent*) = 0; }; class DnnEventSelector { public: DnnEventSelector (); virtual ~DnnEventSelector (); virtual DnnTrigger* FindTrigger (DnnEvent*) = 0; }; typedef int (*DnnIntExtractor) (DnnEvent*); class DnnEventIntSelector : public DnnEventSelector { protected: DnnIntExtractor IdExtractor; int MaxSize; CcuArrayOf *Triggers; public: DnnEventIntSelector (DnnIntExtractor, int); ~DnnEventIntSelector (); DnnTrigger* UseTrigger (int); void UnuseTrigger (int, DnnBaseReaction*); DnnTrigger* FindTrigger (DnnEvent*); }; typedef void* (*DnnPtrExtractor) (DnnEvent*); class DnnEventPtrSelector : public DnnEventSelector { protected: DnnPtrExtractor PtrExtractor; int TblSize; CcuHashTableOf *Triggers; public: DnnEventPtrSelector (DnnPtrExtractor, int); ~DnnEventPtrSelector (); DnnTrigger* UseTrigger (void*); void UnuseTrigger (void*, DnnBaseReaction*); DnnTrigger* FindTrigger (DnnEvent*); }; #endif /* DnnSource_H_ */