From bcb19dbd53973ff7efd9b2838de121d1e23430f4 Mon Sep 17 00:00:00 2001 From: chatty Date: Tue, 28 Nov 2000 14:52:15 +0000 Subject: Lots of files were added around '96 --- dnn/Behaviour.h | 104 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100755 dnn/Behaviour.h (limited to 'dnn/Behaviour.h') 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 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 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 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_ */ + -- cgit v1.1