diff --git a/fsmtest.cpp b/fsmtest.cpp new file mode 100644 index 0000000..57d2aa1 --- /dev/null +++ b/fsmtest.cpp @@ -0,0 +1,62 @@ +#include + +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 +}; + +enum MyEvent { + STARTED, PUSH, QUIT +}; + +class MyFSM : DeadSimpleFSM { +public: + void event(MyEvent ev) override { + switch(ev) { + T(STARTED, start); + T(PUSH, push); + T(QUIT, stop); + } + } + + void start() { + println("<<< START"); + state(RUNNING); + } + + void push() { + println("<<< RUN"); + state(RUNNING); + } + + void quit() { + println("<<< STOP"); + state(END); + } +}; + +int main() { + MyFSM fsm; + + fsm.event(STARTED); + fsm.event(PUSH); + fsm.event(PUSH); + fsm.event(PUSH); + fsm.event(QUIT); +} diff --git a/meson.build b/meson.build index 481e0cf..8faa8d5 100644 --- a/meson.build +++ b/meson.build @@ -11,9 +11,9 @@ opts.add_cmake_defines({ 'BUILD_TESTS': false, }) libgit2_proj = cmake.subproject('libgit2', options: opts) -libgit2package_dep = libgit2_proj.dependency('libgit2package') +libgit2package = libgit2_proj.dependency('libgit2package') -efsw_dep = dependency('efsw') +efsw = dependency('efsw') fmt = dependency('fmt') catch2 = dependency('catch2-with-main') sfml = dependency('sfml') @@ -21,7 +21,7 @@ json = dependency('nlohmann_json') imgui = dependency('imgui-sfml') dependencies = [ - fmt, libgit2package_dep, efsw_dep, + fmt, libgit2package, efsw, sfml, imgui, json ] @@ -46,6 +46,9 @@ executable('jsontest', 'jsontest.cpp', executable('threadtest', 'threadtest.cpp', dependencies: dependencies) +executable('fsmtest', 'fsmtest.cpp', + dependencies: dependencies) + executable('badref', 'badref.cpp', dependencies: dependencies)