summaryrefslogtreecommitdiff
path: root/dnn/Behaviour.h
diff options
context:
space:
mode:
Diffstat (limited to 'dnn/Behaviour.h')
-rwxr-xr-xdnn/Behaviour.h104
1 files changed, 104 insertions, 0 deletions
diff --git a/dnn/Behaviour.h b/dnn/Behaviour.h
new file mode 100755
index 0000000..2db049e
--- /dev/null
+++ b/dnn/Behaviour.h
@@ -0,0 +1,104 @@
+/*
+ * DNN - Data News Network
+ *
+ * by Stephane Chatty
+ *
+ * Copyright 1993-1996
+ * Centre d'Etudes de la Navigation Aerienne (CENA)
+ *
+ * Behaviours.
+ *
+ * $Id$
+ * $CurLog$
+ */
+
+#ifndef DnnBehaviour_H_
+#define DnnBehaviour_H_
+
+#include "cplus_bugs.h"
+#include "Reaction.h"
+#include "ccu/String.h"
+#include "ccu/List.h"
+
+class DnnBehaviour;
+class DnnTransition;
+class DnnEvent;
+
+class DnnToken {
+public:
+ DnnToken ();
+virtual ~DnnToken ();
+};
+
+typedef void (DnnActivation) (DnnBaseReaction*, DnnToken*);
+typedef void (DnnAction) (DnnToken*, DnnEvent*);
+
+class DnnState {
+protected:
+ CcuString Name;
+ CcuListOf <DnnTransition> Transitions;
+public:
+ DnnState (const char*);
+ ~DnnState ();
+ DnnTransition* CreateTransition (const char*, DnnState*, DnnActivation*, DnnAction*);
+ void Activate (DnnBehaviour*, DnnToken*);
+
+};
+
+class DnnTransition {
+protected:
+ CcuString Name;
+ DnnState* From;
+ DnnState* To;
+ DnnActivation* Activation;
+ DnnAction* Action;
+
+public:
+ DnnTransition (const char*, DnnState*, DnnState*, DnnActivation*, DnnAction*);
+ ~DnnTransition ();
+inline DnnState* GetDestination () const { return To;}
+inline DnnState* GetOrigin () const { return From;}
+ void Activate (DnnBaseReaction*, DnnToken*);
+ DnnState* Fire (DnnToken*, DnnEvent*);
+};
+
+
+class DnnBehaviourModel {
+protected:
+ DnnState* Initial;
+ CcuListOf <DnnState> States;
+public:
+ DnnBehaviourModel ();
+ ~DnnBehaviourModel ();
+inline DnnState* GetInitial () const { return Initial; }
+inline void SetInitial (DnnState* s) { Initial = s; }
+ DnnState* CreateState (const char* = 0);
+};
+
+class DnnBehaviour {
+friend class DnnBehaviourReaction;
+protected:
+ DnnBehaviourModel* TheModel;
+ DnnState* CurState;
+ CcuListOf <DnnBaseReaction> CurReactions;
+ DnnToken* CurToken;
+ void Fire (DnnTransition*, DnnEvent*);
+public:
+ DnnBehaviour (DnnBehaviourModel&, DnnToken*);
+ ~DnnBehaviour ();
+inline void AddReaction (DnnBaseReaction* r) { CurReactions.Append (r); }
+
+};
+
+class DnnBehaviourReaction : public DnnBaseReaction {
+protected:
+ DnnBehaviour* TheBehaviour;
+ DnnTransition* TheTransition;
+public:
+ DnnBehaviourReaction (DnnBehaviour*, DnnTransition*);
+ ~DnnBehaviourReaction ();
+ void Manage (DnnEvent&);
+};
+
+#endif /* DnnBehaviour_H_ */
+