From 1d42c106e0997fb7f24ecef42ec878218bcbccb1 Mon Sep 17 00:00:00 2001 From: Myles Busig Date: Wed, 6 Mar 2024 23:02:00 -0700 Subject: [PATCH] Add initial finite state machine implementation --- include/mtl/fsm.hpp | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 include/mtl/fsm.hpp 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