diff --git a/include/mtl/fsm.hpp b/include/mtl/fsm.hpp new file mode 100644 index 0000000..c24054e --- /dev/null +++ b/include/mtl/fsm.hpp @@ -0,0 +1,42 @@ +#pragma once + +#include + +namespace mtl { +class fsm_event { +private: +public: +}; + +template +T fsm_state_instance; + +template +class fsm { + + FSMType* state = nullptr; + +protected: + virtual void react(const mtl::fsm_event& event) = 0; + + virtual void entry() {} + virtual void exit() {} + + template + void change_state() { + state = &fsm_state_instance; + } + +public: + fsm() { + state = &fsm_state_instance; + } + + template + void dispatch(const T& event) { + state->react(event); + } +}; + + +} // namespace mtl