summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorchatty2000-11-28 14:52:15 +0000
committerchatty2000-11-28 14:52:15 +0000
commitf95d5a15bb007642ca270b71e4d8e96d5e9cb03e (patch)
tree5f295f6458752b76a30614ac94c612b1a15e9802
parent58f8a28682f09690a75771c2c1f14d4ae686823a (diff)
downloadivy-league-f95d5a15bb007642ca270b71e4d8e96d5e9cb03e.zip
ivy-league-f95d5a15bb007642ca270b71e4d8e96d5e9cb03e.tar.gz
ivy-league-f95d5a15bb007642ca270b71e4d8e96d5e9cb03e.tar.bz2
ivy-league-f95d5a15bb007642ca270b71e4d8e96d5e9cb03e.tar.xz
Removed pragma interfaces
DnnReaction -> DnnCallback Added Forget
-rw-r--r--dnn/Reaction.h66
1 files changed, 49 insertions, 17 deletions
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 <DnnTrigger> Triggers;
CcuListOf <DnnTrigger> 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 T> 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 T> 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 T> 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 T> class XtvReflexOf : public DnnObjectReactionOf <T> {
+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 <T> (r) {}
};
+#endif
#endif /* DnnReaction_H_ */