From f95d5a15bb007642ca270b71e4d8e96d5e9cb03e Mon Sep 17 00:00:00 2001 From: chatty Date: Tue, 28 Nov 2000 14:52:15 +0000 Subject: Removed pragma interfaces DnnReaction -> DnnCallback Added Forget --- dnn/Reaction.h | 66 +++++++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 49 insertions(+), 17 deletions(-) (limited to 'dnn/Reaction.h') diff --git a/dnn/Reaction.h b/dnn/Reaction.h index 6fa0a2e..3d59fdb 100644 --- a/dnn/Reaction.h +++ b/dnn/Reaction.h @@ -3,7 +3,7 @@ * * by Stephane Chatty * - * Copyright 1993-1994 + * Copyright 1993-1996 * Centre d'Etudes de la Navigation Aerienne (CENA) * * Reactions. @@ -15,44 +15,56 @@ #ifndef DnnReaction_H_ #define DnnReaction_H_ -#ifdef __GNUG__ -#pragma interface -#endif - - #include "ccu/List.h" class DnnTrigger; class DnnEvent; + class DnnBaseReaction { +friend class DnnTrigger; + +public: +enum REL_PRIORITY { isFirstPriority, isNormalPriority, isLastPriority }; + protected: DnnBaseReaction (); CcuListOf Triggers; CcuListOf Grabbed; + void Forget (DnnTrigger&); + public: -virtual ~DnnBaseReaction (); - void SubscribeTo (DnnTrigger&); +virtual ~DnnBaseReaction (); + void SubscribeTo (DnnTrigger&, REL_PRIORITY = isNormalPriority); void UnsubscribeTo (DnnTrigger&); void Grab (DnnTrigger&); void Release (DnnTrigger&); virtual void Manage (DnnEvent&); }; - typedef void (*DnnHandlingFunction) (DnnEvent&); -class DnnReaction : public DnnBaseReaction { +class DnnCallback : public DnnBaseReaction { protected: DnnHandlingFunction Handler; public: - DnnReaction (DnnHandlingFunction); - ~DnnReaction (); + DnnCallback (DnnHandlingFunction); + ~DnnCallback (); void Manage (DnnEvent&); }; +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); } +}; #define SpecializedReaction(R,S) \ class R : public DnnBaseReaction { \ @@ -65,15 +77,35 @@ public: \ void Manage (DnnEvent& ev) { (Body.*React) (ev); } \ }; -template class DnnReactionOf : public DnnBaseReaction { +/* Attempt at having reactions that locate the object which should be activated. + DnnObjectReactionOf should be renamed DnnReactionOf, + and DnnReactionOf should be renamed DnnBasicReactionOf */ + +class DnnObjectReaction : public DnnBaseReaction { +protected: +virtual void* LocateObject (DnnEvent&) = 0; + +public: + DnnObjectReaction () : DnnBaseReaction () {} + ~DnnObjectReaction () {} +}; + +template class DnnObjectReactionOf : public DnnObjectReaction { protected: - T& Object; void (T::*Reaction) (DnnEvent&); +public: + DnnObjectReactionOf (void (T::*r) (DnnEvent&)) : DnnObjectReaction (), Reaction (r) {} + ~DnnObjectReactionOf () {} + void Manage (DnnEvent& ev) { T* o = (T*) LocateObject (ev); (o->*Reaction) (ev); } +}; +#if 0 +template class XtvReflexOf : public DnnObjectReactionOf { +protected: + void* LocateObject (DnnEvent& ev) { return ((XtvEvent*)&ev)->GetTarget (); } public: - DnnReactionOf (T& o, void (T::*r) (DnnEvent&)) : DnnBaseReaction (), Object (o), Reaction (r) {} - ~DnnReactionOf () {} - void Manage (DnnEvent& ev) { (Object.*Reaction) (ev); } + XtvReflexOf (void (T::*r) (DnnEvent&)) : DnnObjectReactionOf (r) {} }; +#endif #endif /* DnnReaction_H_ */ -- cgit v1.1