Make the FSM_STATE work better with optional loggins set by a define and standardize on using enum class by default.

This commit is contained in:
Zed A. Shaw 2024-09-16 06:53:49 -04:00
parent 8df6898d0b
commit 0aeb5b4ceb
8 changed files with 49 additions and 42 deletions

View file

@ -3,11 +3,11 @@
using namespace fmt;
enum MyState {
enum class MyState {
START, RUNNING, END
};
enum MyEvent {
enum class MyEvent {
STARTED, PUSH, QUIT
};
@ -15,34 +15,34 @@ class MyFSM : DeadSimpleFSM<MyState, MyEvent> {
public:
void event(MyEvent ev) override {
switch(_state) {
FSM_STATE(START, start, ev);
FSM_STATE(RUNNING, push, ev);
FSM_STATE(END, quit, ev);
FSM_STATE(MyState, START, start, ev);
FSM_STATE(MyState, RUNNING, push, ev);
FSM_STATE(MyState, END, quit, ev);
}
}
void start(MyEvent ev) {
println("<<< START");
state(RUNNING);
state(MyState::RUNNING);
}
void push(MyEvent ev) {
println("<<< RUN");
state(RUNNING);
state(MyState::RUNNING);
}
void quit(MyEvent ev) {
println("<<< STOP");
state(END);
state(MyState::END);
}
};
int main() {
MyFSM fsm;
fsm.event(STARTED);
fsm.event(PUSH);
fsm.event(PUSH);
fsm.event(PUSH);
fsm.event(QUIT);
fsm.event(MyEvent::STARTED);
fsm.event(MyEvent::PUSH);
fsm.event(MyEvent::PUSH);
fsm.event(MyEvent::PUSH);
fsm.event(MyEvent::QUIT);
}