diff --git a/fsm.hpp b/fsm.hpp new file mode 100644 index 0000000..79117f3 --- /dev/null +++ b/fsm.hpp @@ -0,0 +1,16 @@ +#pragma once + +template +class DeadSimpleFSM { +protected: + S _state = S::START; + +public: + virtual void event(E event) = 0; + + void state(S next_state) { + _state = next_state; + } +}; + +#define FSM_T(S, F) case S: F(); break diff --git a/fsmtest.cpp b/fsmtest.cpp index 57d2aa1..c18c033 100644 --- a/fsmtest.cpp +++ b/fsmtest.cpp @@ -1,22 +1,8 @@ #include +#include "fsm.hpp" using namespace fmt; -template -class DeadSimpleFSM { -protected: - S _state = S::START; - -public: - virtual void event(E event) = 0; - - void state(S next_state) { - _state = next_state; - } -}; - -#define T(S, F) case S: F(); break - enum MyState { START, RUNNING, END }; @@ -29,9 +15,9 @@ class MyFSM : DeadSimpleFSM { public: void event(MyEvent ev) override { switch(ev) { - T(STARTED, start); - T(PUSH, push); - T(QUIT, stop); + FSM_T(STARTED, start); + FSM_T(PUSH, push); + FSM_T(QUIT, quit); } }