diff --git a/README.md b/README.md index 86b989e..067f5ef 100644 --- a/README.md +++ b/README.md @@ -104,6 +104,8 @@ Considering the following minimal state machine, it can be coded as follows: ### Flat-style StateMachine setup +[minimal_flat.cpp](./examples/minimal_flat.cpp) + ```c++ #include "dsm/dsm.hpp" #include @@ -135,6 +137,8 @@ int main() ### Enclosed-style StateMachine setup +[minimal_enclosed.cpp](./examples/minimal_enclosed.cpp) + ```c++ #include "dsm/dsm.hpp" #include @@ -174,16 +178,22 @@ int main() ![entry_exit_actions](http://www.plantuml.com/plantuml/proxy?cache=no&src=https://raw.githubusercontent.com/jfayot/dynamic-state-machine/master/resources/entry_exit_actions.puml) -[entry_exit_actions.cpp](./examples/entry_exit_actions/entry_exit_actions.cpp) +[entry_exit_actions.cpp](./examples/entry_exit_actions.cpp) ## Transition action ![transition_action](http://www.plantuml.com/plantuml/proxy?cache=no&src=https://raw.githubusercontent.com/jfayot/dynamic-state-machine/master/resources/transition_action.puml) -[transition_action.cpp](./examples/transition_action/transition_action.cpp) +[transition_action.cpp](./examples/transition_action.cpp) + +## Transition guard + +![transition_guard](http://www.plantuml.com/plantuml/proxy?cache=no&src=https://raw.githubusercontent.com/jfayot/dynamic-state-machine/master/resources/transition_guard.puml) + +[transition_guard.cpp](./examples/transition_guard.cpp) ## Self transition ![self_transition](http://www.plantuml.com/plantuml/proxy?cache=no&src=https://raw.githubusercontent.com/jfayot/dynamic-state-machine/master/resources/self_transition.puml) -[self_transition.cpp](./examples/self_transition/self_transition.cpp) +[self_transition.cpp](./examples/self_transition.cpp) diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 46f7319..1211a6c 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -1,7 +1,22 @@ cmake_minimum_required(VERSION 3.16) -add_subdirectory(minimal_flat) -add_subdirectory(minimal_enclosed) -add_subdirectory(entry_exit_actions) -add_subdirectory(transition_action) -add_subdirectory(self_transition) +add_executable(minimal_flat minimal_flat.cpp) +add_executable(minimal_enclosed minimal_enclosed.cpp) +add_executable(entry_exit_actions entry_exit_actions.cpp) +add_executable(transition_action transition_action.cpp) +add_executable(transition_guard transition_guard.cpp) +add_executable(self_transition self_transition.cpp) + +target_link_libraries(minimal_flat PRIVATE dsm::dsm) +target_link_libraries(minimal_enclosed PRIVATE dsm::dsm) +target_link_libraries(entry_exit_actions PRIVATE dsm::dsm) +target_link_libraries(transition_action PRIVATE dsm::dsm) +target_link_libraries(transition_guard PRIVATE dsm::dsm) +target_link_libraries(self_transition PRIVATE dsm::dsm) + +set_target_properties(minimal_flat PROPERTIES FOLDER examples) +set_target_properties(minimal_enclosed PROPERTIES FOLDER examples) +set_target_properties(entry_exit_actions PROPERTIES FOLDER examples) +set_target_properties(transition_action PROPERTIES FOLDER examples) +set_target_properties(transition_guard PROPERTIES FOLDER examples) +set_target_properties(self_transition PROPERTIES FOLDER examples) diff --git a/examples/entry_exit_actions/entry_exit_actions.cpp b/examples/entry_exit_actions.cpp similarity index 100% rename from examples/entry_exit_actions/entry_exit_actions.cpp rename to examples/entry_exit_actions.cpp diff --git a/examples/entry_exit_actions/CMakeLists.txt b/examples/entry_exit_actions/CMakeLists.txt deleted file mode 100644 index d4037be..0000000 --- a/examples/entry_exit_actions/CMakeLists.txt +++ /dev/null @@ -1,15 +0,0 @@ -cmake_minimum_required(VERSION 3.16) - -add_executable(entry_exit_actions - entry_exit_actions.cpp -) - -target_link_libraries(entry_exit_actions - PRIVATE - dsm::dsm -) - -set_target_properties(entry_exit_actions - PROPERTIES - FOLDER examples -) diff --git a/examples/minimal_enclosed/minimal_enclosed.cpp b/examples/minimal_enclosed.cpp similarity index 100% rename from examples/minimal_enclosed/minimal_enclosed.cpp rename to examples/minimal_enclosed.cpp diff --git a/examples/minimal_enclosed/CMakeLists.txt b/examples/minimal_enclosed/CMakeLists.txt deleted file mode 100644 index 535c1e5..0000000 --- a/examples/minimal_enclosed/CMakeLists.txt +++ /dev/null @@ -1,15 +0,0 @@ -cmake_minimum_required(VERSION 3.16) - -add_executable(minimal_enclosed - minimal_enclosed.cpp -) - -target_link_libraries(minimal_enclosed - PRIVATE - dsm::dsm -) - -set_target_properties(minimal_enclosed - PROPERTIES - FOLDER examples -) diff --git a/examples/minimal_flat/minimal_flat.cpp b/examples/minimal_flat.cpp similarity index 100% rename from examples/minimal_flat/minimal_flat.cpp rename to examples/minimal_flat.cpp diff --git a/examples/minimal_flat/CMakeLists.txt b/examples/minimal_flat/CMakeLists.txt deleted file mode 100644 index c9ef552..0000000 --- a/examples/minimal_flat/CMakeLists.txt +++ /dev/null @@ -1,15 +0,0 @@ -cmake_minimum_required(VERSION 3.16) - -add_executable(minimal_flat - minimal_flat.cpp -) - -target_link_libraries(minimal_flat - PRIVATE - dsm::dsm -) - -set_target_properties(minimal_flat - PROPERTIES - FOLDER examples -) diff --git a/examples/self_transition/self_transition.cpp b/examples/self_transition.cpp similarity index 100% rename from examples/self_transition/self_transition.cpp rename to examples/self_transition.cpp diff --git a/examples/self_transition/CMakeLists.txt b/examples/self_transition/CMakeLists.txt deleted file mode 100644 index 09c45e5..0000000 --- a/examples/self_transition/CMakeLists.txt +++ /dev/null @@ -1,15 +0,0 @@ -cmake_minimum_required(VERSION 3.16) - -add_executable(self_transition - self_transition.cpp -) - -target_link_libraries(self_transition - PRIVATE - dsm::dsm -) - -set_target_properties(self_transition - PROPERTIES - FOLDER examples -) diff --git a/examples/transition_action/transition_action.cpp b/examples/transition_action.cpp similarity index 100% rename from examples/transition_action/transition_action.cpp rename to examples/transition_action.cpp diff --git a/examples/transition_action/CMakeLists.txt b/examples/transition_action/CMakeLists.txt deleted file mode 100644 index 02bc99a..0000000 --- a/examples/transition_action/CMakeLists.txt +++ /dev/null @@ -1,15 +0,0 @@ -cmake_minimum_required(VERSION 3.16) - -add_executable(transition_action - transition_action.cpp -) - -target_link_libraries(transition_action - PRIVATE - dsm::dsm -) - -set_target_properties(transition_action - PROPERTIES - FOLDER examples -) diff --git a/examples/transition_guard.cpp b/examples/transition_guard.cpp new file mode 100644 index 0000000..d63eb9d --- /dev/null +++ b/examples/transition_guard.cpp @@ -0,0 +1,32 @@ +#include "dsm/dsm.hpp" +#include +#include + +using namespace dsm; + +struct e1 : Event{ + bool guard_flag; + e1(bool guard_flag) : guard_flag{ guard_flag } {} +}; + +struct sm : StateMachine{}; +struct s0 : State{ + void onEvent1(const e1& evt) { std::cout << "Received event " << evt.name() << std::endl; } + bool guard(const e1& evt) { return evt.guard_flag; } +}; +struct s1 : State{}; + +int main() +{ + sm sm; + + sm.addState(); + sm.addState(); + sm.addTransition(); + + sm.start(); + sm.processEvent(e1{false}); + sm.processEvent(e1{true}); + + return 0; +} diff --git a/resources/self_transition.puml b/resources/self_transition.puml index b3dda0d..1cd2247 100644 --- a/resources/self_transition.puml +++ b/resources/self_transition.puml @@ -1,6 +1,6 @@ @startuml hide empty description [*] -right-> s0 -s0 -> s0 : e1 +s0 -> s0 : e1/onEvent1 s0: onEvent1() @enduml diff --git a/resources/transition_action.puml b/resources/transition_action.puml index a365039..8a64bcc 100644 --- a/resources/transition_action.puml +++ b/resources/transition_action.puml @@ -1,6 +1,6 @@ @startuml hide empty description [*] -right-> s0 -s0 -right-> s1 : e1 +s0 -right-> s1 : e1/onEvent1 s0: onEvent1() @enduml diff --git a/resources/transition_guard.puml b/resources/transition_guard.puml new file mode 100644 index 0000000..98144be --- /dev/null +++ b/resources/transition_guard.puml @@ -0,0 +1,6 @@ +@startuml +hide empty description +[*] -right-> s0 +s0 -right-> s1 : e1[guard]/onEvent1 +s0: onEvent1() +@enduml