diff options
Diffstat (limited to 'dnn/Behaviour.h')
-rwxr-xr-x | dnn/Behaviour.h | 104 |
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_ */ + |