From be6de4e7e37063657bb6dbbbb0b7797f4c2acef2 Mon Sep 17 00:00:00 2001 From: Madeline 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