/* * DNN - Data News Network * * by Stephane Chatty * * Copyright 1993-1995 * Centre d'Etudes de la Navigation Aerienne (CENA) * * Automata. * * $Id$ * $CurLog$ */ #ifndef DnnAutomaton_H_ #define DnnAutomaton_H_ #include "cplus_bugs.h" #include "ccu/List.h" #include "ccu/HashTable.h" #include "ccu/String.h" #include "ccu/bool.h" class DnnState; typedef void (DnnStateFun) (DnnState*); typedef void (DnnLinkFun) (DnnState*, DnnState*, void*); class DnnLink { public: DnnState* To; DnnLinkFun* Fun; inline DnnLink (DnnState* to, DnnLinkFun* fn) : To (to), Fun (fn) {} inline ~DnnLink () {} }; class DnnState { protected: CcuString Name; DnnStateFun* InFun; DnnStateFun* OutFun; CcuHashTableOf Links; inline void In () { if (InFun) (*InFun) (this); } inline void Out () { if (OutFun) (*OutFun) (this); } public: DnnState (const char*, int sz, DnnStateFun* = 0, DnnStateFun* = 0); ~DnnState (); void CreateLink (DnnState*, void*, DnnLinkFun); DnnState* Next (void*, bool = false); }; class DnnAutomaton { protected: int Size; DnnState* Initial; CcuListOf AllStates; public: DnnAutomaton (int sz = 16); ~DnnAutomaton (); inline DnnState* GetInitial () { return Initial; } inline void SetInitial (DnnState* s) { Initial = s; } DnnState* CreateState (const char* = 0, DnnStateFun = 0, DnnStateFun = 0); void CreateLink (DnnState*, DnnState*, void*, DnnLinkFun); }; class DnnAutomIter { protected: DnnAutomaton* TheAutomaton; DnnState* CurState; public: DnnAutomIter (DnnAutomaton&); ~DnnAutomIter (); bool Step (void*); }; #endif /* DnnAutomaton_H_ */